Tax Bracket Management: Filling the Sweet Spot in Beancount

One of the most powerful tax planning techniques is “bracket management” - timing income and deductions to stay in optimal tax brackets. Here’s how to track it in Beancount.

2026 Tax Brackets (MFJ)

Taxable Income Rate
$0 - $25,400 10%
$25,401 - $101,600 12%
$101,601 - $203,200 22%
$203,201 - $407,300 24%
$407,301 - $486,000 32%
$486,001 - $728,600 35%
Over $728,600 37%

The “Bracket Filling” Strategy

If your income puts you in the 22% bracket with room to spare, consider realizing capital gains (taxed at 15% for LTCG) or doing Roth conversions to “fill” the bracket.

My Bracket Tracking Structure

2026-11-01 custom "bracket-analysis" "November projection"
  filing-status: "MFJ"
  projected-taxable-income: 180000.00
  current-bracket: "22%"
  bracket-ceiling: 203200.00
  room-in-bracket: 23200.00
  
  ; Opportunities to fill bracket
  potential-roth-conversion: 23200.00
  potential-cap-gain-harvest: 23200.00

Query: Where Am I in the Bracket?

SELECT 
  sum(position) as gross_income
WHERE account ~ 'Income'
  AND year = 2026

-- Then manually: Gross - deductions = taxable income
-- Compare to bracket thresholds

The 0% Capital Gains Bracket

Don’t forget: LTCG are taxed at 0% if your taxable income is under $96,700 (MFJ). This is huge for early retirees or anyone with a low-income year!

; Strategic gain harvesting in 0% bracket
2026-12-15 * "Vanguard" "Harvest gains at 0% rate"
  Assets:Brokerage:Cash    15000.00 USD
  Assets:Brokerage:VTSAX    -100 VTSAX {50.00 USD}
  Income:Investment:CapGains:LongTerm    -10000.00 USD
    bracket-strategy: "0% LTCG"
    taxable-income-before: 90000.00

Questions:

  1. How do you project year-end taxable income mid-year?
  2. Anyone coordinating Roth conversions with bracket filling?

Bracket filling is central to my FIRE strategy. Here’s how I coordinate:

The Roth Conversion + Bracket Filling Combo

Every December, I do this analysis:

2026-12-01 custom "bracket-optimization" "Annual Roth conversion planning"
  ytd-ordinary-income: 85000.00
  expected-december-income: 7000.00
  standard-deduction: 32200.00
  projected-taxable-income: 59800.00
  
  ; 12% bracket ceiling is $101,600
  room-in-12-bracket: 41800.00
  
  ; Action: Convert $41,800 from Traditional to Roth at 12%
  recommended-roth-conversion: 41800.00
  conversion-tax-cost: 5016.00  ; 12%
  future-tax-avoided: 10032.00  ; if withdrawn at 24% later

The “Income Smoothing” Philosophy

Years with variable income? Track it all:

SELECT 
  year,
  sum(position) as total_income,
  CASE
    WHEN sum(position) < 101600 THEN '12%'
    WHEN sum(position) < 203200 THEN '22%'
    WHEN sum(position) < 407300 THEN '24%'
    ELSE 'Higher'
  END as bracket
WHERE account ~ 'Income'
GROUP BY year
ORDER BY year DESC
LIMIT 5

Multi-Year Visualization

Looking at 5 years of bracket history helps plan:

  • High income year? Defer bonuses, maximize 401k
  • Low income year? Do Roth conversions, harvest gains

Early retirement has given me the ultimate bracket management playground - my income is entirely controllable!

My Early Retirement Bracket Strategy

Since I control when I realize income (Roth conversions, cap gains, IRA withdrawals), I aim to fill the 12% bracket exactly every year.

; Annual income orchestration
2026-01-01 custom "income-plan" "2026 bracket filling strategy"
  target-taxable-income: 101600.00  ; top of 12% bracket MFJ
  standard-deduction: 32200.00
  target-gross: 133800.00
  
  ; Sources to achieve target
  roth-conversion: 45000.00
  ltcg-harvest: 30000.00  ; taxed at 0%!
  ira-withdrawal: 10000.00
  dividend-income: 15000.00
  interest-income: 3800.00

The ACA Subsidy Consideration

Watch out! For those on ACA marketplace insurance, your MAGI affects premium subsidies. There’s a sweet spot where staying under certain thresholds saves more in subsidies than you’d save in taxes.

2026-11-01 custom "aca-analysis" "Subsidy cliff check"
  current-magi: 95000.00
  aca-cliff: 100000.00  ; example threshold
  subsidy-at-stake: 8000.00
  marginal-tax-rate: 0.12
  ; Decision: Don't push income above 100k - subsidy loss exceeds tax benefit

The math changes every year based on your state, age, and family size. But Beancount makes it easy to model!