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:
- How do you project year-end taxable income mid-year?
- 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!