Accurate tax math is a testable claim
A retirement projection is only as good as its tax math. Ours is checked, line by line, against an independent open-source tax model built and maintained by people with no connection to us.
Our federal tax calculations match PolicyEngine US to within one dollar, in every scenario we test, with no exceptions.
That covers federal income tax, adjusted gross income, taxable income, the taxable portion of Social Security, and the standard deduction, across 49 retirement scenarios built to sit on the edges where the tax code actually bites, including self-employment income and the qualified business income deduction that goes with it.
- Federal scenarios
- 49
- Tax year
- 2026
- Tolerance
- $1
- Federal misses
- 0
Verified against PolicyEngine US 1.821.4 on August 26, 2026. State income tax is a separate and more complicated story, and we cover it honestly further down.
Why we check against someone else's engine
Every retirement planner writes its own tax code, and every one of them will tell you it is accurate. That claim is unfalsifiable unless somebody checks it against a source that has no stake in the answer.
PolicyEngine US is an open-source microsimulation model of the US tax and benefit system. It is used for policy research, its rules are public and auditable line by line, and anybody can run it. That makes it a fair referee: we cannot tune it, we did not write it, and if it disagrees with us, the disagreement is visible to everyone.
We are not affiliated with PolicyEngine, and they have not reviewed or endorsed Retirement Figures. We simply run their model alongside ours on identical inputs and publish what comes out.
PolicyEngine runs only in an isolated validation harness on our own machines. It is not part of the product, it never touches your plan, and no PolicyEngine code ships to your browser or our servers.
What we test
Averages hide errors, so the scenarios are chosen to sit on the edges where tax code actually bites: threshold crossings, phase-outs, bracket boundaries, and the interactions that make retirement tax genuinely hard.
Federal income tax, 49 of 49 scenarios
Every scenario in the suite, exactly as the harness reported it. Four more federal outputs are checked per scenario - AGI, taxable income, the taxable portion of Social Security, and the standard deduction - and those are in the full report.
| Scenario | Retirement Figures | PolicyEngine | Difference |
|---|---|---|---|
| 01Single, no SS, simple IRA withdrawal (TX) | $3,820.00 | $3,820.00 | $0.00 |
| 02MFJ, no SS, simple IRA withdrawal (TX) | $5,240.00 | $5,240.00 | $0.00 |
| 03MFJ, SS + pension (OH) | $1,635.00 | $1,635.00 | $0.00 |
| 04MFJ, SS + Roth conversion crossing SS phase-in (OH) | $9,242.00 | $9,242.00 | $0.00 |
| 05SS taxation 50% threshold edge (single) | $385.00 | $385.00 | $0.00 |
| 06LTCG + QD straddling 0% to 15% threshold (MFJ) | $2,840.00 | $2,840.00 | $0.00 |
| 07Ohio resident, working-age (OH) | $19,740.00 | $19,740.00 | $0.00 |
| 08No income tax state baseline (NV) | $13,170.00 | $13,170.00 | $0.00 |
| 09High-tax state (CA) | $49,468.00 | $49,468.00 | $0.00 |
| 10Large Roth conversion into 32% bracket (MFJ) | $61,468.00 | $61,468.00 | $0.00 |
| 11Two seniors MFJ, MAGI in enhanced-senior phase-out window | $24,910.00 | $24,910.00 | $0.00 |
| 12Single 67 standard deduction edge (no SS) | $85.00 | $85.00 | $0.00 |
| 13MFJ 62/67 Ohio Roth conversion (SS-torpedo regression) | $9,242.00 | $9,242.00 | $0.00 |
| 14NIIT trigger edge (MFJ, high MAGI, cap gains) | $39,480.00 | $39,480.00 | $0.00 |
| 15Pennsylvania (fully exempts IRA/pension) | $9,704.00 | $9,704.00 | $0.00 |
| 16Mississippi (Roth conversion taxable per audit) | $3,404.00 | $3,404.00 | $0.00 |
| 17Iowa (age-55 retirement exemption gate) | $4,040.00 | $4,040.00 | $0.00 |
| 18North Carolina retirement scenario | $3,686.00 | $3,686.00 | $0.00 |
| 19IRMAA tier crossing (MFJ MAGI just past $342k) | $58,996.00 | $58,996.00 | $0.00 |
| 20Illinois retiree (fully exempts retirement income) | $9,704.00 | $9,704.00 | $0.00 |
| 21Massachusetts flat 5% retiree | $5,906.00 | $5,906.00 | $0.00 |
| 22New York $20k retirement income exclusion | $11,504.00 | $11,504.00 | $0.00 |
| 23Georgia retirement exemption ($65k/$130k MFJ at 65+) | $19,982.00 | $19,982.00 | $0.00 |
| 24Connecticut partial SS exemption (income-limited) | $1,337.50 | $1,337.50 | $0.00 |
| 25Minnesota partial SS exemption (high income, partial) | $12,220.40 | $12,220.40 | $0.00 |
| 26Michigan tiered retirement (born 1959+, post-2026 reforms) | $7,304.00 | $7,304.00 | $0.00 |
| 27Maryland age-65 pension exclusion | $5,906.00 | $5,906.00 | $0.00 |
| 28LTCG-heavy retiree (low ordinary, big realized gains) | $1,203.75 | $1,203.75 | $0.00 |
| 29Single 73 mandatory RMD-driven withdrawal | $11,845.60 | $11,845.60 | $0.00 |
| 30LTCG + QD straddling 0% to 15% threshold (single) | $2,620.00 | $2,620.00 | $0.00 |
| 31HoH, SS + IRA withdrawal (TX) | $5,265.36 | $5,265.36 | $0.00 |
| 32HoH, LTCG straddling the 0% to 15% breakpoint (TX) | $585.00 | $585.00 | $0.00 |
| 33HoH high income, the 24% ceiling that is not Single (TX) | $50,119.00 | $50,119.00 | $0.00 |
| 34QSS, the SS torpedo at the single base (FL) | $0.00 | $0.00 | $0.00 |
| 35QSS at 65, the additional deduction that is smaller (FL) | $515.00 | $515.00 | $0.00 |
| 36QSS, joint rate schedule and joint LTCG breakpoints (FL) | $1,280.00 | $1,280.00 | $0.00 |
| 37Single, self-employment only (TX) | $6,599.34 | $6,599.34 | $0.00 |
| 38Single 68, SS + self-employment (TX) | $4,042.53 | $4,042.53 | $0.00 |
| 39Single, self-employment + large LTCG (QBI capital-gain limit) (TX) | $18,901.31 | $18,901.30 | -$0.01 |
| 40Single, charitable giving above the cap (TX) | $8,550.00 | $8,550.00 | $0.00 |
| 41MFJ, charitable giving above the cap (TX) | $9,800.00 | $9,800.00 | $0.00 |
| 42MFJ, split gifts across both spouses (TX) | $9,800.00 | $9,800.00 | $0.00 |
| 43Single, giving below the cap (TX) | $8,682.00 | $8,682.00 | $0.00 |
| 44HoH, charitable giving above the cap (TX) | $6,228.00 | $6,228.00 | $0.00 |
| 45MFJ senior, charitable on top of the senior deductions (TX) | $8,624.00 | $8,624.00 | $0.00 |
| 46Single, taxable interest only, no state tax (TX) | $2,620.00 | $2,620.00 | $0.00 |
| 47Single, interest plus IRA in a high-tax state (CA) | $9,870.00 | $9,870.00 | $0.00 |
| 48MFJ seniors, interest lifts SS into taxability (TX) | $0.00 | $0.00 | $0.00 |
| 49MFJ seniors, interest with an IRA draw in a high-tax state (NY) | $7,916.00 | $7,916.00 | $0.00 |
These are the federal rows. State income tax is a different picture: the same report contains 12 rows where we differ from PolicyEngine on state tax, for the reasons set out below.
State coverage sweep (86)
A second suite runs a retiree through all 50 states and the District of Columbia, with and without a Roth conversion. We do not count these as federal test cases, because federal tax does not depend on where you live, so they are largely the same federal situation repeated with the state changed.
What they do catch is state-specific data leaking into the federal calculation, which is a real failure mode rather than a hypothetical one. Federal outputs are held to the same one-dollar tolerance in all of them, and they hold.
One adjustment worth naming, since you would find it if you read our harness. PolicyEngine automatically adds the Alaska Permanent Fund Dividend as taxable income. We do not, because we treat it as income you enter rather than an amount we assume on your behalf for the next thirty years. So the comparison removes it from PolicyEngine's inputs, and both engines then see the same income. If you live in Alaska, enter the dividend as income in your plan and it is taxed like any other income.
How the comparison works
- 01
One set of inputs, two engines
Each scenario defines ages, filing status, state, and every income source: wages, pensions, IRA distributions, Roth conversions, Social Security, capital gains, dividends, and interest. The identical figures go into both engines.
- 02
Compare every output, not just the bottom line
A total can be right for the wrong reasons. We diff the intermediate values too, so an error in taxable Social Security cannot hide behind an offsetting error in the standard deduction.
- 03
Fail on any gap over one dollar
Federal outputs must agree within a dollar. There is no averaging and no partial credit, and a single scenario over tolerance fails the run.
- 04
Pin the version and re-run
Tax rules change every year and PolicyEngine tracks them. The comparison is pinned to a specific PolicyEngine release so results stay reproducible, and re-run as tax years and parameters move.
Health insurance subsidies before Medicare
If you retire before 65 you buy health insurance on the ACA marketplace, and the premium tax credit is means-tested against your income. It is the rare piece of tax code that behaves like a cliff rather than a slope: in 2026 the enhanced subsidies have expired, so crossing 400% of the federal poverty line does not taper your credit, it removes it.
In the scenarios below, $116 of extra income costs $5,775 of subsidy. That is why we validate this separately rather than folding it into the federal numbers above.
The credit itself is simple arithmetic: the benchmark plan premium minus a share of your income. What is not simple is the share, which slides with income across banded thresholds, and the eligibility test at each end.
Both engines are given the same income and the same benchmark premium, so what is being checked is the subsidy rule, not our estimate of what a plan costs where you live.
Premium tax credit, all 15 scenarios
| Scenario | Income | % of poverty line | Retirement Figures | PolicyEngine | Difference |
|---|---|---|---|---|---|
| 01Just below the poverty line (not eligible) | $15,634.00 | 99.9% | $0.00 | $0.00 | $0.00 |
| 02Exactly at the poverty line | $15,650.00 | 100.0% | $11,671.35 | $11,671.35 | $0.00 |
| 03Just below the 133% band edge | $20,800.00 | 132.9% | $11,563.20 | $11,563.20 | $0.00 |
| 04Just above the 133% band edge | $20,900.00 | 133.5% | $11,343.74 | $11,343.74 | $0.00 |
| 05At 150% | $23,475.00 | 150.0% | $11,016.40 | $11,016.40 | $0.00 |
| 06Mid band, 150-200% | $27,000.00 | 172.5% | $10,582.39 | $10,582.39 | $0.00 |
| 07At 200% | $31,300.00 | 200.0% | $9,934.20 | $9,934.20 | $0.00 |
| 08Mid band, 250-300% | $43,000.00 | 274.8% | $8,057.07 | $8,057.07 | $0.00 |
| 09At 300%, where the rate flattens | $46,950.00 | 300.0% | $7,323.78 | $7,323.78 | $0.00 |
| 10Just below the cliff | $62,500.00 | 399.4% | $5,775.00 | $5,775.00 | $0.00 |
| 11Just above the cliff | $62,616.00 | 400.1% | $0.00 | $0.00 | $0.00 |
| 12Couple, mid band | $60,000.00 | 283.7% | $14,334.08 | $14,334.08 | $0.00 |
| 13Couple, just below the cliff | $84,500.00 | 399.5% | $11,583.80 | $11,583.80 | $0.00 |
| 14Couple, just above the cliff | $84,622.00 | 400.1% | $0.00 | $0.00 | $0.00 |
| 15Cheap benchmark plan, credit floors at zero | $46,950.00 | 300.0% | $0.00 | $0.00 | $0.00 |
Every figure above agrees to the cent. Both engines are handed the same income and the same benchmark premium, so what this checks is the subsidy rule itself: the poverty-line banding, the sliding contribution rate, and the eligibility test at each end. It does not check our estimate of what a benchmark plan costs where you live, which is a separate input you can edit.
What this does not cover
A validation page that only lists successes is marketing. Here is where the checking stops and what we know is imperfect.
State income tax is a mixed picture
Federal is the strong claim. On state tax our engine matches in most places, deliberately disagrees with PolicyEngine in a handful of states over whether a Roth conversion qualifies for a retirement income exclusion, and has known gaps in a few others where a state credit is not yet modeled. Those two things are not the same - one is a reading of the statute we stand behind, the other is work still to do - and a page that ran them together would mislead more than it informed. We have not published one yet for that reason.
Head of Household state coverage is partial
This section is about what we do NOT cover, so the federal half belongs above: Head of Household and Qualifying Surviving Spouse match PolicyEngine exactly, in every scenario, like everything else here. The state half is the gap. 20 states and the District of Columbia apply a Head of Household standard deduction, and everywhere else a Head of Household filer is currently treated as a single filer. Three states are left out knowingly rather than overlooked - Alabama, Maryland and Utah each express their Head of Household difference as a formula or a credit our state engine does not yet model, and encoding a single number for them would be worse than the current fallback. That errs toward over-stating state tax rather than under-stating it. Qualifying Surviving Spouse uses single-filer treatment at the state level everywhere. Married Filing Separately is not yet modeled at all.
Self-employment above the QBI income threshold
We model self-employment tax, the deduction for half of it, and the Section 199A qualified business income deduction, and all three match PolicyEngine exactly. Above the 199A income threshold - $201,750 for a single filer in 2026, $403,500 for a joint one - the deduction stops being a flat 20% and starts to depend on the W-2 wages the business pays, the basis of its property, and whether it is a specified service trade such as consulting or law. We do not ask for any of those, so rather than guess we phase the deduction to zero across the statutory range above the threshold. That is the treatment the law gives a specified service business, and it errs toward more tax rather than less. If your business pays substantial W-2 wages and you are above the threshold, you are likely entitled to more of the deduction than we credit you with.
IRMAA amounts are not compared
PolicyEngine models Medicare IRMAA surcharges only partially, with several open issues upstream, so its dollar figures are not a usable reference yet. We model IRMAA in the planner, but this validation does not confirm those amounts.
Check it yourself
None of this is worth much if you have to trust us about it. PolicyEngine is free and open source, so you can run the same comparison we do.
- Install PolicyEngine US. It is a public Python package, and any recent version with Roth conversion support will work. Ours is pinned above. The source lives at github.com/PolicyEngine/policyengine-us
- Use our scenario definitions. Every scenario on this page is a plain-text record of ages, incomes, and filing status, so you are checking the same cases we check rather than cases we picked afterward. The complete set is published as a plain YAML file: scenarios.yaml
- Read the full comparison. The complete report, every scenario and every output side by side with the deltas, is published exactly as our harness produced it. It includes the state rows where we differ, not only the federal rows where we match: results.txt
- Or just check one number. Run a single year of your own situation through both our calculators and PolicyEngine and compare the federal tax. That is the whole test, and it is the one we would run if we were you.
Found a case where we are wrong? Tell us and we will fix it, then add it to the suite so it stays fixed.
