Weekly
Bi-weekly (Every 2 weeks)
Semi-monthly (Twice a month)
Monthly
Single
Married Filing Jointly
Head of Household
Most KY cities charge between 0.5% and 2.5%.
Gross Pay (Per Period):
Federal Income Tax:
Social Security (6.2%):
Medicare (1.45%):
Kentucky State Tax (4.0%):
Local Occupational Tax:
Total Deductions:
Net Take-Home Pay:
How Kentucky Payroll Taxes Work
Calculating your take-home pay in the Bluegrass State requires understanding three distinct levels of taxation: Federal, State, and Local. Kentucky is unique because it employs a flat state income tax system and a widespread "occupational license tax" at the city and county levels.
Kentucky Flat State Income Tax
As of 2024, Kentucky has transitioned to a flat income tax rate of 4.0%. This is a significant change from previous years when the state used graduated brackets. This flat rate applies to all taxable income, making state-level withholding calculations much simpler for Kentucky residents.
Local Occupational Taxes
Unlike many other states, Kentucky allows cities, counties, and school districts to levy "Occupational License Taxes." These are essentially local income taxes. For example, if you work in Louisville (Jefferson County), your local rate is typically around 2.2%, while Lexington (Fayette County) is approximately 2.25%. These taxes are usually withheld based on where the work is physically performed.
FICA and Federal Withholding
Regardless of where you live in Kentucky, you are subject to federal taxes:
Social Security: 6.2% of your gross pay (up to the annual wage base limit).
Medicare: 1.45% of your gross pay.
Federal Income Tax: Determined by your filing status and the progressive tax brackets (10% to 37%).
Example Calculation
If you earn $52,000 annually and are paid bi-weekly ($2,000 per check) in a city with a 1% local tax:
State Tax: $2,000 * 4.0% = $80.00
Local Tax: $2,000 * 1.0% = $20.00
FICA (SocSec + Medicare): $2,000 * 7.65% = $153.00
Federal Tax: Estimated based on your W-4 status.
function calculateKYPaycheck() {
var annualGross = parseFloat(document.getElementById('grossPay').value);
var frequency = parseFloat(document.getElementById('payPeriod').value);
var filingStatus = document.getElementById('filingStatus').value;
var localRate = parseFloat(document.getElementById('localTax').value) / 100;
if (isNaN(annualGross) || annualGross <= 0) {
alert("Please enter a valid gross pay amount.");
return;
}
// Per period gross
var periodGross = annualGross / frequency;
// FICA Taxes
var socSec = periodGross * 0.062;
var medicare = periodGross * 0.0145;
// Kentucky State Tax (Flat 4.0% for 2024)
var stateTax = periodGross * 0.04;
// Local Occupational Tax
var localTax = isNaN(localRate) ? 0 : periodGross * localRate;
// Federal Income Tax Estimation (Simplified 2024 Brackets)
var standardDeduction = 14600; // Single
if (filingStatus === "married") standardDeduction = 29200;
if (filingStatus === "head") standardDeduction = 21900;
var taxableIncome = annualGross – standardDeduction;
if (taxableIncome 609350) fedTaxAnnual = 183647 + (taxableIncome – 609350) * 0.37;
else if (taxableIncome > 243725) fedTaxAnnual = 47747 + (taxableIncome – 243725) * 0.35;
else if (taxableIncome > 191950) fedTaxAnnual = 31179 + (taxableIncome – 191950) * 0.32;
else if (taxableIncome > 100525) fedTaxAnnual = 15213 + (taxableIncome – 100525) * 0.24;
else if (taxableIncome > 47150) fedTaxAnnual = 5480 + (taxableIncome – 47150) * 0.22;
else if (taxableIncome > 11600) fedTaxAnnual = 1160 + (taxableIncome – 11600) * 0.12;
else fedTaxAnnual = taxableIncome * 0.10;
} else if (filingStatus === "married") {
if (taxableIncome > 731200) fedTaxAnnual = 183502 + (taxableIncome – 731200) * 0.37;
else if (taxableIncome > 487450) fedTaxAnnual = 98189 + (taxableIncome – 487450) * 0.35;
else if (taxableIncome > 383900) fedTaxAnnual = 65093 + (taxableIncome – 383900) * 0.32;
else if (taxableIncome > 201050) fedTaxAnnual = 33160 + (taxableIncome – 201050) * 0.24;
else if (taxableIncome > 94300) fedTaxAnnual = 10692 + (taxableIncome – 94300) * 0.22;
else if (taxableIncome > 23200) fedTaxAnnual = 2320 + (taxableIncome – 23200) * 0.12;
else fedTaxAnnual = taxableIncome * 0.10;
} else { // Head of Household
if (taxableIncome > 609350) fedTaxAnnual = 175402 + (taxableIncome – 609350) * 0.37;
else if (taxableIncome > 243700) fedTaxAnnual = 47524 + (taxableIncome – 243700) * 0.35;
else if (taxableIncome > 191950) fedTaxAnnual = 30964 + (taxableIncome – 191950) * 0.32;
else if (taxableIncome > 100500) fedTaxAnnual = 14998 + (taxableIncome – 100500) * 0.24;
else if (taxableIncome > 63100) fedTaxAnnual = 6732 + (taxableIncome – 63100) * 0.22;
else if (taxableIncome > 16550) fedTaxAnnual = 1655 + (taxableIncome – 16550) * 0.12;
else fedTaxAnnual = taxableIncome * 0.10;
}
var fedTaxPeriod = fedTaxAnnual / frequency;
var totalDeductions = fedTaxPeriod + socSec + medicare + stateTax + localTax;
var netPay = periodGross – totalDeductions;
// Display Results
document.getElementById('resGross').innerText = "$" + periodGross.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resFedTax').innerText = "$" + fedTaxPeriod.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resSocSec').innerText = "$" + socSec.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resMedicare').innerText = "$" + medicare.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resStateTax').innerText = "$" + stateTax.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resLocalTax').innerText = "$" + localTax.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTotalDeductions').innerText = "$" + totalDeductions.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resNetPay').innerText = "$" + netPay.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('results').style.display = 'block';
}