The single most common RSU and ESPP tax mistake at filing time is paying tax twice on the same dollars. It happens because brokerages are legally restricted from reporting the full cost basis on Form 1099-B for shares received as compensation — they can only report the “purchase price” (which for RSUs is $0 and for ESPPs is the discounted purchase price, not the FMV). If you take the 1099-B at face value, you pay ordinary income tax at vest and capital gains tax on the entire sale price — taxed twice on the FMV portion that was already W-2 income.
The fix is a one-line adjustment on Form 8949 using the basis-correction code B. Most online tax software has a specific RSU/ESPP wizard that handles this automatically — but only if you tell it the sale was from compensation stock. If you don’t, your software files the broker’s $0 basis as-is and you overpay.
Why brokerages report $0 (or low) basis
The IRS rules at 26 CFR §1.6045-1 require brokers to report a “covered basis” on Form 1099-B for stock acquired after 2011 — meaning the broker tracks basis through their system. For employer stock plans (RSUs, ESPPs, ISO/NSO exercises), the broker’s records typically show only:
- RSU: shares received from the company at $0 — broker basis = $0
- ESPP: shares purchased at the discounted price — broker basis = purchase price (e.g., $42.50 for a $50 stock with 15% discount)
- NSO: shares received at the strike price — broker basis = strike price
In all three cases, the broker’s basis is less than your true tax basis because it omits the bargain element / vest-day FMV that was already taxed as W-2 ordinary income. Form 1099-B box 1e (“Cost or other basis”) shows the broker’s number, which is the wrong number for your tax return.
To make matters worse, the broker often reports the basis in box 12 (“Basis reported to IRS”) or box 1e flagged as “covered” — meaning the IRS sees the broker’s number too. If you don’t override on Form 8949, your tax software will reconcile against what’s been reported and you’ll owe additional tax.
The true cost basis (what you should use)
Your true cost basis for tax purposes equals the FMV on the day you took ownership and recognized the W-2 income:
- RSU: vest-day FMV × shares (the amount that hit your W-2 Box 1 at vest)
- ESPP qualifying disposition: vest-day FMV (offering price + lookback discount, depending on whether qualifying or disqualifying)
- ESPP disqualifying disposition: FMV at purchase date (since the bargain element was W-2 income)
- NSO: FMV at exercise date (strike + bargain element = exercise-day FMV)
- ISO qualifying disposition: strike price (the only ordinary-income event was avoided; full gain is LTCG)
- ISO disqualifying disposition: similar to NSO — FMV at exercise
For RSUs (the most common case), the math is:
True basis = vest-day FMV × shares
= $50 × 1,000 = $50,000
Sale proceeds = $52 × 1,000 = $52,000
Capital gain = $52,000 − $50,000 = $2,000
(correct)
Without the correction, the broker reports $0 basis and your “capital gain” appears to be $52,000 — but $50,000 of that was already taxed as ordinary income at vest. You’d be taxed twice on the $50K.
Form 8949 walkthrough
Form 8949 is the IRS form for reporting capital asset sales. It feeds Schedule D. Each sale gets a row.
For an RSU sale where the broker reported $0 basis:
| Box | Field | What you enter |
|---|---|---|
| (a) | Description | ”1,000 sh ACME Inc” |
| (b) | Date acquired | The vest date (start of holding period) |
| (c) | Date sold | The sale date |
| (d) | Proceeds (sales price) | $52,000 (broker reported) |
| (e) | Cost or other basis | $0 (broker reported, even though incorrect) |
| (f) | Code(s) | B (basis adjustment) |
| (g) | Amount of adjustment | $50,000 (the missing basis you need to add) |
| (h) | Gain/loss | $52,000 − $0 + $50,000 = $2,000 (correct gain) |
The Form 8949 code B specifically means “basis reported to IRS was incorrect; adjusting upward”. The IRS’s automated 1099-B matching cross-checks the broker’s number against your return; using code B explicitly tells the system “I know you have $0 from the broker; here’s the correct basis”.
Most tax software handles this through an “Add cost basis adjustment” or “RSU/ESPP basis correction” prompt. TurboTax Premier, H&R Block Premium, FreeTaxUSA, and TaxAct all have this walkthrough — you input the W-2 income amount associated with the vesting, and the software computes the correction.
Two transactions, two rows: short-term vs long-term
If you sold a mix of shares — some held under a year, some over — you need two separate Form 8949 sections (or rows):
- Short-term capital gain/loss rows go in Part I of Form 8949
- Long-term capital gain/loss rows go in Part II
A common scenario: you have 4 quarterly vests in 2025, sell all of them in December 2025. The Q4 vest is held under 1 year (short-term), the Q1, Q2, Q3 are held over 1 year (assuming year-1 vest in 2024 too — depends on your specific dates). Each batch gets its own row with its own adjusted basis.
Some brokerages provide a “Supplemental Statement” alongside the 1099-B that lists each lot’s true cost basis for compensation stock. Fidelity NetBenefits, Charles Schwab Equity Award, E*TRADE Stock Plan, and Morgan Stanley Shareworks all produce these. The supplemental statement is your friend — it’s the IRS-acceptable evidence of the true basis. Save it indefinitely.
ESPP basis correction is more complex
For ESPP, the basis adjustment depends on whether the disposition is qualifying or disqualifying:
Qualifying disposition (held 2+ yrs from offering date AND 1+ yr from purchase)
Ordinary income at vest = lesser of:
- Discount at offering date × shares, OR
- Actual gain (sale price − purchase price) × shares
Cost basis for capital gain = purchase price + ordinary income recognized.
Disqualifying disposition (sold before 2yr/1yr requirement)
Ordinary income = (Purchase-day FMV − Purchase price) × shares — i.e., the full bargain at purchase, not lesser-of.
Cost basis = purchase price + ordinary income.
Both cases, you adjust the basis upward on Form 8949 with code B by the amount that was already W-2 income.
The ESPP supplemental statement from your broker will compute the right number — but you have to tell your tax software the disposition is qualifying or disqualifying so it knows how to apply the lesser-of rule for qualifying.
NSO and ISO basis corrections
NSO
Cost basis = exercise-day FMV (strike + bargain). The broker reports strike price as basis on 1099-B; you adjust upward by the bargain element with code B.
ISO disqualifying disposition
Cost basis = exercise-day FMV. Bargain element is W-2 ordinary income recognized in the year of disposition (not exercise). Form 3921 from the company shows the strike and exercise FMV.
ISO qualifying disposition (held 2yr from grant + 1yr from exercise)
Cost basis = strike price (no ordinary income event to add). This is the rare case where the broker’s basis matches the true basis. No Form 8949 code B adjustment needed.
Records to keep
For audit defense and tax-software accuracy, keep these per vesting / exercise:
- Vest confirmation from your broker portal (vest date, shares, FMV, taxes withheld)
- W-2 Box 1, 12 V for the year the income was recognized (Box 12 V shows NSO income separately; RSU income is in Box 1 only)
- Form 3921 (if ISO) — shows strike, exercise FMV
- Supplemental 1099-B statement — your broker’s per-lot true-basis worksheet
- The 1099-B itself
Keep these for at least the IRS statute of limitations on the year of sale (3 years, or 6 years for 25%+ understatement). For shares with very long holding periods, keep them as long as you hold the shares.
What if you’ve already filed without the correction?
You can amend a return with Form 1040-X within 3 years of the original filing date (or 2 years from when the tax was paid, whichever is later). Most RSU/ESPP basis corrections produce refunds (you overpaid because of double-taxation), so amending is worthwhile if the savings exceed the time cost.
The amended return:
- File Form 1040-X with corrected Schedule D and Form 8949
- Attach a brief explanation: “Corrected cost basis for RSU/ESPP sale per Form 8949 code B”
- Include any supporting documentation (broker supplemental statement)
- Mail the amended return; e-filing of 1040-X is supported for tax years 2019+ in some software
The IRS typically processes 1040-X amendments in 8–12 weeks. If your refund is large enough to matter ($1K+), it’s worth the paperwork.
Key takeaways
- Brokerages report $0 (RSU) or purchase price (ESPP / NSO) on Form 1099-B — almost always lower than your true tax basis
- Form 8949 code B is the IRS-blessed method for adjusting the basis upward to reflect the vest-day FMV (or exercise-day FMV) already taxed as W-2 income
- True basis = FMV on day of taxable event (vest, exercise, purchase) — track this from W-2 Box 1, Form 3921, and broker supplemental statements
- ESPP basis correction depends on qualifying vs disqualifying — your software needs to know which
- ISO qualifying disposition is the only common case where broker basis matches true basis (no correction needed)
- If you’ve already overpaid in past years, amend with Form 1040-X within 3 years for a refund
- Keep the broker supplemental 1099-B statement and W-2 evidence indefinitely for audit defense
Run the actual numbers in the RSU Tax Calculator or ESPP Calculator — both compute the true cost basis and walk through what the Form 8949 correction should show.