Employer 401(k) match calculator
Turn a match formula into money: on an 80,000 salary contributing 6%, a match of 100% of the first 3% plus 50% of the next 2% adds 3,200 a year to your 4,800, for 8,000 in total. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Annual salary
- 80,000
- Employee contribution percent
- 6
- Employee annual contribution
- 4,800
- Employer annual match
- 3,200
- Total annual contribution
- 8,000
- Matched employee percent
- 5
Employer matching is free money on a retirement plan, but the headline formula on a benefits page is easy to misread. This employer 401(k) match calculator turns annual salary, your contribution percent, and an ordered match formula into clear currency figures: how much you defer, how much the employer adds, and the combined annual total. Model the classic two-band schedule—one hundred percent of the first three percent of pay plus fifty percent of the next two percent—or a simple single band such as fifty percent up to six percent. Bands are applied left to right against your deferral rate, so contribution above the matchable window is flagged as unmatched instead of silently overstating the company match.
What employer match value means and how the bands work
An employer match is a contribution the company deposits into your plan when you defer part of your own pay. Plans almost never match every dollar you could ever contribute; they define a formula in slices of salary percent. The most searched schedule is one hundred percent of the first three percent of eligible compensation plus fifty percent of the next two percent.
On an eighty thousand dollar salary with a six percent employee deferral, the first three percent is fully matched (two thousand four hundred dollars), the next two percent is half matched (eight hundred dollars), and the sixth employee percent sits outside the match window, so the annual employer match is three thousand two hundred dollars. Employee annual contribution is always salary times employee percent over one hundred, independent of the match.
Nothing here models vesting schedules, true-up timing, after-tax versus pre-tax buckets, or annual legal contribution caps; it sizes the contractual match dollars from the percent formula you supply so planners and product teams share one transparent contract.
Where an employer 401(k) match calculator earns its keep
Benefits and HR teams use an employer 401(k) match calculator on offer letters and open-enrollment pages so candidates see dollar outcomes instead of only a jargon formula. Financial coaches and workplace wellness programs walk employees through what happens if they raise deferral from three percent to six percent under a two-band match, making the free-money gap concrete.
Educators and spreadsheet authors need a deterministic oracle for homework and CI: eighty thousand at six percent under one hundred percent of three plus fifty percent of two must always yield three thousand two hundred of employer match.
FAQ
How do I model 100% of the first 3% and 50% of the next 2%?
Order matters: bands are applied left to right against your contribution percent.
Does this enforce IRS 401(k) contribution limits?
No. It only values the employer match formula you supply. Legal annual limits, catch-up contributions, vesting, and true-ups are outside this capability.
What happens if I contribute more than the match covers?
The extra is shown as unmatched. At 6% of an 80,000 salary under 100% of the first 3% plus 50% of the next 2%, 5% is matched and the last 1% gets no company money.
How much should I contribute to get the full match?
At least the combined width of the bands. With 100% of the first 3% plus 50% of the next 2%, contributing 5% of pay captures the whole match, and the result tells you whether you are capturing it fully.
Does it account for vesting or when the money is deposited?
No. It sizes the yearly match from the formula you enter. Vesting schedules, year-end true-up payments, pre-tax versus after-tax accounts and legal contribution caps are not modeled, so check your plan for those.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/finance/employer-match-value \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"annual_salary":80000,"employee_contribution_percent":6,"match_tiers":[{"band_percent":3,"match_rate_percent":100},{"band_percent":2,"match_rate_percent":50}]}'const res = await fetch("https://api.kit.forhosting.com/finance/employer-match-value", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"annual_salary": 80000,
"employee_contribution_percent": 6,
"match_tiers": [
{
"band_percent": 3,
"match_rate_percent": 100
},
{
"band_percent": 2,
"match_rate_percent": 50
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/employer-match-value",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"annual_salary": 80000,
"employee_contribution_percent": 6,
"match_tiers": [
{
"band_percent": 3,
"match_rate_percent": 100
},
{
"band_percent": 2,
"match_rate_percent": 50
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/employer-match-value", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"annual_salary":80000,"employee_contribution_percent":6,"match_tiers":[{"band_percent":3,"match_rate_percent":100},{"band_percent":2,"match_rate_percent":50}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"annual_salary":80000,"employee_contribution_percent":6,"match_tiers":[{"band_percent":3,"match_rate_percent":100},{"band_percent":2,"match_rate_percent":50}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/employer-match-value", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"annual_salary": 80000,
"employee_contribution_percent": 6,
"match_tiers": [
{
"band_percent": 3,
"match_rate_percent": 100
},
{
"band_percent": 2,
"match_rate_percent": 50
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.employer_match_value",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Use it free in the browser or call the API at $0.002 per successful request when you need the same contract in product code.
What employer match value means and how the bands work
This calculator encodes that walk exactly: remaining employee contribution percent starts at your deferral rate; each tier claims min(remaining, band_percent) of salary and multiplies that slice by the tier match rate; remaining then decreases. The response also reports matched versus unmatched employee percent, employer match as a percent of salary, effective match relative to what you put in, whether you are fully capturing the available match bands, a human-readable match_formula_display string, and a tier_breakdown array so UIs can show the arithmetic band by band.
Input contract, defaults, rounding, and error behaviour
Combined band widths must not exceed one hundred percent of salary because bands are sequential slices, not overlapping caps. Optional precision defaults to two decimal places for currency-style display and may be set from zero to fifteen via precision, decimals, or dp. POST a JSON body with three required inputs. Annual_salary is the gross annual pay or eligible compensation base; aliases include salary, compensation, pay, and income, and the value must be finite and strictly positive. Employee_contribution_percent is your deferral rate as percent of salary from zero through one hundred; aliases include contribution_percent, employee_percent, deferral_percent, and employee_rate. Match_tiers is a non-empty ordered array (at most ten bands) of objects with band_percent (strictly positive width as percent of salary, at most one hundred each) and match_rate_percent (zero through one hundred employer match rate on contributions in that band); aliases for the array include tiers, match_formula, and formula_tiers. Missing salary, employee percent, or tiers, empty tier arrays, non-finite numbers, negative money, percent fields outside the allowed bands, and combined bands over one hundred all fail with invalid_input and are not billed. Successful responses echo the normalized salary and employee percent, employee_annual_contribution, employer_annual_match, total_annual_contribution, matched and unmatched employee percents, max_matchable_percent, employer_match_as_salary_percent, effective_match_on_employee_percent, fully_capturing_match, the normalized match_tiers, tier_breakdown with per-band employer dollars, method employer_match_value, formula, match_formula_display, and precision.
Where an employer 401(k) match calculator earns its keep
Payroll and fintech product teams embed the same contract so a marketing landing for employer match matches the signed-in planner and the backend API without re-implementing edge cases around partial bands and unmatched excess. Pair the free interactive page for exploration with the priced endpoint for pipelines, keep match_tiers ordered exactly as the plan document states them, and treat the output as a formula valuation—not tax advice, not a substitute for the plan SPD, and not a check against annual contribution limits.
Integration use cases
Size the company match on a job offer
Enter the stated salary, your planned deferral percent, and the offer’s match tiers to see employer_annual_match and total_annual_contribution in currency units.
Find the deferral that fully captures the match
Compare employee percents against max_matchable_percent and fully_capturing_match so you know when extra deferral no longer increases the employer dollars.
Explain a two-band formula band by band
Use tier_breakdown and match_formula_display in benefits education UIs to show how much of each band was applied and what the employer paid on it.
Technical questions
How does the employer 401(k) match calculator work?
Provide annual_salary, employee_contribution_percent, and ordered match_tiers. The engine walks each band, matching min(remaining employee %, band_percent) of salary at that band’s match_rate_percent, then returns employee, employer, and total annual amounts.
What if I contribute more than the matchable window?
Employee dollars above the sum of band_percent values still count in employee_annual_contribution, but unmatched_employee_percent is positive and those extra percent points receive zero employer match.
What does the employer 401(k) match calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.