Skip to content
Equity Compensation
Browse topics
Guide Updated 2026

ESPP reporting: Form 3922, Form 8949, and the basis fix

The form your employer sends, the forms you file, and the one adjustment that keeps you from paying tax on your discount twice. A full walkthrough with a worked example and a pre-sale checklist.

ESPPs · Forms & reporting

Why do so many people overpay tax on a perfectly good ESPP? Because the broker reports the wrong cost basis, and the IRS form does not catch it for you. The fix is one adjustment on one form, but you have to know to make it, and almost nobody tells you. This guide is the whole reporting flow, start to finish: the form your employer sends, the forms you file, the basis trap the 1099-B sets, a worked example with the numbers shown, and a checklist to run every time before you sell.

The single number that ties all of it together is the ordinary income already taxed on your discount. That figure sets your basis adjustment, it is what the broker leaves off, and it is the difference between paying tax once and paying it twice. Curate everything down to that one figure and the rest of the math follows.

The two forms in play

There are two documents that matter when you sell ESPP shares, and they do different jobs.

Form 3922 (from your employer)

Your employer sends this for the year you bought shares through the plan. It records the dates and prices you need later: the offering start, the purchase date, the price at each, and the price you actually paid. It is not a tax bill, and you do not file it. It is the source data you use when you eventually sell.

Form 8949 and Schedule D (your return)

When you sell, you report the sale here. This is where you list your proceeds, your cost basis, and the resulting gain or loss. It is also where you correct the basis if the broker got it wrong, which they usually do.

Keep every Form 3922. It is the paper trail that lets you prove your real basis years after the purchase, when nobody remembers the numbers and the broker statement has long since moved on.

The mistake the 1099-B sets you up for

When you sell, your broker files a 1099-B showing your cost basis. The problem is that the broker usually reports only what you paid for the shares, the discounted price.

Here is what that misses. The discount you got was already taxed as ordinary income, either on your W-2 or as an adjustment when you sell. Cost basis is what you paid plus anything already taxed as income on the shares, so your true basis is the discounted price plus that already-taxed discount. If your basis on the 1099-B is just the discounted price, the discount gets taxed a second time: once as wages, again as capital gain because your basis looks too low.

Your real basis is higher than the 1099-B says

Your true cost basis is the discounted price you paid plus the amount already taxed as ordinary income. Use only the broker’s number and you pay tax twice on the same discount. This is the single most common ESPP filing error, and it costs real money. It is also quiet, because the numbers look plausible. They are just wrong in the IRS’s favor.

This is not a rare glitch. It is the default behavior of most brokers on most ESPP sales, which is why the mistake is so common. And it compounds: if you buy through the plan every period, the wrong basis can show up on every lot you sell, so one bad habit overpays year after year.

Finding the one number: the ordinary income already taxed

Everything turns on the ordinary-income piece, and how you compute it depends on whether your sale is qualifying or disqualifying. A sale is qualifying when you clear both holding periods: more than two years from the first day of the offering period, and more than one year from the purchase date. Miss either clock and it is disqualifying.

The ordinary income is the bargain element at purchase: the purchase-date market value minus the price you actually paid, times your shares. It includes any lookback gain you captured, and it is taxed like salary. This is the bigger number, and the one most people who sell soon after purchase will have.

The disqualifying formula

The disqualifying ordinary-income amount is the purchase-date bargain element: purchase-date fair market value minus the price you paid, times your shares.

The ordinary income is the lesser of two numbers: your actual gain on the sale, or the discount measured against the offering-date price. Because the offering date is usually earlier than your purchase, that discount is often smaller, so a qualifying sale moves part of the gain into the lower-taxed capital-gains bucket.

The qualifying formula

The qualifying ordinary income is the lesser of (a) the actual gain or (b) the offering-date discount: offering-date fair market value times the plan discount percentage.

For the full reasoning behind both formulas and the holding-period clocks, see qualifying vs disqualifying dispositions. For reporting, you just need the resulting figure.

How to report it without overpaying

Pull the numbers from Form 3922

Get the offering-start price, the purchase-date price, and the price you paid. These tell you the discount and which holding-period bucket you are in.

Find the ordinary income already counted

Use the right formula above for your case. That figure gets added to your basis. It is the piece the broker leaves out.

Adjust the basis on Form 8949

Report the broker’s basis as shown on the 1099-B, then use the adjustment column and the correct code to add back the ordinary-income piece. The form has a code for exactly this. The result is a smaller, correct capital gain.

Keep the worksheet with your records

Save your math and the Form 3922 together. If the basis is ever questioned, you want to show the work.

Check the basis every single year

This is not a one-time fix. If you buy through the plan every period, the wrong basis can show up on every sale. Build the habit of checking it each year before you file, and the error never compounds.

A worked example, with the math shown

Numbers make this concrete. Let me run one purchase through both sale outcomes so you can see exactly where each figure lands on the return. These are round example figures, not a claim about any real stock. The two statutory pieces are confirmed: a qualified plan can discount up to 15% of price, and you can buy up to $25,000 of stock value per year. 2026

The setup. Say your plan has a 15% discount and a lookback, so the price is set off the lower of the offering-date and purchase-date prices.

  • Offering-date price: $20
  • Purchase-date price: $30
  • Your price with the lookback and discount: 85% of the lower $20, so $17 per share
  • You buy 100 shares for $1,700
  • You later sell all 100 at $40, for $4,000

Your total economic gain is the same either way: $4,000 minus $1,700, so $2,300. What changes is how much of that $2,300 is taxed as ordinary income versus the lower capital-gains rate, and that decides what you report on Form 8949.

You sold before clearing the holding-period clocks, so this is a disqualifying disposition.

The ordinary-income piece is the discount measured at purchase: ($30 minus $17) times 100, so $1,300 of ordinary income, taxed at your regular rate. This is the amount that should show up as compensation, often on your W-2.

Your cost basis becomes what you paid plus that ordinary income: $1,700 plus $1,300, so $3,000. The rest of the gain is capital gain: $4,000 minus $3,000, so $1,000. Sold within a year of purchase, that capital gain is short-term, taxed at your ordinary rate too.

On Form 8949 you would see the broker’s basis of $1,700, then add back the $1,300 in the adjustment column so your reported gain drops from a wrong $2,300 to the correct $1,000.

You held past both clocks, so this is a qualifying disposition, and the ordinary-income piece is computed differently and is usually smaller.

The ordinary income is the lesser of the actual gain or the discount measured off the offering-date price. The offering-date discount is 15% of $20, so $3 per share, or $300 of ordinary income across 100 shares. Far less than the $1,300 in the disqualifying case.

Your basis is $1,700 plus $300, so $2,000. The remaining gain is capital gain: $4,000 minus $2,000, so $2,000 of long-term capital gain, taxed at the lower long-term rate.

On Form 8949 you would again start from the broker’s $1,700 basis and add back $300, so the reported gain lands at the correct $2,000 of long-term gain instead of an inflated number.

Lower tax is not the same as more money

The qualifying path wins on tax in this example because the stock rose. The hidden price is that you had to hold a concentrated position for the full clock to get there. If the stock had fallen instead, the tax saving would not have covered the loss. Never let the tax math alone decide whether to hold a concentrated stock.

Why the basis on my 1099-B looks too low

Because the broker reports the discounted price you paid and leaves out the ordinary income already taxed. Your real basis is what you paid plus that income. Add it back on Form 8949, or you overpay. In the disqualifying example you add back $1,300; in the qualifying example you add back $300. Same shares, different adjustment, same principle.

The pre-sale checklist

Most ESPP sale mistakes are quiet: a missed holding date that costs you the better tax treatment, or a basis the broker reported too low that taxes your discount twice. Run this list every time and you avoid both.

Pull Form 3922 for the shares you are selling

It carries the three numbers you need: the offering-period start price, the purchase-date price, and the price you actually paid. Without it, you are guessing at your basis.

Check both holding-period clocks

A qualifying disposition needs more than two years from the offering start and more than one year from the purchase date. Check both dates before you sell, because selling a few days early can flip a qualifying sale into a disqualifying one and change how the discount is taxed.

Know the ordinary-income piece for your case

Part of your gain is taxed as ordinary income either way, and how it is figured depends on whether the sale is qualifying or disqualifying. Work out that number first, because it drives both your tax and your basis fix.

Fix the cost basis the broker under-reported

Brokers usually report only the discounted price you paid. Add the ordinary-income amount back to the basis so you do not pay tax on the discount twice.

Report the adjustment on Form 8949

List the broker’s basis, then use the adjustment column and the correct code to add back the ordinary-income piece, so your capital gain lands at the right, smaller number. Keep Form 3922 and your worksheet with your tax records.

The two that cost the most

If you only have time for two checks, make them the holding dates and the basis fix. A missed date costs you the better tax rate. A missed basis adjustment taxes your discount twice. Everything else is cleanup next to those two.

What this means for you

The ESPP discount is a great deal right up until a reporting mistake hands part of it back to the IRS. The numbers live on Form 3922, the sale gets reported on Form 8949 and flows to Schedule D, and the basis adjustment is the one move that keeps you from paying twice. Pull the form, find the one number, add it back, keep the worksheet, and check it every year.

For the full tax reasoning behind the two formulas, see qualifying vs disqualifying dispositions. For the bigger picture on why the discount is worth capturing in the first place, see how an ESPP works. To run your own numbers, use the ESPP cost basis adjustment calculator.

If you have years of ESPP purchases and you are not sure the basis was ever corrected, you may have overpaid, and it may be fixable by amending. Talk it through with me before you file again.

More in ESPPs

Still have questions about your equity?

Join the community to ask directly, or take the two-minute fit check to see if a planning call makes sense.