Calculating take-home pay in New York is notably more complex than in many other states due to the multi-layered tax system. New York residents are subject to federal income tax, state income tax, and in many cases, local municipality taxes.
1. Federal Taxes: Every employee in NY pays Federal Income Tax based on progressive brackets (ranging from 10% to 37%) and FICA taxes. FICA consists of Social Security (6.2%) and Medicare (1.45%).
The New York State Income Tax
New York State uses a progressive tax system. For 2024, rates vary from roughly 4% for lower earners up to 10.9% for high-income earners. The state also offers a standard deduction that reduces your taxable income, which varies based on your filing status.
NYC and Yonkers Local Taxes
If you live in New York City or Yonkers, you are subject to an additional local income tax. This is a "resident tax," meaning it is based on where you live, not where you work.
NYC Resident Tax: Rates range from approximately 3.078% to 3.876%.
Yonkers Resident Tax: Calculated as a percentage (typically 16.75%) of your total New York State tax liability.
Example Calculation
If you earn $85,000 annually as a single filer living in Manhattan (NYC):
Federal Tax: ~ $9,400
FICA: ~ $6,502
NY State Tax: ~ $4,200
NYC Tax: ~ $2,700
Estimated Take-Home: ~ $62,198 per year or $5,183 per month.
Note: These figures are estimates. Actual withholdings may vary based on specific W-4 selections and pre-tax contributions to retirement plans or healthcare.
function calculateNYPay() {
var gross = parseFloat(document.getElementById('ny_gross_pay').value) || 0;
var filingStatus = document.getElementById('ny_filing_status').value;
var location = document.getElementById('ny_location').value;
var preTaxDeductions = parseFloat(document.getElementById('ny_deductions').value) || 0;
var taxableIncome = Math.max(0, gross – preTaxDeductions);
// 1. FICA Calculation (2024)
// Social Security 6.2% up to 168,600
var ssTax = Math.min(taxableIncome, 168600) * 0.062;
var medicareTax = taxableIncome * 0.0145;
var totalFica = ssTax + medicareTax;
// 2. Federal Income Tax (Simplified 2024 Brackets)
var fedStdDeduction = (filingStatus === 'married') ? 29200 : (filingStatus === 'head' ? 21900 : 14600);
var fedTaxable = Math.max(0, taxableIncome – fedStdDeduction);
var fedTax = calculateFederalTax(fedTaxable, filingStatus);
// 3. NY State Tax (Simplified 2024 Brackets)
var nyStdDeduction = (filingStatus === 'married') ? 16050 : (filingStatus === 'head' ? 11200 : 8000);
var nyTaxable = Math.max(0, taxableIncome – nyStdDeduction);
var nyStateTax = calculateNYStateTax(nyTaxable, filingStatus);
// 4. Local Tax
var localTax = 0;
if (location === 'nyc') {
localTax = calculateNYCTax(nyTaxable, filingStatus);
} else if (location === 'yonkers') {
localTax = nyStateTax * 0.1675; // Yonkers is 16.75% of state tax
}
var totalTax = fedTax + totalFica + nyStateTax + localTax;
var netAnnual = taxableIncome – totalTax;
// Display Results
document.getElementById('ny_results').style.display = 'block';
document.getElementById('res_gross').innerText = '$' + gross.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_fed_tax').innerText = '- $' + fedTax.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_fica').innerText = '- $' + totalFica.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_state_tax').innerText = '- $' + nyStateTax.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_local_tax').innerText = '- $' + localTax.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_net_annual').innerText = '$' + netAnnual.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_net_monthly').innerText = '$' + (netAnnual / 12).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
function calculateFederalTax(taxable, status) {
var brackets = [];
if (status === 'married') {
brackets = [
{t: 23200, r: 0.10}, {t: 94300, r: 0.12}, {t: 201050, r: 0.22},
{t: 383900, r: 0.24}, {t: 487450, r: 0.32}, {t: 731200, r: 0.35}, {t: Infinity, r: 0.37}
];
} else {
brackets = [
{t: 11600, r: 0.10}, {t: 47150, r: 0.12}, {t: 100525, r: 0.22},
{t: 191950, r: 0.24}, {t: 243725, r: 0.32}, {t: 609350, r: 0.35}, {t: Infinity, r: 0.37}
];
}
return progressiveCalc(taxable, brackets);
}
function calculateNYStateTax(taxable, status) {
var brackets = [
{t: 8500, r: 0.04}, {t: 11700, r: 0.045}, {t: 13900, r: 0.0525},
{t: 21400, r: 0.0585}, {t: 80650, r: 0.0625}, {t: 215400, r: 0.0685},
{t: 1077550, r: 0.0965}, {t: 5000000, r: 0.103}, {t: Infinity, r: 0.109}
];
// Simplifying state brackets for single, but NY adjusts thresholds for MFJ.
// Usually double for MFJ at lower tiers.
if(status === 'married') {
for(var i=0; i<brackets.length; i++) { if(brackets[i].t !== Infinity) brackets[i].t *= 2; }
}
return progressiveCalc(taxable, brackets);
}
function calculateNYCTax(taxable, status) {
var brackets = [
{t: 12000, r: 0.03078}, {t: 25000, r: 0.03762}, {t: 50000, r: 0.03819}, {t: Infinity, r: 0.03876}
];
if(status === 'married') {
for(var i=0; i<brackets.length; i++) { if(brackets[i].t !== Infinity) brackets[i].t *= 1.8; }
}
return progressiveCalc(taxable, brackets);
}
function progressiveCalc(taxable, brackets) {
var tax = 0;
var prevThreshold = 0;
for (var i = 0; i currentThreshold) {
tax += (currentThreshold – prevThreshold) * currentRate;
prevThreshold = currentThreshold;
} else {
tax += (taxable – prevThreshold) * currentRate;
break;
}
}
return tax;
}