Schedule D & Form 8949 Tax Preparation: A CPA Workflow
A granular, firm-ready workflow for reconciling multiple 1099-Bs, applying Form 8949 basis adjustment codes, and resolving wash sales at volume—built for CPA and EA firms, not individual filers.
Schedule D and Form 8949 tax preparation is where good habits go to die during peak season. Six brokerage accounts plus a crypto exchange statement can generate 4,000 transaction lines, half a dozen wash sale adjustments, and at least one 1099-B missing cost basis entirely. Get the reconciliation wrong, and an amended return is the least of your worries — a diagnostic on Schedule D can hold up the whole 1040. Below is a repeatable workflow professional preparers can run on every client, every basis adjustment code, and every broker format, with a clear line between what should be automated and what still needs a human signature.
Schedule D and Form 8949 Tax Preparation: Why These Forms Break Down at Volume
Capital gains reporting doesn't scale the way the rest of a 1040 does. Three W-2s means roughly three times the data entry of one W-2. Five brokerage accounts, each holding dozens of positions traded all year, can produce ten or twenty times the transaction volume of a simpler return. Every additional account brings its own PDF layout, its own labeling quirks, its own mess around covered versus noncovered basis.
Failure points show up in the same places, over and over:
- Mismatched totals. Proceeds or basis entered into the software don't tie to the 1099-B summary page — usually because a page got skipped during entry, or a transaction was keyed twice.
- Missing cost basis. Noncovered securities, transferred shares, old DRIP positions — basis shows up as zero or blank, and left uncorrected, that inflates the gain.
- Incorrect or ignored wash sale flags. Brokers report wash sales within a single account, Box 1g. Nothing forces them to catch one that spans two accounts or an IRA.
- Duplicate reporting from account transfers. Move an account mid-year, and the receiving broker sometimes reissues a 1099-B for lots the prior broker already reported. Miss that, and the sale gets counted twice.
None of this scales linearly with headcount. Adding another preparer to a process built on manual re-keying doesn't fix anything — it just adds someone else who can make the same mistakes faster. Firms that handle high-transaction-volume clients well have a defined, repeatable workflow instead of leaving reconciliation to whoever happens to draw the file. That's the model this guide walks through.
Schedule D vs. Form 8949: What Each Form Actually Requires
Precision matters here. A surprising number of review-stage errors trace back to preparers treating these two forms as interchangeable.
Form 8949 reports individual transactions — each sale or disposition, with its own date acquired, date sold, proceeds, basis, and adjustment code. Schedule D (Form 1040) is the summary form. It aggregates Form 8949 totals (plus other sources, like Form 4797 or K-1 capital gain distributions) into short-term and long-term figures, then carries the net to Form 1040. See the IRS's overview of Schedule D for the form's full scope, including how it interacts with the Qualified Dividends and Capital Gain Tax Worksheet.
Form 8949 splits transactions into six boxes across Parts I and II:
- Box A / Box D — covered securities, basis reported to the IRS
- Box B / Box E — noncovered securities, basis not reported to the IRS
- Box C / Box F — no 1099-B at all (private sales, some crypto, certain small-business stock)
When can you skip line-by-line detail? Per the Instructions for Form 8949, a taxpayer can report a summary total directly on Schedule D — no individual 8949 lines needed — but only for Box A and Box D transactions where basis was reported to the IRS, no adjustments apply (no wash sales, no basis corrections), and Form 8949 isn't otherwise required. One adjustment code — even a single wash sale disallowance on one lot — and that entire batch needs full line-by-line detail, either on the form or an attached statement in the same format. Common QC miss: a preparer sees "covered, basis reported," defaults to summary treatment, and never checks whether Box 1g shows a wash sale on any line.
Holding period edge cases earn their own checklist item:
- Inherited property is automatically long-term, no matter how long the decedent or heir actually held it. Code E may apply if basis needs adjustment for a stepped-up value the broker didn't report.
- Wash sale carryover shares carry a modified holding period — the disallowed loss and the original holding period both tack onto the replacement shares.
- ESPP and RSU sales are notorious for broker-reported basis that leaves out compensation income already taxed through payroll. The 1099-B basis is frequently too low, and fixing it takes the employer's supplemental stock plan statement — not just the 1099-B.
Step 1: Collect and Normalize Every 1099-B and Supplemental Statement
Reconciliation is only as good as the document set behind it. Build a standard capital gains intake checklist for every client with investment activity:
- All 1099-B forms (consolidated or standalone) from every brokerage
- Broker year-end summary/supplemental statements — these often carry wash sale and basis detail the official 1099-B leaves out
- Crypto exchange transaction reports or Form 1099-DA where applicable
- K-1s reporting sale of a partnership interest (Box 20 codes plus the accompanying sale statement)
- Employer stock plan statements for ESPP/RSU/ISO sales
- Prior-year return and carryover worksheets
Two reconciliation issues surface right away at intake. First: covered vs. noncovered basis. Covered lots have basis reported to the IRS and need less scrutiny. Noncovered lots put the entire substantiation burden on the preparer and client. Second: format chaos across brokers. A Schwab consolidated 1099-B, a Fidelity statement, an E*TRADE export, a Robinhood PDF — each lays out wash sale flags, basis adjustments, and covered/noncovered breakdowns differently. Some list disallowed wash sale amounts in a dedicated column. Others bury them in footnotes.
This is exactly where AI document extraction earns its keep. Instead of a preparer manually re-keying a 40-page consolidated 1099-B line by line, an AI extraction layer pulls every transaction row — date acquired, date sold, proceeds, basis, box category, wash sale amount — into a structured worksheet, no matter which broker issued the statement. That doesn't eliminate the reconciliation step. It just removes the re-keying labor, so preparer time goes toward checking the output instead of producing it.
Step 2: Match Broker Statements to Prior-Year Carryovers and Client Records
Pull the prior-year Schedule D carryover worksheet first. Confirm the capital loss carryforward matches what's in your software this year, before touching current-year transactions. A missed or mistyped carryover ranks among the most common — and most avoidable — errors in capital gains tax preparation.
Next, reconcile broker-reported totals against any client trade confirmations, especially where 1099-B coverage is partial — common with newer accounts, in-kind transfers, or custodian changes mid-year. Client transferred an account? Check whether the receiving broker actually got the historical basis data along with the shares. Basis often doesn't transfer, especially on older accounts or DRIP positions, and when that happens the receiving broker reports the sale as noncovered with basis at zero or missing — even though a real cost basis exists on the old broker's records. That leads straight into Form 8949 code B, covered next.
Step 3: Apply the Correct Form 8949 Basis Adjustment Codes
Column (f) of Form 8949 holds the adjustment code. Column (g) holds the dollar adjustment. Here's what each code means in practice:
- Code B — Basis on the 1099-B is wrong (often from a transfer where correct basis didn't follow the shares). Adjust column (g); note the correct figure came from the prior broker's records or trade confirmations.
- Code D — Used for 1099-B transactions with basis reported to the IRS in Box 3, in specific summary/aggregation scenarios. Check current-year instructions for exact usage — code assignments can shift.
- Code E — Reported basis doesn't reflect an adjustment you're entitled to make (common with inherited property needing a stepped-up basis correction, or ESPP/RSU sales missing compensation income in the basis).
- Code L — Nondeductible loss from personal-use property, or a loss disallowed for a reason other than wash sale (that's code W).
- Code N — 1099-B shows incorrect proceeds; you're reporting the corrected amount.
- Code O — Multiple codes apply, or the situation isn't covered elsewhere and needs an attached explanation.
- Code T — 1099-B shows basis wasn't reported to the IRS, but you have information the basis shown was actually correct. Less common; verify against current-year instructions.
- Code W — Wash sale loss disallowed under IRC Section 1091. Column (g) shows the disallowed loss as a positive number, reducing the deductible loss.
Mistakes here aren't obscure. They're basic process failures: applying code W to only one leg of a multi-account wash sale, flipping the sign on a column (g) adjustment, skipping the required explanatory statement when code O genuinely needs one. Always check the current tax year's Instructions for Form 8949 before finalizing codes. The IRS revises definitions and mechanics year to year.
Step 4: Identify and Resolve Wash Sales
Robo AI Tax Preparation
Reduce up to 90% of human effort.
From client documents to a drafted return in minutes.
The wash sale rule disallows a loss when a taxpayer sells a security at a loss and buys a "substantially identical" one within 30 days before or after. The loss doesn't vanish — it gets added to the basis of the replacement shares, deferring the benefit rather than killing it.
Brokers track wash sales, Box 1g, but only within a single account at a single institution. That's the gap preparers have to close by hand. Sell a stock at a loss in a taxable account, buy it back within 30 days in a different account — including an IRA — and the rule still applies. No broker will flag it, because neither institution can see the other's activity. Worse: if the replacement purchase happens inside an IRA, the disallowed loss is gone for good. It never gets added to basis anywhere, since an IRA doesn't track basis the way a taxable account does.
Without automated cross-account matching, here's the manual version: extract every transaction into one consolidated worksheet, sort by security (ticker or CUSIP) across all the client's accounts, then scan for any loss sale followed by a purchase of the same security within the 30-day window — either direction, across any account the client holds, taxable, IRA, spouse's accounts on a joint return, even a Roth. Tedious at scale. That's exactly why AI-assisted transaction matching pays off here — an extraction layer that's already normalized every 1099-B into one dataset can flag same-security buy/sell pairs across accounts for preparer review, instead of someone eyeballing thousands of rows.
Step 5: Handle Missing or Incomplete Cost Basis
Missing cost basis causes more client-communication headaches than almost anything else in capital gains tax preparation. It deserves a standardized process, not an ad hoc email every time it comes up.
Build a documentation hierarchy for basis substantiation, most reliable first:
- Original trade confirmation from the purchase date
- Broker-provided historical cost basis records (many firms can pull these for older accounts if the client asks directly)
- DRIP statements — each reinvestment creates a new basis lot, easy to lose track of over years
- Employer stock plan statements for ESPP, RSU, and ISO shares
- Historical price data as a last resort, when the client can document an approximate purchase date but has no confirmation
Basis truly can't be substantiated after a reasonable effort? The conservative default the IRS effectively imposes is zero basis — which maximizes the reported gain. Not a preparer's first move. It's the fallback after documentation efforts run out, and clients should be told why the position generated more gain than they expected.
A standardized missing-basis request template — listing exactly which lots are missing basis, the security, the approximate purchase date, and what documentation would fix it — saves a ton of back-and-forth compared to a generic "we need more information" email.
Step 6: Reconcile Totals to Schedule D and Run Diagnostics
Once every transaction is coded and every wash sale identified, cross-foot Form 8949 totals by box category into the matching Schedule D lines (short-term from Boxes A/B/C flows to lines 1b–3; long-term from Boxes D/E/F flows to lines 8b–10). This tie-out step alone catches most of what's left before a return reaches review.
Before sign-off, run a firm-level QC checklist for capital gains workpapers:
- Do Form 8949 totals by box tie exactly to Schedule D?
- Does the wash sale disallowed amount in column (g) actually reduce the reported loss, and match the sum of Box 1g amounts plus any manually caught cross-account wash sales?
- Is the $3,000 capital loss limitation ($1,500 married filing separately) applied correctly against ordinary income when net losses exceed gains?
- Does next year's carryforward match the unused loss after this year's limitation?
- Is every noncovered-security lot either substantiated with basis or flagged with a documented rationale?
Where AI Extraction and Human Review Each Add the Most Value
There's a natural split between mechanical work and judgment work in this whole process. That's exactly where AI tax preparation tools earn their place — not by replacing a preparer's decisions, but by clearing away the repetitive labor around them.
Where AI adds the most value: bulk extraction from PDF and CSV 1099-B statements regardless of broker format, matching transactions across a client's multiple accounts into one consolidated dataset, flagging likely cross-account wash sales for preparer attention, and catching lots with missing or zero cost basis before they slip into the return unnoticed. This is work that scales badly by hand and scales well with automation.
Where human review stays essential: picking the right Form 8949 adjustment code for an ambiguous transaction, confirming an AI-flagged wash sale actually meets the substantially-identical-security test, deciding how to substantiate basis when documentation is thin, and giving final approval on the completed Schedule D and Form 8949 before the return moves to filing.
UpTax.AI is built around exactly this split: AI handles extraction, matching, and flagging across large transaction volumes so preparers spend their time on judgment calls instead of data entry. UpTax is AI tax preparation software — it organizes and prepares the workpapers behind Schedule D and Form 8949 for professional review. It doesn't file returns; the responsible CPA or EA still reviews, signs, and files. Curious how the extraction and matching layer performs on real 1099-B data? See how UpTax.AI handles document extraction, or get a broader look at the AI tax preparation platform for CPA firms.
Building a Repeatable Schedule D and Form 8949 Tax Preparation Workflow for Your Firm
Individual preparer skill stops being a viable strategy once a firm has dozens of high-transaction-volume clients hitting the same eight-week window. Standardize instead:
- Intake — one document checklist, applied to every investment-income client, collected before preparation starts rather than trickling in mid-return.
- Reconciliation — extraction and normalization into a single consolidated worksheet per client, no matter how many brokers are involved.
- Coding — basis adjustment codes and wash sale flags applied and documented, with a clear note on the source of any manual basis correction.
- Review checkpoints — a second-preparer or manager review specifically for clients above a set transaction-count threshold (say, 200+ transactions or 3+ brokerage accounts), rather than the same review depth for every return regardless of complexity.
Firms that build this into a documented process — instead of leaving it to whoever draws the file — see fewer amended returns, faster turnaround on complex clients, and less bottlenecking in the final weeks before deadline. That's the difference between a workflow that scales and one that just throws more people at the same manual work.
Frequently asked questions
How do I reconcile multiple 1099-Bs for one client on Schedule D? Consolidate every 1099-B and supplemental broker statement into a single transaction worksheet, sorted by box category (A/B/C for short-term, D/E/F for long-term). Confirm each broker's reported totals tie to your worksheet subtotals before entering anything into your tax software, and check for duplicate reporting if any account was transferred between institutions mid-year.
What are the Form 8949 basis adjustment codes and when do I use each one? The main codes are B (basis reported incorrectly), D and T (basis reporting status issues), E (basis needs an adjustment not reflected on the 1099-B), L (nondeductible loss other than wash sale), N (incorrect proceeds reported), O (multiple adjustments or explanation required), and W (wash sale loss disallowed). Always confirm current-year definitions against the Instructions for Form 8949, since specifics can change year to year.
How does the wash sale rule affect Schedule D and Form 8949 reporting? Sell a security at a loss, buy a substantially identical one within 30 days before or after — in any account the taxpayer or spouse controls, including IRAs — and the loss is disallowed under IRC Section 1091. Report the disallowed amount with code W on Form 8949 and add it to the basis of the replacement shares, unless that replacement purchase happened inside an IRA — then the loss is gone permanently.
How should I handle a 1099-B with missing cost basis? Work through a documentation hierarchy: original trade confirmations, broker historical records, DRIP reinvestment statements, employer stock plan documents for equity compensation. Can't substantiate basis after a reasonable effort? Treat it as zero — the conservative approach — and disclose that to the client, since it maximizes the reported gain.
Can I report summary totals on Schedule D instead of listing every transaction on Form 8949? Only for Box A and Box D transactions where the broker reported basis to the IRS and no adjustments — including wash sales — apply. One adjustment code needed on even a single lot in that batch, and line-by-line Form 8949 detail (or an attached statement in the same format) is required for the whole group.
How is AI used in Schedule D and Form 8949 tax preparation? AI tools extract transaction-level data from 1099-B PDFs and broker exports regardless of format, consolidate multiple accounts into one reconciled dataset, and flag likely wash sales and missing-basis lots for preparer review. The preparer still picks adjustment codes, verifies flagged issues, and signs off on the final Schedule D and Form 8949 before the firm files the return.
The takeaway
Schedule D and Form 8949 punish manual processes harder than almost anything else on the 1040. Firms that handle high-transaction-volume clients well aren't relying on memory for basis adjustment codes or scanning statements line by line for wash sales. They've built a defined intake, reconciliation, coding, and review workflow — and automated the pure-data-extraction parts of it so preparer time goes toward the judgment calls that actually need it.
Buried in 1099-B reconciliation every March? Worth seeing what AI-assisted extraction and matching can take off your preparers' plates. Book a demo to see how UpTax.AI handles multi-broker capital gains data ahead of your next filing season.
This article is for educational purposes and general professional guidance. It isn't tax advice. Confirm current-year form instructions, code definitions, and thresholds with the IRS or a qualified tax professional before applying them to a specific return.
Written & reviewed by
Natalie Cooper
Content Research Specialist · 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
Reduce up to 90% of human effort.
Book a demoSOC 2 · human sign-off on every return