Retirement benefits

Retirement Match Design Simulator

Compare up to three 401(k)-style employer match designs for up to 10 employees, pay period by pay period: tiered match formulas, per-period or annual match with a true-up, eligibility waiting periods, annual match caps and vesting schedules, applied against the statutory deferral, catch-up, compensation and annual-additions limits or your own. You see each design's match cost, what each employee gains or leaves unclaimed, vested and unvested balances, and an 11 by 11 grid of deferral shifts against match multipliers. Estimates for planning, not tax or legal advice.

Last updated

Calculator overview

Inputs and outputs

This summary comes from the calculator's published input and output contract.

Inputs

Design 3: Employed on 31 December for year-end match (required) Conditional
About this input

Whether design 3 pays its year-end match only to employees still employed on 31 December.

Default No Allowed Yes, No
Design 3: Months of service before match (required) Conditional
About this input

Months of service after hire before design 3 starts matching; the first matched pay date is on or after that anniversary.

Unit months Default 0 Range 0 to 24
Design 3: Annual match cap Conditional
When omitted Blank
About this input

The most design 3 pays one employee in match over the plan year, in dollars, including match already paid. Leave blank for no cap.

Unit $/year Default Not set Range 0 to 100000000
Design 3: Match catch-up deferrals (required) Conditional
About this input

Whether design 3 matches catch-up deferrals as well as ordinary deferrals.

Default No Allowed Yes, No
Design 3 match tiers (required) Conditional
About this input

The match tiers of design 3: each band of deferral as a share of match pay, from lower to upper, and the match rate on that band.

Default 0 rows
ColumnRange or allowed values
Lower 0 to 1
Upper 0 to 1
Match rate 0 to 2
Design 3: Design name Conditional
When omitted Blank
About this input

A short name for design 3 shown in the tables and charts. Leave blank to show Design 3.

Default Not set
Design 3: Match method (required) Conditional
About this input

How design 3 pays the match: on every pay date from that period, or once a year from the annual totals.

Default Per pay period Allowed Per pay period, Annual
Design 2: Annual true-up (required) Conditional
About this input

Whether design 2 adds a year-end true-up: the annual match target less the match already paid, never below zero.

Default No Allowed Yes, No
Design 2 match tiers (required) Conditional
About this input

The match tiers of design 2: each band of deferral as a share of match pay, from lower to upper, and the match rate on that band.

Default 0 rows
ColumnRange or allowed values
Lower 0 to 1
Upper 0 to 1
Match rate 0 to 2
Design 2: Design name Conditional
When omitted Blank
About this input

A short name for design 2 shown in the tables and charts. Leave blank to show Design 2.

Default Not set
Design 2 vesting (required) Conditional
About this input

The vesting schedule of design 2: completed years of service and the share of employer match vested from then on.

Default 0 rows
ColumnRange or allowed values
Years 0 to 60
Vested share 0 to 1
Design 3: Compensation cap method (required) Conditional
About this input

How design 3 applies the annual compensation limit: cumulatively, pay period by pay period, or proportionally across the year.

Default Cumulative by pay period Allowed Cumulative by pay period, Proportional
Design 3: Match compensation (required) Conditional
About this input

The pay design 3 matches on: all eligible pay, or standard pay only (pay above the standard pay of a period, such as a bonus, is excluded).

Default All eligible pay Allowed All eligible pay, Standard pay only
Design 3: Compare this design (required) Conditional
About this input

Whether design 3 is compared. Design 1 is always active.

Default No Allowed Yes, No
Plan offers designated Roth deferrals (required) Conditional
About this input

Whether the plan lets employees make designated Roth deferrals. Where the Roth catch-up rule applies, an employee above the wage threshold can make catch-up only as Roth, so a plan without Roth cannot accept it. The example answers Yes for illustration; set it for your plan. It is required: a blank is not valid.

Default Yes Allowed Yes, No
Plan offers the age 60 to 63 catch-up (required) Conditional
About this input

Whether the plan offers the higher catch-up for employees who reach 60, 61, 62 or 63 by 31 December. Plans may choose not to; then those employees get the ordinary catch-up. The example answers Yes for illustration; set it for your plan. It is required: a blank is not valid.

Default Yes Allowed Yes, No
Period entries
When omitted Blank
About this input

Optional exceptions to the standard pay and standing deferral, one row per employee and period: a bonus, unpaid leave or a deferral change. A blank cell keeps the standard value; 0 means zero.

Default 0 rows
ColumnRange or allowed values
Employee ID Not declared
Period number 1 to 53
Eligible pay 0 to 100000000
Deferral 0 to 100000000
Plan year (required)
About this input

The calendar plan year being modelled, 1 January to 31 December. Statutory mode needs verified IRS limits for this year.

Unit year Default 2026 Range 2000 to 2100
Scenario match multiplier step (required) Conditional
About this input

The column step of the scenario grid: every match rate is multiplied by 1 plus or minus this per step, from 5 steps down to 5 steps up.

Unit x Default 0.1 Range 0.01 to 0.2
Design in the scenario grid (required) Conditional
About this input

The design whose employer cost the scenario grid varies.

Default Design 1 Allowed Design 1, Design 2, Design 3
Scenario deferral step (required) Conditional
About this input

The row step of the scenario grid: every employee defers this much more or less of match pay per step, from 5 steps down to 5 steps up.

Unit of pay Default 0.01 Range 0.001 to 0.02
Employees (required)
About this input

Up to 10 synthetic employees, one row each: an ID (no names), age on 31 December, dates, standard pay per period, standing deferral election, prior-year Social Security wages from this employer (W-2 box 3; for 2026 box 5 is also accepted; 0 if none, blank if unknown) and the amounts already posted this year.

Default 3 rows
ColumnRange or allowed values
Employee ID Not declared
Age on 31 December 14 to 100
Hire date Not declared
Plan entry date Not declared
Termination date Not declared
Completed vesting years 0 to 60
Standard pay per period 0 to 100000000
Deferral basis Percent, Dollars
Standing deferral 0 to 100000000
Prior-year Social Security wages 0 to 100000000
Prior pay this plan year 0 to 100000000
Prior deferrals this plan year 0 to 100000000
Prior match this plan year 0 to 100000000
Deferrals at unrelated employers 0 to 100000000
Deferrals in related-employer plans 0 to 100000000
Other employer contributions 0 to 100000000
Other annual additions 0 to 100000000
Annual-additions compensation 0 to 100000000
Opening vested match balance 0 to 100000000
Opening unvested match balance 0 to 100000000
Design 3 vesting (required) Conditional
About this input

The vesting schedule of design 3: completed years of service and the share of employer match vested from then on.

Default 0 rows
ColumnRange or allowed values
Years 0 to 60
Vested share 0 to 1
Design 3: Annual true-up (required) Conditional
About this input

Whether design 3 adds a year-end true-up: the annual match target less the match already paid, never below zero.

Default No Allowed Yes, No
Ledger shown for employee row (required)
About this input

Which employee row the 53-period ledger table shows, from 1 to 10.

Unit row Default 1 Range 1 to 10
Pay frequency (required)
About this input

How often the plan pays: weekly, biweekly, semimonthly or monthly. It checks that the pay calendar lists the right number of periods of the right length.

Default Biweekly Allowed Weekly, Biweekly, Semimonthly, Monthly
Pay calendar (required)
About this input

The pay periods of the plan year, one row per period in date order: start date, end date and pay date. Deferral limits apply by pay date.

Default 26 rows
ColumnRange or allowed values
Period start Not declared
Period end Not declared
Pay date Not declared
Limit source (required)
About this input

Where the limits come from: the verified IRS figures for the plan year, or limits you type yourself, which are shown as custom assumptions.

Default Statutory IRS limits Allowed Statutory IRS limits, Custom policy limits
Design 2: Match method (required) Conditional
About this input

How design 2 pays the match: on every pay date from that period, or once a year from the annual totals.

Default Per pay period Allowed Per pay period, Annual
Custom Roth catch-up wage threshold Conditional
When omitted Blank
About this input

Your own prior-year wage threshold above which catch-up must be Roth. Leave blank to apply no Roth catch-up rule.

Unit $ prior-year wages Default Not set Range 0 to 100000000
Enhanced band from age Conditional
When omitted Blank
About this input

The first age, reached by 31 December, of the enhanced catch-up band.

Unit years Default Not set Range 14 to 100
Enhanced band to age Conditional
When omitted Blank
About this input

The last age, reached by 31 December, of the enhanced catch-up band.

Unit years Default Not set Range 14 to 100
Design 1: Match compensation (required) Conditional
About this input

The pay design 1 matches on: all eligible pay, or standard pay only (pay above the standard pay of a period, such as a bonus, is excluded).

Default All eligible pay Allowed All eligible pay, Standard pay only
Design 1: Months of service before match (required) Conditional
About this input

Months of service after hire before design 1 starts matching; the first matched pay date is on or after that anniversary.

Unit months Default 0 Range 0 to 24
Design 1: Annual match cap Conditional
When omitted Blank
About this input

The most design 1 pays one employee in match over the plan year, in dollars, including match already paid. Leave blank for no cap.

Unit $/year Default Not set Range 0 to 100000000
Design 1: Compensation cap method (required) Conditional
About this input

How design 1 applies the annual compensation limit: cumulatively, pay period by pay period, or proportionally across the year.

Default Cumulative by pay period Allowed Cumulative by pay period, Proportional
Custom enhanced catch-up limit Conditional
When omitted Blank
About this input

Your own higher catch-up limit for an enhanced age band. It replaces the ordinary catch-up inside the band. Leave blank for no enhanced band.

Unit $/year Default Not set Range 0 to 100000000
Custom annual additions limit Conditional
When omitted Blank
About this input

Your own annual additions limit, in dollars. The lesser of this and 100 percent of compensation applies. Leave blank to skip the annual-additions screen.

Unit $/year Default Not set Range 0 to 100000000
Action (required)
About this input

What to calculate. Calculate runs the pay-period ledger for every active design; Scenario grid also fills the 11 by 11 table of employer cost against deferral and match changes.

Default Calculate Allowed Calculate, Scenario grid
Custom catch-up age Conditional
When omitted Blank
About this input

The age, reached by 31 December, from which catch-up deferrals are allowed under your custom limits. Leave blank for no catch-up.

Unit years Default Not set Range 14 to 100
Custom elective deferral limit Conditional
When omitted Blank
About this input

Your own annual elective deferral limit, in dollars. Leave blank to apply no limit; 0 stops every deferral.

Unit $/year Default Not set Range 0 to 100000000
Custom compensation limit Conditional
When omitted Blank
About this input

Your own annual compensation limit, in dollars: pay above it in the year is ignored for deferral percentages and match. Leave blank for no cap.

Unit $/year Default Not set Range 0 to 100000000
Custom catch-up limit Conditional
When omitted Blank
About this input

Your own annual catch-up limit, in dollars, for employees at or above the catch-up age.

Unit $/year Default Not set Range 0 to 100000000
Design 2: Compensation cap method (required) Conditional
About this input

How design 2 applies the annual compensation limit: cumulatively, pay period by pay period, or proportionally across the year.

Default Cumulative by pay period Allowed Cumulative by pay period, Proportional
Design 2: Match compensation (required) Conditional
About this input

The pay design 2 matches on: all eligible pay, or standard pay only (pay above the standard pay of a period, such as a bonus, is excluded).

Default All eligible pay Allowed All eligible pay, Standard pay only
Design 2: Compare this design (required) Conditional
About this input

Whether design 2 is compared. Design 1 is always active.

Default No Allowed Yes, No
Design 2: Annual match cap Conditional
When omitted Blank
About this input

The most design 2 pays one employee in match over the plan year, in dollars, including match already paid. Leave blank for no cap.

Unit $/year Default Not set Range 0 to 100000000
Design 2: Match catch-up deferrals (required) Conditional
About this input

Whether design 2 matches catch-up deferrals as well as ordinary deferrals.

Default No Allowed Yes, No
Design 2: Employed on 31 December for year-end match (required) Conditional
About this input

Whether design 2 pays its year-end match only to employees still employed on 31 December.

Default No Allowed Yes, No
Design 2: Months of service before match (required) Conditional
About this input

Months of service after hire before design 2 starts matching; the first matched pay date is on or after that anniversary.

Unit months Default 0 Range 0 to 24
Design 1: Match method (required) Conditional
About this input

How design 1 pays the match: on every pay date from that period, or once a year from the annual totals.

Default Per pay period Allowed Per pay period, Annual
Design 1: Match catch-up deferrals (required) Conditional
About this input

Whether design 1 matches catch-up deferrals as well as ordinary deferrals.

Default No Allowed Yes, No
Design 1: Employed on 31 December for year-end match (required) Conditional
About this input

Whether design 1 pays its year-end match only to employees still employed on 31 December.

Default No Allowed Yes, No
Design 1: Design name Conditional
When omitted Blank
About this input

A short name for design 1 shown in the tables and charts. Leave blank to show Design 1.

Default Not set
Design 1 vesting (required)
About this input

The vesting schedule of design 1: completed years of service and the share of employer match vested from then on.

Default 1 row
ColumnRange or allowed values
Years 0 to 60
Vested share 0 to 1
Design 1: Annual true-up (required) Conditional
About this input

Whether design 1 adds a year-end true-up: the annual match target less the match already paid, never below zero.

Default No Allowed Yes, No
Design 1 match tiers (required)
About this input

The match tiers of design 1: each band of deferral as a share of match pay, from lower to upper, and the match rate on that band.

Default 2 rows
ColumnRange or allowed values
Lower 0 to 1
Upper 0 to 1
Match rate 0 to 2

Outputs

CB03_Employees: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
CB03_Employees: rows used
About this output

Rows of the grid in use.

No unit declared
Full pay-period ledger, every employee
About this output

The full pay-period ledger of every employee, one row per employee and period, for export.

No unit declared
CB03_Employees: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
Results by employee
About this output

One row per employee: pay, deferrals by type, ceilings and, per design, match, reclassification, curtailment, vesting and missed match.

No unit declared
Employees at the ceiling
About this output

Employees whose deferrals stopped at the ceiling during the year.

No unit declared
CB03 Employees Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
Elective deferral limit
About this output

The elective deferral limit applied, in dollars a year; blank when no limit applies.

Unit $/year
Limits in force
About this output

Which limits are in force: the statutory IRS limits of the plan year, or custom assumptions.

No unit declared
CB03 Pay Calendar Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
Compensation limit
About this output

The annual compensation limit applied; blank when no cap applies.

No unit declared
Annual additions limit
About this output

The annual additions dollar limit applied; blank when the screen is off.

No unit declared
Catch-up limit, ages 60 to 63
About this output

The higher catch-up limit for the enhanced age band, in dollars a year; blank when the plan does not offer it.

Unit $/year
Catch-up limit
About this output

The ordinary catch-up limit applied, in dollars a year; blank when no catch-up applies.

Unit $/year
Employee-periods
About this output

Employees times pay periods: the ledger rows in use, at most 530.

No unit declared
Design 3: Match lost to timing or the year-end rule
About this output

Annual match target of design 3 not received because of pay-date timing without a true-up, or the end-of-year employment rule.

Unit $
Design 3: Unvested employer match at year end
About this output

Employer match not yet vested at year end under design 3.

Unit $
Design 3: Vested employer match at year end
About this output

Employer match vested at year end under design 3, including opening balances.

Unit $
CB03_D3_Tiers: rows used
About this output

Rows of the grid in use.

No unit declared
CB03 D3 Tiers Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
CB03_D3_Tiers: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
CB03_D3_Tiers: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
Design 3: Year-end match (true-up or annual)
About this output

Match design 3 posts at year end: the true-up, or the whole annual match under the annual method.

Unit $
Employees
About this output

Employees entered.

No unit declared
Pay-period ledger of the employee row chosen above
About this output

The pay-period ledger of one employee (chosen by the ledger row input): pay, capped pay, deferrals by type, running room and match by design.

No unit declared
CB03_D3_Vesting: rows used
About this output

Rows of the grid in use.

No unit declared
CB03 D3 Vesting Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
CB03_D3_Vesting: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
CB03_D3_Vesting: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
CB03_Pay_Calendar: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
Ordinary deferrals
About this output

Deferrals counted against the ordinary elective deferral limit.

No unit declared
Custom assumptions
About this output

TRUE when the limits are your own custom assumptions rather than statutory values.

No unit declared
Status
About this output

OK, CHECK with a reason worth reading, or NOT VALID with what to fix. Results read zero while it says NOT VALID.

No unit declared
Eligible pay
About this output

Eligible pay of all employees over the modelled pay periods, in dollars.

Unit $
Catch-up deferrals
About this output

Deferrals counted as catch-up above the ordinary limit.

No unit declared
Deferrals requested
About this output

Deferrals employees asked for, limited to their pay, before the statutory ceilings.

No unit declared
Deferrals stopped at the ceiling
About this output

Requested deferrals that stopped because an employee reached the ceiling.

No unit declared
Warnings
About this output

The number of active warnings in the warnings table.

No unit declared
Warnings
About this output

One row per warning code: how many employees it affects, the first employee affected and the message; blank when the warning is not active.

No unit declared
Warnings, one line
About this output

Every active warning, joined in one line.

No unit declared
Status code
About this output

The short code of the reason the status line shows, for example PLAN-OPTIONS or a grid row code; OK when the status is OK.

No unit declared
Model version
About this output

The version of this model.

No unit declared
Reference data
About this output

The reference dataset and its fingerprint behind the statutory limits, or custom when your own limits are used.

No unit declared
Workbook self-check
About this output

PASS when every internal consistency check of the workbook holds for this result.

No unit declared
Scenario status
About this output

OK when the scenario grid is computed; otherwise why it is not.

No unit declared
CB03_Period_Entries: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
CB03_Period_Entries: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
CB03_Period_Entries: rows used
About this output

Rows of the grid in use.

No unit declared
CB03 Period Entries Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
CB03_Pay_Calendar: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
CB03_Pay_Calendar: rows used
About this output

Rows of the grid in use.

No unit declared
Pay periods
About this output

Pay periods in the calendar.

No unit declared
Scenario grid: annual-basis employer match of the chosen design (deferral shift down, match multiplier across)
About this output

Annual-basis employer match of the scenario design for each deferral shift and match multiplier; statutory limits stay fixed.

No unit declared
Why a scenario cell is blank
About this output

Why a scenario cell is blank, when it is.

No unit declared
CB03 Scenario Row Axis
About this output

The deferral shifts of the grid rows, as a fraction of match pay; the grid repeats them in its first column.

No unit declared
CB03 Scenario Col Axis
About this output

The grid columns: the step of the match multiplier, then the multiplier at each of the 11 columns, from 5 steps below to 5 steps above.

No unit declared
Totals by pay date (last row: year-end match)
About this output

Pay, deferrals and match posted for all employees on each pay date, with the year-end match last.

No unit declared
Roth catch-up wage threshold
About this output

The prior-year wage threshold of the Roth catch-up rule; blank when the rule does not apply.

No unit declared
Base case, annual basis
About this output

The annual-basis employer match of the scenario design in the base case; the centre of the grid equals it.

No unit declared
Design 3: Employer match, annualized run-rate
About this output

Design 3 match annualized for employees who worked part of the year, by actual days employed; equal to the cash cost for full-year employees.

Unit $
CB03 D1 Vesting Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
CB03_D1_Vesting: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
CB03_D1_Vesting: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
Design 1: Vested employer match at year end
About this output

Employer match vested at year end under design 1, including opening balances.

Unit $
CB03_D1_Tiers: rows used
About this output

Rows of the grid in use.

No unit declared
Design 1: Match lost to timing or the year-end rule
About this output

Annual match target of design 1 not received because of pay-date timing without a true-up, or the end-of-year employment rule.

Unit $
Design 1: Unvested employer match at year end
About this output

Employer match not yet vested at year end under design 1.

Unit $
Design 2: Cost compared with design 1
About this output

Plan-year cash cost of design 2 less that of design 1.

Unit $
Design 2: Match curtailed by the annual-additions limit
About this output

Match design 2 would pay but cannot, because the annual-additions limit leaves no room.

Unit $
Design 2: Match limited by the annual match cap
About this output

Match design 2 does not pay because of its annual match cap.

Unit $
Design 2: Employer match on an annual basis (scenario base)
About this output

Design 2 match computed from the annual totals alone, ignoring pay-date timing: the base value of the scenario grid.

Unit $
CB03_D1_Vesting: rows used
About this output

Rows of the grid in use.

No unit declared
Design 1: Year-end match (true-up or annual)
About this output

Match design 1 posts at year end: the true-up, or the whole annual match under the annual method.

Unit $
Design 2: Projected annual-additions excess (not removed)
About this output

Annual additions above the limit that remain after reclassification under design 2, from amounts already posted and deferrals; shown, never removed.

Unit $
CB03_D1_Tiers: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
Design 1: Match limited by the annual match cap
About this output

Match design 1 does not pay because of its annual match cap.

Unit $
Design 1: Employer match, plan-year cash cost
About this output

Match design 1 pays in the plan year, in cash: pay-date match plus year-end match.

Unit $
Design 1: Unvested match of terminated employees
About this output

Unvested match under design 1 of employees with a termination date.

Unit $
Design 1: Match curtailed by the annual-additions limit
About this output

Match design 1 would pay but cannot, because the annual-additions limit leaves no room.

Unit $
Calculated for
About this output

The action the results were calculated for.

No unit declared
Design 1: Projected annual-additions excess (not removed)
About this output

Annual additions above the limit that remain after reclassification under design 1, from amounts already posted and deferrals; shown, never removed.

Unit $
Design 1: Employer match on an annual basis (scenario base)
About this output

Design 1 match computed from the annual totals alone, ignoring pay-date timing: the base value of the scenario grid.

Unit $
Design 1: Employer match, annualized run-rate
About this output

Design 1 match annualized for employees who worked part of the year, by actual days employed; equal to the cash cost for full-year employees.

Unit $
CB03 D1 Tiers Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
CB03_D1_Tiers: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
Design 1: Deferrals reclassified as catch-up (annual additions)
About this output

Ordinary deferrals reclassified as catch-up so that annual additions fit the limit under design 1.

Unit $
Design 1: Match as a share of eligible pay
About this output

Design 1 cash match as a share of total eligible pay.

Unit of pay
Design 1: Match left unclaimed by deferring less
About this output

Match employees leave unclaimed under design 1 by deferring less than the top of the match tiers.

Unit $
Design 1: Match posted on pay dates
About this output

Match design 1 posts on pay dates during the year.

Unit $
Design 2: Employer match, plan-year cash cost
About this output

Match design 2 pays in the plan year, in cash: pay-date match plus year-end match.

Unit $
Design 3: Employer match on an annual basis (scenario base)
About this output

Design 3 match computed from the annual totals alone, ignoring pay-date timing: the base value of the scenario grid.

Unit $
Design 3: Cost compared with design 1
About this output

Plan-year cash cost of design 3 less that of design 1.

Unit $
Design 3: Match curtailed by the annual-additions limit
About this output

Match design 3 would pay but cannot, because the annual-additions limit leaves no room.

Unit $
Design 3: Projected annual-additions excess (not removed)
About this output

Annual additions above the limit that remain after reclassification under design 3, from amounts already posted and deferrals; shown, never removed.

Unit $
CB03_D2_Vesting: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
CB03_D2_Vesting: rows used
About this output

Rows of the grid in use.

No unit declared
Design 2: Year-end match (true-up or annual)
About this output

Match design 2 posts at year end: the true-up, or the whole annual match under the annual method.

Unit $
Design 3: Match left unclaimed by deferring less
About this output

Match employees leave unclaimed under design 3 by deferring less than the top of the match tiers.

Unit $
Design 3: Match posted on pay dates
About this output

Match design 3 posts on pay dates during the year.

Unit $
Design 3: Deferrals reclassified as catch-up (annual additions)
About this output

Ordinary deferrals reclassified as catch-up so that annual additions fit the limit under design 3.

Unit $
Design 3: Match as a share of eligible pay
About this output

Design 3 cash match as a share of total eligible pay.

Unit of pay
Design 3: Match limited by the annual match cap
About this output

Match design 3 does not pay because of its annual match cap.

Unit $
Design 3: Employer match, plan-year cash cost
About this output

Match design 3 pays in the plan year, in cash: pay-date match plus year-end match.

Unit $
Design 3: Unvested match of terminated employees
About this output

Unvested match under design 3 of employees with a termination date.

Unit $
CB03_D2_Vesting: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
Design 2: Deferrals reclassified as catch-up (annual additions)
About this output

Ordinary deferrals reclassified as catch-up so that annual additions fit the limit under design 2.

Unit $
Design 2: Employer match, annualized run-rate
About this output

Design 2 match annualized for employees who worked part of the year, by actual days employed; equal to the cash cost for full-year employees.

Unit $
CB03 D2 Tiers Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
Design 2: Match posted on pay dates
About this output

Match design 2 posts on pay dates during the year.

Unit $
Design 2: Unvested match of terminated employees
About this output

Unvested match under design 2 of employees with a termination date.

Unit $
Design 2: Match as a share of eligible pay
About this output

Design 2 cash match as a share of total eligible pay.

Unit of pay
Design 2: Match left unclaimed by deferring less
About this output

Match employees leave unclaimed under design 2 by deferring less than the top of the match tiers.

Unit $
Design 2: Unvested employer match at year end
About this output

Employer match not yet vested at year end under design 2.

Unit $
Design 2: Vested employer match at year end
About this output

Employer match vested at year end under design 2, including opening balances.

Unit $
CB03 D2 Vesting Check
About this output

One line per row of the grid: blank when unused, OK, or the first problem to fix.

No unit declared
Design 2: Match lost to timing or the year-end rule
About this output

Annual match target of design 2 not received because of pay-date timing without a true-up, or the end-of-year employment rule.

Unit $
CB03_D2_Tiers: first problem
About this output

The first problem found in the grid, blank when none.

No unit declared
CB03_D2_Tiers: rows with a problem
About this output

Rows of the grid with a problem.

No unit declared
CB03_D2_Tiers: rows used
About this output

Rows of the grid in use.

No unit declared
This page is provided by LogicCommons for informational purposes only. Results are model outputs computed from the inputs you supply and are not financial, investment, tax, accounting, or legal advice, and no advisory relationship is created. Verify all inputs and results independently before relying on them in any decision. These calculators model the policy arithmetic you enter. They do not certify compliance with payroll, tax, insurance, ERISA, nondiscrimination, or employment law, and they are not a substitute for review of your actual plan documents and policies by a qualified professional.

LogicCommons is in beta. If a result, label, or reference looks wrong, tell us here; we read every message.

Methodology

Purpose and model boundary

This calculator compares up to three 401(k)-style employer matching designs on your own synthetic workforce of up to 10 employees, for one calendar plan year, pay period by pay period. For each design it reports what the match costs in cash and as an annualized run-rate, how much each employee receives and when, the match employees leave unclaimed by deferring less, the match lost to pay-date timing or a year-end employment rule, what a true-up adds back, where the deferral ceilings, the compensation limit and the annual-additions limit cut in, and how much of the employer money is vested at year end. A second action adds an 11 by 11 grid of the chosen design's employer cost as every employee defers more or less and every match rate is scaled up or down.

Every figure on this page is computed by the spreadsheet; the page adds nothing to it. The model is educational policy arithmetic for the designs you enter. Safe-harbor status, ADP and ACP nondiscrimination testing, controlled-group aggregation, deduction limits and tax advice are outside it, and so are collectively bargained, multiemployer and governmental plans.

Inputs and units

  • Plan year, 2000 to 2100. The plan year, the limitation year and the compensation year are all 1 January to 31 December.
  • Limit source. Statutory IRS limits reads the verified figures for the plan year from the workbook's reference table, and refuses a year without them: 2025 and 2026 are supported. Custom policy limits accepts any year and uses the limits you type, each optional, labelled as custom assumptions: an elective deferral limit (blank applies none, 0 stops every deferral), a catch-up age and limit, an enhanced catch-up limit with the age band it applies to, a Roth catch-up wage threshold, an annual additions limit (blank switches that screen off) and a compensation limit (blank applies no cap).
  • Whether the plan offers designated Roth deferrals and whether it offers the higher catch-up for ages 60 to 63. Both are plan-design answers with no default meaning: a blank is not valid while the question applies. The example answers Yes to both for illustration; set them for your plan.
  • Pay frequency and the pay calendar: up to 53 periods, each with a start date, an end date and a pay date inside the plan year, in date order without overlaps. The calendar must hold 52 or 53 weekly, 26 or 27 biweekly, 24 semimonthly or 12 monthly periods of the right length. Rows can be pasted and are put in date order.
  • Employees, up to 10 rows: a synthetic ID, never a name; age on 31 December; hire date and optional plan entry and termination dates; completed vesting years at year end; standard pay per period; the standing deferral election as a percent of pay (a fraction, at most 100%) or dollars per period; prior-year Social Security wages from this employer (0 if none, blank if unknown); and, optional, the pay, deferrals and match already posted this plan year outside the calendar, deferrals in plans of unrelated employers and of the same or related employers, other employer contributions and annual additions, the compensation to use for the annual-additions limit, and opening vested and unvested match balances.
  • Period entries, optional, up to 530 rows: an employee ID, a period number and a different eligible pay or deferral for that period, such as a bonus, unpaid leave or an election change. A blank cell keeps the standard value; 0 means zero. Order does not matter.
  • For each design (design 1 always; designs 2 and 3 when you choose to compare them): a name, the match method (per pay period or annual), an annual true-up, whether catch-up deferrals are matched, the pay matched (all eligible pay, or standard pay only), how the compensation limit is applied (cumulatively by pay period, or proportionally), months of service before matching, whether the year-end match needs employment on 31 December, an optional annual match cap, up to 10 match tiers (a band of deferral as a share of match pay and the match rate on it, up to 200%) and up to 10 vesting steps (completed years and the vested share from then on).
  • The action; for the grid, the design it varies, the deferral step and the match multiplier step; and the employee row whose period ledger is shown.

Money is dollars; deferral bands and steps are shares of pay.

Governing relationships

Limits. In statutory mode the workbook reads, by record, the plan year's elective deferral limit, the age-50 catch-up and its age, the higher catch-up for ages 60 to 63, whether the Roth catch-up rule is in force and its wage threshold, the annual additions dollar limit and its 100%-of-compensation limb, and the compensation limit. Age is the age reached by 31 December. An employee aged 60 to 63 in a plan that offers it gets the higher catch-up in place of the age-50 amount, never in addition to it. Where the Roth rule is in force (2026, not 2025), an employee eligible for catch-up whose prior-year Social Security wages from this employer are strictly above the threshold can make catch-up only as Roth; if the plan offers no Roth, that employee's catch-up room is 0. Blank wages for such an employee are refused, unless the employee was hired during the plan year.

Pay. Each period's eligible pay is the period entry when there is one, and otherwise standard pay prorated by the actual days employed in the period. Pay above the compensation limit, counted cumulatively from pay already posted this year, is left out of percent elections and of match pay.

Deferrals. The requested deferral is the election applied to capped pay, or the dollar election, never more than the period's pay and nothing before plan entry. Deferral room is used in this order: plans of unrelated employers, plans of the same or related employers, this plan's earlier deferrals this year, then the modelled periods. Each period's request fills the remaining ordinary room first, then the remaining catch-up room; anything beyond both is stopped. All amounts posted are rounded to the cent, half away from zero.

Match. For a design with tiers of lower bound L, upper bound U and rate R, the match per dollar of match pay at a deferral share d is

M(d) = Σ R × max(0, min(d, U) − L)

summed over the tiers. Per pay period, the match is the capped match pay times M of the period's matchable deferrals over that pay, from the first pay date on or after both plan entry and the eligibility anniversary. Matchable deferrals are the ordinary deferrals, plus catch-up when the design matches it. The annual target is annual match pay times M of the year's matchable deferrals over that pay, computed from annual totals, not by averaging period rates. A true-up, or the annual method, pays the target less the match already paid, never below zero, so nothing is clawed back; with the year-end employment rule, an employee who leaves before 31 December gets no year-end match. The annual match cap limits each employee's match for the year, including match already paid.

Annual additions. Ordinary deferrals in this plan and in related-employer plans, other employer contributions and annual additions, and match already paid count toward the limit, which is the lesser of the dollar limit and the compensation limb; catch-up does not count. When a design's intended match would exceed it, ordinary deferrals are first reclassified as catch-up within unused catch-up room, and only then is the new match curtailed. Both amounts are shown. An excess that comes from amounts already posted is shown and never removed. The reclassification does not change a match already computed.

Vesting and costs. The vested share is read from the design's schedule at the employee's completed years, and 0 below the first step. It applies to the employer match account, the opening balances plus this year's match, and the vested balance never falls below the opening vested balance. Employees' own deferrals are always fully vested. Unvested match of an employee with a termination date is forfeitable. The run-rate annualizes each employee's cash match by the actual days employed in the plan year; for a full-year employee it equals the cash cost. Missed match is what the top of the tiers would have paid less what the deferrals earned; the timing shortfall is the annual target not reached because of pay-date timing without a true-up, or the year-end rule.

Scenario grid. Rows shift every employee's annual deferral by −5 to +5 deferral steps, as a share of annual match pay; columns multiply every match rate by 1 − 5 to 1 + 5 multiplier steps. Each cell re-splits the shifted deferrals against the same ceilings, recomputes the annual match, applies the annual cap and the same reclassify-then-curtail annual-additions screen, and adds it over the employees who pass the year-end rule. It is an annual-basis evaluation: per-period timing is not modelled in the grid, and the centre cell equals the design's annual-basis match.

Calculation sequence

The spreadsheet first resolves the limits for the plan year and source and checks the scalar inputs, the calendar, the employee rows, the period entries and the tiers and vesting of each active design. It then builds a fixed ledger of 10 employees by 53 periods: dates, proration, pay, capped pay, requested, ordinary, catch-up and stopped deferrals, and, per design, match pay, capped match pay, the period match and the posting within each employee's caps. An employee block adds the annual target, the true-up, the annual-additions screen, vesting, the run-rate, missed match and timing. Totals are summed by employee, by pay date and by design. In the grid action the annual-basis cells follow. A block of consistency checks, including that ordinary, catch-up and stopped deferrals add up to the request and that the grid's centre equals its base, runs before the status is returned.

Outputs and interpretation

The headline is design 1's plan-year cash cost and its annualized run-rate. The cards show the limits in force (statutory for the year, or custom assumptions) and each limit applied, the pay periods, employees and employee-periods, the eligible pay, the deferrals requested, counted as ordinary and as catch-up, and stopped at the ceiling, and the employees who reached it. For each design they give the plan-year cash cost, the annualized run-rate, the match on pay dates and at year end, the match as a share of eligible pay, deferrals reclassified and any projected excess under the annual-additions limit, match curtailed by that limit and by the annual cap, missed match, the timing shortfall, vested, unvested and forfeitable match, the annual-basis match, and for designs 2 and 3 the cost compared with design 1. The employee table gives each person's pay, deferrals by type, ceiling, Roth status, annual-additions limit and, per design, match, year-end match, reclassification, curtailment, vested match and missed match. The pay-date table totals pay, deferrals and each design's match on each pay date, with the year-end match last, and the ledger table shows every period for the employee row you choose.

Any warnings appear under the results, and a custom-limits run carries the Custom assumptions badge. The model version, the reference data version and the other run details are in the downloaded CSV and JSON files. The full ledger of every employee and period, and the per-row check tables, are returned to the API and MCP, and the first problem the checks find is named in the status.

In the grid, the first column gives each row's deferral shift and the column headings count match-multiplier steps from −5 to +5, with the multiplier at each step listed below the grid. A cell without a value is explained in the table beside the grid, which has the same layout.

Under the default inputs: statutory 2026 limits, a plan that offers Roth and the 60 to 63 catch-up, a biweekly calendar of 26 pay dates, and three employees: E01, aged 34, paid 2,000 a period and deferring 5%; E02, aged 52, paid 3,500 and deferring 8%; and E03, aged 61, paid 4,600 and deferring 15%, with prior-year wages below the 150,000 Roth threshold. Design 1 matches 100% of the first 3% of pay and 50% of the next 2%, per pay period, fully vested. Pay is 52,000, 91,000 and 119,600, 262,600 in all. The deferrals of 2,600, 7,280 and 17,940 (27,820 in all) are all ordinary, well inside the ceilings of 24,500, 32,500 (with the 8,000 age-50 catch-up) and 35,750 (with the 11,250 catch-up for ages 60 to 63), so nothing stops. Each employee defers at least 5%, so the match is 4% of pay: 2,080, 3,640 and 4,784, a cash cost of 10,504 with no year-end match, equal to the run-rate and to the annual-basis match, all vested. The status is OK with no warnings.

The first chart shows deferrals and each design's match by pay date. The second shows each design's cash cost and the match the limits curtail, and the third the vested and unvested employer account at year end. The fourth, in the grid action, traces the chosen design's annual-basis cost against the deferral shift at three match multipliers.

Validation and status logic

The workbook returns one status, chosen in this order: NOT VALID, then CHECK, then OK. There is no optimizer, so INFEASIBLE is not used.

  • NOT VALID names the first problem: a statutory year with no reference record; reference figures not yet verified; a plan question left blank while it applies; incomplete custom catch-up limits; a calendar with the wrong number of periods; a calendar row with a bad date, an end before its start, a pay date before its start or outside the plan year, an overlap, pay dates out of order or a period of the wrong length; no employee; an employee row with a required blank, an invalid or repeated ID, a termination or entry date before hire, or a percent election above 100%; a period entry with an unknown ID, a period beyond the calendar, a repeated employee and period, or a percent above 100%; a dollar deferral on a period with no pay; missing prior-year wages where the Roth rule needs them; a design's tiers or vesting out of order or empty, or a negative match cap; in the grid action, a grid design that is not being compared; or a numeric input outside its allowed range where it is read. NOT VALID is a refusal, not a numeric answer: every figure reads zero and is withheld.
  • CHECK accompanies a computed result that needs the stated review: employees reached their deferral ceiling and deferrals stopped; projected annual additions exceed the limit; match curtailed by the annual-additions limit; catch-up blocked because the Roth rule applies and the plan has no Roth; ordinary deferrals reclassified as catch-up; an annual-additions compensation below the deferrals made; a dollar election above pay; a deferral entered before plan entry; deferrals already over the ceiling before the modelled periods; a gap between pay periods; or a failed workbook self-check.
  • OK otherwise.

Information notes, which do not change the status, flag custom assumptions, blank custom limits, match limited by an annual cap, year-end match withheld by the employment rule, period entries with neither value, pay outside the employment dates, employees with no eligible pay and catch-up that must be Roth.

Assumptions and limitations

  • Capacities are 10 employees, 53 pay periods, 530 period entries, 3 designs, and 10 tiers and 10 vesting steps per design. Over-capacity input is refused, never truncated.
  • One pay calendar serves every employee; a workforce on two frequencies is run separately.
  • Calendar-year plans only.
  • Pay, deferrals and match already posted this year are treated as falling outside the calendar; they count toward the limits, the compensation cap, the annual target and the annual-additions limit, and are treated as eligible for match.
  • Standard pay only means the lesser of the period's pay and its prorated standard pay.
  • Match eligibility counts months of service from hire; there are no hours requirements or fixed entry dates. Vesting years are an entered assumption, with no breaks in service.
  • Catch-up is only the excess over the elective deferral limit; plan-imposed deferral caps and catch-up arising from nondiscrimination testing are not modelled.
  • The limit on catch-up by compensation is not modelled; it is flagged when an entered annual-additions compensation could make it bind.
  • The run-rate is a simple annualization by days employed; it does not rerun the tiers on annualized pay.
  • The 2026 Roth catch-up rule is applied as the statute reads.

Restrictions and non-computing states

The calculator enforces its numeric and choice limits before it accepts a result. A statutory year without verified figures, a calendar that does not fit its frequency, a repeated ID or period entry, tiers or vesting steps out of order and missing prior-year wages where the Roth rule needs them are refused by the workbook. In the Compare designs action the scenario grid is left blank, and its status says so.

Errors and warnings

A request rejected by the page's input limits is not a computed result. A transport or service failure, a timeout or a cancelled run cannot establish a fresh workbook answer, and the last result stays on the page marked as out of date. Review the workbook's References and Disclaimer, and your actual plan documents, before using a result for a real decision.

References

Sources and further reading

In statutory mode the calculator reads the plan year's IRS limits from a reviewed reference table inside the workbook, by record, with its version recorded in the downloaded CSV and JSON files; everything else (the workforce, the pay calendar and the matching designs) comes from your inputs. The public sources below state the limits and rules the model applies. They do not endorse this calculator.

This is an educational model of the matching designs you enter, not tax, legal, actuarial or plan-administration advice. It does not test safe-harbor status or nondiscrimination and does not certify compliance with the Internal Revenue Code or ERISA; review a result against your plan documents and with a qualified professional before acting on it.

Results are informational and not professional advice. See our Terms of Use. Powered by SpreadsheetWeb · About · Privacy · Terms