ESPP Cost Basis: The Other Way You're Taxed Twice
Illustrative example, not your numbers. You buy 100 shares through your ESPP for $51 each while the stock trades at $60, then sell them for $60. Your real profit is $900. Your W-2 reports $900 of wages and your 1099-B reports a $900 gain, so your return counts $1,800 of income from a $900 profit. That's the ESPP double tax.
If you sold ESPP shares this year, your broker's 1099-B most likely reports only what you paid out of pocket as your cost basis, not the discount that was already taxed as compensation. Unless you adjust it on Form 8949, you'll pay tax on that same discount a second time.
Quick answer
- The ESPP discount is taxed as ordinary income, usually through your W-2 or on your own return. Your broker's 1099-B doesn't know that and reports your purchase price as basis.
- File with that basis as-is and the IRS sees a bigger capital gain than you actually had, so you overpay.
- The fix is a manual basis adjustment on Form 8949, built from the numbers on Form 3922.
- Whether you sold at a gain or a loss changes the math, and even a sale at a loss can still leave you with ordinary income.
Want the numbers first? Jump to the Cost Basis Adjustment Calculator.
Where you are right now
- I sold ESPP shares this year and haven't filed yetFix it before you file. Start with Fixing It: Form 3922, Form 8949, and Your Adjusted Basis.
- I already filed and think I overpaidGo straight to If you already filed without the adjustment.
- I'm deciding when to sell shares I still holdRead Qualifying vs. Disqualifying Disposition first.
And here's the twist almost nobody explains correctly: how much of your discount counts as ordinary income depends on whether your sale is "qualifying" or "disqualifying," and that distinction gets mixed up even on some tax sites.
Cost Basis Adjustment Calculator
Enter figures from your Form 3922 and 1099-B to see your corrected basis and the entry for Form 8949. Arithmetic only: it doesn't decide your sale type, estimate a tax bill, or file anything.
Runs in your browser. Nothing you type leaves this page.
This calculator needs JavaScript, and it isn't running on this page. Reload the page or try another browser. The formulas at the bottom of this box show the same arithmetic by hand.
Form 3922 is issued for the year you bought the shares, not the year you sold them, so look for the one from the purchase year. Your employer or plan administrator can reissue it if it's missing. Run the calculator once per purchase lot.
1Type of sale
You decide this, not the tool. A sale is qualifying only if you sold more than 2 years after the grant date (Form 3922, Box 1) and more than 1 year after the shares were transferred to you (Box 7). Miss either test and it's disqualifying.
2From your Form 3922
The discounted price, not the market price.
Needed for disqualifying sales.
Needed for qualifying sales.
Enter it if your form shows one (lookback plans). If your Box 8 is blank because the price was fixed at grant, leave this blank and the tool uses Box 5.
Pick a sale type above to see which Form 3922 boxes you need beyond Box 5.
3From your 1099-B
1099-B proceeds divided by shares sold. Still deciding? Try a hypothetical price.
Optional. Total for these shares, not per share. If blank, the tool assumes price paid times shares.
Choose a sale type, fill in the boxes, and press Calculate. Your result appears here.
Verify these figures against your own Form 3922 and consult a tax preparer before filing.
Formulas the calculator uses
- Disqualifying sale: ordinary income per share = fair market value on the purchase date (Box 4) minus price paid (Box 5), never below zero. It's fixed, whatever you sold for. Adjusted basis per share = price paid plus that ordinary income.
- Qualifying sale: ordinary income per share = the lesser of (a) your actual gain, sale price minus price paid, or (b) the grant-date discount, Box 3 minus Box 8 (or Box 3 minus Box 5 if Box 8 is blank). It can't go below zero. Adjusted basis per share = price paid plus that ordinary income.
- Form 8949, column (g): the basis your 1099-B shows minus the correct basis. It's negative when the correct basis is higher.
- Capital gain or loss after adjusting: proceeds minus adjusted basis.
What the W-2 Says vs. What the 1099-B Says
Two documents that should match, and don't. Illustrative figures from the example above.
Your W-2 (illustrative)
Box 1 wages include the $900 discount your employer knew about.
It doesn't show your sale at all.
Your 1099-B (illustrative)
Proceeds: $6,000. Cost basis: $5,100, only what you paid.
Reported gain: $900, the same $900 again.
| Form | What it reports | What it's missing |
|---|---|---|
| W-2, Box 1 | Wages. For a disqualifying sale, this usually includes the discount your employer knew about. For a qualifying sale, the IRS says employers should include the ordinary income here too. | Your sale. Some employers leave ESPP income off entirely, and Social Security and Medicare wages (Boxes 3 and 5) generally exclude it. |
| Form 1099-B, Box 1e | Your sale proceeds and a cost basis, typically only the price you paid. | The compensation income already taxed. The IRS's Form 8949 instructions say basis for compensatory options granted after 2013 won't reflect it. |
| Form 3922 | Grant date, purchase date, fair market value on both dates, price paid, shares, and the date legal title transferred. | Your sale. It isn't filed with your return, so it's raw data you use to work out the adjustment yourself. |
The ESPP Double Tax Trap, Explained Simply
Three documents are involved, and none of them sees the whole picture.
What gets taxed as compensation. With a standard Section 423 plan, the discount isn't taxed when you buy. Part of it becomes ordinary income when you sell, and how much depends on how long you held the shares (see the next section). Employers report that income as wages when they know about the sale.
What your broker reports. The 1099-B shows your proceeds and a cost basis. For ESPP shares, that basis is typically only the price you paid. This isn't a rare glitch. The IRS's Form 8949 instructions say the basis on a 1099-B for compensatory stock options granted after 2013 won't reflect income you already included, and they tell you to raise your basis by that amount yourself. Schwab's ESPP tax guide says the same thing for ESPP shares: under IRS rules the 1099-B basis leaves out the ordinary income, so you have to adjust to avoid paying twice. Fidelity's stock plan FAQ says its 1099-B basis reflects the purchase price only, and points you to a separate supplemental statement for adjusted basis.
What your software does. It imports the 1099-B and calculates gain as proceeds minus the low basis. Nothing in that import knows what your W-2 said.
Under the 1099-B rules, the basis your broker reports to the IRS leaves that income out, though some brokers show it on a supplemental statement. Nobody downstream corrects it for you.
A quick test. Multiply the shares you sold by the price you paid (Form 3922, Box 5). If that equals the basis in your 1099-B Box 1e, the discount is missing from the basis and the adjustment applies. If Box 1e is higher, your broker may already have included some compensation income (the IRS notes this can happen for older grants), so check the supplemental statement before adding anything.
Before you adjust, confirm the income was actually reported
Raising your basis only makes sense if the discount was counted as income on your return. For a disqualifying sale, your employer usually adds it to W-2 Box 1 when it knows about the sale. For a qualifying sale, the IRS says the employer should include it in Box 1 as well, but some don't. If the amount isn't on your W-2, the IRS says to report the ordinary income yourself on Schedule 1 (Form 1040), line 8k, for the year of the sale. Either way it should appear in your income once, and your basis should rise by the same amount.
One sale, three possible outcomes
Same illustrative sale as above, three ways it can end.
CORRECTLY ADJUSTED
Basis raised from $5,100 to $6,000 on Form 8949. Capital gain is $0. You pay tax once, as wages, on the $900.
THE TRAP
Basis left at $5,100. You report a $900 capital gain on top of $900 in wages, so you pay on $1,800.
ALREADY OVERPAID
You filed the trap version. The extra tax may be recoverable on an amended return if you're still inside the refund window. See If you already filed.
Qualifying vs. Disqualifying Disposition (and the Loss Scenario, Resolved)
The two holding-period clocks
A sale is a qualifying disposition only if both of these are true. The statute (IRC §423(a)) says no disposition within 2 years after the option was granted, nor within 1 year after the shares were transferred to you.
- You sold more than 2 years after the grant date, the start of the offering period (Form 3922, Box 1).
- You sold more than 1 year after the shares were transferred to you, meaning the purchase (Box 7, usually the same day as Box 2).
Fail either one and it's a disqualifying disposition. Meeting one clock doesn't rescue a sale that misses the other.
Illustrative timeline. An offering period starts January 1, 2024 and shares are bought June 30, 2024. One year after the purchase is June 30, 2025, but two years after the grant is January 1, 2026. The later date controls, so any sale before then is disqualifying. Leave a few days of cushion and confirm your own dates on Form 3922.
Separately, your capital gain or loss is long-term only if you held the shares more than one year after the purchase. A sale can be disqualifying for ESPP purposes and still produce a long-term capital result.
How the ordinary income is calculated
Disqualifying disposition. Ordinary income per share is the fair market value on the purchase date (Box 4) minus the price you paid (Box 5), and it can't go below zero (a fixed-price plan can leave you with a purchase-date value under your price if the stock fell). That amount is fixed once the shares are bought. Whatever happens to the stock after the purchase, and whatever you sell for, shows up as capital gain or loss on top of it.
Qualifying disposition. Under IRC §423(c), ordinary income per share is the lesser of two figures: your actual gain (sale price minus price paid), or the grant-date discount (Box 3 minus Box 8, or minus Box 5 if Box 8 is blank, which the IRS instructions call for when the price was fixed at grant). If you sell below what you paid, the actual gain is negative and the ordinary income is zero. Whatever remains beyond the ordinary income is long-term capital gain or loss.
Where the lookback fits. Many plans set your price at a discount to the lower of the grant-date and purchase-date prices. If the stock rose during the offering period, your price paid (Box 5) sits far below the purchase-date value (Box 4), which makes the disqualifying ordinary income large. It doesn't enlarge the qualifying cap, which is tied to the grant-date figures (Boxes 3 and 8).
Selling at a loss: which "loss" do you mean?
Most of the confusion comes from three different price lines, and "loss" can mean a drop below any of them:
- the price you paid (Box 5),
- the purchase-date value (Box 4), and
- the grant-date value (Box 3).
In a disqualifying sale, the line that matters is the purchase-date value. Sell below it and you have a capital loss, yet the ordinary income stays put. That can happen even when you sold for more than you paid, which means you can make money and still report a capital loss.
| Disposition type | Ordinary income if sold at a loss | Capital loss treatment |
|---|---|---|
| Disqualifying | Still owed. Fixed at purchase-date value minus price paid (Box 4 minus Box 5), regardless of the sale price. It doesn't shrink when the stock falls. | Capital loss equals sale price minus (price paid plus ordinary income). Short-term or long-term depending on time held since purchase. Deductibility is limited by the normal capital loss rules. |
| Qualifying | The lesser of the grant-date discount or your actual gain. Zero if you sell below what you paid. It can shrink as the price falls. | If you sell below price paid, the capital loss is price paid minus sale price, long-term. If you sell above it, anything beyond the ordinary income is long-term capital gain. |
Illustrative per-share example, not your numbers. Suppose the grant-date value is $50, the purchase-date value is $60, and a 15% lookback plan sets your price at $42.50 (85% of the lower price, $50). Your grant-date discount is $7.50 and your purchase-date spread is $17.50. Here's the same purchase sold four ways, once as a disqualifying sale and once as a qualifying sale.
| Sale price per share | Disqualifying sale | Qualifying sale | ||
|---|---|---|---|---|
| Ordinary income | Capital gain or (loss) | Ordinary income | Capital gain or (loss) | |
| $70.00 | $17.50 | $10.00 | $7.50 | $20.00 |
| $60.00 | $17.50 | $0.00 | $7.50 | $10.00 |
| $50.00 | $17.50 | ($10.00) | $7.50 | $0.00 |
| $40.00 | $17.50 | ($20.00) | $0.00 | ($2.50) |
Look at the $50 row. You gained $7.50 a share over what you paid, but a disqualifying sale reports $17.50 of ordinary income and a $10.00 capital loss. The two lines net to your real profit, yet capital losses generally offset capital gains plus up to $3,000 of other income per year, with the rest carried forward. If you can't use the loss right away, you can end up taxed on income you didn't fully keep.
Qualifying disposition: a loss shrinks the ordinary income
Illustrative, per share. Sold at $40, which is below the $42.50 you paid.
Ordinary income: $0.00, because the lesser-of test picks your negative gain.
Capital loss: $2.50, long-term.
Disqualifying disposition: a loss leaves the ordinary income alone
Illustrative, per share. Sold at $40, the same price.
Ordinary income: still $17.50, fixed at purchase.
Capital loss: $20.00, measured against an adjusted basis of $60.00.
Fixing It: Form 3922, Form 8949, and Your Adjusted Basis
Here's the sequence from start to finish. The calculator above handles the arithmetic in step 4.
- Find your Form 3922. Your employer or its transfer agent issues one for each first transfer of shares, due to you by January 31 of the year after the purchase. It's for your records and isn't filed with your return. If you can't find it, ask your plan administrator or HR for a copy, and check your broker's stock plan statements, which often list the same figures.
- Work out which type of sale you had. Compare your sale date with the grant date (Box 1) and the legal-title date (Box 7). Both clocks must have run for a qualifying sale.
- Confirm the ordinary income was reported exactly once. Check W-2 Box 1 and your employer's stock plan statement. If the amount isn't on your W-2, the IRS says to report it on Schedule 1 (Form 1040), line 8k, for the year of the sale.
- Work out the correct basis. Adjusted basis is price paid times shares sold, plus the ordinary income for those shares. Use the calculator or the formulas under it.
- Match the sale to the right part of Form 8949. On your 1099-B, check whether the broker reported basis to the IRS (Box 12 checked, which points to Form 8949 box A for short-term or box D for long-term). Then use Part I for short-term or Part II for long-term, based on how long you held the shares since the purchase.
- Enter the row. If the basis was reported to the IRS, enter proceeds and the Box 1e basis exactly as the 1099-B shows them, put B in column (f), and in column (g) enter the reported basis minus the correct basis. That's a negative number, in parentheses, whenever the correct basis is higher. If the 1099-B says basis was not reported to the IRS (Form 8949 box B or E), the IRS instructions have you enter the correct basis directly in column (e) and 0 in column (g).
- Keep the adjusted sale on its own row. The Schedule D shortcut for sales without adjustments doesn't apply when you're correcting basis. If the same lot also has a wash sale, list both codes in alphabetical order (for example, BW) and enter the net adjustment in column (g).
- Keep your records. Save Form 3922, your W-2, any broker supplemental statement, and your calculation with your return copy.
| Form 3922 box | What it shows | Where it matters |
|---|---|---|
| Box 1 | Date option granted | Starts the 2-year clock |
| Box 2 | Date option exercised (the purchase) | Your capital gain holding period starts here |
| Box 3 | Fair market value per share on the grant date | The qualifying-sale cap, together with Box 8 |
| Box 4 | Fair market value per share on the exercise date | Disqualifying ordinary income, minus Box 5 |
| Box 5 | Exercise price paid per share | The price you actually paid, the starting point for your basis |
| Box 6 | Number of shares transferred | Multiply per-share figures by the shares you sold, which may be fewer |
| Box 7 | Date legal title transferred | Starts the 1-year clock |
| Box 8 | Exercise price per share determined as if the option had been exercised on the grant date | Qualifying-sale cap, together with Box 3. Per the IRS instructions it's filled in only when the price wasn't fixed at grant (a lookback plan) and left blank when it was fixed |
Illustrative Form 8949 row, not your numbers. This is the $900 example from the top of the article, treated as a short-term sale where the broker reported basis to the IRS (box A).
| Column | Illustrative entry | Where it comes from |
|---|---|---|
| (a) Description | 100 sh. XYZ | As on your 1099-B |
| (b) Date acquired | Purchase date | As on your 1099-B |
| (c) Date sold | Sale date | As on your 1099-B |
| (d) Proceeds | $6,000 | As on your 1099-B |
| (e) Cost or other basis | $5,100 | Box 1e as reported, even though it's too low |
| (f) Code | B | The basis on the 1099-B is incorrect |
| (g) Adjustment | ($900) | Reported $5,100 minus correct $6,000 |
| (h) Gain or (loss) | $0 | $6,000 minus $5,100, combined with ($900) |
If you already filed without the adjustment
The overpayment sits in your capital gain: a gain that shouldn't exist, or a loss that came out too small. Recovering it generally means amending that year's return on Form 1040-X with a corrected Form 8949 and Schedule D. A few things to know before you start.
- There's a time limit. To claim a refund, you generally must file Form 1040-X within 3 years after you filed the original return or within 2 years after you paid the tax, whichever is later. A return filed early is treated as filed on the due date. Each tax year has its own clock, so an older year may be closed while a newer one is still open.
- Do the corrected math first. Pull the Form 3922 for each lot and rerun the numbers. Confirm the ordinary income was reported, too. If it wasn't, the correction could shrink your refund or add tax.
- State returns are separate. If your state taxes capital gains, you may need to amend it as well.
- Consider a preparer. Whether amending a given year is worth it is a judgment call, especially with several years or many lots. A tax preparer can tell you which years are still open and what the amendment would change.
Sources: IRS Topic no. 308 and the Instructions for Form 1040-X (Rev. December 2025), checked Sept. 18, 2026.
Doing This in TurboTax or H&R Block
TurboTax and H&R Block are named here because they're widely used, not because either is recommended over the other. Screen labels change from year to year, so treat the wording below as what to look for, and check the vendor's current help pages for your tax year.
- Enter the 1099-B sale exactly as the form shows it. Leave the basis in Box 1e alone, even though it's too low. If your broker's data imports automatically, remember the import brings in the broker's basis, not your adjusted one. Some brokers also issue a separate supplemental statement with the adjusted basis, and Fidelity's tax FAQ says that form isn't imported into third-party tax software, so you'll enter its figures by hand.
- Find the "basis is incorrect" option. On the sale's detail screen, look for a checkbox saying the basis is wrong or missing. Recent third-party walkthroughs describe TurboTax's as a checkbox that the cost basis is incorrect or missing on the 1099-B, and H&R Block's as a checkbox that the basis was reported to the IRS, followed by a box for the correct basis.
- Enter the corrected total basis, not just the adjustment. That means price paid plus ordinary income, times the shares you sold. The software works out column (g) itself.
- Preview Form 8949 before you file. Column (e) should match your 1099-B, column (f) should show B, column (g) should be negative, and column (h) should match the gain or loss you calculated.
- Check that the ordinary income appears once. If it's in your W-2 Box 1, entering the W-2 covers it. If it isn't, which can happen with qualifying sales, look for the program's screen for stock-option or ESPP income not on your W-2. That amount belongs on Schedule 1, line 8k.
Where do I enter Form 3922 in TurboTax? You generally don't enter it the way you enter a W-2, because it isn't filed with your return. Some programs' ESPP interviews do ask for numbers printed on it, such as the grant and purchase values. If yours does, use the same boxes the calculator uses. Don't assume the software will ask, though. If it never mentions your basis, use the manual "basis is incorrect" option, then check the Form 8949 preview.
Other programs. FreeTaxUSA, TaxAct and similar software follow the same pattern: enter the 1099-B as issued, flag the basis as wrong, enter the corrected total, then verify on the Form 8949 preview. If you have a mix of qualifying and disqualifying lots, check each lot, since some interviews handle mixed lots poorly.
Advanced Edge Cases: Wash Sales, Gifts, AMT, and Acquisitions
The wash sale trap on recurring ESPP purchases
The wash sale rule disallows a loss when you sell stock at a loss and buy substantially identical stock, or an option or contract to buy it, within 30 days before or after the sale. That's a 61-day window (see IRS Publication 550). An ESPP runs on a schedule, and a scheduled purchase is still a purchase. If your plan buys shares inside that window, part or all of a loss on other shares of the same company can be disallowed.
Illustrative example, not your numbers. You sell 100 shares at a $1,000 capital loss on March 10, and your plan buys 20 shares on March 31. Because you bought fewer shares than you sold, only the loss tied to those 20 shares, $200 here, is disallowed. It isn't gone. It's added to the basis of the 20 new shares, and the holding period carries over.
- It affects only the capital loss. The ordinary income from a disqualifying sale isn't undone by a wash sale.
- Your broker sees only its own accounts. Purchases elsewhere can count too, including in an IRA or a spouse's account, and your software can't see them.
- On Form 8949, a wash sale loss goes in column (g) as a positive number with code W. If the same row also needs a basis fix, use both codes and the net amount.
Whether simply enrolling in a new offering period, which gives you a new right to buy shares, counts as acquiring an option is a question for a tax professional. The purchase date is the clear trigger. If you're planning to sell at a loss, check your plan's next purchase date first.
Gifts, charitable donations, and death
A sale isn't the only disposition. Schwab's ESPP guide notes that giving ESPP shares to another person or donating them to charity also counts, and you can still have ordinary income even though there's no sale. That ordinary income is worked out as described above, using the closing market price on the date of the gift or donation in place of a sale price, and the gift or donation itself isn't reported on Form 8949 or Schedule D. Separately, §423(c) also covers the case where the employee dies while still owning the shares, and the lesser-of ordinary income applies then whatever the holding period. These cases are rare and worth a preparer's time.
AMT and non-qualified plans
AMT. The IRS flags alternative minimum tax exposure at exercise for incentive stock options (Tax Topic 427). A standard qualified ESPP purchase generally doesn't create an AMT adjustment. If you also hold ISOs, that's a separate calculation to run with a preparer.
Non-qualified ESPPs. Some plans don't meet the Section 423 rules. In those, the discount is generally taxed as ordinary income at purchase, not deferred to sale, and your basis is the purchase-date value. The holding periods above don't matter. Form 3922 covers Section 423 options, so if you never received one, ask HR whether your plan is a Section 423 plan and check the plan documents.
What happens to ESPP shares in a company acquisition
When a company is acquired, its ESPP often doesn't survive. Merger FAQs that companies file with the SEC commonly describe the same pattern: the current offering period is cut short, shares are bought on an accelerated purchase date, and ESPP shares are converted to cash at the deal price at closing. That cash-out is a sale, and you didn't choose the timing.
If it falls inside either holding period, it's a disqualifying disposition, and the rules above apply. If both clocks had already run, it's qualifying. Either way, the 1099-B basis issue still applies, so look for supplemental information. Terms vary by deal, so read your own company's deal FAQ and plan notice. This section is general, not deal-specific.
What This Isn't
This is the ESPP sibling of another common equity compensation trap. The W-2 and 1099-B mismatch is the same, but the mechanism is different: RSUs are taxed when they vest, while a Section 423 ESPP defers tax until you sell and depends on holding periods. If you hold RSUs too, read RSU Cost Basis: Why You're Paying Tax Twice. This article also isn't a guide to incentive stock options, non-U.S. plans, state tax rules, or whether you should hold or sell your shares.
FAQ
How are ESPP shares taxed?
With a standard Section 423 plan, nothing is taxed when you enroll or buy. The tax arrives when you sell. Part of the discount becomes ordinary income and the rest of your result is capital gain or loss. How much is ordinary income depends on whether the sale is qualifying or disqualifying, as covered above. Plans that don't meet the Section 423 rules generally tax the discount at purchase instead.
Employee stock purchase plan tax: which form shows what?
Form 3922 from your employer gives you the dates, values and price you need. Your W-2 may include ordinary income from the sale. Your 1099-B reports proceeds and, usually, only the price you paid as basis. Form 8949 and Schedule D are where you reconcile them.
Am I being double taxed on my ESPP?
You are if the discount was counted as income and you also left it out of your basis. That's the usual result when a 1099-B is entered as-is. Raise the basis on Form 8949 by the amount included in your income and you're taxed on it once.
Why is my 1099-B cost basis missing or too low for ESPP shares?
The basis on a 1099-B for ESPP shares generally leaves out the compensation income, so you'll see roughly the price you paid. If the basis is blank or marked as not reported to the IRS, the Form 8949 instructions have you enter the correct basis yourself. Check Box 12 and your broker's supplemental statement, then follow the steps in the fix section above.
Does my W-2 already include the ESPP discount?
Often, for a disqualifying sale, but don't assume it. Look in Box 1, then check your employer's stock plan statement. The IRS says employers should report qualifying-sale ordinary income in Box 1 as well, but some don't. Social Security and Medicare wages (Boxes 3 and 5) generally don't include ESPP income. If the amount isn't in Box 1, report it on Schedule 1, line 8k.
How do I make a Box 1e cost basis adjustment on Form 8949?
Enter the proceeds and the Box 1e basis exactly as reported, put code B in column (f), and in column (g) enter the reported basis minus the correct basis. Use parentheses when the correct basis is higher. If the 1099-B says the basis wasn't reported to the IRS, enter the correct basis in column (e) and 0 in column (g).
What is Form 8949 code B for ESPP shares?
Code B tells the IRS that the basis on your 1099-B is incorrect. It explains why your return differs from what your broker sent. If more than one code applies to a row, list them in alphabetical order with no spaces or commas, and enter the net adjustment.
Where do I enter Form 3922 in TurboTax?
You generally don't file or attach it. Use it to work out the correct basis, then enter that basis through the software's "basis is incorrect" option. See Doing this in TurboTax or H&R Block for the steps.
Do I owe ordinary income tax if I sell ESPP shares at a loss?
It depends entirely on the type of sale. In a disqualifying disposition, generally yes: the ordinary income is fixed at the purchase-date value minus the price paid, and a later drop in price only adds a capital loss. In a qualifying disposition, not necessarily: the ordinary income is the lesser of the grant-date discount or your actual gain, so it can fall to zero if you sold below what you paid. Work out which type you had before assuming anything.
How does the ESPP lookback provision affect the tax calculation?
A lookback sets your price at a discount to the lower of the grant-date and purchase-date prices. In a rising market, your price paid (Box 5) ends up far below the purchase-date value (Box 4), so disqualifying ordinary income (Box 4 minus Box 5) is larger. In a qualifying sale, the cap is the grant-date discount (Box 3 minus Box 8), so the lookback doesn't lift the ordinary income above it.
Does the wash sale rule apply to ESPP shares?
It can. If you sell company stock at a loss and your plan buys shares within 30 days before or after, some or all of the loss can be disallowed and added to the basis of the new shares. See the wash sale section for an illustrative example.
Does an ESPP trigger AMT?
A standard qualified ESPP purchase generally doesn't, unlike an ISO exercise. If you also hold ISOs, AMT can still matter for those, so raise it with a preparer.
What happens if I already filed without adjusting my ESPP cost basis?
You may be able to recover the overpayment with Form 1040-X, but only within the refund window, which is generally 3 years after you filed the original return or 2 years after you paid the tax, whichever is later. Check each year separately, confirm the ordinary income was reported, and consider asking a preparer. See the section above.
Doesn't "basis reported to the IRS" mean the number is right?
No. A checked Box 12 means the broker sent that basis to the IRS, not that it's correct. That's why the Form 8949 instructions have you keep the reported basis in column (e) and correct it in column (g) with code B. Your return then matches what the IRS received, and the adjustment explains the difference.
What if my employer didn't include the discount in my W-2?
Then the ordinary income has to come from you. The IRS says to report it on Schedule 1 (Form 1040), line 8k, for the year of the sale, and to increase your basis by the same amount. Ask your employer or plan administrator for the figure, or work it out from Form 3922.
Can my broker or employer correct the 1099-B for me?
Not usually, because IRS rules limit the basis a broker reports. Some brokers provide a supplemental statement with adjusted basis, which is a good starting point. Verify it against your Form 3922 and W-2 before you rely on it.
Sources
- IRS, Instructions for Form 8949 (2025), for code B, column (g) and the Worksheet for Basis Adjustments
- IRS, Instructions for Forms 3921 and 3922 (Rev. 4-2025) and About Form 3922, for the box layout
- 26 U.S.C. §423, Employee stock purchase plans (Cornell LII), for the holding periods and the lesser-of rule in §423(c)
- IRS tax FAQ: reporting a Section 423 ESPP sale that appears on a Form 1099-B, reviewed Nov. 20, 2025
- Schwab, Employee Stock Purchase Plan (ESPP) taxes: a guide, for the broker's description of the 1099-B basis limitation
- Fidelity Stock Plan Services, tax FAQ, for the broker's description of the 1099-B basis limitation and supplemental statement
- IRS Publication 550, Investment Income and Expenses, for the wash sale rule
Also referenced: IRS Topic no. 308, Amended returns, Instructions for Form 1040-X, and IRS Topic no. 427, Stock options.
This article is educational only and isn't tax advice. ESPP taxation is technical and plan-specific, and rules can change. Verify your figures against your own Form 3922 and consult a licensed tax professional before filing.

Daniel Hayes is the founder and sole researcher at AdvoraHQ. He covers U.S. personal finance, insurance, and consumer law — working directly from IRS publications, federal and state statutes, court opinions, and SEC filings rather than secondary summaries. His focus is the gap between what readers think they know and what the source documents actually say. Daniel is not a licensed attorney, CPA, or financial advisor; his articles are educational and not personalized advice. Reach him at Daniel.Hayes@advorahq.com.
