Free retirement tax calculator — Roth conversions, RMDs, IRMAA, Social Security timing, ACA subsidies, HSA, backdoor Roth, TCJA sunset, Monte Carlo simulation, and more. No sign-up required.

📝 Blog
Setup
Projections
✨ Advisor Analysis
📅 Monthly ViewA month in retirement
🎲 DrawdownInstant what-if
🎲 Monte CarloProbability & odds
🌪 SensitivityWhat matters most
🎯 Goal-SeekSolve for the answer
⌛ SS Break-Even
🏠 Legacy & Heirs
📊 Computations
FAQ
About
⭐ Review RothHelper
🚀 New here? Try an example scenario — prefills every field with a realistic setup so you can see what the tool produces in 5 seconds.

Personal Information

%

Account Balances (Today)


Pre-Retirement Annual Contributions

Income & Social Security

Phased / Part-Time Retirement
Spending Phases

Social Security

Note: Benefits auto-adjusted for early/late claiming vs FRA using SSA's 8%/yr credit past FRA, ~6.67%/yr reduction before FRA.

Growth & Inflation Assumptions

Brackets, standard deduction, and SS thresholds are inflation-adjusted annually. Spending target also inflates.

ACA Marketplace Coverage

For early retirees between retirement and Medicare (age 65). Shows how Roth conversions affect your Premium Tax Credit and flags the 400% FPL cliff.

Qualified Charitable Distributions (QCD)

Available at age 70½+. Transfers directly from IRA to charity — excluded from AGI entirely, counts toward your RMD. Reduces IRMAA exposure, SS taxability, and ACA MAGI compared to withdraw-then-donate.

HSA (Health Savings Account)

Triple tax-advantaged: contributions reduce AGI, growth is tax-free, qualified medical withdrawals are tax-free. Contributions stop at retirement or age 65 (Medicare). After 65, non-medical withdrawals are taxed like a traditional IRA.

Run projections from the Setup tab to see results here.

How Projection Columns Are Calculated

Each row in the Projections table represents one calendar year. This tab explains the exact formula and meaning behind every column.

Year-by-Year Order of Operations
Processing sequence — applied in this order every year
1. GrowthAll account balances grow at the applicable return rate (pre-retirement rate while Person 1 is still working; post-retirement rate once Person 1 reaches their retirement age)
2. IncomeWork income, SS, and pension determined for the year
3. RMDRequired minimum distribution computed and forced out of Traditional IRA (age 73+)
4. ConversionVoluntary Traditional → Roth conversion applied per selected strategy
5. TaxFederal + state tax computed on AGI; IRMAA surcharge added if age 65+
6. SpendingSpending shortfall covered from accounts in priority order: cash → brokerage → Traditional → Roth

Taxes are paid before spending shortfalls are covered. Account priority for paying taxes and spending: after-tax cash first, then taxable brokerage, then Traditional IRA, then Roth.

Income Sources
Work Inc — earned income
Total household wages for the year. Each person earns their full income while they're still working, then drops to zero the year they hit their retirement age.

If you've turned on phased retirement, each person follows three stages instead: full income → reduced part-time income (starting at the semi-retire age) → zero (at the full retire age).
Show the math
Without phased retirement: workIncome = (age1 < p1retireAge ? p1Income : 0) + (age2 < p2retireAge ? p2Income : 0) With phased retirement enabled: P1 income = p1Income if age1 < p1SemiRetireAge = p1SemiIncome if p1SemiRetireAge ≤ age1 < p1RetireAge = 0 if age1 ≥ p1RetireAge (same for P2)

Combined household earned income each year. Without phased retirement, each person's income is binary (on/off at retirement age). With phased retirement enabled, each person has a three-phase income profile: full income → part-time income → zero.

The part-time phase is a prime Roth conversion window: income is below the full-work peak but not yet zero, so the gap between current AGI and the next bracket ceiling is often larger than at any other point. Conversions are enabled during semi-retirement.

SS — Social Security benefit
You enter the monthly benefit you'd get if you claimed at age 62 (from your SSA statement). The model works backward to figure out your Full Retirement Age (FRA) benefit, then adjusts up or down based on when you actually plan to claim:
  • Claim before FRA: the benefit shrinks by about 5/9% per month for the first three years before FRA, then 5/12% per month for any additional months earlier than that. Claiming exactly at 62 instead of 67 cuts the check by roughly 30%.
  • Claim after FRA: the benefit grows 8% per year of delay, up to age 70 (no further increase beyond that).
Survivor benefit: when one spouse dies, the surviving spouse (if they've already started claiming their own benefit) keeps whichever of the two benefits is larger — the deceased's smaller benefit simply disappears.
Show the math
Input: monthly benefit at age 62 (from SSA statement) Step 1 — derive FRA benefit: reductionAt62 = min(36, fraMonths) × 5/9% + max(0, fraMonths−36) × 5/12% atFRA = monthly62 / (1 − reductionAt62) Step 2 — adjust for actual claiming age: if claimAge < FRA: reduce by 5/9%/mo (first 36 mo before FRA) then 5/12%/mo (additional months before FRA) if claimAge > FRA: +8%/yr for each year delayed past FRA (max age 70) annualBenefit = atFRA × adjustmentFactor × 12 Survivor benefit (MFJ): if one spouse deceased and survivor ≥ own claiming age: survivorIncome = max(ownBenefit, deceasedBenefit) (per IRS survivor benefit rule)

Combined annual Social Security benefit for both people, adjusted for each person's claiming age relative to their Full Retirement Age. Claiming early permanently reduces the benefit; delaying past FRA increases it up to age 70. Benefits are included in the projection starting at the claiming age, but only once Person 1 has retired. Survivor benefit: when one spouse dies, the survivor (if they've reached their own claim age) inherits the larger of the two benefits — meaningful when the higher-earner spouse dies first.

The full SS amount is shown here as a cash-flow figure. Only 0–85% of it counts as taxable income — see Gross Inc for the taxable portion.

SS Break-Even Analysis
For each claiming age, the chart adds up every dollar of Social Security you'd ever receive — claiming early gives you more years of smaller checks; claiming late gives you fewer years of larger checks. The two lines cross at the "break-even age": the point where the cumulative totals are equal.

Example: if claiming at 62 pays $24,000/yr and claiming at 70 pays $40,000/yr, the cumulative totals meet at age 82. If you live past 82, delaying pays off; if not, claiming early gave you more total dollars.

For most people, the 62-vs-70 crossover lands between ages 80 and 84. The dashed line on the chart marks your life expectancy so you can see at a glance which side of the crossover you fall on.
Show the math
Cumulative benefit at age X for a given claiming age C: cumulative(X) = annualBenefit(C) × (X − C + 1) [for X ≥ C] Break-even crossover age between early claim E and late claim L: annualE × (X − E) = annualL × (X − L) X = (annualL × L − annualE × E) / (annualL − annualE) Example (E=62, L=70): annualE = $24,000/yr · annualL = $40,000/yr X = (40,000×70 − 24,000×62) / (40,000 − 24,000) = 82 A break-even before life expectancy (✓) means delaying pays off before death.

The break-even chart in the Advisor tab plots cumulative lifetime benefits for each claiming-age option (62, FRA, your chosen age, and 70). Where two lines cross is the break-even age — the point where the higher delayed benefit has recouped all the months of foregone earlier benefits. The dashed vertical line marks your life expectancy so you can see at a glance whether delaying reaches the crossover in time.

For most people, the 62-vs-70 crossover falls between ages 80–84. If you expect to live past that age, delaying to 70 yields more cumulative benefits. If your health suggests a shorter horizon, claiming earlier may be preferable. The Roth conversion interaction: delaying SS extends the low-income window before SS begins, creating more bracket headroom to convert at lower rates.

Pension — defined benefit income
Your pension is entered in today's dollars and grows with your assumed inflation rate each year — same as the spending number. It's taxed as ordinary income (with some state-specific exemptions).

When the pensioner dies (assumed Person 1): the surviving spouse continues to receive a percentage of the original pension based on the survivor election picked at retirement. Common choices: 100% (no reduction for survivor), 75%, 50%, or 0% (single-life — pension ends entirely at the pensioner's death).
Show the math
pension = pensionIncome × (1 + inflation)^(year − currentYear) Survivor reduction (MFJ only, pensioner assumed = P1): if !p1alive AND p2alive: pension *= pensionSurvivorPct if !p1alive AND !p2alive: pension = 0 pensionSurvivorPct elections: 100% / 75% / 50% / 0%

Annual pension, entered in today's dollars and inflation-adjusted from the current year forward — the same basis as the spending target. Fully taxable as ordinary income (with state-specific exemptions where applicable). When the pensioner (assumed Person 1) dies before the spouse, the pension is reduced to the elected survivor percentage — typically 100% (no reduction), 75%, 50% (historical default), or 0% (single-life annuity, ends at P1's death).

The survivor election is set when you retire and is irrevocable. Higher survivor percentages produce a lower initial pension payout in exchange for ongoing income to the survivor. Single-life (0%) pays the most while both are alive but drops to nothing at the pensioner's death — often disastrous for the surviving spouse. Simplification: the model assumes the pension belongs to P1. If P2 has the pension or both have pensions, sum them into one number and pick the dominant survivor election.

Portfolio Transactions
Spending Goal — annual cash need
Your spending goal entered in today's dollars, grown each year by your assumed inflation rate. So a $80,000/yr goal becomes $82,000 next year at 2.5% inflation, $84,050 the year after, and so on.
Show the math
retireSpending × (1 + inflation)^(year − currentYear)

Inflation-adjusted living expenses for the year (housing, food, non-premium healthcare, travel, etc.) — funded from all income sources and account drawdowns combined. It is not itself a taxable event; only the source of the funds determines taxability. Federal/state taxes, IRMAA surcharges, and ACA net premiums are added automatically on top of this number when the portfolio draw is computed — do not include them in the input.

Only the following count as AGI in the projection: work income, pension, RMDs, Roth conversions, and the taxable portion of Social Security. Additional Traditional IRA withdrawals used to fill a spending shortfall are not re-taxed by the engine — those dollars' tax liability was already captured via the RMD or conversion in earlier years. Roth withdrawals and taxable brokerage proceeds do not appear in AGI at all.

Monthly View — month-by-month breakdown
All the annual numbers from the projection — spending, taxes, IRMAA, ACA, conversion, QCD, income — are simply divided by 12 to give you the monthly view.

Account balances interpolate linearly between the year-start and year-end values: a balance that grows from $100k in January to $112k in December shows $101k in February, $102k in March, etc. The real-world balances would wobble with market returns mid-year, but for planning purposes the straight line gives a clean picture of where the money is each month.
Show the math
monthlyAmount = annualAmount ÷ 12 balanceAt(month_m of year_y) = startBal_y + (endBal_y − startBal_y) × (m ÷ 12) startBal_y = endBal_{y−1} (or initial balance for first year) Slider spans every retirement month from retireAge through end of plan.

A flat monthly view of any retirement month. Annual numbers from the projection (spending, taxes, IRMAA, ACA premium, Roth conversion, QCDs, income) are divided by 12 for the monthly figure. Account balances are linearly interpolated between year-start and year-end, so the "before" and "after" columns approximate what happens in that particular month.

Useful for visualizing cash flow rhythm: e.g., in conversion years you'll see the Trad balance dropping fast while Roth grows. The "Net portfolio draw this month" is positive when the portfolio is being spent down and can be negative during years where the portfolio grows faster than withdrawals.

Sensitivity Analysis — tornado chart
For every input in your plan, the tool re-runs the full projection twice: once with that input nudged slightly LOWER, once with it nudged HIGHER. The difference between the two outcomes tells you how much that input actually matters.

All the inputs are then sorted by impact size and shown as horizontal bars (longest = most impactful, at the top). The metric you're measuring can be final net worth, total lifetime taxes, or lifetime federal tax — your choice. Green bars mean the change helped, red mean it hurt.

Perturbation sizes are tuned per input (e.g., ages ±2 years, spending ±10%, return rates ±1%) so the comparison is apples-to-apples in terms of "small but plausible" variation.
Show the math
for each input variation: lowInputs = inputs with field perturbed down by delta highInputs = inputs with field perturbed up by delta lowVal = metric(runProjection(lowInputs, strategy)) highVal = metric(runProjection(highInputs, strategy)) range = |highVal − lowVal| sort variations by range, descending render two-sided horizontal bar chart metric ∈ {finalNW, lifetimeTaxes, lifetimeFedTax} color: green = moves metric in user's favor; red = against

Re-runs the projection with each input perturbed independently and ranks the inputs by impact on the chosen outcome. Perturbation sizes are tuned per input (e.g., ages ±2 years, spending ±10%, return rates ±1%). Bars on the left show what happens if the input is decreased; bars on the right show what happens if it's increased. Bigger bars mean the plan is more sensitive to that input.

The classic insight from a tornado chart: spending almost always wins. A 10% spending change usually moves the needle more than perfecting your Roth conversion strategy. Below that, return assumptions and Social Security timing tend to dominate. If an input is at the bottom of the chart with a tiny bar, you can stop fine-tuning it — it doesn't matter.

Goal-Seek — inverse solver
Normally the tool answers "given my inputs, what's the outcome?" Goal-Seek flips that around — you pick a desired outcome and it solves for the input that produces it.

Behind the scenes it uses a technique called bisection: try a high value of the input, try a low value, then keep halving the range based on which side fails. After about 30 iterations the answer converges to within ~$100. Each one of those iterations runs the full projection engine, which is why it takes a few seconds.
  • Max sustainable spending — keeps cranking up retirement spending until the portfolio just barely survives to the end of the plan.
  • Earliest retire age — tries earlier and earlier retirement dates until the plan still survives.
  • Max spending with legacy — same as max spending, but with the stricter requirement that you leave a chosen dollar amount to heirs.
Show the math
For each goal, bisect one input variable until the projection just barely meets the survival criterion: Max sustainable spending: bisect retireSpending, survival = (final NW > $1,000) Earliest retire age: bisect retireAge (integer), survival = (final NW > $1,000) at end of plan Max spending with legacy: bisect retireSpending, survival = (final NW ≥ targetLegacy) ~30 projections run per goal-seek (a few seconds).

Inverse solver. Instead of "given these inputs, what's the outcome?", Goal-Seek answers "given a desired outcome, what's the input?" Useful for the most common retirement questions: "How much can I sustainably spend?" / "When can I afford to retire?" / "How much can I spend while still leaving X to heirs?" Uses bisection over a single input variable while holding the rest fixed.

All your OTHER inputs (return assumptions, SS timing, etc.) stay as you've set them in Setup. So Goal-Seek's answer is conditional on those choices — change them and the answer moves. Pair with the Sensitivity tab to see how robust each answer is to input uncertainty. After each run, a balance chart visualizes the year-by-year projection under the goal-seeked answer, overlaid with your baseline plan for direct comparison.

Spending Phases — go-go / slow-go / no-go
An optional model of how retirement spending changes over time. Most retirees spend more in their early "active" years and less as mobility and discretionary activity decline.
  • Go-go years (retireAge through your chosen boost-until age, typically 75): the baseline spending plus an extra "boost" amount for travel, hobbies, and bucket-list items.
  • Slow-go years (between boost-until and late-reduction ages): just the baseline.
  • No-go years (typically age 80+): baseline reduced by the late-reduction percentage (default 75% — i.e., a 25% spending cut).
All three phases inflate from today's dollars at the same rate as the baseline. The Spending Goal column in the projection table reflects whichever phase each year falls into.
Show the math
go-go (retireAge ≤ age ≤ boostUntilAge): spendingNeed = baseSpend + earlyBoostAmt × inflFactor slow-go (boostUntilAge < age < lateReductionAge): spendingNeed = baseSpend no-go (age ≥ lateReductionAge): spendingNeed = baseSpend × lateReductionPct baseSpend = retireSpending × inflFactor

Optional three-phase spending model. The early boost is an additional annual amount (in today's dollars, inflation-adjusted) layered on top of the baseline for active early-retirement years — travel, hobbies, bucket-list spending. The middle slow-go phase uses baseline spending. The no-go phase applies a percentage reduction to baseline to model reduced mobility and discretionary activity in later life. All phases inflate from today's dollars at the same rate as the baseline.

The Spending Goal column in the projection table shows the phase-adjusted amount each year, so you can see exactly where each phase takes effect. Phases only apply once retired — pre-retirement and semi-retirement years always use the baseline.

Early-Withdrawal Penalty — Traditional/401(k) pre-60
If the engine has to pull money out of your Traditional IRA or 401(k) before age 60 (the model's stand-in for the IRS 59½ rule), it adds a 10% penalty on top of the regular income tax on that withdrawal.

You can turn this off via the Rule of 55 checkbox on the Setup tab — that's the IRS exception that lets people who leave their job in or after the year they turn 55 take penalty-free distributions from that employer's 401(k). It doesn't apply to rollover IRAs, so leave the checkbox off if most of your pre-tax money is in an IRA.
Show the math
earlyPenalty = withdrawTrad × 10% applies when age < 60 waived when ruleOf55Enabled AND age ≥ 55 ruleOf55Enabled: Setup-tab checkbox ↳ Real-world IRS Rule of 55 applies only to 401(k)s after separation from the plan sponsor at age 55+

The IRS imposes a 10% additional tax on Traditional IRA and 401(k) distributions taken before age 59½. The tool applies this when the engine pulls from the Trad bucket before age 60 (approximating 59½ with annual granularity). The penalty is paid from the same waterfall (after-tax → taxable → trad → roth) and shows as a separate line on the Monthly View outflows card.

The Rule of 55 exception lets 401(k) holders who separate from their employer in or after the year they turn 55 take penalty-free distributions from that employer's plan — not IRAs. If your Traditional balance is mostly a rollover IRA, leave the checkbox off. Other real-world exceptions (SEPP/72(t), disability, large medical expenses, first-time homebuyer up to $10k) are not modeled here.

RMD — required minimum distribution
Starting at age 73, the IRS forces you to withdraw a minimum amount from your Traditional IRA / 401(k) each year, calculated from a published divisor table. The divisor shrinks every year, so the percentage forced out grows as you age:
  • Age 73 → divide balance by 26.5 (≈3.8% of balance)
  • Age 80 → divide by 20.2 (≈5.0%)
  • Age 90 → divide by 12.2 (≈8.2%)
The full RMD is taxed as ordinary income whether you need the money or not. This is why pre-RMD Roth conversions matter so much — every dollar converted now permanently shrinks the future RMD base.
Show the math
RMD = traditionalBalance ÷ RMD_TABLE[age] IRS Uniform Lifetime Table; age 73+ (SECURE 2.0) RMD_TABLE[73] = 26.5, [80] = 20.2, [90] = 12.2

Forced annual withdrawal from Traditional IRA/401k at age 73 and beyond. Taxed as ordinary income whether you need the money or not. The divisor decreases with age, forcing larger distributions over time.

RMDs are why Roth conversions before 73 matter: every dollar converted now reduces the future RMD base, shrinking forced taxable income for the rest of your life.

QCD — Qualified Charitable Distribution
Starting at age 70½, you can transfer up to $108,000/yr (2025 limit, indexed annually) directly from your IRA to a qualified charity. The money never touches your AGI — better than a deduction, because it shields you from all the income-driven cascades downstream (Social Security taxability, IRMAA tier bumps, ACA MAGI thresholds, NIIT).

Even better: QCDs count toward satisfying your RMD. So if your RMD is $40k and you do $30k in QCDs, only the remaining $10k is forced into your taxable income that year.
Show the math
Eligible age: 70½+ (modeled as age 70+) Annual limit: $108,000 (2025, indexed for inflation) qcd = min(qcdAmount × inflFactor, $108,000 × inflFactor, tradBalance) RMD obligation = getRMD(tradBalance, age) ← before QCD Taxable RMD = max(0, RMD obligation − qcd) Taxable income = workIncome + pension + taxable RMD + conversion ← QCD is excluded entirely; does NOT appear in AGI

A QCD transfers IRA funds directly to a qualified charity, bypassing your income entirely. Unlike a cash donation deduction, a QCD reduces your AGI dollar-for-dollar — which lowers SS taxability, defers or eliminates IRMAA tier jumps, and reduces ACA MAGI. It also counts toward your RMD obligation, so only the remaining balance is forced out as taxable income.

For a retiree in the 22% bracket with $30K/yr in QCDs that fully satisfy their RMD, the savings vs. a cash donation include: $6,600 in avoided federal tax, reduced SS taxability, and potential IRMAA tier drop — all without needing to itemize.

HSA — Health Savings Account
The HSA is the only account with a triple tax advantage:
  1. Tax-deductible going in — contributions reduce your AGI dollar-for-dollar, which also lowers SS taxability and ACA MAGI.
  2. Tax-free growth — same return rate as your other investments, but the IRS never taxes the gains.
  3. Tax-free coming out — when used for qualified medical expenses, withdrawals are completely excluded from income.
Contribution rules: only allowed while working and under 65 (Medicare enrollment ends eligibility). 2025 limits are $4,300 self-only or $8,550 family, plus $1,000 catch-up at age 55+.

In retirement, each dollar of HSA medical withdrawal replaces a dollar that would otherwise come from a taxable account — so it shrinks your AGI twice: once by avoiding the taxable draw, and once by being tax-free itself. After 65, non-medical withdrawals are allowed but taxed as ordinary income (like a Trad IRA).
Show the math
Triple tax advantage: 1. Contributions: above-the-line AGI deduction (pre-tax) 2. Growth: tax-free at portfolio return rate 3. Qualified medical withdrawals: tax-free (excluded from AGI) Contribution window: !isRetired AND age < 65 (Medicare enrollment ends eligibility) 2025 limits: $4,300 self-only · $8,550 family · +$1,000 catch-up (age 55+) ordinaryBeforeSS = workIncome + pension + RMD + conversion − hsaContribYr Medical withdrawal: min(hsaMedical × inflFactor, hsaBalance) → excluded from AGI; reduces portfolio draw needed each retirement year After age 65: non-medical withdrawals taxed as ordinary income (like Trad IRA)

The HSA is the only account with a triple tax advantage. During accumulation, contributions reduce your AGI directly (lowering federal tax, SS taxability, and ACA MAGI). The balance grows tax-free. In retirement, qualified medical withdrawals are completely tax-free — effectively making the HSA the most tax-efficient source for healthcare costs. Each dollar of HSA medical withdrawal replaces a dollar that would otherwise come from a taxable portfolio draw, reducing both AGI and portfolio depletion.

The optimal HSA strategy: contribute the maximum while working, invest the HSA aggressively, pay all medical costs out-of-pocket during accumulation (saving receipts), and reimburse yourself in retirement. This maximizes decades of tax-free compounding before the first withdrawal.

Conversion — Traditional → Roth (bracket-fill strategies)
A Roth conversion moves money from your pre-tax Traditional IRA to your tax-free Roth — and you owe ordinary income tax on every dollar converted that year, at whatever marginal bracket you land in.

The "Fill the 12% bracket" / "Fill the 22%" / "Fill the 24%" strategies size the conversion to land your taxable income exactly at the top of that bracket — no waste, no overshoot. The solver has to account for the SS tax torpedo: adding $1 of conversion can also make $0.50 or $0.85 of Social Security newly taxable, so a naive "room left in the bracket" calculation overshoots. Bisection finds the exact amount that hits the boundary after SS effects.

Conversions only happen between your retirement age and age 72 — once RMDs start at 73, the engine stops converting (RMDs already fill the lower brackets).
Show the math
baseOrdinary = workIncome + pension + RMD − HSAcontrib Strategy "No Conversion": conversion = 0 Strategy "Fill 12% / 22% / 24%": solve for conversion c such that: (baseOrdinary + c) + SSTaxable(baseOrdinary + c, SS) − stdDed = bracketTop(rate) via bisection (SS taxability is piecewise-linear in c, so monotone in c) conversion = clamp(0, c, traditionalBalance) Window: retirement age through age 72 (disabled once RMDs start at 73)

Voluntary transfer from pre-tax Traditional IRA to tax-free Roth. Taxed as ordinary income in the year converted. The bracket-fill solver targets the *post-SS* taxable income — adding $1 of conversion can also pull $0.50 or $0.85 of Social Security into AGI (the "tax torpedo"), so a naive room formula overshoots the bracket. Bisection finds the exact conversion that lands at the boundary. All five strategies are run simultaneously in the Projections tab.

Converting exactly to a bracket boundary avoids pushing dollars into a higher rate. The torpedo-aware solver is most important for the 12% strategy when Social Security is active — that's where the naive formula most commonly overshoots into the 22% bracket.

Optimized Conversion — maximize after-tax net worth
The other strategies pick a fixed target (top of the 12%/22%/24% bracket). The Optimizer instead searches for the schedule of yearly conversions that leaves you with the most after-tax wealth at the end of the plan. "After-tax" means it values your Roth, brokerage, cash and HSA at face value but discounts the remaining Traditional balance for the income tax still owed on it (using your heirs'/terminal tax rate from the Legacy tab). That avoids rewarding a strategy just for hoarding pre-tax dollars whose tax bill hasn't come due yet.

How it searches: every candidate is scored with the full projection engine — the exact same year-by-year model used everywhere else, so LTCG, NIIT, ACA subsidies/cliffs, the 2-year IRMAA lookback, the withdrawal waterfall, survivor transitions and spending phases all count. It uses coordinate descent: it tunes one year's conversion at a time (coarse grid + local refinement) while holding the others fixed, then sweeps all the conversion years repeatedly until the schedule stops changing. Each amount is rounded to the nearest $100.

Because it optimizes for after-tax net worth, the Optimizer often converts more aggressively than the bracket strategies and may show a higher lifetime tax bill — the larger tax-free Roth balance and higher ending net worth are the payoff. It can also return $0 in years where any conversion would reduce after-tax wealth.
Show the algorithm
Objective (maximize): afterTaxNW = Roth + Taxable + Cash + HSA + Traditional × (1 − heirTaxRate) // residual pre-tax discounted Score a candidate schedule: score(schedule) = afterTaxNW( runProjection(inputs, schedule).lastRow ) // full engine — LTCG, NIIT, ACA, 2-yr IRMAA lookback, waterfall, survivor, etc. Coordinate descent: schedule = { each conversion-window year (retire…72) → 0 } repeat up to 5 passes: for each year Y in the window: schedule[Y] = argmax score(schedule) // grid(13) over 0…min(trad,$1M), // then 8-step ternary refine stop early once no year moves more than $500 A full runProjection is ~0.05 ms, so the whole search is tens of milliseconds — it runs inline, no background worker needed.

Instead of targeting a fixed bracket ceiling, the optimizer finds the per-year conversion schedule that maximizes after-tax net worth at the end of your plan, scoring every candidate with the full projection engine (LTCG, NIIT, ACA, the 2-year IRMAA lookback, withdrawal order, and survivor transitions all included).

Optimizing for after-tax wealth, it may convert aggressively and show a higher lifetime tax bill than a bracket-fill strategy — the bigger tax-free Roth balance is the trade-off. It can return $0 in years where any conversion would reduce after-tax net worth.

Tax Calculations
Gross Inc (AGI) — adjusted gross income
AGI is the taxable ordinary income for the year — every source the IRS counts, in one number. The model builds it in two steps:
  1. Add up your ordinary income sources: work income (if still earning), pension, RMD, and any Roth conversion you do that year.
  2. Compute the taxable portion of Social Security (0% to 85% — see the SS Taxability card) and add it on top.
What's not in AGI: Roth withdrawals (tax-free), the non-taxable portion of SS, the basis portion of brokerage withdrawals, and HSA medical withdrawals.
Show the math
ordinaryBase = workIncome + pension + RMD + conversion provisional = ordinaryBase + 0.5 × totalSS ssTaxable = calcSSTaxable(provisional, totalSS, filingStatus) AGI = ordinaryBase + ssTaxable

Taxable ordinary income — the base used for all federal tax, effective rate, and marginal rate calculations. Excludes the non-taxable portion of SS, Roth withdrawals, and taxable brokerage proceeds (which are long-term capital gains, not ordinary income).

Why AGI < SS + Spending Goal: The SS column shows your full benefit but only 0–85% is taxable. The Spending Goal is total cash needed, which is funded partly by tax-free Roth withdrawals. AGI only counts the sources that are taxable ordinary income.

SS Taxability — how much of Social Security is taxable
The IRS uses a number called provisional income to decide what portion of your Social Security check counts as taxable income. It's your AGI without the SS benefit, plus half of the SS benefit.

Then it walks through three bands:
  1. At or below $32,000 (MFJ) / $25,000 (single): none of your Social Security is taxable — the entire benefit is tax-free that year.
  2. Between $32,000 and $44,000 (MFJ) — or $25,000 to $34,000 (single): 50% of every dollar of provisional income above the lower threshold becomes taxable SS, capped at half your benefit.
  3. Above $44,000 (MFJ) / $34,000 (single): the percentage climbs sharply, up to a maximum of 85% of your Social Security being taxable.
The catch: these dollar thresholds were written into law in 1983 and 1993 and have never been adjusted for inflation. A $44,000 income in 1993 would be roughly $96,000 today — but the threshold is still $44,000. Every year, more retirees of average means get pulled into the higher tier without any change in their real spending power.
Show the math
provisional income = AGI (excl. SS) + 0.5 × totalSS MFJ thresholds: Single thresholds: 0% taxable if provisional ≤ $32,000 ≤ $25,000 50% formula if $32,000–$44,000 $25,000–$34,000 85% formula if provisional > $44,000 > $34,000 ssTaxable = min(0.85 × totalSS, max formula result) Thresholds are NOT inflation-indexed — real value erodes every year

The IRS uses a two-tier formula to determine how much of your SS benefit is includable in ordinary income. At lower incomes, none is taxable; at higher incomes, up to 85% is. These dollar thresholds have never been updated for inflation since they were set in the 1980s/1993, so more retirees fall into taxability each year.

Keeping provisional income below $32,000 (MFJ) or $25,000 (Single) shelters SS from tax entirely. Roth conversions that push provisional income above these thresholds create a "tax torpedo" — each extra dollar of conversion also makes more SS taxable, effectively raising your marginal rate above the stated bracket rate.

Fed Tax — federal income tax
First subtract the standard deduction from AGI to get your taxable income — that's $30,000 (MFJ) / $15,000 (single) / $22,500 (HoH) in 2025, inflating forward each year.

Then the IRS applies progressive brackets: the first chunk of income is taxed at 10%, the next at 12%, then 22%, 24%, 32%, 35%, and 37%. Each rate applies only to the dollars inside that bracket, not to all your income. So earning $1 more in the 22% bracket doesn't suddenly tax all your income at 22% — only that one dollar.
Show the math
taxableIncome = max(0, AGI − standardDeduction) fedTax = Σ rate × income_in_bracket Standard deduction (2025 base, inflation-adjusted forward): MFJ: $30,000 Single: $15,000 HoH: $22,500

Federal income tax computed using current TCJA brackets (or pre-TCJA brackets if the sunset scenario is selected). Progressive bracket calculation — the marginal rate applies only to the income within that bracket, not to all income.

Does not include IRMAA Medicare surcharges, which are shown separately. State tax is computed as a flat rate on AGI and included in Effective Rate but not this column.

Eff Rate — effective tax rate
The blended average rate you pay across all your income — total federal + state tax divided by AGI. Always lower than your marginal rate because the lower brackets get filled first at their lower rates. If your AGI is $100,000 and your total tax is $12,000, your effective rate is 12%.
Show the math
effectiveRate = (fedTax + stateTax) / AGI

The blended average rate paid across all income — total taxes divided by AGI. Always lower than the marginal rate because lower brackets are filled first. Includes both federal and state income tax.

The effective rate is the best single number for comparing tax burden across years and strategies. A conversion strategy that minimizes lifetime effective rate is generally optimal.

Marginal — marginal tax rate
The rate the IRS would charge on the next dollar you earned — i.e., whichever bracket you're currently sitting in. This is the most important number when sizing a Roth conversion: every additional dollar you convert is taxed at this rate.

Watch out: the marginal column shows the stated bracket rate, but the true marginal rate can be higher when Social Security taxability is also climbing — every dollar of conversion can pull $0.50 or $0.85 of SS into taxable income too, creating an effective rate above the bracket label.
Show the math
marginal = bracket rate at which the last dollar of taxableIncome is taxed

The rate that applies to the next dollar of income. Determines how much additional income (from conversions, part-time work, or windfalls) will cost in taxes. Jumps at bracket boundaries.

Bracket-fill strategies use this to decide how much to convert: they fill income up to (but not into) the next bracket. Actual effective marginal rate can exceed the stated bracket rate when SS taxability creates a "phantom" rate jump.

LTCG — Long-Term Capital Gains tax
When the engine sells appreciated brokerage to cover spending, the realized gain is taxed at capital gains rates, not ordinary income rates:
  • 0% bracket — taxable income up to $96,700 MFJ / $48,350 single (2025, indexed annually). This is the "tax-free harvest" zone.
  • 15% bracket — up to $600,050 MFJ / $533,400 single.
  • 20% bracket — above that.
By default the engine looks up each year's bracket based on that year's ordinary income — so a low-income year may pay 0% LTCG while a Roth-conversion year may push LTCG into the 15% bracket.

Key interaction: LTCG "stacks on top" of your ordinary income. If a Roth conversion fills the 12% ordinary bracket, any LTCG that would have been in the 0% zone now gets pushed up into 15%. That's the hidden cost of aggressive conversions when you also have appreciated brokerage to sell.
Show the math
2025 federal LTCG brackets (inflate at BRACKET_INF_RATE): MFJ: 0% up to $96,700 taxable income 15% up to $600,050 20% above Single: 0% up to $48,350 15% up to $533,400 20% above ltcgRate per year = getLTCGRate(taxableIncome_year, filing, year) capGainsTax = realizedGain × ltcgRate LTCG sits ON TOP of ordinary income in the tax stack — pushing ordinary income up can stack LTCG out of the 0% zone.

Federal capital gains tax on realized gains from taxable brokerage withdrawals. Auto mode (default): the engine looks up each year's bracket based on that year's taxable income — so a low-income year may pay 0% while a Roth-conversion year may push LTCG into the 15% bracket. Override available in Setup if you want to model a specific flat rate.

The 0% LTCG threshold is intentionally aligned with the top of the 12% federal ordinary bracket. So "fill the 12% bracket" with a Roth conversion will push any subsequent LTCG out of the 0% zone — a hidden cost of aggressive conversions for retirees with significant appreciated brokerage.

NIIT — Net Investment Income Tax
A 3.8% surtax on top of regular capital gains tax for households with higher AGI. The threshold is $250,000 (MFJ) or $200,000 (single).

The catch: like the SS taxability thresholds, NIIT thresholds were set in 2013 and have never been adjusted for inflation. What was a "high-income" tax in 2013 now hits middle-class retirees doing routine Roth conversions or selling appreciated brokerage. A 15% LTCG bill becomes 18.8% when NIIT applies on top.
Show the math
NIIT = 3.8% × min(investmentIncome, MAGI − threshold) AGI thresholds (frozen since 2013, NEVER inflated): MFJ: $250,000 Single: $200,000 Investment income (this tool): realized brokerage capital gains (dividends/interest not modeled separately)

3.8% surtax on investment income for higher-AGI households. Applies on top of regular LTCG. Because the thresholds are frozen (set in 2013 and never inflation-adjusted), more retirees hit NIIT every year as nominal incomes drift up.

NIIT can make a "15% LTCG" feel like 18.8% in practice. For HNW households doing large brokerage withdrawals or Roth conversions, this adds a meaningful tax cost the simpler "0%/15%/20%" rate framing hides.

State Retirement Income Exemptions
Instead of applying your state tax rate flat to all your AGI, the engine respects how each state actually treats retirement income. There are four buckets:
  • Full retirement exemption (IL, MS, PA, IA, MI) — these states tax $0 on Social Security, Traditional IRA/401(k) withdrawals, and pensions. A retiree in any of these states pays no state tax on retirement income at all.
  • Per-person retirement exemption — NY exempts $20k/person, KY $31k, GA $65k at age 65+, VA $12k, DE $12.5k, MD $36k, LA $6k. Income above the exemption is taxed normally.
  • States that tax Social Security at the state level — CO, CT, MN, MT, NM, RI, UT, VT, WV. (Most states exempt SS even if they tax other retirement income.)
  • Default (37+ states) — SS exempt, but Trad IRA / pension / RMD all taxed at the standard rate.
The state code is auto-detected from the dropdown on Setup. If you enter a custom rate without picking a state, the default rule applies.
Show the math
stateTaxableIncome = AGI − (SS taxable portion, if state exempts SS) − (qualified retirement income, if state exempts it) − (per-person retirement exemption, capped, if applicable) stateTax = max(0, stateTaxableIncome) × stateRate Treatment groups: Full retirement exempt (SS + IRA/401k + pension): IL, MS, PA, IA, MI Per-person retirement exemption: NY ($20k), KY ($31k), GA ($65k @ 65+), VA ($12k), DE ($12.5k), MD ($36k), LA ($6k) SS taxed at state level: CO, CT, MN, MT, NM, RI, UT, VT, WV Default (37+ states): SS exempt, retirement income taxed

State income tax now respects each state's actual retirement-income treatment instead of applying the user's flat rate uniformly to all AGI. SS exemption (the default for ~41 states), full retirement-income exemption (IL/MS/PA/IA/MI), and per-person dollar exemptions (NY/KY/GA/VA/DE/MD/LA) are all modeled. State auto-detected from the dropdown.

For users in IL, MS, or PA with most of their income from Trad IRA/401k or pensions, this means $0 state tax in retirement years — a material difference vs. the previous flat-rate model. Simplifications: age-tiered exemptions (e.g., GA's $35k at 62 → $65k at 65) collapsed to a single representative number; income-tied SS taxability in CT/MN treated as full SS tax; phase-in states (MI, WV) shown at their fully-phased-in 2026+ status. If you enter a custom state rate without picking from the dropdown, the default rule applies (SS exempt, retirement income taxed).

Multi-State Retirement — planned move
If you've enabled a planned move on Setup, the engine switches your state of residence — and all the associated tax rules — at the age you specified. Years before the move use the original state; years after use the destination state, including its retirement-income exemption rules and tax rate.

Community-property impact: when one spouse dies, the surviving spouse gets a "step-up in basis" on jointly-held brokerage (eliminating embedded capital gains). In community-property states (CA, TX, NV, etc.) the survivor gets a full step-up on the entire account; in common-law states only on the deceased's half. The engine uses your state at the time of death, not your original state — so a couple who moves from CA to NV before one spouse dies LOSES the full step-up they would have had if they'd stayed in CA.
Show the math
effStateCode = (moveEnabled AND age1 ≥ moveAge) ? moveStateCode : stateCode effStateRate = same pattern with moveStateTaxRate / stateTaxRate stateTax = calcStateTax(agi, ssTaxable, qrIncome, effStateCode, filing, effStateRate) Step-up community-property status: isCP = isCommunityPropertyState(effStateCode_at_death_year) // i.e., uses CURRENT state, not original

Many retirees move to a lower-tax state at retirement (CA → NV, NY → FL, etc.). When enabled, the engine switches the household's state code and tax rate at the move age. The destination state's retirement-income exemption rules, ordinary tax rate, and community-property step-up treatment all apply automatically from that age forward. Pre-move years continue to use the original state.

A CA-to-NV move at 65 typically saves $50k–$200k in lifetime state tax for a HNW retiree. A CA-to-PA move can be even larger when most of the household's income is from pensions or Trad IRA withdrawals (PA fully exempts retirement income). The basis step-up at first spouse's death follows the household's state of residence AT THE TIME OF DEATH — so couples in community-property states (CA, TX, etc.) who move to common-law states before one dies LOSE the full step-up. Simplifications: model supports one move at one age; doesn't model partial-year residency, source-state exit taxes, or moves back-and-forth.

Medicare Surcharges (IRMAA)
IRMAA Tier — Medicare income tier
Once you're on Medicare (age 65+), your monthly Part B and Part D premiums get a surcharge added if your income is above a threshold. The IRS calls this IRMAA (Income-Related Monthly Adjustment Amount). It's a hard cliff: one dollar over the threshold and the surcharge fires for the entire year.

2025 MFJ thresholds (per person on Medicare; surcharges inflate forward):
  • Up to $212k — no surcharge
  • $212k – $266k → +$1,052/person/yr (Tier 1)
  • $266k – $334k → +$2,644/person/yr (Tier 2)
  • $334k – $400k → +$4,236/person/yr (Tier 3)
  • $400k – $750k → +$5,827/person/yr (Tier 4)
  • Above $750k → +$6,357/person/yr (Tier 5)
Single thresholds are half of MFJ for Tiers 0-3 ($106k / $133k / $167k / $200k), then $500k for Tier 4. The Tier 4 caps ($500k single / $750k MFJ) are frozen by statute and don't index with inflation.

Two important quirks:
  1. 2-year lookback. Your 2027 IRMAA is based on your 2025 MAGI. The damage from a conversion you do today doesn't show up on your Medicare bill until 2 years later — and by then it's locked in.
  2. MAGI includes realized capital gains. The IRS definition of MAGI is AGI + tax-exempt interest, and capital gains land on the AGI line. So harvesting brokerage gains can trigger IRMAA two years out, exactly like a Roth conversion can.
Show the math
MAGI = AGI from 2 years prior (real IRMAA look-back) AGI here = ordinary income + taxable SS + realized LTCG Year 1–2: uses pre-projection household income as a proxy MFJ tiers (2025 actual, inflation-adjusted forward): Tier 0: MAGI ≤ $212,000 → standard premium Tier 1: $212k – $266k → +$1,052/person/yr Tier 2: $266k – $334k → +$2,644/person/yr Tier 3: $334k – $400k → +$4,236/person/yr Tier 4: $400k – $750k → +$5,827/person/yr Tier 5: > $750k → +$6,357/person/yr Single tiers (2025 actual): Tier 0: MAGI ≤ $106,000 Tier 1: $106k – $133k · Tier 2: $133k – $167k Tier 3: $167k – $200k · Tier 4: $200k – $500k Tier 5: > $500k

Medicare Part B and Part D premiums increase sharply at income thresholds. These surcharges apply per person on Medicare, starting at age 65. IRMAA is based on income from 2 years prior — this tool implements the real look-back lag. For the first two projection years, pre-projection household work income is used as a proxy. The MAGI used here matches the IRS definition: AGI (ordinary income, taxable SS, and realized capital gains) plus tax-exempt interest.

The IRMAA cliff effect means a single dollar of additional income can trigger thousands of dollars in extra premiums. This is especially relevant when sizing Roth conversions and when harvesting capital gains — both add to MAGI and can push you into the next tier two years later. Tier 4 caps ($500k single / $750k MFJ) are statutorily fixed and do not index with inflation; the lower tiers do.

IRMAA Surcharge — annual surcharge amount
Take the dollar surcharge for your tier (from the table above), inflate it forward to the current year, and multiply by the number of people in your household on Medicare. So a couple at Tier 2 pays $2,644 × 2 = $5,288/yr in extra premiums; if only one spouse is on Medicare, it's $2,644/yr.

The full surcharge gets paid in cash out of your accounts, on top of all your regular taxes. The model includes it in the cashflow waterfall and folds it into the effective tax rate.
Show the math
surcharge = IRMAA_2025[tier] × personsOnMedicare × (1 + inflation)^(year − 2025) personsOnMedicare = count of people age 65+

Dollar amount of extra Medicare Part B/D premiums for the year, inflation-adjusted from the 2025 base rates. Applied for each person enrolled in Medicare (i.e., age 65+). Added to total tax for effective rate calculation and paid from accounts before spending.

At Tier 2 with two spouses on Medicare, the annual IRMAA surcharge is $5,288 — entirely avoidable by keeping AGI below the Tier 2 threshold. This is a powerful argument for completing most Roth conversions before 65.

End-of-Year Account Balances
Trad IRA — Traditional IRA / 401k balance
Year-end balance of your pre-tax retirement accounts. Each year it grows by the return rate, then has RMDs and Roth conversions subtracted, plus contributions added (while you're still working), minus any withdrawals used to cover taxes or spending.

Important: every dollar shown here carries an embedded future tax liability — when you eventually pull it out, it's taxed as ordinary income. So a $1M Traditional balance isn't really $1M of spending power; at a 22% effective rate it's closer to $780k.
Show the math
tradEnd = tradStart × (1 + returnRate) − RMD − conversion + contributions (pre-retirement) − withdrawals used for taxes/spending returnRate = preReturn before retirement, postReturn after

Pre-tax retirement account balance at year end. Every dollar here carries an embedded future tax liability — it will be taxable ordinary income when withdrawn. Subject to RMDs at age 73.

A large Traditional balance heading into retirement is the primary motivation for Roth conversions. Reducing it lowers future RMDs, reduces SS taxability, and may prevent IRMAA surcharges.

Roth — Roth IRA / Roth 401k balance
Year-end balance of your Roth accounts. Each year it grows by the return rate, gains money from any Roth conversions or contributions, and loses money only when the engine has exhausted every other account.

Unlike the Traditional balance, this number is the true after-tax value — no embedded future tax liability. Qualified withdrawals are completely tax-free, don't count toward Social Security taxability, don't count toward IRMAA MAGI, and there are no required minimum distributions. Of all four account types, Roth is the most tax-flexible.
Show the math
rothEnd = rothStart × (1 + returnRate) + conversions received + Roth contributions (pre-retirement) − withdrawals (tax-free in retirement) returnRate = preReturn before retirement, postReturn after

After-tax retirement account balance. Qualified withdrawals are completely tax-free and do not count as income for SS taxability or IRMAA. No required minimum distributions. The most valuable account type from a tax-flexibility standpoint.

Unlike the Traditional IRA balance, the Roth balance shown is the true after-tax value — no embedded tax liability.

Brokerage — taxable brokerage account
Your taxable investment account, modeled as buy-and-hold — annual gains aren't taxed each year, only when you actually sell. At the death of the last surviving spouse, heirs get a step-up in basis (embedded gains disappear for estate purposes).

When the engine sells brokerage to cover spending, only the gain portion (sale value minus basis) is taxed, at LTCG rates. The basis comes out tax-free.
Show the math
brokerageEnd = brokerageStart × (1 + returnRate) − withdrawals used for taxes/spending + contributions (pre-retirement) returnRate = preReturn before retirement, postReturn after

Taxable investment account. Modeled as buy-and-hold — annual gains are not taxed each year, only when withdrawn. At death, a step-up in basis is assumed, eliminating embedded capital gains for heirs.

Taxable brokerage withdrawals trigger LTCG only on the gain portion (not the basis) — and only the gain enters AGI, taxed at 0% / 15% / 20% depending on bracket. Because the gain is in AGI, it does contribute to IRMAA MAGI and ACA MAGI, and via the provisional-income formula it can also increase SS taxability. The 0% LTCG bracket (taxable income ≤ $48,350 single / $96,700 MFJ in 2025) is the sweet spot where harvesting gains has no federal tax cost — though IRMAA / SS torpedo effects can still apply.

Cash — after-tax liquid savings
Your after-tax cash buffer — checking, savings, money market. The engine pulls from this account first to pay tax bills, IRMAA, and spending shortfalls, before touching the brokerage or retirement accounts.

The model assumes no growth on this balance (or you can roll cash growth into the brokerage line). The strategic value of maintaining a cash buffer: it lets you avoid forced Trad IRA withdrawals in high-expense years, which would push you into higher brackets at exactly the wrong time.
Show the math
cashEnd = cashStart − taxes paid − IRMAA paid − spending shortfall covered (used before brokerage or IRA)

After-tax checking, savings, or money market balance. Used first to cover tax bills and spending shortfalls before drawing from investment accounts. No growth assumed (or growth can be included in the brokerage balance).

Maintaining a cash buffer avoids forced Traditional IRA withdrawals in high-expense years, which can push income into higher brackets.

Total NW — total net worth
The sum of all four account balances at year end. This is the gross portfolio value — it doesn't subtract the embedded tax liability sitting inside the Traditional IRA.

Your true after-tax net worth is lower: subtract roughly tradBalance × effective tax rate. This is why strategies that grow the Roth at the expense of Traditional can grow your real after-tax wealth even when the Total NW number looks similar across strategies — the Roth dollars are worth more per dollar than Traditional dollars.
Show the math
totalNW = tradIRA + roth + brokerage + cash

Sum of all four account balances at year end. This is the gross portfolio value — it includes the Traditional IRA's embedded tax liability.

True after-tax net worth is lower: subtract the tax owed on the Traditional IRA balance (roughly tradBalance × effectiveRate). Strategies that grow the Roth balance at the expense of Traditional grow your real after-tax wealth even when Total NW looks similar across strategies.

ACA Premium Tax Credit (Pre-Medicare Window)
ACA MAGI — income base for subsidy calculation
For pre-Medicare retirees, the ACA uses a broader income measure than federal AGI to decide how much subsidy you get. ACA MAGI includes:
  • Ordinary income (work, pension, RMD, conversion)
  • 100% of Social Security — not just the taxable portion (this catches a lot of retirees off-guard)
  • Realized capital gains from brokerage sales (since they're in AGI)
  • Minus HSA contributions (which are an above-the-line deduction)
Capital gains are added with a one-year lag — the model uses last year's realized gain as a forecast, which mirrors how real-world ACA enrollment works (you estimate your income at sign-up in November, and reconcile on the tax return).

Practical impact: a retiree with $40k pension + $30k SS + $20k of conversions has $90k of federal AGI but $99k of ACA MAGI (the extra is the non-taxable SS). That difference can be enough to drop you below — or push you above — the 400% FPL subsidy cliff.
Show the math
ACA MAGI = work income + pension + RMD + conversion + all Social Security (taxable + non-taxable) + realized LTCG (capital gains from brokerage sales) − HSA contributions ACA counts 100% of SS (federal tax only counts the taxable portion). LTCG is added with a 1-year lag (uses prior-year realizedGain as a forecast — matches real-world ACA enrollment where MAGI is estimated at sign-up, then reconciled on the tax return).

The ACA uses a broader income measure than federal AGI — it adds back the non-taxable portion of Social Security, includes realized capital gains, and subtracts HSA contributions. Retirees with large SS benefits or appreciated brokerage may have ACA MAGI substantially higher than their federal taxable income implies, which can knock them out of subsidies or trigger the 400% FPL cliff.

Two often-overlooked levers in the pre-Medicare window: (1) avoid large Roth conversions or LTCG harvests in years you need ACA subsidies — both inflate MAGI; (2) max HSA contributions while on a HDHP — they reduce both ordinary AGI and ACA MAGI dollar-for-dollar.

Federal Poverty Level % — subsidy eligibility threshold
The ACA expresses your income as a multiple of the federal poverty level (FPL) for your household size. The 2025 FPL base is $15,650 for 1 person, $21,150 for 2, $26,650 for 3, and $32,150 for 4 — plus $5,500 per additional person. These numbers inflate forward each year.

Standard rules (the default): you get subsidies between 100% and 400% of FPL. Above 400%, the subsidy drops to $0 — a hard cliff that can cost $10k–$20k/yr.

Enhanced ARP rules (in effect through 2025, sometimes extended): the 400% cliff is replaced by a soft cap — you're never asked to pay more than 8.5% of income toward your premium, no matter how high your income. Check the "No income cliff" box on Setup if those rules apply to your plan year.
Show the math
FPL% = ACA MAGI ÷ FPL for household size 2025 FPL base (inflated forward): 1 person: $15,650 · 2 people: $21,150 3 people: $26,650 · 4 people: $32,150 +$5,500 per additional person Subsidies available: 100% – 400% FPL (standard rules) Above 400%: subsidy = $0 (hard cliff)

FPL is inflation-adjusted annually. A larger household has a higher FPL dollar threshold, meaning the same income represents a lower FPL% — larger households can earn more before hitting the cliff.

Under enhanced ARP rules (in effect through 2025, may be extended), the 400% cliff is replaced by an 8.5%-of-income cap at all income levels. Check the "No income cliff" box in Setup if those rules apply to your plan year.

Premium Tax Credit — annual subsidy amount
The IRS picks a "required contribution" percentage based on where you fall on the FPL scale (2% at the bottom, scaling up to 10% near 400%). Your required contribution is that percentage of your ACA MAGI.

Your subsidy is the gap between the cost of the benchmark plan (the Second Lowest Cost Silver Plan, or SLCSP — looked up at healthcare.gov for your zip code, age, and plan year) and your required contribution. If the SLCSP costs $18k/yr and your required contribution is $7k, the subsidy is $11k/yr.

Enter your household's monthly SLCSP on Setup — it varies a lot by location and ages. A two-person household in their 60s typically sees $1,500–$2,500/mo SLCSPs.
Show the math
Required contribution = ACA MAGI × bracket_pct 100–133% FPL: 2.06% · 133–150%: 3.09% 150–200%: 4.13% · 200–250%: 6.44% 250–300%: 8.54% · 300–400%: 10.08% Subsidy = max(0, SLCSP_annual − required_contribution) SLCSP = Second Lowest Cost Silver Plan premium

The PTC equals the gap between your benchmark plan premium (SLCSP, looked up at healthcare.gov) and your required contribution percentage of income. Enter your household's monthly SLCSP in Setup — it varies by location, age, and plan year.

The ACA cliff is as sharp as IRMAA — one dollar over 400% FPL can eliminate thousands in annual subsidies. For a two-person household at 395% FPL (~$83k income), the cliff can cost $15,000+ per year in lost subsidies.

Monte Carlo Simulation
Return model — log-normal monthly draws
Instead of using a single fixed return each year, Monte Carlo runs hundreds of randomly-varying market sequences and shows the distribution of outcomes. Each year's return is built from 12 independently drawn monthly returns and compounded.

The model uses a log-normal distribution centered on your chosen mean return, with your chosen volatility — that's the standard assumption for equity prices because it can't produce returns below −100% (which would imply going below zero, impossible for index investments) and naturally produces the asymmetric "tail" pattern observed in real markets.

Pre- and post-retirement mean returns and volatilities can be set independently — you might assume 7% mean / 16% vol while working and 5% / 12% in retirement (reflecting a shift to a more conservative portfolio).
Show the math
For each year, 12 monthly returns are drawn: monthlyReturn = exp(μ + σ · Z) − 1 where Z ~ N(0,1) μ = ln(1 + annualMean) / 12 − 0.5 · σ² σ = annualVol / √12 annualReturn = ∏(1 + monthlyReturn) − 1

Returns are modeled as log-normal — the standard assumption for equity prices. Monthly draws are compounded into an annual return, which replaces the deterministic return for that simulation year. Pre- and post-retirement means and volatilities are set independently.

Log-normal returns can't go below −100%, which prevents unrealistic negative portfolio values from the return model alone. The geometric mean (compound return) is slightly below the arithmetic mean — by roughly σ²/2 per year.

Inflation model — optional per-year shocks
By default, inflation is fixed at the rate you specified on Setup. If you turn on inflation volatility (a slider on the Monte Carlo tab), each year's inflation is randomly drawn around your base rate — so some sims get a string of high-inflation years that drives up the spending baseline, others get tame inflation that makes the plan look easier.

High-inflation years compound forward: they raise the spending baseline for all subsequent years in that simulation, and they also scale IRMAA thresholds upward. Set the slider to 0% to keep inflation deterministic (the default).

Reasonable settings: US CPI has had an annual standard deviation of roughly 1–1.5% since 1990 (excluding the 2021–2023 spike). A 1% setting is a sensible base; 2% stress-tests for higher regime uncertainty.
Show the math
yearInflation = max(0, baseInflation + σ_inf · Z) where Z ~ N(0,1), σ_inf = Inflation Volatility slider Spending / pension inflate by cumulative product: inflFactor_t = ∏_{i=0}^{t-1} (1 + yearInflation_i) IRMAA thresholds scaled by BASE_YEAR→t cumulative factor

When Inflation Volatility is above 0%, each year's inflation rate is drawn independently from a normal distribution centred on the base rate. This compounds forward — a high-inflation year raises the spending baseline for all subsequent years in that simulation. Set to 0% to use fixed inflation (the default).

US CPI has had an annual standard deviation of roughly 1–1.5% since 1990 (excluding the 2021–2023 spike). A setting of 1% is a reasonable base; 2% stress-tests for higher regime uncertainty.

Survival rate — portfolio solvency
Out of every simulation Monte Carlo ran, what fraction ended with the portfolio still above zero? That's your survival rate. A 90% rate means in 9 out of 10 simulated market environments, your plan made it through.

What it doesn't measure: by how much you survived. A sim that ended at $1 counts the same as a sim that ended at $1M. So a 95% survival rate could mean comfortable margins or wafer-thin ones — pair it with the percentile bands for the fuller picture.
Show the math
survivalRate = (simulations where finalNW > 0) / totalSimulations

A simulation "survives" if the total portfolio is above zero at the last projected year. The survival rate is the fraction of simulations that ended solvent. It does not measure by how much — a simulation ending at $1 counts the same as one ending at $1M.

A 90%+ survival rate is a common planning target. It means in 9 out of 10 market environments the plan remains solvent. A 70% rate means meaningful depletion risk that warrants adjusting spending, strategy, or return assumptions.

Percentile bands — p10 / p25 / p50 / p75 / p90
For each year of the projection, sort all the simulated portfolio balances from lowest to highest and pick out specific points:
  • p10 — only 10% of simulations did worse (pessimistic case)
  • p50 — the median; half of simulations are above, half below
  • p90 — only 10% of simulations did better (optimistic case)
The Monte Carlo chart shades the p10–p90 range as a fan with the p50 median as a center line. Each percentile is a snapshot at that year, not a continuous simulation path — i.e., the p10 line at year 10 might come from a different sim than the p10 line at year 20.

The fan naturally widens over time as return variance compounds — that's not a model problem, it's a real picture of long-run uncertainty.
Show the math
At each year, sort all simulated balances. p10 = 10th percentile (pessimistic) p25 = 25th percentile p50 = 50th percentile (median) p75 = 75th percentile p90 = 90th percentile (optimistic) Chart fan: shaded p10–p90 band with p50 centre line

Each percentile is computed independently at each year — it does not represent a single simulation path. The p50 line is the median outcome; the p10–p90 band shows the realistic range of outcomes across simulations.

The fan widens over time as return variance compounds. A wide fan at year 20+ is normal — it reflects genuine long-run uncertainty, not a model problem.

Spending floor — portfolio guardrail
A behavioral model of how real retirees respond to bad markets: when the portfolio falls below 80% of its starting value, spending automatically drops to the floor percentage you set (e.g., 80% means a 20% cut). Set the floor to 100% to disable — full spending in every scenario regardless of portfolio level.

A floor of 75–85% is realistic for most households (people tighten the belt when they see their balances fall), and it meaningfully improves survival rates in stressed Monte Carlo scenarios — often by 5–15 percentage points — without much changing the median outcome.
Show the math
if (isRetired AND portfolio < 80% of startingNW): effectiveSpend = plannedSpend × spendingFloor else: effectiveSpend = plannedSpend

When the portfolio falls below 80% of its starting value, spending is reduced to the floor percentage of the planned amount. This models real-world belt-tightening in bad markets. Set to 100% to disable — full spending is always used regardless of portfolio level.

A spending floor of 75–85% meaningfully improves survival rates in stressed scenarios without dramatically changing median outcomes. It reflects the reality that most retirees cut discretionary spending when markets turn.

Disclosure: All formulas are simplified models. Real tax law is more complex and changes frequently. This tool does not constitute tax, legal, or financial advice. Consult a qualified CPA, CFP®, or licensed attorney before making any financial decisions.

Run projections from the Setup tab to see the legacy analysis.

Portfolio Balance Over Time

Trad Roth Cash
Monthly SpendingiTotal household spending per month in retirement — housing, food, healthcare, travel, etc. Does not include taxes; those are calculated separately. The annual equivalent and estimated net portfolio draw (after SS/pension income) are shown below the slider.→ Open Spending Goal breakdown $7,000
Annual: $84,000  ·  Net draw:
Withdrawal MixiThe share of portfolio withdrawals taken from Traditional (taxable) vs. Roth (tax-free) accounts. Sliding right increases Traditional withdrawals, raising AGI and taxes. Sliding left increases Roth withdrawals, reducing taxable income. If one account runs dry, the other automatically covers the shortfall.→ Open AGI breakdown 60% T / 40% R
← Roth (tax-free)    Trad (taxable) →
Portfolio ReturniExpected average annual investment return on your portfolio. A higher return extends the runway but may not be sustainable — 5–7% is common for a balanced retirement allocation. This is a deterministic assumption; use Monte Carlo for a probability-weighted view.→ Open Return model breakdown 6%
InflationiAnnual rate at which your spending need grows. At 2.5%, a $7,000/month budget today costs roughly $11,300/month in 20 years. Higher inflation erodes purchasing power faster and shortens the portfolio runway. The Fed's long-run target is ~2%; use 3%+ for a more conservative plan.→ Open Inflation model breakdown 2.5%
Years to ModeliHow many years to project the portfolio. Set this to the number of years from today to the end of your retirement plan — typically life expectancy minus current age. The chart shows whether the portfolio survives the full period.→ Open year-by-year processing sequence 30 yrs
Simulations
Pre-retirement ReturniMean annual return on your portfolio before retirement. Used as the center of the log-normal return distribution for pre-retirement years. A stock-heavy portfolio might use 7–9%; a balanced portfolio 5–7%. This initializes from your Setup return rate.→ Open Return model breakdown 7%
Mean annual return before retirement
Post-retirement ReturniMean annual return after retirement. Typically lower than pre-retirement as the portfolio shifts to a more conservative (bond-heavy) allocation to reduce sequence-of-returns risk. 4–6% is common for a balanced retirement portfolio.→ Open Return model breakdown 6%
Mean annual return in retirement
Spending FlooriA guardrail that limits spending when the portfolio falls below 80% of its starting value. For example, a 75% floor means spending is capped at 75% of the planned amount in bad-market years — modeling the real-world ability to cut discretionary costs. Set to 100% to disable the guardrail entirely.→ Open Spending Floor breakdown 100%
No guardrail — full spending always
Pre-retirement VolatilityiStandard deviation of annual returns before retirement — how wide the range of outcomes is. Higher volatility widens the p10–p90 fan on the chart. A diversified stock portfolio is roughly 15%; a balanced portfolio ~12%; a bond-heavy portfolio ~5%.→ Open Return model breakdown 12%
Stocks ~15%, balanced ~12%, bonds ~5%
Post-retirement VolatilityiStandard deviation of annual returns in retirement. Most people de-risk at retirement by shifting from stocks to bonds, which lowers volatility. Lower volatility reduces sequence-of-returns risk — the danger of a big loss in the first few years of retirement permanently impairing the portfolio.→ Open Return model breakdown 10%
Often lower as allocation de-risks at retirement
Inflation VolatilityiStandard deviation of annual inflation shocks around your base rate. At 0% (default) inflation is fixed each year. At 1%, each year's inflation is drawn from a normal distribution — e.g., base 2.5% ± 1%, so individual years might land anywhere from ~0.5% to ~4.5%. This widens outcomes by randomizing spending growth, pension purchasing power, and IRMAA thresholds. Set to 0 to isolate pure return volatility.→ Open Inflation model breakdown 0%
0% = fixed inflation; 1–2% = realistic historical range
Who this is for: Households earning above the Roth IRA income phase-out ($236,000+ MFJ in 2025) who want to keep building Roth balances through backdoor contribution strategies. Use the Traditional Backdoor for IRA-based contributions, and the Mega Backdoor if your 401(k) plan allows after-tax contributions.

People & Horizon

7%

Contribute to a non-deductible Traditional IRA, then immediately convert to Roth. No income limit on contributions. Annual limit: $7,000 per person ($8,000 if 50+).

After-tax 401(k) contributions beyond the standard employee limit, converted to Roth in-plan or rolled to a Roth IRA. Requires plan support — verify with your plan administrator.

Annual Contribution
Total backdoor per year
Years of Contributions
Now through retirement
Total Contributed
After-tax dollars in
Roth Balance at Retirement
Tax-free (backdoor only)
Tax-Free Growth
Growth that was never taxed

Year-by-Year Projection

Year Age(s) Traditional Backdoor Mega Backdoor Total Added Roth Balance (EOY)

How the Traditional Backdoor Works

  1. Contribute to a Traditional IRA — Make a non-deductible (after-tax) contribution. There is no income limit on contributions — only on deductibility, which doesn't matter here.
  2. Convert immediately to Roth — The conversion is tax-free because the contribution was already after-tax. Convert within days to minimize any earnings that could create a small taxable amount.
  3. File Form 8606 every year — This IRS form records your non-deductible contribution basis. Without it, the IRS may tax the conversion as if it were pre-tax. Keep copies permanently.
  4. Repeat each calendar year — The strategy renews each January. Many people contribute early in the year to maximize time in Roth.
Timing: if earnings accumulate between contribution and conversion (even $10), a small taxable amount results. Converting within the same week as contributing eliminates this. Some advisors recommend a brief "seasoning" wait to avoid any appearance of step-transaction treatment, though IRS guidance has not required this.

How the Mega Backdoor Works

  1. Max standard 401(k) contributions first — Fill the normal $23,500 employee limit (pre-tax or Roth). This is a prerequisite.
  2. Make after-tax contributions — Your plan must allow after-tax (non-Roth) contributions above the standard limit, up to the IRS 415(c) total of $70,000 minus all other contributions.
  3. Convert in-plan or roll out — Either convert after-tax contributions to Roth 401(k) in-plan (requires plan support), or roll to a Roth IRA upon separation from employer.
  4. Set up as a recurring payroll election — Most plans handle this through payroll, so contributions happen automatically each pay period.
Plan eligibility is everything. Your 401(k) Summary Plan Description (SPD) will state whether after-tax contributions and in-service conversions/withdrawals are allowed. Many large employer plans support this; many small business plans do not. Confirm before modeling large mega backdoor amounts.

Disclosure: Backdoor Roth strategies involve nuanced and evolving tax rules including the pro-rata rule, step-transaction doctrine, and plan-specific eligibility requirements that vary by employer. This tool models idealized scenarios and does not account for all circumstances. Nothing here constitutes tax or legal advice. Do not implement any strategy modeled here without first consulting a qualified CPA or tax attorney who can review your complete financial picture.

Frequently Asked Questions

Plain-language answers to every concept used in this tool. Click any question to expand it.

Disclosure: All content is for general educational purposes only and represents simplified summaries of complex topics. It does not constitute tax, legal, or financial advice, and should not be relied upon as such. Tax law is complex, changes frequently, and its application varies by individual circumstance. Consult a qualified CPA, CFP®, or licensed attorney for advice specific to your situation before taking any action.

Run projections from the Setup tab to use the Monthly View.
Run projections from the Setup tab to use the Sensitivity analysis.
Run projections from the Setup tab to use Goal-Seek.
Run projections from the Setup tab to see the advisor analysis.
Run projections from the Setup tab to generate the Social Security break-even analysis.

Roth Conversion Optimizer

Version 6.9.5  ·  Last updated June 2026

What this tool does

This tool helps pre-retirement and early-retirement households answer a deceptively simple question: should I convert traditional IRA or 401(k) money to Roth, and if so, how much each year?

It models your projected tax situation year-by-year from now through the end of your plan, accounting for required minimum distributions (RMDs), Social Security benefits and optimal claiming-age analysis, pension income, IRMAA Medicare surcharges, ACA premium tax credit subsidy cliffs for early retirees, HSA triple-tax-advantage contributions and withdrawals, Qualified Charitable Distributions (QCDs), the potential expiration of the TCJA tax cuts after 2025, state income taxes across all 50 states, and the difference between your rates today versus your heirs' rates later.

Five Roth conversion strategies are compared side-by-side — no conversion, fill to the 12% bracket, fill to the 22% bracket, a custom dollar amount, and a full-engine optimizer that maximizes after-tax net worth — so you can see exactly what each approach saves or costs over your lifetime and for your heirs.

Additional tools include a three-phase retirement spending model (go-go / slow-go / no-go), a Monte Carlo simulation with return and inflation volatility, a backdoor and mega backdoor Roth calculator, a portfolio drawdown simulator, estate and legacy planning projections, and a scenario comparison chart that overlays balance curves from up to three saved scenarios side-by-side.

Who it's for

  • People in their 50s or 60s with significant pre-tax retirement savings who are approaching or have recently entered retirement
  • Households expecting a low-income window between retirement and RMD age (72–73) where conversions are cheap
  • Anyone concerned about TCJA sunset after 2025 pushing their future rates higher
  • People planning to leave an IRA to heirs who will face ordinary income tax on inherited distributions
  • Savers using the backdoor Roth strategy who need to model the pro-rata rule and mega backdoor limits
  • DIY investors and fee-only planners who want a transparent, open model rather than a black-box recommendation

2025 tax values used by the engine

All bracketed thresholds and contribution limits are stored as 2025 base values and inflated forward each projection year at your chosen inflation rate (except where statute fixes them — those are flagged below). If you've used the tool before mid-2026 these numbers may have changed; the table below is the source of truth for what the engine currently models.

Item 2025 value Indexed?
Federal MFJ bracket tops (taxable income)10% $23,850 · 12% $96,950 · 22% $206,700 · 24% $394,600 · 32% $501,050 · 35% $751,600Yes
Standard deduction (MFJ)$30,000 (single: $15,000)Yes
IRMAA MFJ thresholds (Tier 0 → 5)$212k · $266k · $334k · $400k · $750kYes (Tier 4 cap fixed)
IRMAA Single thresholds (Tier 0 → 5)$106k · $133k · $167k · $200k · $500kYes (Tier 4 cap fixed)
LTCG 0% / 15% bracket tops (MFJ)$96,700 / $600,050 (taxable income)Yes
NIIT 3.8% threshold$250,000 MFJ · $200,000 singleNo (frozen since 2013)
SS taxability thresholds (provisional)$32k / $44k MFJ · $25k / $34k singleNo (frozen since 1983)
HSA contribution limits$4,300 self-only · $8,550 family · +$1,000 catch-up at 55+Yes
QCD annual limit$108,000 per person (70½+)Yes
Federal estate tax exemption (TCJA)$13,990,000 individual · $27,980,000 MFJ with portabilityYes (until TCJA sunset toggle)
RMD start age73 (SECURE 2.0; rises to 75 in 2033)Statutory

Recent corrections (June 2026):

  • Rank-by selector in the comparison — the Advisor's "Compare the Alternatives" list has a dropdown to rank strategies by lowest lifetime tax, highest after-tax net worth, highest final net worth, highest final Roth balance, or lowest peak RMD. The chosen metric also sets which strategy is flagged "Recommended."
  • Optimized Conversion rebuilt on the full engine — the "Optimized" strategy now runs a coordinate-descent search that scores every candidate with the real year-by-year projection (LTCG, NIIT, ACA, the 2-year IRMAA lookback, the withdrawal waterfall, and survivor transitions all included) and picks the per-year schedule that maximizes after-tax net worth at end of plan, rather than a simplified single-amount lifetime-tax search. Runs inline in ~50–150 ms.
  • Advantages/Disadvantages text wraps — pros & cons in the Advisor's expanded strategy details now wrap inside the panel instead of running off the right edge.
  • Tax-breakdown values left-justified — in each strategy's expanded detail, the Federal / State / IRMAA / ACA / LTCG / NIIT amounts now sit in a column next to their labels instead of stretched out to the right edge.
  • Final Net Worth in the comparison — the Advisor's "Compare the Alternatives" table gained a Final Net Worth column, and the table now pins to the full window width (previously an expanded row's text could push it wider than the screen).
  • Custom amount shown inline in the comparison — the Advisor's "Compare the Alternatives" list now labels the custom strategy as "Custom Amount ($X) / Year" so you can see the configured conversion at a glance.
  • Advisor tab refreshes on open — it now re-renders when you switch to it, so a custom conversion amount (or any input) changed after running shows up immediately in the Compare table instead of requiring another Run.
  • "Get a second opinion" AI export embedded in the recommendation — the one-click AI analysis (Claude / ChatGPT / Grok) now lives inside the Quick Recommendation card instead of as a separate card at the bottom of the tab.
  • Custom conversion defaults to $0 — the "Custom Amount / Year" conversion now starts at $0. While it stays $0 the custom strategy is hidden from the Advisor, Legacy, Monthly View, Drawdown, Monte Carlo, Sensitivity, Goal-Seek and PDF (it would just duplicate the no-conversion baseline). The Projections dropdown always keeps the option so you can select it and type an amount — once entered, it reappears everywhere.
  • Drawdown init crash fixedparseDollar() is now null-safe, so reading the cross-tab custom-amount field before it is rendered no longer throws on page load (the Drawdown sandbox was firing during init before its custom-conversion input existed).
  • Advisor tab consolidated — the verdict and four-pillar plan are now one "Your Plan" block (headline dollar figures stated once, in the stat tiles), the five strategy cards collapse into a single ranked "Compare the Alternatives" table that expands on click, the 0% LTCG harvest and cautions merge into one "Opportunities & Watch-outs" section, and the AI export moved to the bottom as a closing step.
  • IRMAA thresholds refreshed — the engine was using stale 2024 thresholds labeled as 2025; now uses CMS-announced 2025 thresholds ($212k MFJ / $106k single Tier 0/1 boundary).
  • IRMAA MAGI now includes realized LTCG — capital gains from taxable brokerage sales are part of AGI and therefore part of IRMAA MAGI, applied via the 2-year lookback.
  • ACA MAGI now includes realized LTCG — uses prior-year realizedGain as a forecast (matching the real-world ACA enrollment workflow where MAGI is estimated and then reconciled on the tax return).

Tabs at a glance

SetupEnter your balances, income, spending, Social Security estimates, and optional features (semi-retirement, spending phases, HSA, QCD, ACA, TCJA sunset)
ProjectionsYear-by-year spreadsheet comparing all five strategies through end-of-plan, with balance chart and per-strategy summary metrics
Advisor AnalysisComprehensive retirement plan summary (conversion strategy, SS claiming ages, spending sustainability, withdrawal sequence), plain-language strategy verdict, side-by-side scenario comparison chart, and one-click AI export to Claude, ChatGPT, or Grok
Monthly ViewSlider across every month of the plan — from today through end of life — showing the monthly snapshot: spending, taxes, IRMAA, ACA premium, Roth conversion, QCDs, investment growth, and pre/post account balances
DrawdownInstant what-if sandbox driven by sliders for spending, withdrawal mix, growth, inflation, and conversion strategy — with full-engine tax stats (yearly draw, effective rate, lifetime taxes, final balance) and IRMAA / survivor-cliff warnings
Monte CarloMulti-run simulation with return and inflation volatility — probability bands, survival rates, and strategy comparison across percentile outcomes
SensitivityTornado chart ranking every retirement input (spending, returns, SS timing, retirement age, etc.) by impact on final net worth or lifetime taxes — so you can see which levers matter and which you can stop fine-tuning
Goal-SeekInverse-solver — pick an outcome (maximum sustainable spending, earliest retirement age, max spending with a legacy target) and the tool finds the input value that produces it via bisection
SS Break-EvenSocial Security claiming-age break-even analysis — cumulative benefit chart and crossover table for ages 62–70
Legacy & HeirsAfter-tax value your heirs receive from each account type, the SECURE 2.0 10-year rule effect on inherited Traditional IRAs, and federal estate tax exposure
Backdoor LabPro-rata rule calculator, backdoor Roth eligibility, and mega backdoor 401(k) contribution / in-plan conversion limits
ComputationsFull methodology: tax formulas, bracket-fill solver (with SS-torpedo handling), RMD tables, SS rules, IRMAA tiers, ACA subsidy/net-premium math, Monte Carlo formulas, and Monthly View interpolation
FAQSearchable plain-language answers to every concept and term used in the tool

This tool runs entirely in your browser — no data is sent to any server. All calculations are performed locally using the JavaScript embedded in this page.

Contact

Questions, bug reports, feature requests, or partnership inquiries: contact@rothhelper.com

Disclosure: This tool is for educational and illustrative purposes only and does not constitute investment, tax, or legal advice. Results are based on simplified assumptions and user-provided inputs. Consult a qualified CPA, CFP®, or licensed attorney before taking any action.

Review RothHelper

Share your experience to help other DIY retirees find this tool.

Helped with your planning?

Reviews keep this tool discoverable and let other DIY retirees find it. If RothHelper saved you time or surfaced something useful, a one-minute Trustpilot review goes a long way.

⭐ Write a Trustpilot review

Opens Trustpilot in a new tab  ·  Takes about a minute  ·  No account required

A few things worth mentioning in your review

  • Which tab or feature was most useful to you
  • What you learned about your own plan (e.g., the IRMAA cliff, SS torpedo, or a specific bracket-fill insight)
  • Whether the tool surfaced something your spreadsheet or other calculators missed
  • How long it took you to model your scenario

Prefer to send feedback privately first? Email contact@rothhelper.com — bug reports, feature requests, and specific scenario questions all welcome there.

Educational tool only. Not investment, tax, or legal advice. Not a registered investment adviser. All projections are hypothetical and for illustrative purposes only. Consult a qualified CPA, CFP®, or attorney before making financial decisions. Tax laws may change.  View full disclosure