✦ Retirement Tax Calculator

What does your retirement income really look like after taxes?

Most retirement income estimates skip taxes entirely, or apply one flat guess across every dollar. This calculator doesn't — it taxes Social Security, pensions, 401(k)/IRA withdrawals, and brokerage gains the way the IRS actually treats each of them, by state. Drop it into your own article in one script tag, and it looks like it was built for your site, not bolted onto it.

Sibling of <retirement-calc-age> — same engine, different question.

Full explanation: Retirement Taxes Explained →

See it in context

Here's exactly what that looks like — a live instance embedded inside a sample article, using someone else's fonts and colors, not ours.

bracketbridgetax.com/blog/retirement-income-tax-by-account-type
Retirement Tax Planning · 7 min read

Why Your $80,000 Retirement Income Doesn't Owe the Same Tax Bill Twice

BB
Bracket Bridge Tax
Retirement tax planning, all 50 states

Almost every client assumes their retirement income gets taxed as one number. It doesn't. The same $80,000 can carry a very different tax bill depending on which accounts it comes from and which state cashes the check.

Same income, four different tax treatments

Social Security is taxed on a sliding scale — up to 85% of it becomes taxable income, but only once your total income crosses certain thresholds. Pensions and 401(k)/IRA withdrawals are taxed as ordinary income, dollar for dollar. Brokerage withdrawals are taxed at capital-gains rates, and only on the gain portion, not the full withdrawal. Four income sources, four different rulebooks — and most "retirement paycheck" estimates quietly average them into one flat rate.

Your state matters more than most people assume

Some states don't tax retirement income at all. Others tax pensions and 401(k) withdrawals as ordinary income but leave Social Security alone. A few tax everything the same as a paycheck. Two retirees with identical income and identical accounts can end up thousands of dollars apart in a given year purely because of where they live — a bigger swing than most bracket-optimization advice ever accounts for.

Withdrawal order changes the total, not just the timing

Drawing from a brokerage account first keeps ordinary income low early in retirement, which can also keep less of your Social Security taxable. Drawing from a 401(k) first front-loads ordinary income, and can push you into a higher bracket sooner than you'd expect. Which account you draw from first is a tax decision, not just a cash-flow decision — and it's exactly the math this calculator runs.

The account you draw from is a tax decision, not just a cash-flow decision.

A real, surprising example: Pennsylvania

Pennsylvania has a 3.07% flat state income tax — but it specifically excludes retirement income from that tax. A retiree drawing from a 401(k) or pension in PA pays $0 state tax on those withdrawals, same as a retiree in Florida (which has no state income tax at all). Move the identical withdrawal to California, which taxes retirement income as ordinary income with no special exclusion, and the same dollar amount owes real state tax. Same income, same account, three very different outcomes depending only on address — this calculator models all 50 states plus DC individually, not a generic "high-tax vs. low-tax" bucket.

The bigger tax-optimization question

State is one lever; timing is another, bigger one. The full app's Bridge Optimizer searches year-shaped Roth conversion schedules across your bridge years, coordinated with your state's actual tax treatment, to find the sequence that keeps the most of what you withdraw — the withdrawal-order question above, run as a real search instead of a rule of thumb.

Try it with your own numbers

Adjust the inputs to the right — state, Social Security, pension, 401(k) withdrawal, brokerage withdrawal — and watch the effective tax rate respond in real time. No signup, and nothing entered leaves the browser.

What this number doesn't tell you

This is a single-year snapshot at the inputs you gave it, not a full retirement tax plan — it doesn't yet account for RMDs pushing future brackets up, the benefit of Roth conversions done earlier, or IRMAA surcharges compounding with Medicare premiums. If the effective rate surprises you, that's usually the start of a real planning conversation, not the end of one.

Try it

That's the exact <retirement-calc-tax> widget, unmodified — same script tag, same math as the full app. See the full picture → · Jump to the embed code ↓

For developers

Everything below is for embedding this calculator on your own site — integration code, theming, and events.

Live demos

Default (single, defaults)

Themed (orange accent, household, pre-seeded)

Preview your theme

Pick colors that match your site, then copy the CSS snippet at the bottom.

Theme colors

Big number, slider thumb, CTA button
#4f8ec9
Outer surface of the calc
#ffffff
Result area + toggle background
#f7f9fc
Title, slider values, result subline
#1a1f2e
retirement-calc-tax {
  --rc-accent: #4f8ec9;
  --rc-bg: #ffffff;
  --rc-surf: #f7f9fc;
  --rc-text: #1a1f2e;
}

Integration code

Drop this into your HTML:

<script src="https://app.retirementscenario.com/embed/v1/tax.js"></script>

<retirement-calc-tax></retirement-calc-tax>

Or pre-seed values relevant to your audience:

<retirement-calc-tax
  plan-type="household"
  current-age="48"
  current-savings="1200000"
  contrib-annual="35000"
  retirement-age="62"
  ss-amount="2700"
  return-pct="7.0">
</retirement-calc-tax>

Attributes

AttributeDefaultRange
plan-typesinglesingle or household
stateFL2-letter US state code (50 states + DC; matches engine's STATE_PROFILES)
current-age6755 – 90 (gates IRMAA at 65+)
ss-annual300000 – 100,000 (total household SS, annual, today's $)
pension-annual00 – 150,000 (total household pension, annual, today's $)
trad-draw-annual400000 – 300,000 (401(k) / Trad IRA withdrawal, taxed as ordinary income)
brokerage-draw-annual200000 – 300,000 (taxable brokerage withdrawal, taxed at LTCG rates)

Theming

Override CSS custom properties on the host:

retirement-calc-tax {
  --rc-accent: #ff6b35;    /* primary color */
  --rc-bg: #ffffff;        /* card background */
  --rc-surf: #f7f9fc;      /* sub-surface (result area) */
  --rc-text: #1a1f2e;
  --rc-muted: #6a7280;
  --rc-border: rgba(20,30,50,0.10);
  --rc-radius: 12px;
}

Events

The element emits two custom events you can listen to:

document.querySelector('retirement-calc-tax')
  .addEventListener('rc-calculated', (e) => {
    console.log('Total annual tax:', e.detail.totalTax);
    console.log('Effective rate:', e.detail.effectiveRate.toFixed(1) + '%');
    console.log('Breakdown:', e.detail.breakdown);
  });

document.querySelector('retirement-calc-tax')
  .addEventListener('rc-cta-clicked', (e) => {
    console.log('User clicked CTA to:', e.detail.url);
  });