US tax year 2026 · IRC §1091 · Form 8949 code W

Wash Sale Tracker

Detect wash sales across every broker you use, automatically adjust the cost basis on the replacement lot, and produce the Form 8949 entry with code W ready to file. Built for US investors holding the same securities across Schwab, Fidelity, IBKR, Vanguard, and Robinhood.

Cross-broker 61-day scan
Auto basis adjustment
Form 8949 code W
Read-only via SnapTrade
Compatible with:
Schwab Fidelity IBKR Vanguard E*TRADE Robinhood Merrill Tastytrade Webull
CROSS-BROKER WASH SALE · 61-DAY WINDOW Schwab 2025-09-15 SELL 100 TSLA @ $240 Proceeds $24,000 · Cost $30,000 Realized -$6,000 61-DAY WINDOW §1091 SALE BUY (23 days) +30 days Fidelity 2025-10-08 BUY 100 TSLA @ $250 Cost $25,000 · Same CUSIP WASH SALE REPLACEMENT LOT — ADJUSTED BASIS Fidelity lot original cost $25,000 + disallowed loss from Schwab +$6,000 Adjusted basis $31,000

Detected across two brokers in one ledger. Most 1099-Bs miss this.

Wash Sale Tracker: Detect Cross-Broker Wash Sales and Adjust Basis Automatically

If you sold something at a loss and rebought it (or a substantially identical security) at any other broker within 30 days, you triggered a wash sale under IRC §1091. This page shows exactly how it works, why 1099-Bs miss it across brokers, and how to file Form 8949 correctly with code W.

Who this page is for

US investors with realized losses and 2+ brokerage accounts.

The typical reader: a US taxpayer who sold something at a loss this year and rebought the same (or similar) security at another broker, an IRA, or after a 1099-B already arrived flagging nothing. Or someone hunting for a tool because their existing setup — per-broker 1099-Bs, a TurboTax CSV import, an Excel sheet — cannot see across accounts. If you hold the same ticker at Schwab and Fidelity, or trade actively at IBKR and Robinhood, the §1091 61-day window crosses every account you control and your 1099-Bs do not.

What is a wash sale

The 30-day rule, in 60 seconds.

Per IRC §1091, if you sell a security at a loss and buy a "substantially identical" security within 30 days before OR after that sale — a 61-day window — the loss is disallowed for the current tax year. The disallowed loss is added to the cost basis of the replacement lot and recovered when you eventually sell it. The rule applies to you, not to each broker, so it spans every account you control. Full background in our tax-loss harvesting guide →

How it works: 3 steps

The flow is built around one principle: nothing leaves your hands. Brokers connect read-only, the consolidated ledger lives in your account, and the final artifact is the actual filable Form 8949 row.

Connect → Scan → Adjust + Emit code W

1
Connect your brokers — Read-only via SnapTrade for Schwab, Fidelity, IBKR, Vanguard, E*TRADE, Robinhood, Merrill, Tastytrade, Webull and more. Add IRAs and spousal accounts (per IRS guidance, treat as related party). Or upload CSV / Activity Statement / 1099-B for any broker we do not sync directly. We can never execute trades.
2
We scan the 61-day window — On every sync, each sell-at-loss is matched against buys of the same CUSIP across every connected account, for the 30 days before AND the 30 days after the sale. Cross-broker matches, broker-flagged matches, and IRA-side rebuys all land in the same scan.
3
We adjust basis and emit code W — The disallowed loss is added to the replacement lot's cost basis in the FIFO ledger, the holding-period carryover (§1223(3)) is preserved, and the Form 8949 row is populated with code W in column (f) and the disallowed amount in column (g). When you eventually sell the replacement lot, the higher basis flows through — the loss is deferred, not lost.

Worked example: Alex's TSLA across Schwab and Fidelity

Alex is a US investor filing for the 2025 tax year. She uses FIFO and holds Tesla at both Schwab and Fidelity. Here is the trade that triggers the wash sale, the Form 8949 entry the IRS expects, and the federal-tax delta of getting it right.

The two trades

The activity that triggers the wash sale

# Date Broker Action Qty Price Amount
1 2025-09-15 Schwab SELL 100 $240 $24,000 proceeds · cost basis $30,000 · realized -$6,000
2 2025-10-08 Fidelity BUY 100 $250 $25,000

Sell-to-buy gap: 23 days, well inside the §1091 61-day window. Same CUSIP → "substantially identical." Result: wash sale triggered. The $6,000 loss is disallowed in 2025 and added to the new Fidelity lot's cost basis.

The basis adjustment

Replacement lot — adjusted cost basis

Adjustment Amount
Fidelity lot — original cost $25,000
+ disallowed loss from Schwab sale +$6,000
Fidelity lot — adjusted cost basis $31,000
Holding-period carryover Long-term clock inherits from the Schwab lot (IRC §1223(3))

The Form 8949 row

Box B applies here (basis not reported to IRS for the Schwab sale on the wash-sale row). The disallowed loss goes as a positive number in column (g), and the wash-sale code W goes in column (f). Column (h) gain/loss is zeroed.

Form 8949 entry (Box B — short-term, basis not reported)

(a) Description (b) Acquired (c) Sold (d) Proceeds (e) Basis (f) Code (g) Adjustment (h) Gain/(Loss)
100 sh TSLA various 2025-09-15 $24,000 $30,000 W +$6,000 $0

The loss is fully disallowed → zero net gain or loss flows to Schedule D line 1b (short-term, basis not reported) or line 8b (long-term) depending on the original Schwab holding period.

The cross-broker trap (the wrong answer)

Schwab's 1099-B only sees its own activity. Because the replacement purchase happened at Fidelity, Schwab reports the $6,000 loss as allowed with no code W. Fidelity's 1099-B is silent — it never saw the loss. TurboTax imports both faithfully and gives Alex a $6,000 deduction the IRS will disallow on audit, with §6662 accuracy-related penalties up to 20% of the resulting underpayment on top.

The right answer — $1,920 in deferred tax and audit risk avoided

AllInvestView scans the consolidated ledger across every connected account on every sync. When a sell-at-loss matches a buy of the same CUSIP within ±30 days on any account, the wash sale is flagged, code W is emitted on Form 8949 column (f), the disallowed amount populates column (g), and the $6,000 is automatically added to the Fidelity lot's basis. Tax delta: avoiding a $6,000 phantom deduction at Alex's 32% marginal bracket = ~$1,920 in federal tax (deferred, not lost) plus the §6662 accuracy-related penalty exposure. The $6,000 loss is recovered when Alex eventually sells the Fidelity lot at its $31,000 adjusted basis.

AllInvestView tax report Tax Loss Harvesting strip with a Wash Sale Status column flagging TSLA Risk - Safe after a future date
From the live tax report: positions with a recent buy inside the §1091 window are flagged with the safe-to-harvest date.

This is the kind of calculation we run for you. Read-only broker access, results in minutes, your portfolio stays private.

See your own cross-broker wash sales

Connect your brokers (or import CSVs) and we will show every match in the 61-day window with the Form 8949 code W row ready to file.

Start free

How AllInvestView compares

An honest look at the tools US investors actually use when a sell-at-loss meets a rebuy. We win on cross-broker detection and the §1091 mechanics; broker-native 1099-Bs win on within-broker compliance because they are the source. We say so where it is true.

Capability AllInvestView Broker 1099-B TurboTax CSV CPA + Excel
Wash sale detection within one broker
Wash sale detection across multiple brokers
Full 61-day window (30 days before AND after)
"Substantially identical" matching by CUSIP across accounts
Disallowed loss added to replacement-lot basis
Form 8949 code W + column (g) adjustment auto-populated
Holding-period carryover (§1223(3)) on replacement lot
Multi-year recovery — disallowed loss surfaces on replacement-lot sale
IRA / Roth scope (Rev. Rul. 2008-5) + spousal accounts (per IRS guidance, treat as related party)
Audit-ready report with §1091 citations + lot trail
Updates automatically as new trades sync
Cost $14.99/mo $0 $89–$219 $400–$2,000

AI personal-finance tools that read accounts via Plaid do not model wash sales — Plaid returns current balances and recent activity, not the multi-year lot ledger §1091 needs.

Multi-year recovery: why the disallowed loss isn't lost

The most common misconception about wash sales is that the disallowed loss disappears. It does not (with one important exception — see the IRA gotcha in FAQ #5). The disallowed amount is added to the replacement lot's basis and the holding-period clock is carried over. When the replacement lot is eventually sold, the higher basis surfaces the loss then.

Tracing Alex's $6,000 across tax years

Year Event Reported gain/(loss) Running tax outcome
2025 Schwab sale -$6,000 + Fidelity wash buy $0 (loss disallowed) +$1,920 federal tax owed (vs. $0 if loss were allowed)
2027 Fidelity lot sold at $300/sh = $30,000 proceeds $30,000 − $31,000 adjusted basis = -$1,000 Loss recovered: basis was $25,000 unadjusted, $31,000 with the §1091 add

Net effect over the two years: the same $6,000 of economic loss eventually flows through — it just lands in 2027 instead of 2025. The IRS gets its way; the loss is deferred, not destroyed. This is exactly what code W on the original Form 8949 row preserves.

The exception — IRA replacement purchases

If the replacement buy happens inside a Traditional or Roth IRA (per IRS Rev. Rul. 2008-5), the loss is permanently destroyed. The basis adjustment cannot cross into the IRA because IRAs have no cost basis to begin with. FAQ #5 below covers this and AllInvestView flags it on the report.

Ready to generate your own Form 8949 with code W?

Free for 14 days. Read-only broker access. No card to start. Cancel anytime.

Connect your brokers

Frequently asked questions

IRS-cited: §1091 · §1223(3) · §6662 · Rev. Rul. 2008-5 · Notice 2014-21 · Pub 550

A wash sale happens when you sell a security at a loss and buy a substantially identical one within 30 days before or after the sale (a 61-day window total, per IRC §1091). The loss is disallowed in the current tax year and added to the basis of the replacement lot. It matters because claiming a disallowed loss can trigger IRS adjustments and §6662 accuracy-related penalties up to 20% of the underpayment.

Yes. The rule applies to you, not to each broker. The IRS examines all accounts you control — Schwab, Fidelity, IBKR, IRAs, and spousal accounts (per IRS guidance, treat as related party). Each broker's 1099-B only sees its own activity, so cross-broker wash sales are routinely missed unless you (or a tool like AllInvestView) consolidate the ledger.

On Form 8949, enter the sale in the appropriate box (A/B/C for short-term, D/E/F for long-term), put code W in column (f), and the disallowed loss as a positive number in column (g). Column (h) gain/loss is reduced (or zeroed) accordingly. Schedule D summarizes the totals from your 8949s onto line 1 and line 8. Full Form 8949 row mechanics — Box A–F selection, every adjustment code, totals reconciliation — in our Form 8949 generator →.

It is not lost — it is deferred. The disallowed amount is added to the cost basis of the replacement lot, and the holding period of the original lot carries over (IRC §1223(3)). When you eventually sell the replacement lot, the higher basis means a smaller gain (or larger loss), and the original disallowed loss is recovered then. The FIFO/LIFO ledger consumes the bumped-basis lot on the next sale.

Yes — and worse than usual. Per IRS Rev. Rul. 2008-5, if you sell at a loss in a taxable account and the replacement purchase happens inside your Traditional or Roth IRA, the loss is permanently disallowed and the basis adjustment does not carry into the IRA. The deferred loss is destroyed. Spousal accounts are also in scope (per IRS guidance, treat as related party). Common trap; we flag it.

Read-only SnapTrade connections pull every fill from every connected account into one ledger. On every sync, we run a 61-day window scan: each sell-at-loss is matched against buys of the same CUSIP on every connected account, including IRAs and spousal accounts you have added (per IRS guidance, spousal accounts are treated as related party). Matches populate code W, the column (g) adjustment, and the replacement lot's adjusted basis automatically. Options on the same underlying with the same strike and expiration are covered too — see the options trading tax tracker for the §1234 / §1256 detail.

We reconcile. Broker-flagged wash sales (within-broker) are imported with code W intact. If our cross-broker scan finds an additional wash sale the broker missed, we add the second adjustment without double-counting. The final Form 8949 is the union of broker-reported and AllInvestView-detected wash sales, with a per-row source tag in the audit report.

Gray area. The IRS does not precisely define "substantially identical." Buying a different company's stock in the same sector clearly is not substantially identical. Two S&P 500 ETFs from different issuers (e.g., VOO and IVV) is debated — most practitioners treat them as not identical, but the IRS has never issued a definitive ruling. Safer: switch to a different index (e.g., total-market or large-cap-value). AllInvestView flags exact-CUSIP matches with high confidence; we do not render legal opinions on ETF substitution.

Currently no. Per IRS Notice 2014-21, crypto is classified as property and §1091 references "stock or securities" — Treasury has confirmed crypto is outside §1091 today. Legislation to extend the rule to digital assets has been proposed (Build Back Better Act, subsequent bills) but not enacted. AllInvestView tracks crypto trades and will flag wash sales the day the law changes; we do not flag for crypto today.

Disclaimer: This page is informational and educational. It does not constitute tax, legal, or financial advice. AllInvestView is a calculation tool that produces tax reports from your transaction data; it does not replace a qualified tax professional. The "substantially identical" determination, IRA-side replacement purchases, and spousal-account scope are areas where IRS interpretation continues to evolve — always review generated reports and consult a CPA for complex situations.

Every wash sale, every broker, every year.

Private by default. Read-only broker access. No AI training on your portfolio. Detect cross-broker wash sales and generate Form 8949 code W rows in minutes.

AllInvestView Team

We are financial engineers and DIY investors building the portfolio tracker we wanted for ourselves. AllInvestView is for US equity investors who need more than what any single broker shows them — cross-broker FIFO, wash-sale detection, and audit-ready Form 8949 output.

Wash sale tracker Free for 14 days
Start free