Enter your annual salary and the percentage you contribute to your 401(k) to see how much your employer might match.
USD
Percentage of your salary
50% on the first 6% of salary
100% on the first 3% of salary
100% on first 4%, then 50% on next 2%
Custom Formula
Employer matches 50 cents for every dollar you contribute, up to 6% of your salary.
Your Estimated Employer Match
—
Understanding Your 401(k) Employer Match
A 401(k) employer match is essentially free money offered by your employer to help you save for retirement. When you contribute a portion of your salary to your 401(k) plan, your employer may contribute a certain amount as well, based on a predetermined formula. Understanding this match is crucial for maximizing your retirement savings potential.
How Employer Matches Work
Employer matches are typically expressed as a formula, indicating how much the employer will contribute based on your own contributions. Common match formulas include:
Dollar-for-Dollar Match: For every dollar you contribute, your employer contributes a dollar, up to a certain percentage of your salary.
50 Cents on the Dollar: For every dollar you contribute, your employer contributes 50 cents, up to a certain percentage of your salary.
Tiered Matches: Some plans have tiered contributions, like matching 100% up to 3% of your salary, and then 50% on the next 2% you contribute.
The maximum percentage of your salary that the employer will match is also a key component of the formula. For example, an employer might match 50% of your contributions up to 6% of your salary. This means if you earn $60,000 and contribute 6% ($3,600), your employer would contribute 50% of that $3,600, which is $1,800.
The Math Behind the Calculator
Our 401(k) Match Calculator simplifies this process. It requires three main inputs:
Your Annual Salary: The total amount you earn in a year before taxes and deductions.
Your Contribution Rate (%): The percentage of your salary you choose to contribute to your 401(k) each pay period.
Employer Match Formula: The specific rules your employer follows to match your contributions.
The calculator first determines the dollar amount of your contribution based on your salary and contribution rate. Then, it applies the selected employer match formula to calculate the employer's contribution. For example, with a "50% on the first 6% of salary" match:
If you contribute 3% of your $60,000 salary ($1,800), the employer matches 50% of your contribution, up to the 6% limit. So, the employer contributes 50% of $1,800 = $900.
If you contribute 8% of your $60,000 salary ($4,800), the employer's match is capped at 6% of your salary. First, calculate your contribution up to 6%: 6% of $60,000 = $3,600. The employer matches 50% of this $3,600, which is $1,800. Even though you contributed more, the employer match is limited.
Custom formulas allow for more complex matching structures, ensuring accuracy for a wider range of plans.
Why Maximize Your Employer Match?
Taking full advantage of your employer's 401(k) match is one of the simplest and most effective ways to boost your retirement savings. It's an immediate return on your investment with no additional risk. Failing to contribute enough to get the full match is like turning down a salary increase. Over years and decades, this difference can amount to tens or even hundreds of thousands of dollars in your retirement nest egg.
Disclaimer: This calculator provides an estimate based on the information you provide and common 401(k) match structures. Always refer to your specific 401(k) plan documents or consult with your HR department for the exact details of your employer's match policy.
function validateInput(inputElement) {
var errorElementId = inputElement.id + "Error";
var errorElement = document.getElementById(errorElementId);
if (errorElement) {
if (isNaN(inputElement.value) || parseFloat(inputElement.value) 100) {
errorElement.textContent = "Contribution rate usually doesn't exceed 100%.";
inputElement.style.borderColor = "#dc3545";
}
if (inputElement.id === "customMatchLimit1" || inputElement.id === "customMatchLimit2") {
if (!isNaN(inputElement.value) && parseFloat(inputElement.value) > 100) {
errorElement.textContent = "Limit usually doesn't exceed 100%.";
inputElement.style.borderColor = "#dc3545";
}
}
}
function updateMatchDetails() {
var selectedFormula = document.getElementById("matchFormula").value;
var matchFormulaDescription = document.getElementById("matchFormulaDescription");
var customMatchDetails = document.getElementById("customMatchDetails");
var customMatchError = document.getElementById("customMatchError");
customMatchError.textContent = ""; // Clear previous error
if (selectedFormula === "custom") {
customMatchDetails.style.display = "block";
// Clear custom input values when switching to custom
document.getElementById("customMatchRate1").value = "";
document.getElementById("customMatchLimit1").value = "";
document.getElementById("customMatchRate2").value = "";
document.getElementById("customMatchLimit2").value = "";
matchFormulaDescription.style.display = "none";
} else {
customMatchDetails.style.display = "none";
matchFormulaDescription.style.display = "block";
switch (selectedFormula) {
case "50cents_on_dollar_up_to_6":
matchFormulaDescription.textContent = "Employer matches 50 cents for every dollar you contribute, up to 6% of your salary.";
break;
case "100cents_on_dollar_up_to_3":
matchFormulaDescription.textContent = "Employer matches 100 cents for every dollar you contribute, up to 3% of your salary.";
break;
case "100cents_on_dollar_up_to_4_then_50":
matchFormulaDescription.textContent = "Employer matches 100% on the first 4% of your salary, and 50% on the next 2% you contribute.";
break;
}
}
}
function calculateMatch() {
var annualSalary = parseFloat(document.getElementById("annualSalary").value);
var contributionPercentage = parseFloat(document.getElementById("contributionPercentage").value);
var selectedFormula = document.getElementById("matchFormula").value;
var resultValueElement = document.getElementById("result-value");
var matchExplanationElement = document.getElementById("matchExplanation");
// Clear previous errors and results
document.getElementById("annualSalaryError").textContent = "";
document.getElementById("contributionPercentageError").textContent = "";
document.getElementById("customMatchError").textContent = "";
resultValueElement.textContent = "–";
matchExplanationElement.textContent = "";
// Validate inputs
if (isNaN(annualSalary) || annualSalary <= 0) {
document.getElementById("annualSalaryError").textContent = "Please enter a valid annual salary.";
return;
}
if (isNaN(contributionPercentage) || contributionPercentage 100) {
document.getElementById("contributionPercentageError").textContent = "Contribution rate cannot exceed 100%.";
return;
}
var yourContributionAmount = annualSalary * (contributionPercentage / 100);
var employerMatchAmount = 0;
var matchDetails = "";
if (selectedFormula === "custom") {
var customMatchRate1 = parseFloat(document.getElementById("customMatchRate1").value);
var customMatchLimit1 = parseFloat(document.getElementById("customMatchLimit1").value);
var customMatchRate2 = parseFloat(document.getElementById("customMatchRate2").value);
var customMatchLimit2 = parseFloat(document.getElementById("customMatchLimit2").value);
// Validate custom inputs
if (isNaN(customMatchRate1) || customMatchRate1 < 0 || isNaN(customMatchLimit1) || customMatchLimit1 0 && (isNaN(customMatchLimit2) || customMatchLimit2 100 || (customMatchLimit2 && customMatchLimit2 > 100)) {
document.getElementById("customMatchError").textContent = "Match limits usually do not exceed 100% of salary.";
return;
}
if (customMatchLimit2 && customMatchLimit2 0 && !isNaN(customMatchRate2) && !isNaN(customMatchLimit2) && customMatchLimit2 > customMatchLimit1) {
var contributionForSecondTier = Math.max(0, yourContributionAmount – (annualSalary * (customMatchLimit1 / 100)));
var effectiveContribution2 = Math.min(contributionForSecondTier, annualSalary * ((customMatchLimit2 – customMatchLimit1) / 100));
employerMatchAmount += effectiveContribution2 * (customMatchRate2 / 100);
matchDetails += ` Based on the second part (${customMatchRate2}% match on salary between ${customMatchLimit1}% and ${customMatchLimit2}%), your additional match is $${(effectiveContribution2 * (customMatchRate2 / 100)).toFixed(2)}.`;
}
// Cap employer match by salary contribution if necessary
employerMatchAmount = Math.min(employerMatchAmount, annualSalary * (customMatchLimit1 / 100)); // Assuming the primary limit applies to the total employer contribution
if (customMatchLimit2 && employerMatchAmount > annualSalary * (customMatchLimit2 / 100)) {
employerMatchAmount = annualSalary * (customMatchLimit2 / 100); // This logic might need refinement based on specific "up to X%" of salary definitions
}
} else {
var matchRate = 0;
var matchLimitPercentage = 0;
var matchDetailsBase = "";
switch (selectedFormula) {
case "50cents_on_dollar_up_to_6":
matchRate = 0.50; // 50 cents on the dollar
matchLimitPercentage = 6;
matchDetailsBase = "Employer matches 50% of your contributions up to 6% of your salary.";
break;
case "100cents_on_dollar_up_to_3":
matchRate = 1.00; // 100 cents on the dollar
matchLimitPercentage = 3;
matchDetailsBase = "Employer matches 100% of your contributions up to 3% of your salary.";
break;
case "100cents_on_dollar_up_to_4_then_50":
// This formula requires a two-step calculation within the standard logic
var firstTierLimit = 4;
var firstTierRate = 1.00;
var secondTierLimit = 6; // 4% + 2%
var secondTierRate = 0.50;
var contributionForFirstTier = Math.min(yourContributionAmount, annualSalary * (firstTierLimit / 100));
var matchFirstTier = contributionForFirstTier * firstTierRate;
var contributionForSecondTier = Math.max(0, yourContributionAmount – (annualSalary * (firstTierLimit / 100)));
var limitForSecondTier = annualSalary * ((secondTierLimit – firstTierLimit) / 100);
var effectiveContributionSecondTier = Math.min(contributionForSecondTier, limitForSecondTier);
var matchSecondTier = effectiveContributionSecondTier * secondTierRate;
employerMatchAmount = matchFirstTier + matchSecondTier;
matchDetails = `Employer matches 100% on your first 4% contribution ($${matchFirstTier.toFixed(2)}) and 50% on the next 2% contribution ($${matchSecondTier.toFixed(2)}). Total match: $${employerMatchAmount.toFixed(2)}.`;
break;
}
if (selectedFormula !== "100cents_on_dollar_up_to_4_then_50") {
var maxMatchableContribution = annualSalary * (matchLimitPercentage / 100);
var actualContributionToMatch = Math.min(yourContributionAmount, maxMatchableContribution);
employerMatchAmount = actualContributionToMatch * matchRate;
matchDetails = `${matchDetailsBase} Your contribution amount eligible for match is $${actualContributionToMatch.toFixed(2)}.`;
}
}
// Ensure match doesn't exceed reasonable limits (e.g., total salary contribution)
// This is a simplification; actual plan rules vary.
var maxPossibleEmployerMatch = annualSalary * 0.50; // A very rough upper bound, often plans match up to a certain % of salary
if (employerMatchAmount > maxPossibleEmployerMatch) {
// employerMatchAmount = maxPossibleEmployerMatch; // Uncomment if you want to strictly cap
}
resultValueElement.textContent = "$" + employerMatchAmount.toFixed(2);
matchExplanationElement.textContent = matchDetails;
}