401(k) Calculator
Project a 401(k) balance from employee contributions, the employer match, salary growth, and an assumed return — and see it split three ways into what the employee added, what the employer added, and what growth did. How a 401(k) is taxed next to a Roth or a taxable account is covered in the companion guide, 401(k), Roth IRA, and Taxable Accounts: How They Fit Together.
401(k) growth
Example: $80,000 salary, 6% contribution, 50% match up to 6%, 7% for 30 years → about $731,983.
What the model computes
The calculator takes six required inputs — an annual salary, a contribution expressed as a percentage of that salary, an employer match formula in two parts, an assumed annual return, and a number of years — plus an optional starting balance and an optional annual salary-growth rate. It returns one balance and a three-way split of where that balance came from: the employee's own contributions, the employer's matched contributions, and investment growth. The reference case used throughout this page is an $80,000 salary contributing 6%, a 50% match up to 6% of pay, an assumed 7% return, and 30 years. Those are the exact inputs the engine's automated tests lock, and every figure below is computed at build time by the same engine that runs the form above — this page cannot quote a number the tool would not produce.
The growth arithmetic is the monthly compounding the site's future-value formula uses; the methodology page gives the formula. What is specific to this tool is the match formula and the way salary growth feeds it. The tax treatment that separates a traditional 401(k) from a Roth or a taxable account is not part of the model at all; it is laid out in the companion guide, 401(k), Roth IRA, and Taxable Accounts: How They Fit Together, which also walks through combining this tool's output with the site's other calculators.
How the match formula is read
A match quoted as "50% up to 6%" contains two different percentages, and the tool keeps them apart. The first is a percentage of the employee's contribution: at 50%, the employer adds half of each contributed dollar. The second is a percentage of salary, and it is a limit: only contributions on the portion of pay up to that share are matched. The engine reduces the two to a single matched fraction — the smaller of the contribution percentage and the limit — and each month it takes that fraction of one-twelfth of salary and multiplies it by the match percentage. In the reference case the contribution sits exactly at the limit, so the whole 6% is matched: the employee deposit is $400 a month and the employer deposit is $200, half as much, because the match percentage is 50%.
The limit is a share of salary — not a dollar amount, and not a share of the contribution. Swapping the two percentages, or entering the limit as a share of the contribution, produces a match total that does not correspond to the plan formula being described, so the form labels state the base of each percentage explicitly.
Why it is simulated month by month
Most projections on this site reduce to one closed-form expression: the future value of a starting balance plus a level stream of contributions. The 401(k) model cannot use it, because its deposits stop being level once salary grows and the match cap binds. Instead the engine steps through every month of the horizon. For each month it works out which plan year the month falls in and sets that year's salary — the entered salary in the first year, raised by the growth rate once for every completed year after that. From that salary it derives the employee deposit and the matched deposit. It then grows the running balance by one month's return, the annual rate divided by twelve, and adds both deposits. Growing first and depositing second is the end-of-month convention used across the site: a deposit begins compounding the month after it arrives.
Applying the cap inside the loop, month by month, is what keeps the match right as pay rises. Because the limit is a percentage of salary, the dollar amount it caps rises with every raise; a fixed dollar cap computed once from the starting salary would understate the match in later years. The loop also keeps two running totals — every employee deposit and every employer deposit — so the split reported at the end is an exact accounting of what went in rather than an estimate, and the growth figure is whatever remains.
Two checks show the loop doing what it claims. When the salary is flat the deposits are level, and the simulation must agree with the closed-form formula: the reference case run through the future-value formula as a single $600 monthly contribution gives $731,982.60, and the simulation gives $731,982.60. And at a 0% return the loop degrades to simple addition: the reference deposits with no growth at all sum to $216,000 — $144,000 of employee money plus $72,000 of match — with a growth line of $0.
The reference case, decomposed
The engine returns four figures for the reference case, and the calculator prints all four:
| Figure | Reference case | What it is |
|---|---|---|
| Projected balance | $731,982.60 | The running balance after the final month |
| Employee contributions | $144,000.00 | 360 monthly deposits of $400 |
| Employer match | $72,000.00 | 360 monthly deposits of $200 |
| Investment growth | $515,982.60 | Balance minus starting balance, contributions, and match |
The two contribution totals are sums of deposits and nothing else; with a flat salary each is simply the monthly deposit times the number of months. The growth figure is different in kind: it is a residual, the balance less everything that was put in, so every dollar of compounding lands there whichever deposit earned it. In this case growth is 70% of the ending balance and the two kinds of deposit together are the other 30%. That split is a property of the assumed return and the horizon, not of the account: the same deposits at a lower assumed return, or over fewer years, would leave a smaller residual and a larger deposit share.
Below, at, and above the match limit
Holding everything else in the reference case fixed and changing only the contribution percentage isolates what the cap does. Three runs — contributing 3%, 6%, and 12% against the same 50% match up to 6% — give:
| Contribution | Matched slice of pay | Employee total | Employer total | Growth | Ending balance |
|---|---|---|---|---|---|
| 3% (below the limit) | 3% | $72,000.00 | $36,000.00 | $257,991.30 | $365,991.30 |
| 6% (at the limit) | 6% | $144,000.00 | $72,000.00 | $515,982.60 | $731,982.60 |
| 12% (above the limit) | 6% | $288,000.00 | $72,000.00 | $859,971.00 | $1,219,971.00 |
Below the limit, the matched slice is the contribution itself — the smaller of 3 and 6 — so the employer total falls to $36,000, half of the reference figure, and the ending balance is exactly half as well. That halving is a general feature of the model: with the rate and horizon fixed, the balance is proportional to the deposits, so scaling every deposit by the same factor scales the balance by that factor.
Above the limit, the employer column does not move: $72,000 at 12%, the same as at 6%, because the matched slice is capped at 6% of pay whatever the employee contributes. The employee total doubles to $288,000 and the ending balance rises by $487,988, and that entire increase is the unmatched employee dollars plus the compounding they earn. The flat employer column is what "cap" means in the model. The tool reports the arithmetic of each choice; it does not rank them.
Salary growth and a starting balance
A second saver, chosen to exercise the optional inputs: a $55,000 salary contributing 5%, a 100% match up to 4% of pay, an assumed 6% return, 20 years, and $15,000 already in the account. The match formula here has a different shape from the reference case — every matched dollar is matched in full, but only on the first 4% of pay — so the matched slice is 4%, the smaller of the two, and one point of the contribution goes unmatched. Running the same inputs with a flat salary and again with an assumed 3% annual salary growth gives:
| Run | Starting balance | Employee total | Employer total | Growth | Ending balance |
|---|---|---|---|---|---|
| Flat salary | $15,000.00 | $55,000.00 | $44,000.00 | $126,244.94 | $240,244.94 |
| 3% salary growth | $15,000.00 | $73,893.53 | $59,114.82 | $143,247.81 | $291,256.16 |
Three things are visible in the pair. First, the starting balance is reported on its own line and is excluded from all three totals: it compounds from the first month, and the growth it earns sits inside the growth figure, so in every run the identity starting balance + employee total + employer total + growth = ending balance holds to the cent — for the salary-growth run, $15,000.00 + $73,893.53 + $59,114.82 + $143,247.81 = $291,256.16. Second, the raise lifts the employee total and the employer total by the same proportion, because both are fixed percentages of the same rising salary; the cap follows the salary up rather than freezing at the first year's dollar amount. Third, the growth figure rises by a smaller proportion than the deposits do, because the larger deposits arrive in the later years, with fewer months left in which to compound. A raise late in the horizon adds dollars; it adds relatively little compounding.
How to read the output
The result box prints the projected balance and the three components beneath it, and the four always reconcile: the balance equals the starting balance plus the three lines. The figures are in nominal (future) dollars; entering a real, after-inflation return in the return field expresses the same projection in today's purchasing power. The return is a single constant applied identically in every month. Real returns vary year to year, and the order in which they arrive changes the outcome — a hazard known as sequence-of-returns risk — which a constant-rate projection cannot show. The output describes the shape of the compounding under one assumed rate, not a range of outcomes.
Readings that go wrong most often trace to one of the following:
- The limit is a share of salary. The match percentage applies to the contribution; the limit applies to pay. Entering the limit as a share of the contribution mis-states the plan formula.
- The balance is pre-tax. For a traditional 401(k) the projection is the account balance before withdrawals are taxed as ordinary income; the after-tax value is a different, smaller number that this tool does not compute. The companion guide explains what changes at withdrawal time for each account type.
- Salary growth steps annually. The first year uses the salary as entered, and the raise is applied at the start of each later year — not month by month, and not before the first year is over.
- No contribution limit is applied. The engine projects whatever percentage is entered. A contribution that would exceed the annual limit is not flagged; the model has no knowledge of the limit.
- The growth line is not "the return." It is the compounding earned by every deposit and the starting balance together. Two runs at the same return show different growth lines whenever their deposits differ, as the tables above illustrate.
- Years is a horizon, not an age. The model changes nothing at any particular age. The ages that do change the mechanics of taking money out — 59½ and the required minimum distribution age among them — are laid out in Retirement Age Milestones.
What the model does not include
Contribution limits. The IRS adjusts the 401(k) limits annually; this page quotes no figures — irs.gov publishes the current ones — and the engine does not enforce them. Taxes. The balance is projected before any withdrawal tax, and nothing in the model distinguishes a traditional from a Roth 401(k); the companion guide covers the difference, and the Roth IRA Calculator projects a Roth balance on its own. Plan-specific rules of any kind. Every matched dollar is credited to the balance in the month it is deposited; the model has no notion of conditions a plan may attach to matched money. Investment fees, Social Security, and pensions. Return variability and the sequence-of-returns risk that comes with it. Inflation is not applied to the balance, which is why the output is nominal unless a real return is entered.
To carry the result forward, the Retirement Planner accepts the employer match as dollars in its traditional monthly contribution field and projects a 401(k) alongside a Roth and a taxable account over one shared horizon. The full set of explainers, including the withdrawal-side guides, is on the guides page.
Frequently asked questions
How does the calculator read an employer match like "50% up to 6%"?
The first number is the match percentage: the employer adds that share of every dollar the employee contributes. The second is the limit, expressed as a percentage of salary: only contributions on pay up to that share are matched. The model takes the smaller of the contribution percentage and the limit, multiplies that slice of salary by the match percentage, and deposits one-twelfth of it each month. In the reference case — a $80,000 salary, a 6% contribution, and a 50% match up to 6% — that is $400 of employee money and $200 of employer money per month.
What happens to the match when the contribution is above the limit?
Nothing: the matched slice of salary is capped at the limit, so the employer total does not move. Contributing 12% instead of 6% in the reference case leaves the employer total at $72,000 in both runs, while the employee total rises from $144,000 to $288,000. The extra contributions still compound at the assumed return; they simply attract no match.
How does the salary-growth input work?
The salary steps up once per plan year: the first twelve months use the salary as entered, and each later block of twelve months raises it by the growth rate. Because both the contribution and the match limit are percentages of that salary, the monthly deposits and the matched dollars rise with it. Leaving the field blank or entering 0 models a flat salary. Real raises are irregular; the growth rate is a single assumed average.
Does the calculator enforce contribution limits?
No. The IRS adjusts the 401(k) limits annually, which is why this page quotes no dollar figures — the current limits are published at irs.gov. The engine accepts any contribution percentage and projects it without checking it against a cap, so a contribution that would exceed the limit in real life is projected as if it were allowed.
Are taxes included?
No. Traditional 401(k) contributions are generally pre-tax and withdrawals are taxed as ordinary income; Roth 401(k) contributions are after-tax and qualified withdrawals are tax-free. The calculator projects the account balance before any withdrawal tax, so the same balance means different spendable amounts depending on the account type. The companion guide on 401(k), Roth IRA, and taxable accounts covers those mechanics, and the Roth IRA Calculator projects a Roth balance separately.
What does the investment growth line contain?
It is a residual: the ending balance minus the starting balance, the employee contributions, and the employer match. It therefore holds every dollar of compounding — on the starting balance, on each employee deposit, and on each matched deposit — in nominal (future) dollars at the single constant return entered.
Why does the result agree with the future-value formula on the other calculators?
With no salary growth the monthly deposits are level, and a month-by-month loop of level deposits is exactly the annuity the future-value formula describes. The reference case run through the closed-form formula as $600 a month gives $731,982.60; the simulation gives $731,982.60. The loop earns its place when salary grows or the cap binds, because then the deposits are no longer level.
Does anything in the model change at a particular age?
No. The years-until-retirement input is a horizon, not an age, and the model applies the same arithmetic in every month. The statutory ages that change what happens when money comes out — such as 59½ and the required minimum distribution age — are outside this tool and are laid out in the Retirement Age Milestones guide.
Not financial advice: a general educational estimate that assumes a constant return and excludes withdrawal taxes and contribution limits. Values are processed locally in your browser and never transmitted. See the methodology page.