You ran Koinly's tax report. It says you had $42,180 in proceeds and $5,860 in long-term gains for tax year 2025. Then you opened the 1099-DA from Coinbase and it shows $38,920 in proceeds and a long-term gain figure that's different by almost $3,000. Same year. Same wallet history, supposedly. Two reports, two numbers — and TurboTax is asking which one is right.
Both are right, in the narrow sense. Koinly is showing the full picture of every taxable disposal across every wallet and exchange you connected. The 1099-DA is showing only the disposals the broker witnessed and is required to report to the IRS. The mismatch isn't a bug; it's the structural gap between aggregator data and broker reporting. The reconciliation step is what reconciles them into one Form 8949 that imports cleanly. Below is the complete walkthrough — why the gap exists, what to do about it, and the worked example most filers actually need.
Why Koinly Totals Don't Match Your 1099-DA
The two reports are measuring different things, even when both cover the same calendar year and the same set of wallets.
Koinly sees everything you connected. When you wire up your Coinbase account, your MetaMask wallet, your Ledger addresses, and your Kraken account in Koinly, the aggregator pulls every transaction from each source and reconciles them across wallets. A transfer from Coinbase to MetaMask is a non-taxable internal move; Koinly nets it out. A trade on Uniswap is a taxable disposal even though no broker sees it. Staking rewards become income events. The Form 8949 totals Koinly produces include disposals that happened anywhere — not just on a 1099-DA-issuing broker.
The 1099-DA only sees what the broker witnessed. Coinbase's 1099-DA reports disposals that happened inside Coinbase. It does not report Uniswap swaps. It does not report movements in your MetaMask wallet. It does not report a sale on Kraken even if you eventually transferred those proceeds to Coinbase. From the broker's perspective, you sold X coins of Y inside their walls — that's the universe of the form.
The gap between the two numbers, then, is everything Koinly counts that the broker doesn't:
- DEX trades (Uniswap, PancakeSwap, SushiSwap, 1inch)
- DeFi disposals (token swaps inside lending protocols, LP exits)
- Sales on a different broker that didn't issue a 1099-DA, or that issued one separately
- Wallet-to-wallet swaps you executed directly via signed transactions
- Receipts of staking rewards or airdrops (counted by Koinly as income, not on a 1099-DA)
There's also a smaller gap in the other direction — disposals on the 1099-DA that Koinly might be missing — but this is rare if your wallet connections are complete.
When the two reports differ, the reconciliation is not "which is right." It's "split each disposal into the correct Form 8949 box based on whether a broker reported it." That split is mandatory, and it's the structural reason a single combined number was never going to work.
The Reconciliation Flow, Step by Step
The goal of reconciliation is one final Form 8949 that:
- Includes every taxable disposal from the year (Koinly's view)
- Assigns each disposal to the correct box (Box A/B/D/E for 1099-DA-covered, Box C/F for noncovered)
- Carries cost basis through correctly, including from the 1099-DA when the broker reported it and from Koinly when the broker reported Unknown
Here's the workflow.
1. Export your 1099-DA from each broker. If you have multiple brokers (Coinbase, Robinhood, Kraken), you'll have multiple 1099-DAs. Each one covers only that broker's activity. Save the PDFs.
2. Export your Koinly Form 8949 report. Koinly Tax Reports → Form 8949 (CSV). This is the cleanest export for reconciliation purposes — every row is a realized disposal with proceeds, basis, term, and the source platform marked. If you only have the Complete Tax Report or Capital Gains report, those work too — same data, slightly different layout.
3. Identify the broker-reported disposals in the Koinly export. Filter rows where the source platform is the broker that issued you a 1099-DA. For each such row, the matching disposal should appear on the broker's 1099-DA — same coin, similar quantity, same date.
4. Match the rows. This is the manual or automated reconciliation. For each Koinly row marked as Coinbase-sourced, find the corresponding 1099-DA line. Check three things: is the proceeds figure within rounding distance, is the disposal date the same, and does the cost basis match (or is the 1099-DA showing Unknown)?
5. Decide the basis priority for matched rows.
- If both Koinly and the 1099-DA have basis, and they're close (within a few percent), use the 1099-DA basis — that's what the IRS sees, and the form will match cleanly.
- If the 1099-DA shows Unknown and Koinly has the basis tracked, use Koinly's basis. The reconciliation flag stays on the row (it's still a Box B/E disposal because the broker reported it without basis), but the basis number gets filled in.
- If both have basis and they differ significantly (more than a few percent), Koinly is usually more accurate because aggregators chase historical basis through transfer-ins; brokers can only see what entered their own walls. Document the override and use Koinly's number — but expect that lot to be re-reviewed if the IRS issues a CP2000.
6. Mark non-broker disposals as Box C/F. Koinly rows from Uniswap, MetaMask, or any source that didn't issue a 1099-DA stay as noncovered — they go in Box C if short-term, Box F if long-term, and you report the basis from Koinly's tracking. The IRS doesn't have a third-party form to match them against, but those numbers still need to be on your return. The full mechanics of Box A vs Box C splitting for crypto cover the box assignment rules.
7. Generate the final Form 8949. Either by hand, in a spreadsheet, or via the 1099-DA converter — which accepts both the broker PDF and the Koinly CSV in one upload, runs the reconciliation, and outputs a TXF with the box assignments applied. The latter is the same workflow described in the 1099-DA reconciliation primer, specialized for the Koinly source format.
Worked Example: Coinbase 1099-DA + Koinly Full Year
Here's a realistic 2025 scenario. You used Coinbase as your main exchange and connected MetaMask in Koinly to track your DeFi activity.
Coinbase 1099-DA (received in February 2026):
- 18 disposals during 2025
- Total proceeds: $38,920
- Total basis reported: $32,160 (basis on 14 of 18 lots; 4 lots show Unknown)
- 12 short-term, 6 long-term
Koinly Form 8949 export (run for 2025):
- 23 disposals total
- Total proceeds: $42,180
- Total basis: $33,440
- Source breakdown: 18 Coinbase, 5 Uniswap
The 5-disposal gap is exactly the Uniswap trades that don't appear on the 1099-DA. Reconciliation breaks the 23 rows into:
- Box A (Coinbase, short-term, basis reported): 9 lots — match against 9 lines of the 1099-DA where basis was filled in.
- Box B (Coinbase, short-term, basis NOT reported): 3 lots — these are the Coinbase Unknowns. Koinly has the basis from earlier transfers; we use Koinly's number on each row.
- Box D (Coinbase, long-term, basis reported): 5 lots — match against 5 long-term basis-reported lines on the 1099-DA.
- Box E (Coinbase, long-term, basis NOT reported): 1 lot — the long-term Coinbase Unknown. Koinly's basis fills it in.
- Box C (DEX, short-term): 4 Uniswap lots, all short-term. Basis from Koinly. No 1099-DA matching.
- Box F (DEX, long-term): 1 Uniswap lot, long-term. Basis from Koinly.
Total disposals on the final Form 8949: 23. Total proceeds: $42,180 (matches Koinly). Total basis: $33,440 if you accept Koinly's basis on the 4 Coinbase Unknowns, slightly different if the 1099-DA later updates with broker-supplied basis.
Schedule D rolls up the six box subtotals; the gain figure that flows to Form 1040 is the sum across all six. You'll see Box A's $X, Box B's $Y, all the way to Box F's $Z, then the Schedule D total. TurboTax Desktop handles this automatically when you import the TXF.
Common Reconciliation Failures and What They Mean
Koinly's proceeds for a Coinbase row are higher than the 1099-DA's proceeds for the same lot. Usually means Koinly is using the spot price at the moment of disposal while the 1099-DA is using the actual fill price. The difference is small (cents to a few dollars per lot) and reconciles by trusting the 1099-DA — that's what the IRS sees.
Koinly shows a long-term lot for something the 1099-DA marks as short-term. Term mismatch. Look at the acquisition date Koinly is using vs what the broker recorded. Most often, the broker lost the original acquisition date in a wallet migration (especially on Robinhood) and is using a more recent date. Koinly's term is usually right because it tracked the lot through the migration. If you're confident in Koinly's term, apply Form 8949 code T on that row (term reported by broker is wrong) — see the Form 8949 codes lookup for the full code reference.
Koinly is missing a Coinbase disposal. The Koinly-Coinbase API connection failed for a partial date range. Refresh the connection, re-import the missing transactions, and re-export. Don't ship a Form 8949 that's missing rows the 1099-DA reports — the IRS computer will match the proceeds total and flag it.
Koinly shows wash sale flags on crypto. Koinly defaults to "no wash sale rule for crypto" for tax year 2025 because crypto wash sale rules don't apply by statute. If you toggled it on, your realized losses got disallowed and shifted to replacement lot bases. Decide whether to keep that toggle on for filing — most filers turn it off to match the law. The 1099-DA may flag wash sales independently; if the broker did, honor those flags on those specific rows.
The 1099-DA total proceeds are higher than Koinly's broker-marked subtotal. The 1099-DA is including a disposal Koinly missed, or Koinly classified the disposal as something other than a sale (e.g., a swap labeled as a wallet-to-wallet transfer). Audit the 1099-DA disposal list against Koinly's Coinbase activity manually — usually it's one or two missed swaps.
Robinhood-Specific Notes
If your 1099-DA is from Robinhood Crypto rather than Coinbase, the workflow is the same but the basis-Unknown rate is typically higher. Robinhood tends to lose acquisition dates on lots that survived the Robinhood Crypto LLC entity migration, and external transfers in (from MetaMask, from another exchange) all show Unknown by default. Reconciling Robinhood's 1099-DA against Koinly is the same step-by-step flow above — the Robinhood 1099-DA reconciliation landing walks through the broker-specific quirks.
If you imported your Robinhood Crypto data directly into Koinly via API, Koinly's basis on those Robinhood lots is usually accurate even when the 1099-DA shows Unknown. That's the case where Koinly's basis fills in the broker's Unknown most cleanly — accept the Koinly number on Box B/E rows and document the source.
Kraken, Gemini, and Other Brokers
Kraken's and Gemini's 1099-DAs are typically lower-Unknown than Robinhood's because both brokers historically tracked basis on crypto trades even before the IRS required it. The reconciliation against Koinly is mostly verifying that Koinly's view matches the broker's view on the disposal date and price. When they differ, again, trust the broker's report — that's what the IRS sees.
If you used a smaller exchange (Crypto.com, Bitstamp, smaller regional platforms), check first whether they issued a 1099-DA at all for tax year 2025. Some platforms below the IRS reporting threshold (custodial volume, geography, regulatory status) opted out. If no 1099-DA was issued, those disposals all become Box C/F noncovered — your records become primary, and Koinly's tracking carries the day.
FAQ
My Koinly proceeds total is $3,000 higher than my 1099-DA. Did I do something wrong?
Almost certainly no. The gap is the disposals Koinly counted that didn't happen on the 1099-DA-issuing broker — Uniswap swaps, MetaMask trades, sales on other exchanges. Reconciliation splits those into Box C/F (noncovered) on Form 8949; the 1099-DA-covered subset stays in Box A/B/D/E.
Should I use Koinly's basis or the broker's basis when both are filled in?
Use the broker's. The IRS receives the 1099-DA directly from your broker, so any difference between the form's basis and what you report on Form 8949 generates a CP2000 mismatch. Koinly's number is usually close anyway. Reserve overrides for cases where you have strong documentary evidence the broker is wrong.
What if Koinly is missing a 1099-DA disposal?
Fix Koinly first. Refresh the API connection, re-pull the missing date range, and re-export the Form 8949 report. Filing without the disposal that's on the 1099-DA causes a proceeds mismatch the IRS will flag automatically.
Do I need to upload both the 1099-DA PDF and the Koinly CSV to your converter?
Yes if you want the reconciliation done in one step. The 1099-DA converter accepts both — the broker PDF for the form structure, the Koinly CSV (or any aggregator export) to fill in basis on Unknown rows. If you only have one or the other, the converter still works but won't reconcile across the gap.
Does the converter pick up the DEX rows in my Koinly export?
Yes. When you upload the full Koinly Form 8949 CSV (not just the broker-filtered subset), the converter reads every row and assigns boxes based on source platform: 1099-DA-issuing broker → A/B/D/E, anything else → C/F. The output TXF carries the box assignment so TurboTax routes each lot correctly.
What happens to my Koinly cost basis report if I disconnect a wallet later?
The historical export remains accurate. Koinly's tax reports for a closed year are a snapshot of state at the export time. If you disconnect a wallet six months after filing, the wallet's historical disposals are still in the report you saved. Re-running the export later may produce different numbers if Koinly's basis tracking changed, but the filed return is fixed.
My 1099-DA was amended after I filed. What do I do?
Re-run reconciliation against the amended form. If the amendment changed reported basis on lots that were already on your return, file a Form 1040-X with a corrected Form 8949 reflecting the new basis. If the amendment only added rows, those new rows may need to be added if you didn't already report those disposals separately. If the changes are small (under a few hundred dollars in tax effect), the IRS often won't pursue and you can decide whether to amend voluntarily.
Bottom Line
Koinly and your 1099-DA are not interchangeable views of the same data. Koinly is the full universe of your taxable activity; the 1099-DA is the slice the broker reported. The reconciliation is mechanical: split Koinly's rows by source platform, route each into the correct Form 8949 box, and trust the broker's basis when it's filled in. The structural gap between the two numbers isn't a problem to resolve — it's the actual shape of crypto tax reporting in the first year of 1099-DA.
If you're filing tax year 2025 with multiple sources, the 1099-DA converter handles the broker side and the Koinly to TurboTax landing covers the aggregator side; uploading both inputs to the converter does the reconciliation in one step and produces a TXF that imports into TurboTax Desktop with every box assigned correctly.
Reconciling Koinly against a 1099-DA? Convert your 1099-DA PDF with the Koinly Form 8949 CSV uploaded alongside — basis from the broker where it's filled in, basis from Koinly where the form shows Unknown, box assignments computed from the source platform, one TXF that imports into TurboTax Desktop in one step.