Crypto recordkeeping guide

Crypto tax software balance doesn’t match your exchange: reconcile it asset by asset

When your crypto tax software shows a different balance than your exchange or wallet, the history behind it is incomplete or doubled somewhere. Compare one asset and one date at a time to find the rows that cause it.

From Elena Mocchi, CPA · Published · Reviewed by Elena Mocchi, CPA ·

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

  1. Pick one date. December 31 of the tax year is a natural cut-off.
  2. 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.
  3. Get the software balance for the same account and date.
  4. List the differences by account and asset. Start with the largest difference in value.
  5. 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.
  6. 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

Work directly with Elena Mocchi

Balances not matching?
Let’s trace the difference.

Tell Elena which accounts, assets, and dates differ. A short overview is enough; agree how to share records after the scope review.

Message Elena on Telegram

Prefer a quick start? Try the free profit calculator in Telegram

Request a records quote

Describe the warning or record issue. A short overview is enough.

Add details about your records (optional)

A brief overview is enough. We’ll agree on how to share records after I review your request.

Your details and message are sent to Elena by email through FormSubmit to respond to your inquiry. FormSubmit privacy policy · My privacy policy.