September 11, 2026 · BriMindInvest Research Team · 11 min read · Tax Strategy
Every stock, ETF, or crypto sale you make in a taxable account has to show up on your tax return — and the IRS wants it on two specific forms: Form 8949 and Schedule D. Here's exactly how they work, how they connect, and how to avoid the mistakes that trigger IRS notices.
Form 8949 ("Sales and Other Dispositions of Capital Assets") is where every individual sale gets its own row: what you sold, when you bought it, when you sold it, what you received, what your cost basis was, and any adjustment needed. Think of it as the itemized receipt.
Schedule D ("Capital Gains and Losses") is the summary page. It totals up everything from your Form(s) 8949 — separately for short-term and long-term — nets your gains against your losses, applies the $3,000 ordinary-income offset if you have a net loss, and carries the final number to Form 1040. If you have zero adjustments across the board, Schedule D can sometimes pull totals directly from your 1099-B without an 8949 at all (see the FAQ below).
1099-B (what your broker reports) → Form 8949 (your itemized, corrected version of it) → Schedule D (the totals) → Form 1040 (your actual tax bill).
Form 8949 has three parts for short-term sales (Part I, boxes A/B/C) and three for long-term (Part II, boxes D/E/F). You'll often need multiple copies of the form if your sales span more than one box.
| Box | Holding period | Basis reported to IRS? | Typical case |
|---|---|---|---|
| A | Short-term (≤ 1 yr) | Yes — covered | Most stock/ETF sales via a US broker |
| B | Short-term (≤ 1 yr) | No — noncovered | Old shares or transferred-in positions |
| C | Short-term (≤ 1 yr) | Not on a 1099-B | Crypto, private stock, no 1099-B issued |
| D | Long-term (> 1 yr) | Yes — covered | Most stock/ETF sales via a US broker |
| E | Long-term (> 1 yr) | No — noncovered | Old shares or transferred-in positions |
| F | Long-term (> 1 yr) | Not on a 1099-B | Crypto, private stock, no 1099-B issued |
Say you bought 50 shares of a stock for $4,000 on March 3, 2025, and sold all 50 shares for $5,500 on November 12, 2026. Your broker reported this as a covered, long-term sale (Box D). Here's how it lands on Form 8949:
| Column | What it means | This example |
|---|---|---|
| (a) Description | What you sold | 50 sh. XYZ Corp |
| (b) Date acquired | Purchase date | 03/03/2025 |
| (c) Date sold | Sale date | 11/12/2026 |
| (d) Proceeds | What you received | $5,500 |
| (e) Cost basis | What you paid | $4,000 |
| (f)/(g) Adjustment | Code + amount, if any | None needed |
| (h) Gain/loss | (d) − (e) + (g) | $1,500 gain |
Since the position was held more than a year, this $1,500 gain flows into the long-term section of Schedule D and is taxed at 0%, 15%, or 20% depending on your total taxable income — not at your ordinary income rate.
When you sell only part of a position you built up over several purchases, the IRS lets you choose which shares you're selling — and that choice changes the numbers that go on your 8949. Most brokers default to FIFO (first-in, first-out) unless you actively select a different lot before the trade settles.
Say you bought Stock XYZ in three separate lots, and on 08/01/2026 you sell 100 shares at $80 each ($8,000 proceeds):
| Lot | Purchase date | Shares | Cost basis |
|---|---|---|---|
| Lot A | 01/10/2024 | 50 | $3,000 ($60/sh) |
| Lot B | 06/15/2025 | 50 | $4,500 ($90/sh) |
| Lot C | 02/01/2026 | 100 | $10,500 ($105/sh) |
| Method | Lots sold | Basis used | Gain on this sale | Holding period |
|---|---|---|---|---|
| FIFO (broker default) | Lot A (50 sh) + Lot B (50 sh) | $3,000 + $4,500 = $7,500 | $500 gain | Long-term (both lots held > 1 yr) |
| Specific ID — highest cost first | Lot C (100 sh) | $10,500 | $2,500 loss | Short-term (Lot C held ~6 months) |
Same sale, same 100 shares, a $3,000 swing between a $500 gain and a $2,500 loss — purely from which lot you tell your broker to sell. You must specify the lot before the trade settles (usually T+1); you can't retroactively pick a more favorable lot after the fact when you sit down to file. If you're selling appreciated stock and want to control the tax outcome, log the specific lot with your broker at the time of the trade, not at tax time.
Most sales need no adjustment at all — column (h) is simply proceeds minus basis. But these codes come up often enough to know:
| Code | Meaning | Effect on gain/loss |
|---|---|---|
| W | Wash sale — loss disallowed | Adds back the disallowed loss (positive adjustment) |
| B | Basis reported to you was wrong | Corrects the basis you actually paid |
| O | Multiple codes apply to one transaction | See attached explanation statement |
| T | 1099-B shows type not matching this box | Reclassifies short/long-term as needed |
| H | Home sale — gain qualifies for exclusion | Excludes some or all of the gain (see §121) |
For the full list of adjustment codes (there are over a dozen for edge cases like Section 1256 contracts and installment sales), see the IRS Instructions for Form 8949 — link at the bottom of this guide.
The FAQ above explains code W conceptually — here's exactly how the numbers move through your 8949 when it applies:
| Date | Action | Effect |
|---|---|---|
| 07/01/2026 | Buy 100 sh. XYZ for $10,000 ($100/sh) | Original cost basis established |
| 10/01/2026 | Sell all 100 sh. for $8,000 ($80/sh) | $2,000 loss realized |
| 10/20/2026 | Buy 100 sh. XYZ back for $8,300 ($83/sh) | Within the 30-day window (before or after the sale) → wash sale triggered |
The disallowed $2,000 doesn't vanish — it's added to the cost basis of the replacement shares bought on October 20, making their adjusted basis $8,300 + $2,000 = $10,300 instead of $8,300. The tax benefit is deferred until you eventually sell those replacement shares without repeating the wash sale, not eliminated. This is why a wash sale is best described as a timing rule, not a penalty.
When restricted stock (RSUs) vest or ESPP shares purchase at a discount, your employer already adds that value to your W-2 as ordinary income and withholds tax on it. Your cost basis for those shares should include that already-taxed amount — but many 1099-Bs only report your out-of-pocket cost, not the W-2 income component, which overstates your gain unless you correct it.
ESPP shares work the same way but add a second wrinkle — whether the disposition is qualifying or disqualifying changes how much of the discount counts as ordinary income vs. capital gain. See our ESPP Tax Strategy guide for the full qualifying-vs-disqualifying breakdown.
For most investors, no. Every major consumer tax software (TurboTax, H&R Block, TaxAct, FreeTaxUSA) can import your 1099-B directly from most brokers via API or by uploading the broker's own CSV/PDF export, and will auto-generate the Form 8949 attachment and Schedule D totals from that import — you review the flagged adjustments rather than typing each row.
The IRS treats crypto as property: every sale, swap, or purchase made with crypto is a taxable event reported on Form 8949, exactly like a stock sale. New broker-level Form 1099-DA reporting for crypto exchanges is phasing in starting with the 2025 tax year, but initially reports proceeds only — most exchanges do not yet report your cost basis to the IRS. That means you should keep your own transaction records (or use a crypto tax-lot tool) and expect to report these sales in Box C or F ("not reported on a 1099-B") until basis reporting catches up.
Form 8949 and Schedule D aren't optional paperwork — they're how the IRS reconciles what your broker told them against what you report, and mismatches are one of the most common triggers for automated notices. The good news: for the vast majority of investors with covered, unadjusted transactions, tax software (or a downloadable 8949 attachment from your broker) does the heavy lifting automatically.
The places that actually require your attention are the exceptions: noncovered basis you have to supply yourself, wash sales that cross accounts your broker can't see, employer stock basis adjustments, and crypto sales without broker-reported basis. Get those right and the rest of the form is arithmetic.
Connect your real brokerage account and our Portfolio Analysis tool tracks every realized short- and long-term gain, flags wash sales, and estimates your tax bill — free for 14 days, no credit card required.
14-day free trial · No credit card required · Cancel anytime
Not ready to sign up? Get one free email a week instead.