Estimate your take-home pay based on current Ohio state and federal tax laws.
Weekly
Bi-Weekly
Semi-Monthly
Monthly
Annually
Single
Married Filing Jointly
Results per Pay Period
Gross Pay:
Federal Income Tax:
FICA (Soc Sec + Medicare):
Ohio State Tax:
Local/City Tax:
Net Pay Check:
Understanding Your Ohio Paycheck
Calculating payroll in Ohio requires accounting for four distinct levels of taxation: Federal, Social Security/Medicare (FICA), State, and Municipal (Local) taxes. Because Ohio has one of the most robust local taxing systems in the United States, understanding your city tax rate is crucial for an accurate estimate.
1. Ohio State Income Tax Brackets (2024)
Ohio has significantly simplified its tax structure in recent years. For the 2024 tax year, the state uses a tiered system that is more favorable to low-to-middle income earners:
$0 – $26,050: 0% (Essentially a tax-free threshold)
$26,051 – $100,000: 2.75%
Over $100,000: 3.50%
2. Local and Municipal Taxes
Most Ohioans live or work in a district that levies a municipal income tax. Rates typically range from 0.5% to 3.0%. For example, major cities like Columbus (2.5%), Cleveland (2.5%), and Cincinnati (1.8%) have their own specific rates. If you live in one city but work in another, you may be eligible for a credit, though this tool calculates the flat rate applied to your primary workplace or residence.
3. Federal Taxes and FICA
In addition to state and local taxes, the federal government mandates a FICA tax of 7.65% (6.2% for Social Security and 1.45% for Medicare). Federal income tax is progressive, with brackets ranging from 10% to 37% based on your total annual earnings and filing status.
Example Calculation:
If you earn $60,000 annually in Columbus, OH (2.5% city tax) filing as Single:
Gross Monthly: $5,000
Federal Tax: ~$540
FICA (7.65%): $382.50
Ohio State Tax: ~$78
Columbus City Tax: $125
Estimated Take-Home: $3,874.50
function calculateOhioPayroll() {
var grossPayInput = parseFloat(document.getElementById("grossPay").value);
var payPeriods = parseFloat(document.getElementById("payPeriod").value);
var filingStatus = document.getElementById("filingStatus").value;
var cityRate = parseFloat(document.getElementById("cityTaxRate").value) / 100;
if (isNaN(grossPayInput) || grossPayInput <= 0) {
alert("Please enter a valid gross pay amount.");
return;
}
// Convert everything to annual for calculation then back to period
var annualGross = (payPeriods === 1) ? grossPayInput : (grossPayInput * payPeriods);
if(payPeriods === 1) {
// If they enter annual but select weekly frequency, we should assume the input was the total annual salary
// This is handled by the check above.
}
// 1. FICA (7.65% – simplified as it covers 99% of earners)
var annualFICA = annualGross * 0.0765;
// 2. Federal Income Tax (Simplified 2024 Brackets)
var fedTax = 0;
var taxableFederal = annualGross – (filingStatus === 'single' ? 14600 : 29200); // Standard deduction
if (taxableFederal 609350) fedTax += (taxableFederal – 609350) * 0.37 + 174238;
else if (taxableFederal > 243725) fedTax += (taxableFederal – 243725) * 0.35 + 46224;
else if (taxableFederal > 191950) fedTax += (taxableFederal – 191950) * 0.32 + 29656;
else if (taxableFederal > 100525) fedTax += (taxableFederal – 100525) * 0.24 + 7714;
else if (taxableFederal > 47150) fedTax += (taxableFederal – 47150) * 0.22 + 5408;
else if (taxableFederal > 11600) fedTax += (taxableFederal – 11600) * 0.12 + 1160;
else fedTax += taxableFederal * 0.10;
} else {
if (taxableFederal > 731200) fedTax += (taxableFederal – 731200) * 0.37 + 186000;
else if (taxableFederal > 487450) fedTax += (taxableFederal – 487450) * 0.35 + 100000;
else if (taxableFederal > 383900) fedTax += (taxableFederal – 383900) * 0.32 + 67000;
else if (taxableFederal > 201050) fedTax += (taxableFederal – 201050) * 0.24 + 35000;
else if (taxableFederal > 94300) fedTax += (taxableFederal – 94300) * 0.22 + 10812;
else if (taxableFederal > 23200) fedTax += (taxableFederal – 23200) * 0.12 + 2320;
else fedTax += taxableFederal * 0.10;
}
// 3. Ohio State Tax (2024 simplified brackets)
var ohioTax = 0;
if (annualGross > 100000) {
ohioTax = (annualGross – 100000) * 0.035 + (73950 * 0.0275);
} else if (annualGross > 26050) {
ohioTax = (annualGross – 26050) * 0.0275;
} else {
ohioTax = 0;
}
// 4. City/Local Tax
var localTax = annualGross * cityRate;
// 5. Per Period Results
var divisor = (payPeriods === 1) ? 1 : payPeriods;
var periodGross = annualGross / divisor;
var periodFed = fedTax / divisor;
var periodFica = annualFICA / divisor;
var periodState = ohioTax / divisor;
var periodLocal = localTax / divisor;
var periodNet = periodGross – periodFed – periodFica – periodState – periodLocal;
// Display
document.getElementById("resGross").innerText = "$" + periodGross.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resFedTax").innerText = "-$" + periodFed.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resFica").innerText = "-$" + periodFica.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resStateTax").innerText = "-$" + periodState.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resLocalTax").innerText = "-$" + periodLocal.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resNet").innerText = "$" + periodNet.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resultsArea").style.display = "block";
}