Short answer
Pick one date, such as December 31. For each asset in each account, compare the balance on the exchange statement or wallet history with the balance in your software. Then find the first date the two running balances split: the missing, duplicated, or misclassified row is there.
Why balances differ
A balance difference is the quickest test of whether your imported history is complete. The common causes:
- Missing history. Earlier years, closed accounts, or a wallet that was never added.
- Unmatched transfers. A move between your own accounts recorded as a withdrawal on one side only. See unmatched wallet transfers.
- Duplicate imports. The same activity from a CSV file and an API sync. See duplicate crypto transactions.
- Rewards and income. Staking, interest, or airdrops that were not imported, or were imported twice.
- Fees in another asset. A fee charged in a different coin, or a network fee that is not its own row.
- Conversions and token changes. Small-balance conversions, token migrations, renamed or delisted assets.
- Spam tokens. Unsolicited tokens that show up as holdings with no real value.
Reconcile in this order
- Pick one date. December 31 of the tax year is a natural cut-off.
- Get the source balance. For each account, take the balance of each asset on that date from the exchange statement or balance export. For a wallet, use the transaction history up to that date.
- Get the software balance for the same account and date.
- List the differences by account and asset. Start with the largest difference in value.
- Find where the running balances split. Compare the two histories date by date; the first date they diverge points to the row that is missing, duplicated, or misclassified.
- Fix the cause, not the total. Add the missing source or remove the duplicate. Avoid a single adjusting entry that only makes the numbers agree.
If you use Koinly or CoinTracker
Both tools show two numbers for a connected account: the balance the exchange or wallet reports through its API, and the balance calculated from your imported transactions. Your tax figures use the calculated one.
- Koinly flags assets where the two balances differ. It keeps only the reported balance from the last sync, so for a year-end check use the exchange’s own statement. Some differences need no fix, such as rounding, open orders, or staked assets an exchange leaves out of its reported balance (Koinly’s help article).
- CoinTracker shows reported values, as of the last sync, on its Home, Portfolio, and Wallet pages. Tax figures and the Transactions page use calculated values. A gap usually points to missing transactions, manual edits, or syncing problems (CoinTracker’s help article).
Deleting and re-adding a wallet starts its import from scratch, and Koinly notes that this also reverts manual changes. Keep a record of your edits before you do it.
Demo: a duplicate deposit
Fictional records · No tax calculation.
- Exchange statement, Dec 31 1.20 ETH
- Balance on the exchange’s year-end statement.
- Software balance, Dec 31 1.45 ETH
- Same account and date in the tax software.
- Running balances split June 3
- A 0.25 ETH deposit appears twice: once from the CSV file and once from the API sync.
Removing one copy of the deposit brings the software to 1.20 ETH. The note records which import was kept and why, with both source rows.
Negative balances and zero-cost sales
A negative balance in your software means it recorded more sold or sent than it has acquisitions for. Many tools then treat the missing part as having zero cost, which overstates gains until the history is complete. Trace it the same way, starting with the first date the balance goes below zero. See missing crypto cost basis and Koinly missing purchase history.
Write down what you found
For each difference, record the account, the asset, the date range, the cause, the source rows, and whether it is resolved. The IRS asks taxpayers to keep records of each purchase, receipt, sale, exchange, or other disposition of digital assets (IRS digital assets page). Differences you cannot explain stay on an open-items list for your CPA or EA rather than being forced to match.
When a cleanup review can help
If balances differ across several accounts or assets, Elena’s transaction cleanup traces each difference to its source and documents the corrections within an agreed scope. Tax advice, return preparation, and filing are not included.
This guide is general information as of October 2026. It is not tax advice.
Sources
See how the records fit together
View the illustrative record package to compare source rows, a working ledger, correction notes, and an open-items list.
Related recordkeeping guides