Federal Insurance Contributions Act (FICA) Tax Calculator

Calculates estimated FICA taxes for a single pay period based on *your* inputs.

Wage & Year-to-Date (YTD) Information

Enter details for the employee for the current pay period.

(Used for display in results only. Calculation uses the amount entered above.)

(Total SS taxable wages paid to the employee from Jan 1 up to, but not including, this pay period.)

(Total Medicare taxable wages paid to the employee from Jan 1 up to, but not including, this pay period.)

Applicable FICA Tax Rates & Limits

Enter the rates and limits for the specific Tax Year you are calculating.

(For display in results only. Ensure rates/limits below match this year.)

(The maximum amount of earnings subject to Social Security tax per employee per year.)

(Standard employee share rate for SS tax.)

(Standard employer share rate for SS tax.)

(Standard employee share rate for Medicare tax.)

(Standard employer share rate for Medicare tax.)

(Extra employee-only tax on earnings above the annual threshold.)

(The annual earnings amount above which the Additional Medicare Tax applies to the employee. This threshold depends on filing status.)

FICA Tax Calculation Results

Enter details in the tabs above and click Calculate.

Please enter valid numbers for Wage Amount, Tax Rates, and Limits.

'; downloadPdfBtn.style.display = 'none'; resultsAreaDiv.dataset.inputs = ''; resultsAreaDiv.dataset.calculations = ''; return; } // --- Calculate Social Security Tax --- const remainingSsWageBase = Math.max(0, ssWageBaseAnnual - ytdSsWages); const ssWagesSubjectToTaxInPeriod = Math.min(wageAmount, remainingSsWageBase); const employeeSsTax = ssWagesSubjectToTaxInPeriod * (employeeSsRate / 100); const employerSsTax = ssWagesSubjectToTaxInPeriod * (employerSsRate / 100); const totalSsTax = employeeSsTax + employerSsTax; // --- Calculate Medicare Tax --- const standardMedicareWagesSubjectToTaxInPeriod = wageAmount; // Standard Medicare has no wage base limit const employeeStandardMedicareTax = standardMedicareWagesSubjectToTaxInPeriod * (employeeMedicareRate / 100); const employerStandardMedicareTax = standardMedicareWagesSubjectToTaxInPeriod * (employerMedicareRate / 100); const totalStandardMedicareTax = employeeStandardMedicareTax + employerStandardMedicareTax; // Calculate Additional Medicare Tax (Employee only) const combinedYtdAndCurrentMedicare = ytdMedicareWages + wageAmount; let additionalMedicareWagesSubjectToTaxInPeriod = 0; if (combinedYtdAndCurrentMedicare > additionalMedicareThresholdAnnual) { if (ytdMedicareWages >= additionalMedicareThresholdAnnual) { // If YTD already exceeded threshold, the full current wage is subject additionalMedicareWagesSubjectToTaxInPeriod = wageAmount; } else { // If YTD did not exceed but YTD + current does, only the excess over the threshold is subject additionalMedicareWagesSubjectToTaxInPeriod = combinedYtdAndCurrentMedicare - additionalMedicareThresholdAnnual; } } // Ensure it's not negative if thresholds are weirdly entered additionalMedicareWagesSubjectToTaxInPeriod = Math.max(0, additionalMedicareWagesSubjectToTaxInPeriod); const employeeAdditionalMedicareTax = additionalMedicareWagesSubjectToTaxInPeriod * (additionalMedicareRate / 100); const totalMedicareTax = totalStandardMedicareTax + employeeAdditionalMedicareTax; // Includes both employer, standard employee, and additional employee // --- Total FICA Taxes --- const totalEmployeeFicaTax = employeeSsTax + employeeStandardMedicareTax + employeeAdditionalMedicareTax; const totalEmployerFicaTax = employerSsTax + employerStandardMedicareTax; const totalFicaTax = totalEmployeeFicaTax + totalEmployerFicaTax; // --- Display Results --- let resultsHTML = '

FICA Tax Calculation Results

'; // Display Inputs Used resultsHTML += '

Inputs Used:

'; resultsHTML += `
Wage/Salary Amount (This Period): ${formatCurrency(wageAmount)}
`; resultsHTML += `
Pay Frequency: ${payFrequency.charAt(0).toUpperCase() + payFrequency.slice(1)}
`; resultsHTML += `
Employee YTD SS Wages (Before Period): ${formatCurrency(ytdSsWages)}
`; resultsHTML += `
Employee YTD Medicare Wages (Before Period): ${formatCurrency(ytdMedicareWages)}
`; resultsHTML += `
Tax Year: ${taxYear}
`; resultsHTML += `
SS Wage Base Limit (Annual): ${formatCurrency(ssWageBaseAnnual)}
`; resultsHTML += `
Employee SS Rate: ${employeeSsRate.toFixed(2)}%
`; resultsHTML += `
Employer SS Rate: ${employerSsRate.toFixed(2)}%
`; resultsHTML += `
Employee Medicare Rate: ${employeeMedicareRate.toFixed(2)}%
`; resultsHTML += `
Employer Medicare Rate: ${employerMedicareRate.toFixed(2)}%
`; resultsHTML += `
Additional Medicare Rate: ${additionalMedicareRate.toFixed(2)}%
`; resultsHTML += `
Additional Medicare Threshold (Annual): ${formatCurrency(additionalMedicareThresholdAnnual)}
`; // Display Calculated Taxes Breakdown resultsHTML += '

Calculated Taxes for This Period:

'; resultsHTML += `
Wages Subject to SS Tax This Period: ${formatCurrency(ssWagesSubjectToTaxInPeriod)}
`; resultsHTML += `
Employee Social Security Tax: ${formatCurrency(employeeSsTax)}
`; resultsHTML += `
Employer Social Security Tax: ${formatCurrency(employerSsTax)}
`; resultsHTML += `
Wages Subject to Addtl Medicare Tax This Period: ${formatCurrency(additionalMedicareWagesSubjectToTaxInPeriod)}
`; resultsHTML += `
Employee Standard Medicare Tax: ${formatCurrency(employeeStandardMedicareTax)}
`; resultsHTML += `
Employer Standard Medicare Tax: ${formatCurrency(employerStandardMedicareTax)}
`; resultsHTML += `
Employee Additional Medicare Tax: ${formatCurrency(employeeAdditionalMedicareTax)}
`; // Display Totals resultsHTML += '

Totals for This Period:

'; resultsHTML += `
Total Employee FICA Tax: ${formatCurrency(totalEmployeeFicaTax)}
`; resultsHTML += `
Total Employer FICA Tax: ${formatCurrency(totalEmployerFicaTax)}
`; resultsHTML += `
Total Combined FICA Tax: ${formatCurrency(totalFicaTax)}
`; resultsSummaryDiv.innerHTML = resultsHTML + '
'; downloadPdfBtn.style.display = 'block'; // Show PDF button // Store data for PDF generation resultsAreaDiv.dataset.inputs = JSON.stringify({ wageAmount: wageAmount, payFrequency: payFrequency, ytdSsWages: ytdSsWages, ytdMedicareWages: ytdMedicareWages, taxYear: taxYear, ssWageBaseAnnual: ssWageBaseAnnual, employeeSsRate: employeeSsRate, employerSsRate: employerSsRate, employeeMedicareRate: employeeMedicareRate, employerMedicareRate: employerMedicareRate, additionalMedicareRate: additionalMedicareRate, additionalMedicareThresholdAnnual: additionalMedicareThresholdAnnual }); resultsAreaDiv.dataset.calculations = JSON.stringify({ ssWagesSubjectToTaxInPeriod: ssWagesSubjectToTaxInPeriod, employeeSsTax: employeeSsTax, employerSsTax: employerSsTax, totalSsTax: totalSsTax, standardMedicareWagesSubjectToTaxInPeriod: standardMedicareWagesSubjectToTaxInPeriod, employeeStandardMedicareTax: employeeStandardMedicareTax, employerStandardMedicareTax: employerStandardMedicareTax, additionalMedicareWagesSubjectToTaxInPeriod: additionalMedicareWagesSubjectToTaxInPeriod, employeeAdditionalMedicareTax: employeeAdditionalMedicareTax, totalMedicareTax: totalMedicareTax, totalEmployeeFicaTax: totalEmployeeFicaTax, totalEmployerFicaTax: totalEmployerFicaTax, totalFicaTax: totalFicaTax }); } // Event listener for calculate button calculateBtn.addEventListener('click', calculateAndDisplay); // Trigger calculation when switching TO the results tab document.getElementById('results').addEventListener('transitionend', function() { if (this.classList.contains('active')) { calculateAndDisplay(); } }); // --- PDF Generation --- downloadPdfBtn.addEventListener('click', function() { const { jsPDF } = window.jspdf; const doc = new jsPDF(); const inputs = JSON.parse(resultsAreaDiv.dataset.inputs || '{}'); const calculations = JSON.parse(resultsAreaDiv.dataset.calculations || '{}'); if (!inputs || !calculations || calculations.totalFicaTax === undefined) { alert("No results to download. Please calculate first."); return; } // --- PDF Styling (Matching CSS color scheme) --- const primaryColor = getComputedStyle(document.documentElement).getPropertyValue('--primary-color').trim(); const textColor = getComputedStyle(document.documentElement).getPropertyValue('--text-color').trim(); const outputBackgroundColor = getComputedStyle(document.documentElement).getPropertyValue('--output-background').trim(); const white = '#ffffff'; const green = '#27ae60'; // Match green for total combined const red = '#e74c3c'; // Match red for employee total doc.setFontSize(18); doc.setTextColor(primaryColor); doc.text("FICA Tax Calculation Results", 14, 22); doc.setFontSize(10); doc.setTextColor('#555'); doc.text("Based on user-provided inputs for Tax Year: " + inputs.taxYear, 14, 30); doc.setFontSize(12); doc.setTextColor(textColor); let yPos = 40; // Inputs Section in PDF doc.text("Inputs Provided:", 14, yPos); yPos += 7; doc.setFontSize(10); const inputsTableBody = [ ['Wage/Salary Amount (This Period)', formatCurrency(inputs.wageAmount)], ['Pay Frequency', inputs.payFrequency.charAt(0).toUpperCase() + inputs.payFrequency.slice(1)], ['Employee YTD SS Wages (Before Period)', formatCurrency(inputs.ytdSsWages)], ['Employee YTD Medicare Wages (Before Period)', formatCurrency(inputs.ytdMedicareWages)], ['', ''], // Separator ['SS Wage Base Limit (Annual)', formatCurrency(inputs.ssWageBaseAnnual)], ['Employee SS Tax Rate', inputs.employeeSsRate.toFixed(2) + '%'], ['Employer SS Tax Rate', inputs.employerSsRate.toFixed(2) + '%'], ['Employee Medicare Tax Rate', inputs.employeeMedicareRate.toFixed(2) + '%'], ['Employer Medicare Tax Rate', inputs.employerMedicareRate.toFixed(2) + '%'], ['Additional Medicare Tax Rate', inputs.additionalMedicareRate.toFixed(2) + '%'], ['Additional Medicare Threshold (Annual)', formatCurrency(inputs.additionalMedicareThresholdAnnual)], ]; doc.autoTable({ startY: yPos + 5, head: [['Description', 'Value']], body: inputsTableBody, theme: 'grid', styles: { textColor: textColor.substring(1), lineColor: '#cccccc', lineWidth: 0.1, cellPadding: 3 }, headStyles: { fillColor: primaryColor.substring(1), textColor: white.substring(1), fontStyle: 'bold' }, bodyStyles: { fillColor: outputBackgroundColor.substring(1), textColor: textColor.substring(1) }, alternateRowStyles: { fillColor: white.substring(1) }, margin: { top: yPos + 5 } }); const inputsTableFinalY = doc.autoTable.previous.finalY || yPos + 5; // Calculated Taxes Section in PDF yPos = inputsTableFinalY + 15; // Space after inputs table doc.setFontSize(12); doc.setTextColor(primaryColor); doc.text("Calculated Taxes for This Period:", 14, yPos); const calculationsTableBody = [ ['Wages Subject to SS Tax This Period', formatCurrency(calculations.ssWagesSubjectToTaxInPeriod)], ['Employee Social Security Tax', formatCurrency(calculations.employeeSsTax)], ['Employer Social Security Tax', formatCurrency(calculations.employerSsTax)], ['', ''], // Separator ['Wages Subject to Addtl Medicare Tax This Period', formatCurrency(calculations.additionalMedicareWagesSubjectToTaxInPeriod)], ['Employee Standard Medicare Tax', formatCurrency(calculations.employeeStandardMedicareTax)], ['Employer Standard Medicare Tax', formatCurrency(calculations.employerStandardMedicareTax)], ['Employee Additional Medicare Tax', formatCurrency(calculations.employeeAdditionalMedicareTax)], ]; doc.autoTable({ startY: yPos + 5, head: [['Tax Type', 'Amount ($)']], body: calculationsTableBody, theme: 'grid', styles: { textColor: textColor.substring(1), lineColor: '#cccccc', lineWidth: 0.1, cellPadding: 3 }, headStyles: { fillColor: primaryColor.substring(1), textColor: white.substring(1), fontStyle: 'bold' }, bodyStyles: { fillColor: outputBackgroundColor.substring(1), textColor: textColor.substring(1) }, alternateRowStyles: { fillColor: white.substring(1) }, margin: { top: yPos + 5 } }); const calculationsTableFinalY = doc.autoTable.previous.finalY || yPos + 5; // Total Taxes in PDF yPos = calculationsTableFinalY + 15; // Space after calculations table doc.setFontSize(12); doc.setTextColor(primaryColor); doc.text("Totals for This Period:", 14, yPos); yPos += 7; doc.setFontSize(11); doc.setTextColor(red); // Employee total in red doc.text(`Total Employee FICA Tax: ${formatCurrency(calculations.totalEmployeeFicaTax)}`, 14, yPos); yPos += 7; doc.setFontSize(11); doc.setTextColor(primaryColor); // Employer total in primary color doc.text(`Total Employer FICA Tax: ${formatCurrency(calculations.totalEmployerFicaTax)}`, 14, yPos); yPos += 10; // Extra space before combined total doc.setFontSize(14); doc.setTextColor(green); // Combined total in green doc.text(`Total Combined FICA Tax: ${formatCurrency(calculations.totalFicaTax)}`, 14, yPos); doc.save('fica_tax_calculation.pdf'); }); });

The Federal Insurance Contributions Act (FICA) Tax Calculator is an essential tool for employees, employers, and payroll professionals to estimate the amount of Social Security and Medicare taxes owed. FICA taxes fund these critical federal programs that provide benefits for retirees, disabled individuals, and children of deceased workers.

This calculator allows you to input your gross wages and calculates your total FICA tax liability based on current rates for Social Security and Medicare. It accounts for wage limits, additional Medicare taxes for high earners, and helps distinguish between employee and employer contributions.

Using the FICA Tax Calculator helps you understand your payroll tax obligations, plan your finances, and ensure payroll accuracy. Employers can use this tool to verify proper tax withholding and reporting, supporting compliance with IRS regulations.

Whether you’re an individual employee checking your tax deductions or a business managing payroll taxes, this calculator provides a clear and straightforward way to estimate your FICA tax contributions.

Start using the Federal Insurance Contributions Act Tax Calculator today to get accurate estimates and maintain compliance with federal payroll tax requirements.

Scroll to Top