Who this page is for
US investors with realized gains or losses at two or more brokers.
The typical reader: a US taxpayer who sold something in the current tax year and now has to file Form 8949 (or several Form 8949s) as detail under Schedule D. You hold the same tickers at Schwab and Fidelity, or you traded actively at IBKR and Robinhood, or you took an ACAT transfer that landed with the basis field blank, or your 1099-B reports a basis you know is wrong. Every per-broker 1099-B only sees its own activity, and the IRS reconciliation that follows is the kind of thing that draws letters. This page exists for the filer who needs the per-lot detail consolidated, classified, and tied back to Schedule D line 16 in one filing.
Form 8949 specifics
Three things to know before the worked example: the six boxes (every lot lands in exactly one), the eight columns (a through h), and the adjustment codes that show up in real equity portfolios.
The Form 8949 reference, in 180 words plus three tables.
Form 8949 splits every disposition into a short-term half (Part I, boxes A/B/C) and a long-term half (Part II, boxes D/E/F). Within each half the box selection turns on what the broker reported to the IRS — covered (basis reported), non-covered (basis not reported), or no 1099-B at all. Eight columns describe each lot, with the adjustment in column (g) carrying the sign convention that keeps the IRS reconciliation intact. AllInvestView pulls the box determination from the 1099-B fields plus the holding-period calendar and applies the most common adjustment codes automatically.
The six boxes — every lot lands in exactly one
| Box | Term | Basis reported to IRS? | Typical source |
|---|---|---|---|
| A | Short-term | Yes (covered) | Post-2011 stock at one broker |
| B | Short-term | No (non-covered) | Pre-2011 stock, ACAT-in lots |
| C | Short-term | No 1099-B received | Private sales, some crypto |
| D | Long-term | Yes (covered) | Post-2011 stock held >1 year |
| E | Long-term | No (non-covered) | Pre-2011 lots, ACAT-in held >1 year |
| F | Long-term | No 1099-B received | Private sales, some crypto |
The eight columns (a through h)
| Column | What it carries |
|---|---|
| (a) Description | Quantity + security (e.g., "100 sh MSFT") |
| (b) Date acquired | Acquisition date (or "various" for lot aggregations) |
| (c) Date sold | Disposal date |
| (d) Proceeds | Sale proceeds net of commissions |
| (e) Cost basis | Basis as reported on the 1099-B (for Box A/D) — the IRS reconciliation key |
| (f) Code | Adjustment code (W, B, D, L, N, S, H, Q, R, X, C) — blank if none |
| (g) Adjustment | Dollar amount of the adjustment, with the sign per code |
| (h) Gain/(Loss) | (d) − (e) ± (g) — the actual taxable amount |
The eleven adjustment codes that show up in real portfolios
| Code | When it applies |
|---|---|
| W | Wash sale — disallowed loss enters column (g) as a positive number. Full detail in our Wash Sale Tracker → |
| B | Broker-reported basis is wrong — correction amount in (g), sign matches direction (positive if broker overstated basis, negative if understated). |
| D | Accrued market discount on bonds — portion of gain treated as ordinary income. |
| L | Nondeductible loss other than a wash sale (e.g., loss on personal-use property, or a disallowed loss the other codes don’t cover). |
| N | Received as a nominee — gain or loss belongs to someone else. |
| S | Loss from sale or exchange of property between related parties is disallowed (IRC §267). |
| H | Sale of primary residence — Section 121 exclusion. |
| Q | Section 1202 qualified small-business stock exclusion. |
| R | Section 1045 rollover into another QSBS. |
| X | None of the other codes (B, N, L, H, D, Q, R, S, W, C) applies — rarely used catch-all per the IRS Form 8949 instructions. |
| C | Collectibles — 28% maximum LTCG rate. |
How totals flow
Box A/B/C totals feed Schedule D Part I lines 1b, 2 and 3. Box D/E/F totals feed Schedule D Part II lines 8b, 9 and 10. Schedule D line 16 is the net of the two, and it lands on Form 1040 line 7.
How it works: 3 steps
Nothing leaves your hands. Brokers connect read-only via SnapTrade, the consolidated ledger lives in your account, and the final artifact is the actual filable Form 8949 PDF.
Connect → Classify → Export PDF
Worked example: Priya's 4 realized lots
Priya is a US investor filing for the 2026 tax year. She holds across Schwab, Fidelity, and IBKR; she uses FIFO. Four realized lots this year exercise every common Form 8949 surprise — a clean long-term gain, a wash sale that crossed brokers, a broker basis that turned out to be wrong, and an ACAT-transferred lot that landed with the basis field blank.
The four lots and what each one does
Realized lots, 2026 tax year
| # | Sym | Acquired | Sold | Qty | Proceeds | Broker basis | True basis | Box | Code |
|---|---|---|---|---|---|---|---|---|---|
| 1 | MSFT | 2023-05-10 Schwab | 2026-06-15 | 100 | $44,000 | $31,000 | $31,000 | D | — |
| 2 | AAPL | 2024-04-22 Schwab | 2026-03-10 | 50 | $9,800 | $11,200 | $11,200 | D | W |
| 3 | NVDA | 2025-09-12 Fidelity | 2026-04-22 | 200 | $42,000 | $32,000 | $30,000 | A | B |
| 4 | VTI | 2022-11-05 IBKR (ACAT-in) | 2026-07-01 | 75 | $20,250 | (blank) | $17,800 | E | — |
- Row 1 — clean LT gain (Box D, no code). MSFT held more than one year at the same broker. Basis was reported correctly. Nothing to adjust. Pure $13,000 long-term gain.
- Row 2 — wash sale (Box D, code W). Priya sold AAPL at a $1,400 loss and rebought identical shares at Fidelity 14 days later. The loss is disallowed in 2026: column (g) carries +$1,400, column (h) zeroes, and the disallowed amount is added to the Fidelity replacement lot's basis. The mechanics live in our Wash Sale Tracker →.
- Row 3 — basis correction (Box A, code B). Fidelity's 1099-B reports $32,000 cost basis but Priya's records show the true basis is $30,000 — the broker overstated basis by $2,000 (missed a corporate-action adjustment from a 2025 spinoff that should have reduced basis). With code B, we enter the broker's reported basis in (e) so the IRS reconciliation matches, then put +$2,000 in (g) to correct upward — because broker-implied gain (42,000 − 32,000 = $10,000) is too low by $2,000. Column (h) reflects the true $12,000 gain. NVDA was held 222 days, so this is short-term Box A.
- Row 4 — ACAT-transferred lot, basis-unknown (Box E). The VTI lot was transferred from a closed account; IBKR's 1099-B reports it as non-covered with the basis blank. We re-establish $17,800 basis from the original broker's records, land it on Box E (LT, basis not reported), no adjustment code needed — there is no broker-reported basis to "adjust."
The populated Form 8949
Form 8949 — four lots, three boxes, two adjustment codes
| (a) Description | (b) Acq | (c) Sold | (d) Proceeds | (e) Basis | (f) Code | (g) Adj | (h) Gain/(Loss) | Box |
|---|---|---|---|---|---|---|---|---|
| 100 sh MSFT | 2023-05-10 | 2026-06-15 | $44,000 | $31,000 | — | — | +$13,000 | D |
| 50 sh AAPL | 2024-04-22 | 2026-03-10 | $9,800 | $11,200 | W | +$1,400 | $0 | D |
| 200 sh NVDA | 2025-09-12 | 2026-04-22 | $42,000 | $32,000 | B | +$2,000 | +$12,000 | A |
| 75 sh VTI | 2022-11-05 | 2026-07-01 | $20,250 | $17,800 | — | — | +$2,450 | E |
Box subtotals
| Box | Proceeds | Basis | Adj | Gain/(Loss) |
|---|---|---|---|---|
| A (ST covered) | $42,000 | $32,000 | +$2,000 | +$12,000 |
| D (LT covered) | $53,800 | $42,200 | +$1,400 | +$13,000 |
| E (LT non-covered) | $20,250 | $17,800 | $0 | +$2,450 |
Flow to Schedule D
Schedule D — lines populated by the 8949 above
| Schedule D line | Source | Proceeds | Basis | Adj | Gain/(Loss) |
|---|---|---|---|---|---|
| 1b (ST, basis reported) | 8949 Box A | $42,000 | $32,000 | +$2,000 | +$12,000 |
| Line 7 — Net ST gain | +$12,000 | ||||
| 8b (LT, basis reported) | 8949 Box D | $53,800 | $42,200 | +$1,400 | +$13,000 |
| Line 9 (LT, basis NOT reported) | 8949 Box E | $20,250 | $17,800 | $0 | +$2,450 |
| Line 15 — Net LT gain | +$15,450 | ||||
| Line 16 — Total → Form 1040 line 7 | +$27,450 | ||||
Arithmetic check: ST $12,000 + LT $15,450 = $27,450 net gain.
The wrong answer — what a TurboTax CSV import produces
Without a consolidated ledger: NVDA's $32,000 overstated broker basis would carry straight through (true gain $12,000 understated as $10,000 = $2,000 phantom under-reporting = ~$640 federal tax owed but missed at Priya's 32% ST marginal). AAPL's wash sale would be missed because the rebuy was at Fidelity, not Schwab (the $1,400 disallowed loss would be wrongly claimed = ~$210 over-refunded at 15% LTCG). VTI's ACAT lot would likely default to short-term Box B because the basis is blank and the broker has no acquisition date (LT $2,450 taxed at ST rates = ~$415 bracket delta at 32% vs 15%). Total error: ~$1,265 plus audit exposure.
The right answer — AllInvestView produces the 8949 above
On every sync we run the consolidated ledger: NVDA's basis discrepancy is flagged against our independent calculation and code B is emitted; AAPL's cross-broker rebuy is detected and code W is emitted; VTI's ACAT lot is restored to Box E with the reconstructed basis from the original broker. The IRS reconciliation in column (e) is preserved on every Box A/D row (broker-reported basis stays as filed; the correction lives in column (g)). The PDF prints alongside Form 1040 and the totals tie to Schedule D line 16.
This is the kind of calculation we run for you. Read-only broker access, results in minutes, your portfolio stays private.
Ready to generate your own Form 8949?
Free 14-day trial. Read-only broker access. No card to start. Cancel anytime.
How AllInvestView compares
An honest look at the tools US investors actually use when they have to produce Form 8949. We win on cross-broker consolidation, adjustment-code automation, and ACAT-lot recovery; per-broker 1099-Bs win on within-broker compliance because they are the IRS source. We say so where it is true.
| Capability | AllInvestView | Broker 1099-B | TurboTax CSV | CPA + Excel |
|---|---|---|---|---|
| Multi-broker consolidation onto one Form 8949 | ||||
| Correct Box A/B/C/D/E/F selection per lot | ||||
| Adjustment codes auto-applied (W, B, D, L, N, S, X) | ||||
| Wash sale detection across brokers → code W | ||||
| Basis correction with code B (broker reported wrong basis) | ||||
| ACAT-transferred lot recovery → Box B/E | ||||
| Specific-identification per lot (vs forced broker FIFO) | ||||
| Mixed-broker FIFO matching across consolidated ledger | ||||
| Export ready for e-file or paper attachment | ||||
| Loss carry-forward tracking across tax years | ||||
| Form 8949 PDF (IRS-format) + print-friendly HTML | ||||
| Per-row audit trail with broker + lot source attribution | ||||
| Updates automatically as new trades sync | ||||
| Cost | $14.99/mo | $0 | $89–$219 | $400–$2,000 |
Single broker with clean covered lots and no wash sales → broker 1099-B + TurboTax import is fine. Two or more brokers, ACAT transfers, basis corrections, cross-account wash sales, or options assignments → you need a consolidated ledger. The multi-broker tax report is the hub view; this page is the form output.
Frequently asked questions
IRS-cited: §1091 · §1223(3) · §1202 · §1045 · Pub 550 · Pub 551 · 2026 Instructions for Form 8949
Connect each broker read-only via SnapTrade. AllInvestView consolidates every fill into one FIFO-matched ledger, classifies each realized lot into Box A–F based on what each broker reported to the IRS (covered vs non-covered, short- vs long-term), applies adjustment codes where applicable (W, B, D, etc.), and produces a single IRS-format PDF that prints alongside your Form 1040. Totals reconcile to Schedule D Part I and Part II automatically. The multi-broker tax report is the upstream consolidation step.
Decision tree: Was a 1099-B issued? If no → Box C (ST) or Box F (LT). If yes → was basis reported to the IRS on that 1099-B? Yes + ST → Box A. Yes + LT → Box D. No + ST → Box B. No + LT → Box E. Long-term means held more than one year (acquisition + 366 days for non-leap acquisitions). AllInvestView picks the box per lot from the 1099-B fields plus the holding-period calendar.
The common ones in real equity portfolios: W (wash sale — disallowed loss as positive in column g), B (broker-reported basis is wrong — correction amount in g, sign matches the direction), D (accrued market discount on bonds), L (nondeductible loss other than a wash sale), N (received as nominee), S (related-party loss disallowed), H (sale of primary residence), Q (§1202 small-business stock exclusion), R (§1045 rollover), X (catch-all when none of the other codes applies), C (collectibles, 28% rate). AllInvestView populates W, B, D and N automatically from the ledger; the others are user-flagged.
Enter the sale row in the box that matches the original lot (A/B/C/D/E/F by term and basis-reporting status), put W in column (f), and the disallowed loss as a positive number in column (g). Column (h) gain/loss is reduced (or zeroed) by that amount. The disallowed loss is added to the replacement lot's basis, which AllInvestView updates automatically. Full mechanics in our Wash Sale Tracker →.
Use code B. Enter the broker's reported basis in column (e) exactly as it appears on the 1099-B (so the IRS reconciliation matches), put B in column (f), and enter the correction in column (g) — positive if the broker overstated basis (broker-implied gain is too low, so the adjustment adds to it), negative if the broker understated basis (broker-implied gain is too high, so the adjustment subtracts from it). Column (h) reflects the true gain or loss. Common causes: missed corporate-action adjustments (spinoffs, stock dividends), incorrect ACAT-in basis, missed wash-sale carryovers. AllInvestView reconciles broker-reported basis against our independent ledger on every sync and flags discrepancies.
ACAT-transferred lots typically arrive at the receiving broker as non-covered — basis is left blank on the 1099-B regardless of the original covered status. They land on Box B (ST) or Box E (LT). Enter the basis you can reconstruct from the original broker's statements in column (e); no adjustment code is needed, because the receiving broker reported no basis to "adjust." AllInvestView retains the original acquisition date and basis through the transfer.
Both. Most consumer tax software (TurboTax, H&R Block, FreeTaxUSA, TaxAct) accepts Form 8949 detail as part of the 1040 e-file submission, either entered transaction-by-transaction or attached as a PDF/summary. The IRS also accepts Form 8453 with a paper 8949 attachment if you e-file the rest of the return. AllInvestView produces an IRS-format PDF you can attach via Form 8453 or copy into your tax software's manual-entry screen. Totals can be entered as a summary on Schedule D if you attach the detail PDF.
Yes — Form 8949 is the detail for Schedule D. The IRS requires every individual lot disposition (or a per-broker summary with attached detail) unless you qualify for the summary exception: all transactions are Box A or D with no adjustments and basis was reported. If you have any wash sales (code W), basis corrections (code B), ACAT lots (Box B/E), or any non-covered lots, you must file the detail.
The IRS matches each Box A/D row on your 8949 against the basis your broker reported on the 1099-B. If you enter a different basis in column (e), the IRS will flag the return. AllInvestView's workflow: enter the broker's reported basis in column (e) as filed (keeps the IRS match), put code B in column (f), and enter the correction in column (g). Net (h) reflects the true gain or loss. The audit trail on each row records both the broker-reported basis and our independently-calculated basis with full source attribution.