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

  1. Losses first offset gains 1:1. Net LTCG = max(0, gains − losses).
  2. Excess losses (after wiping out gains) offset ordinary income, capped at $3,000. The remainder carries forward.
  3. Ordinary taxable income = ordinary − standard deduction − ordinary-loss offset.
  4. 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%.
  5. 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

  1. 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).
  2. 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).
  3. Time the year-end. Most harvesting happens in November/December because you finally know your year's income.
  4. If you're high-MAGI, check the NIIT on top — your "real" investment tax rate is the LTCG rate + 3.8%.