All insights
Tax Preparation WorkflowForm 8949 & Schedule DAI Tax Preparation

Schedule D & Form 8949: A CPA Firm's Capital Gains Workflow

A line-by-line workflow for reconciling brokerage 1099-Bs, wash sale adjustments, and missing cost basis on Schedule D and Form 8949 — built for firms preparing high-volume capital gains returns.

Ava Coleman September 4, 2026 14 min read
Schedule D & Form 8949: A CPA Firm's Capital Gains Workflow

Schedule D and Form 8949 tax preparation eats more preparer hours per return than almost any other part of the 1040 package. A client with three brokerage accounts, a crypto exchange, and an ESPP sale can generate a 1099-B package that runs 40+ pages, and every line on that package has to land in the right box on Form 8949 before it ever touches Schedule D. Get the box wrong, miss a wash sale, or leave cost basis blank, and the return either misstates tax liability or draws an IRS matching notice eighteen months later. This piece walks through the actual reconciliation workflow — brokerage by brokerage, transaction by transaction — that CPA and EA firms use to get Schedule D and Form 8949 tax preparation right, and where AI can legitimately take over the repetitive matching so preparers spend their time on judgment calls instead of data entry.

Schedule D and Form 8949 Tax Preparation: Why It's the Most Time-Consuming Part of 1040 Prep

Most 1040 schedules involve a handful of entries. Schedule D and Form 8949 are different — they're transaction-level, and the transaction count scales with the client's investment activity, not with the complexity of their tax situation. A retiree with a single managed account might generate 30 sales a year. An active trader or a client with several rollover IRAs, taxable brokerage accounts, and a crypto wallet can easily generate 1,000 to 5,000 lines. Firms serving even a modest number of these clients find that capital gains reconciliation consumes a disproportionate share of total preparation time during peak season.

Form 8949 forces every transaction into one of six reporting categories, split across two parts:

  • Part I (short-term): Box A (basis reported to IRS), Box B (basis not reported to IRS), Box C (no 1099-B received)
  • Part II (long-term): Box D (basis reported), Box E (basis not reported), Box F (no 1099-B received)

Sorting a transaction into the wrong box doesn't just create a cosmetic error. Box A/D totals flow to Schedule D lines 1a and 8a and can sometimes bypass full Form 8949 detail entirely if there are no adjustments — the IRS allows this aggregate reporting specifically to save time on clean, covered-lot transactions. Box B/C/E/F transactions always require full 8949 detail. Misclassify a noncovered security as covered, and the IRS's automated underreporter matching program — which cross-checks 1099-B data against what's filed — will flag the discrepancy even if the gain or loss amount is correct.

This is also where the "more clients, more headcount" problem shows up most sharply. A preparer who can competently sort and reconcile 200 transactions in an hour can't simply repeat that pace at 2,000 transactions, because the exceptions — missing basis, wash sales, transfers between brokers — don't scale linearly. They scale with account count and holding complexity. That's the real bottleneck firms need to solve before they can add volume without adding proportional staff.

Step 1: Intake and Consolidate 1099-B Data Across Brokerages

Before any reconciliation begins, get every source document collected and inventoried. The common sources for a typical client:

  • Consolidated 1099-B from each brokerage (Schwab, Fidelity, E*TRADE, Interactive Brokers, etc.)
  • Crypto exchange annual statements or CSV exports (Coinbase, Kraken, and similar — often without a 1099-B at all, or with a 1099-DA now phasing in for digital assets)
  • Sale-of-K-1-interest reporting embedded in a partnership's Schedule K-1 supplemental information
  • Employee stock purchase plan (ESPP) and restricted stock unit (RSU) supplemental statements, which brokers issue separately from the 1099-B and which frequently contain the real adjusted basis
  • Form 1099-S for real estate held as investment property

The trap here: broker-reported summary totals on the 1099-B cover page don't always map cleanly to the box structure on Form 8949. A single Schwab 1099-B might report short-term covered, short-term noncovered, long-term covered, and long-term noncovered totals all on one summary page, with the transaction-level detail buried in an attached PDF running 60+ pages. If your intake process treats "received the 1099-B" as complete, you'll miss the noncovered lots that need manual basis verification.

Standardizing intake before reconciliation starts saves real time downstream. That means every document gets logged against a client-level checklist — broker name, account number, covered vs. noncovered lot counts, and whether a supplemental cost basis statement exists — before a single number gets entered into the tax software. Firms that skip this step end up doing reconciliation twice: once during data entry, and again during review when the numbers don't tie out. For a broader look at getting this intake stage under control across all 1099 types, see 1099 Processing Automation for CPA Firms.

Step 2: Reconcile Transactions Against Form 8949 Categories

Once documents are consolidated, each transaction needs to be sorted correctly. Two determinations matter most.

Short-term vs. long-term holding period. The general rule — held one year or less is short-term, more than one year is long-term — has real edge cases:

  • Inherited assets get a stepped-up basis to fair market value on the date of death, and the holding period is automatically treated as long-term regardless of how long the decedent or heir actually held it.
  • Gifted stock carries over the donor's basis and holding period in most cases (carryover basis), except when the fair market value at the time of the gift is lower than the donor's basis and the stock is later sold at a loss — then a separate loss-basis rule applies.
  • ESPP shares often trigger both a capital gain/loss component and a compensation (ordinary income) component reported on the W-2. The 1099-B basis is frequently understated because the broker doesn't include the discount already taxed as wages — this is one of the single most common under-basis errors preparers catch on review.
  • Community property step-up applies in nine states (Arizona, California, Idaho, Louisiana, Nevada, New Mexico, Texas, Washington, and Wisconsin). When one spouse dies, both halves of jointly held community property generally get a full step-up to fair market value — not just the decedent's half, which is the rule in common-law states. Preparers working multi-state clients need to confirm which regime applied at the date of death before setting basis on inherited jointly held securities.

Covered vs. noncovered securities. Brokers are required to report basis to the IRS for "covered securities" — generally equities acquired after 2011 and mutual fund shares after 2012 — but not for noncovered securities acquired earlier or transferred in from another institution without basis information following. Covered lots land in Box A or D; noncovered lots land in Box B, C, E, or F, and the preparer bears responsibility for verifying — not just transcribing — the basis shown.

A practical reconciliation checklist per brokerage account:

  1. Total proceeds per 1099-B matches total proceeds entered
  2. Total basis per 1099-B matches total basis entered (for covered lots)
  3. Every adjustment code (W, B, D, O, etc.) is applied and matches supporting documentation
  4. Net short-term gain/loss and net long-term gain/loss subtotals tie to the broker's own summary page
  5. Any transaction with $0 or blank basis has been flagged for basis research, not entered as $0 by default

That last point matters more than it sounds. Entering a blank basis as zero overstates the gain — sometimes dramatically — and is one of the most common errors found in post-filing amended return work.

Step 3: Identify and Apply Wash Sale Adjustments

Powered by UpTax.AI

Robo AI Tax Preparation

Reduce up to 90% of human effort.

Automated tax prep that scales with your busy season.

See it in action

The wash sale rule under IRC Section 1091 disallows a loss deduction when a taxpayer sells a security at a loss and buys a "substantially identical" security within 30 days before or after the sale. The disallowed loss gets added to the basis of the replacement shares, deferring — not eliminating — the tax benefit.

Brokers are required to report wash sales with Code W on the 1099-B, but only within the same account at the same brokerage. That's the gap. If a client sells 100 shares of a stock at a loss in their Schwab account and repurchases the same stock in a Fidelity account nine days later, neither broker sees the other transaction. Neither 1099-B will show the wash sale. The disallowed loss simply won't get reported unless the preparer catches it manually.

Example: A client sells 200 shares of a tech stock for a $6,000 loss in a taxable brokerage account on November 20. On December 5, the same client's spouse buys 150 shares of the same stock in a separate joint account. Because the wash sale rule applies across accounts owned by the same taxpayer (and, per IRS guidance, generally across a spouse's accounts on a joint return context in certain circumstances), a portion of that loss is disallowed — even though no single broker's 1099-B flags it. Catching this manually requires cross-referencing every sale-at-a-loss against every purchase across every account the client holds, within a 61-day window (30 days before through 30 days after). At 50 transactions, that's tedious. At 2,000 transactions across five accounts, it's essentially undoable by hand with full accuracy.

Step 4: Resolve Missing or Incorrect Cost Basis

Noncovered securities frequently show blank or $0 basis on the 1099-B, and this is where preparers spend disproportionate time. Common scenarios:

  • Old DRIP (dividend reinvestment plan) positions where decades of small reinvestment purchases each carry their own basis lot, and the client has no consolidated record.
  • Transferred-in positions where the receiving broker never got basis information from the sending broker — common when a client moves from a smaller regional brokerage to a larger platform.
  • Employer stock plans where the basis needs to be reconstructed from grant/vest statements rather than the 1099-B alone.

Sourcing the correct basis means going back to prior-year broker statements, the client's own purchase confirmations, DRIP transaction histories (many transfer agents can produce these on request), and, for employer stock, the W-2 supplemental detail showing the compensation income already recognized. When a reasonable basis can be documented but not verified with certainty, Form 8949 Code B is used to indicate an adjustment to basis, with the adjustment amount and a brief explanation in column (f) and (g). Document the support for that estimate in the workpapers — if the IRS later questions it, "the preparer's best estimate" without supporting documentation is a weak position. See the Instructions for Form 8949 for the full list of adjustment codes and when each applies.

Step 5: Match and Total Across Multiple Brokerage Accounts

Clients with multiple accounts need a single consolidated worksheet before anything gets transferred to Schedule D. This is also where duplicate transactions sneak in — most commonly when a client transfers an account from one broker to another mid-year. The old broker may report the transfer-out as a disposition in some cases (it usually shouldn't, for an in-kind transfer, but data errors happen), and the new broker's opening statement can double-count the same lots.

A clean tie-out procedure before moving to Schedule D:

  1. Build one worksheet per client, per box category (A, B, C, D, E, F), pulling from every account
  2. Cross-check total transaction counts against the sum of each broker's reported transaction count
  3. Flag any security that appears as both a disposition at one broker and an acquisition at another within the same window — investigate before assuming it's a duplicate or a legitimate wash sale trigger
  4. Confirm subtotals for each box category before entering final numbers

Step 6: Populate Schedule D and Perform Final Diagnostics

Form 8949 totals feed directly into Schedule D (Form 1040):

  • Box A/B/C totals → Schedule D Part I, lines 1b, 2, and 3 (short-term)
  • Box D/E/F totals → Schedule D Part II, lines 8b, 9, and 10 (long-term)

From there, Schedule D calculates net short-term and net long-term gain or loss, applies any capital loss carryover from the prior year (Schedule D line 6 and line 14, sourced from the prior-year Capital Loss Carryover Worksheet), and applies the $3,000 annual limitation ($1,500 if married filing separately) on capital losses deductible against ordinary income.

A few things to watch that aren't obvious from the form itself. Mutual fund and ETF sales often list "Various" as the acquisition date when multiple lots were sold together using average-cost or first-in-first-out methods — that's acceptable on Form 8949, but the holding period still has to be identified correctly as short-term, long-term, or split between the two if the lots straddle the one-year mark. And Section 1256 contracts (regulated futures, broad-based index options) don't belong on Form 8949 at all — they get 60/40 treatment on Form 6781, and pulling them into the Schedule D reconciliation by mistake will produce a wrong tax rate on the gain.

Common diagnostic flags to check before sign-off:

  • Total proceeds and basis on Schedule D don't match the sum of all Form 8949 pages
  • A statement is attached "in lieu of" Form 8949 detail (permitted when reporting multiple Box A/D transactions with no adjustments) but the summary totals weren't verified against the attached statement
  • Wash sale adjustment codes present on one broker's 1099-B but no corresponding basis increase applied to the replacement shares
  • Capital loss carryover from the prior year not reflected, or reflected incorrectly after an amended prior return

Where AI Fits Into Schedule D and Form 8949 Tax Preparation

For a client with 50 transactions, an experienced preparer can complete the full reconciliation — sorting, basis verification, wash sale check, and tie-out — in well under an hour. For a client with 1,000+ transactions across four brokers, that same workflow, done by hand, can take a full day or more, and the error rate climbs because fatigue sets in on repetitive matching work exactly where accuracy matters most (wash sale detection and basis verification).

This is the specific point in the workflow where AI-based document extraction genuinely helps, without asking a firm to hand over professional judgment. An AI tax preparation system can read consolidated 1099-B PDFs and crypto exchange statements, extract every transaction line with proceeds, basis, dates, and reported box category, and pre-sort them by covered/noncovered status. It can cross-reference sale-at-a-loss transactions against purchases across every account the client holds and flag potential wash sales that no single broker's 1099-B would catch. It can also flag every transaction with missing or zero basis for the preparer's attention rather than silently entering it as zero.

What it shouldn't do — and what UpTax is deliberately built not to do — is make the final call on ambiguous basis estimates, wash sale determinations that depend on facts outside the documents (like a spouse's separate account activity), or anything that affects the bottom-line tax position without a reviewing professional's sign-off. UpTax is AI tax preparation software, not a filing platform — it doesn't e-file returns or replace the CPA's or EA's signature on the work. The model it follows is straightforward: the software extracts transaction data, categorizes it into the correct Form 8949 boxes, cross-matches for wash sales, and flags exceptions across the entire transaction set; the CPA or EA reviews the flagged items, makes the judgment calls, and approves the final numbers before the firm files the return through its own filing process. UpTax is tax preparation software built for professional firms — it prepares and organizes the work for review, and the firm retains full control over what gets filed and when. If you want to see the automated reconciliation in action on a real 1099-B set, see how UpTax's automated reconciliation works.

Building a Repeatable Schedule D and Form 8949 Tax Preparation Process for Your Firm

A standard reviewer checklist, applied consistently across every return with Schedule D activity, catches most errors before a return goes out the door:

  • Confirm every broker's 1099-B is accounted for, including supplemental cost basis statements
  • Confirm short-term/long-term classification on any inherited, gifted, or employer-stock lots
  • Confirm wash sale adjustments were checked across all client accounts, not just within each broker
  • Confirm no noncovered lot was entered with zero basis without documentation
  • Confirm Schedule D totals tie to Form 8949 totals exactly
  • Confirm prior-year capital loss carryover was applied

Train newer preparers to recognize the high-risk patterns specifically: crypto activity (frequently missing 1099-B entir

Ava Coleman

Written & reviewed by

Ava Coleman

Accounting Research Analyst · UpTax.AI

Part of the UpTax.AI research desk covering U.S. tax, accounting, and automation for CPA and tax-prep firms.

Automate your CPA or tax practice with UpTax.ai

Automate Your CPA or Tax Practice with UpTax.ai

Reduce up to 90% of human effort.

Book a demo

SOC 2 · human sign-off on every return

How UpTax works

From your documents to a filed return

Five steps — with two layers of human review. You connect the data, UpTax prepares and checks it, your CPA approves, and it's ready to file.

app.uptax.ai / returns / live

Your returns connect to the UpTax engine

1040
1065
1120
1120S
1041

UpTax engine

6 return types · auto-classified & securely connected

Connect your data
Explore the products