Beancount.io LogoBeancount.io

Form 1099-B Cost Basis Reconciliation: How to Avoid Paying Tax Twice on the Same Dollar

14 min readMike ThriftMike Thrift
Form 1099-B Cost Basis Reconciliation: How to Avoid Paying Tax Twice on the Same Dollar

You sold some stock last year. Your broker mailed you a Form 1099-B. You typed the numbers into your tax software, hit submit, and moved on with your life. A few months later, you're staring at a tax bill that seems weirdly large — or worse, an IRS CP2000 notice claiming you underreported.

Here is the uncomfortable truth most investors never learn: the cost basis number printed on your 1099-B is sometimes the basis your broker actually told the IRS about, and sometimes it isn't. The form looks identical either way. If you don't know which is which, you can end up paying capital gains tax on dollars that were already taxed as wages — a classic double-tax problem that quietly costs employees with RSUs, ESPPs, and stock options thousands of dollars every filing season.

This guide walks through how Form 1099-B actually works, what Box 1e and Box 5 mean, how the "covered vs. noncovered" distinction was born, and how to use Form 8949 adjustment codes to correct broker errors without lighting up an audit flag.

What Form 1099-B Actually Reports

Form 1099-B, Proceeds from Broker and Barter Exchange Transactions, is the information return brokers send to both you and the IRS whenever you sell a stock, ETF, mutual fund, option, bond, or similar security. It documents the proceeds of the sale — the gross dollars that hit your account — and, for some securities, the cost basis the broker has on file. The difference between the two is your capital gain or loss.

Brokers also report whether the holding was short-term (held one year or less) or long-term, plus a handful of special situations: wash sales they detected, accrued market discount, federal tax withheld, and corporate-action adjustments.

You don't file the 1099-B itself with your return. Instead, every transaction flows through Form 8949, Sales and Other Dispositions of Capital Assets, where you list each sale and apply any corrections. Form 8949 totals then feed Schedule D, which reconciles your overall capital gains picture for the year.

The "Covered Security" Concept

For most of brokerage history, brokers had no obligation to track or report cost basis. You sold shares, they reported the gross proceeds, and you figured out your own basis from old confirmation slips or a spreadsheet. Predictably, investors got it wrong constantly, and the IRS lost real revenue to honest mistakes and dishonest creativity.

The Emergency Economic Stabilization Act of 2008 changed that. It required brokers to start tracking and reporting adjusted cost basis to the IRS for "covered securities" — a category that phased in over several years:

  • January 1, 2011: Stocks acquired on or after this date became covered.
  • January 1, 2012: Mutual fund shares and dividend-reinvestment-plan (DRIP) shares acquired on or after this date became covered.
  • January 1, 2014: Options, bonds, and other "less common" securities granted or acquired on or after this date became covered.

Securities acquired before their respective phase-in date — your dad's 1989 Coca-Cola shares, the bond your grandmother bought in 2010 — are noncovered. The broker may still display a basis number on your statement (especially if you transferred the shares in and brought basis with you), but they are not telling the IRS what that basis is.

This single distinction is responsible for a huge share of taxpayer confusion. The 1099-B looks the same either way. The IRS treats the two columns very differently.

Decoding the Boxes That Matter

A standard Form 1099-B has more than a dozen boxes, but a few do most of the work for cost basis reconciliation:

  • Box 1a — Description: Shares and ticker (e.g., "100 sh. AAPL").
  • Box 1b — Date acquired: When you bought the shares. May read "Various" for fund lots.
  • Box 1c — Date sold: When the sale settled.
  • Box 1d — Proceeds: Gross dollars from the sale, typically after commissions.
  • Box 1e — Cost or other basis: The basis figure. For covered securities, this is what the broker has reported to the IRS. For noncovered securities, this is informational only.
  • Box 1f — Accrued market discount: Relevant mostly for discount bonds.
  • Box 1g — Wash sale loss disallowed: A loss the broker disallowed under the wash sale rule.
  • Box 2 — Short-term or long-term: Holding period classification.
  • Box 5 — Noncovered security: The flag that changes everything. When checked, the security is noncovered and Box 1e is not being reported to the IRS, regardless of what number appears there.
  • Box 12 — Basis reported to IRS: Many brokers also include an explicit indicator (sometimes labeled "Applicable check box" or "Box A/B/C/D/E/F") showing the Form 8949 category the transaction belongs in.

The trap: investors see a number filled into Box 1e and assume the IRS sees it too. If Box 5 is checked, that assumption is wrong. The IRS sees Box 1d (proceeds) only — and unless you tell them otherwise on Form 8949, they will treat your entire sale as gain.

How 1099-B Transactions Flow to Form 8949

Form 8949 splits sales into six categories, often labeled A through F:

Holding periodBasis reported to IRSBasis NOT reportedNot on 1099-B
Short-termBox ABox BBox C
Long-termBox DBox EBox F

In practice:

  • A and D are covered securities — the broker reported basis, you generally just confirm.
  • B and E are noncovered securities still on the 1099-B — you must supply or correct the basis yourself.
  • C and F are off-statement sales (private stock, collectibles, foreign securities the broker didn't process).

Each transaction occupies one row. The columns you fill in: (a) description, (b) date acquired, (c) date sold, (d) proceeds, (e) cost basis, (f) adjustment code, (g) adjustment amount, (h) gain or loss.

When the broker-reported basis is correct, columns (f) and (g) stay blank. When the basis is wrong or incomplete, that is where you do your reconciliation work.

The Adjustment Codes You'll Actually Use

The IRS publishes a long list of adjustment codes for Form 8949, but most investors only encounter a handful. Each code is a single letter you enter in column (f), often paired with a signed dollar adjustment in column (g).

Code B — Basis Reported to the IRS Is Wrong

This is the workhorse for RSU, ESPP, and stock-option holders. When your broker shows a basis you know is incorrect — usually too low, because they didn't include the compensation income already added to your W-2 — Code B lets you correct it.

The mechanics: enter the broker-reported basis in column (e), then enter the negative difference in column (g). The result in column (h) becomes your real gain. For example, broker reports $100 of basis on a sale with $500 of proceeds, but your actual basis (including W-2 compensation) is $450. Column (e) shows $100, column (f) shows "B", column (g) shows ($350), and your gain in column (h) is $50 — not $400.

Adjusting Noncovered Securities (Box B / E Transactions)

For noncovered securities, the IRS hasn't received any basis information, so you generally don't need a code at all. You simply enter the correct basis in column (e). The exception: if the broker printed an incorrect basis on your statement and you're documenting the correction, you can enter Code B with a zero adjustment for clarity.

Code W — Wash Sale Loss Disallowed

Code W flags a wash sale. If your broker already detected the wash sale and reported the disallowed loss in Box 1g, your software will usually carry the code over automatically. If you triggered a wash sale your broker couldn't see — for example, because you bought the replacement shares in a different account or in your IRA — you have to identify the disallowed amount yourself and enter Code W with a positive adjustment in column (g) that erases the loss.

Code Q — Qualified Small Business Stock Exclusion

If you sold shares that qualify under Section 1202 for the QSBS gain exclusion, Code Q lets you carve out the excluded portion. The exclusion appears as a negative adjustment in column (g).

Code O — Other Adjustments

The catch-all. Use Code O sparingly and only with a documented explanation; it tends to invite IRS attention. Common legitimate uses include adjustments for sales of inherited securities with stepped-up basis the broker didn't apply, or for transfers that brought basis from another account.

Other Codes Worth Knowing

  • Code T — basis was reported to the IRS but the holding period (short vs. long term) on the 1099-B is wrong.
  • Code N — you received the security as part of a tax-free exchange and the broker didn't track the carryover basis.
  • Code D — you received the security as a gift and need to adjust to the donor's basis or fair market value.
  • Code H — you sold your main home but a portion of the gain is excludable under Section 121.

If you need to enter multiple codes on a single row, list them in column (f) with no spaces or commas (e.g., "BW").

The RSU and ESPP Double-Tax Trap

This is where most real-world dollars get lost. Picture a software engineer whose RSUs vest in March: 100 shares at $50 each. The $5,000 vesting value gets added to her W-2 as ordinary income, and her employer withholds taxes. Her actual cost basis in those shares is $5,000 — the amount that was already taxed.

In May she sells the 100 shares for $5,200. She made $200 of capital gain.

Her broker, who only sees the brokerage side of the transaction, dutifully reports the sale on a 1099-B. Box 1d says $5,200. Box 1e says... maybe $0, maybe $50 (the option grant price for an ESPP), maybe a partial basis. Box 5 is often checked because brokers commonly classify employee-equity sales as noncovered.

If she types those numbers into tax software without making an adjustment, the IRS sees $5,200 of "gain" — and she effectively pays tax on the same $5,000 twice, once as wages and once as a capital gain. That single error can easily cost $1,000–$2,000 per vesting tranche.

The fix is Code B (or, for noncovered securities, just entering the correct basis): replace the broker's basis figure with the real basis, which equals the ordinary income already reported on her W-2 plus any out-of-pocket purchase cost. The IRS won't object — they expect compensation income from employer equity to show up on the W-2, not the 1099-B.

For ESPPs and incentive stock options, the math gets more complex (qualifying vs. disqualifying dispositions change what gets added to ordinary income), but the principle is identical: the broker rarely knows the compensation piece, so the basis on your 1099-B is almost always too low.

Common Mistakes That Cost Real Money

A few patterns recur in every filing season:

  1. Trusting Box 1e on noncovered securities. Box 5 is checked but a basis is printed anyway. Investors copy that basis into their return assuming the IRS will accept it. Sometimes the basis is right; sometimes it's garbage left over from an old account transfer. Verify it.
  2. Ignoring "Various" date-acquired entries. Mutual fund lots and DRIP shares often appear with "Various" in Box 1b. That's fine for short-term vs. long-term classification, but it can mask the fact that some lots inside the sale are noncovered and others are covered. Pull the lot-level detail from your broker.
  3. Missing cross-account wash sales. Brokers only see their own books. If you sold a loss in Schwab and bought it back in Fidelity (or in an IRA), the wash sale is yours to track.
  4. Forgetting stepped-up basis on inherited shares. Inherited shares get a basis step-up to fair market value at the date of death. If those shares predate the covered-security phase-in, your broker may show the decedent's original basis or nothing at all.
  5. Not aggregating into Box A or D summaries. When all sales in a category are reported with correct basis to the IRS and need no adjustments, you can summarize the totals on Schedule D rather than listing every line on Form 8949. Many filers list everything anyway and waste hours doing it.

How to Reconcile a 1099-B in Practice

A clean workflow looks like this:

  1. Download both the 1099-B and the supplemental statement. Brokers typically issue a "supplemental information" PDF alongside the official 1099-B. The supplemental statement often shows the corrected basis (e.g., "adjusted cost basis including compensation") even though that adjusted figure was not sent to the IRS. You'll need both documents.
  2. Sort transactions into the six Form 8949 categories (A through F) using Box 5 and Box 12.
  3. For Box A and D transactions (covered, basis correct), confirm the numbers match your own records and enter them with no adjustments.
  4. For Box B and E transactions (noncovered), enter the correct basis from your supplemental statement or your own records directly in column (e).
  5. For employee equity sales (RSUs, ESPP, options), cross-check against your W-2 (Box 1) and your year-end paystub to confirm how much compensation income was already taxed. That number is your basis floor.
  6. Apply adjustment codes only where the broker-reported basis was wrong or where wash sales, exclusions, or other special rules apply.
  7. Tie totals to Schedule D. Short-term totals from Form 8949 go to Schedule D line 1b, 2, or 3 (depending on category). Long-term totals go to lines 8b, 9, or 10.
  8. Keep your supporting documents. The IRS can ask for substantiation up to three years after filing (six if they suspect a substantial understatement). Save brokerage statements, W-2s, grant-vesting reports, and any correspondence proving basis.

Accurate cost basis records are also one of the strongest arguments for keeping your investment activity in a plain-text accounting ledger rather than spreadsheets. When your buys, sells, dividend reinvestments, and corporate actions all live as version-controlled transactions, reconciling against a 1099-B at year-end becomes a matter of running a report rather than archaeology.

When the IRS Sends You a CP2000

If you miss an adjustment, the IRS computer matching program will eventually notice. The CP2000 notice arrives 12 to 24 months after you file and proposes additional tax based on the broker's reported numbers. It is not a bill — it's a proposal, and you have 30 days to respond.

The right response in most cost-basis-mismatch cases is to file Form 1040-X (amended return) with a corrected Form 8949, attach the brokerage supplemental statement, and write a clear explanation: "Cost basis on 1099-B did not include W-2 compensation of $X for RSU vesting on [date]. Corrected basis attached." Most CP2000 cost-basis disputes resolve in the taxpayer's favor when documentation is clean.

If you don't respond at all, the proposed assessment becomes final, the IRS adds penalties and interest, and collecting a refund of overpaid tax becomes much harder.

A Word on Crypto and Digital Assets

For tax year 2025 and later, the IRS introduced Form 1099-DA for digital asset brokers, and many of the same covered/noncovered concepts apply. The phase-in started January 1, 2025 for proceeds reporting, with basis reporting following in 2026. If you've held crypto across multiple wallets and exchanges, expect the same kinds of basis-mismatch headaches that hit RSU holders a decade ago — and the same kinds of fixes.

Keep Your Investment Records Audit-Ready Year-Round

The hardest part of reconciling a 1099-B isn't the rules — it's reconstructing transactions from a year of brokerage statements, payroll runs, and corporate actions in April. Beancount.io provides plain-text accounting that gives you transparent, version-controlled records of every buy, sell, dividend, and basis adjustment, with no vendor lock-in and a complete audit trail you can hand to a CPA or amend with a text editor. Get started for free and turn next year's 1099-B reconciliation into a five-minute report instead of a three-evening forensic project.