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
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.
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.
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.
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.