Capital Gains Harvesting: 0% LTCG Bracket + Tax-Loss Offsets
In 2025 a single filer with taxable income under $48,350 (or MFJ under $96,700) pays 0% federal tax on long-term capital gains. See your 0% headroom for tax-gain harvesting, and how losses can offset gains 1:1 (plus $3,000 against ordinary income).
Two tactics moderate-income investors leave on the table
Tax-loss harvesting is well known: realize losers to offset realized gains 1:1, with up to $3,000 of net loss offsetting ordinary income each year and the rest carrying forward indefinitely. The catch is the wash-sale rule — selling a loser and re-buying a "substantially identical" security within 30 days disallows the loss. Plan around it by buying a similar-but-not-identical alternative (different ETF tracking a different index) for the wait period.
Tax-gain harvesting is less famous and arguably more valuable in low-income years. The 2025 0% LTCG bracket tops at $48,350 single / $96,700 MFJ in taxable income (after standard deduction). If your ordinary taxable income is below that, every dollar of long-term gains UP TO the gap is taxed at 0% federal. An early retiree or sabbatical-taker can sell appreciated positions, immediately re-buy at the new (higher) cost basis, and effectively "reset" basis tax-free — no wash-sale rule applies to gains, only losses.
How the math works
- Losses first offset gains 1:1. Net LTCG = max(0, gains − losses).
- Excess losses (after wiping out gains) offset ordinary income, capped at $3,000. The remainder carries forward.
- Ordinary taxable income = ordinary − standard deduction − ordinary-loss offset.
- LTCG tax is stacked. Net LTCG starts at the position (ordinary taxable income) and walks up through the LTCG brackets: 0% (to $48,350 single / $96,700 MFJ) → 15% (to $533,400 / $600,050) → 20%.
- 0% headroom = 0%-bracket top − (ordinary taxable + netLTCG). Positive means more gains can still be realized at 0%.
Sources: IRS Publication 550 (Investment Income), Rev. Proc. 2024-40 for 2025 LTCG bracket thresholds, IRS Pub 17 on the $3,000 ordinary-income offset.
What this simplifies: short-term gains aren't modeled separately (they're taxed at ordinary rates). The 3.8% Net Investment Income Tax kicks in above $200k single / $250k MFJ MAGI and isn't included. State capital-gains tax varies enormously — many states tax LTCG at ordinary rates. The wash-sale rule is mentioned but not enforced numerically; the user is responsible for waiting 30+ days when harvesting losses.
Math runs locally. Inputs never leave your browser. Source on github.
Where this calculation doesn't apply
- High income — 0% bracket is gone. Single income above ~$63k or MFJ above ~$126k uses up the 0% bracket on ordinary income alone — no gain headroom. Tax-loss harvesting still helps; tax-gain harvesting doesn't.
- Short-term gains. Positions held ≤ 1 year are taxed at ordinary rates, not LTCG. Folding short-term gains into "gains" here would understate your tax. Model them as additional ordinary income instead.
- High-MAGI investors hit the NIIT. Above $200k single / $250k MFJ MAGI, an additional 3.8% Net Investment Income Tax applies to investment income. Adds materially on the high end; not modeled here.
- Tax-advantaged accounts. Gains inside an IRA, 401(k), or HSA aren't taxed as they're realized. This tool is for taxable brokerage accounts only.
What to actually do
- If you see 0% headroom, consider realizing gains up to that limit — sell appreciated positions, optionally re-buy immediately to reset cost basis (no wash-sale rule on gains).
- For losses: sell, then wait 31 days before re-buying the same security. To stay invested during the wait, buy a similar-but-not-identical ETF (e.g. VTI for the wait, back to VOO after).
- Time the year-end. Most harvesting happens in November/December because you finally know your year's income.
- If you're high-MAGI, check the NIIT on top — your "real" investment tax rate is the LTCG rate + 3.8%.