Exchange CSVs Miss Internal Transfers: How to Complete Your Full Ledger

 / 
3

CSV files exported from exchanges usually miss "internal transfers". It's not that the platform hides them on purpose, but the fund transfer records on Binance, or the funding bills on OKX, are separate from the "trade history". If you only export one type, you will definitely have gaps.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

Even worse, CSV exports from platforms like MEXC completely exclude internal transfers — they simply don't generate that item at all.

So the key to completing your ledger is not to "replace" a single file, but to combine two kinds of statements (funding flow + trading records) and manually fill the gaps.

Step 1: Export "Funding Transfer / Deposit & Withdrawal Statement" (to fill internal transfers)

The file you need is not called "trade history", but "funding statement" or "transfer record".

How to do it:

  1. Log into the exchange web version. Most platforms' mobile apps only support viewing the past 90 days of records, with very limited export freedom.

  2. Find the statement download entry. On Binance, go to "Wallet - Overview - Export" and select "Funding Transfer Records". On OKX, go to "Assets - Order Center - Funding Statement", which includes deposits, withdrawals, C2C trades, and internal transfers.

  3. Choose the right time range and type: Select "Transfer" or "Transfer" type. A single export usually has a 90-day or 1-year limit. If you need a larger span, do it in multiple exports. OKX supports data from February 1, 2021 onward; KuCoin supports data from 2017 onward.

Completion standard: You now have a separate CSV, where each row records "from XX account to YY account" along with the amount and currency.

A common pitfall: many people think the "trade history CSV" contains all operations. Later, when reconciling, they find the "funding account" balance suddenly has an extra amount or a missing amount, precisely because transfers never appeared in the trade record. Internal platform transfers (e.g., from spot to futures account) are not taxable events, but they are the bridge for cost flow. If you lose them, you lose the cost trail.

Step 2: Match "Transfer Records" into Your Trade Ledger

Put the two files (trade CSV and transfer CSV) together, sort by time, and you will see the complete flow of funds.

How to do it:

  1. Open the trade CSV, sort by time in ascending order.

  2. Open the transfer CSV at the same time, find entries around the same time, same currency, and same quantity.

  3. Treat the transfer record as a "note": it is not a buy or sell, it simply moved coins to another place.

  4. In your own master ledger, insert an "internal transfer" line at the corresponding time, noting "moved from A account to B account".

A common pitfall: Some third-party tax tools (like Koinly), when importing Bybit CSVs, may classify some internal transfers as "unknown" or skip them entirely, leaving the asset records incomplete. If you use such a tool, after import, always check the "Uncategorized Transactions" list and manually change the type to "Transfer".

A risk reminder: if you only record buys and sells and miss transfers, your cost basis becomes disconnected across accounts. For example, you bought BTC in your spot account, transferred it to futures to short. Eventually the futures position closed at a loss, but the BTC cost remains stuck in the spot account. Without recording the transfer, the loss at tax time has a broken cost root and cannot be linked to the purchase cost.

Step 3: Mark the "Transfer" Attribute — Track Only, Not Profit/Loss

The transfer records you insert into the ledger need a special financial tag.

How to do it:

  1. In Excel, add a new column "Transaction Type" and label it as "Internal Transfer - No P&L".

  2. In this row, do not set "Buy Cost" or "Sell Revenue". It is just a movement action and does not create a tax event.

  3. Record the fields: date, currency, quantity, sending account, receiving account, TxID (if any).

Completion standard: The balance changes in your master ledger can exactly match the "total assets" changes shown on the exchange, with no coins appearing or disappearing out of nowhere.

Step 4: Build a Standard Re-entry Process (to prevent missing next time)

This one-time fix only solves the current ledger. The key is to establish a routine for each reconciliation.

How to do it:

  1. Export checklist: Every time you export trade records in the future, make it a rule to also export a "funding statement/transfer record". Store both files together.

  2. Verification formula: Use a simple formula to check ledger completeness: Closing Balance = Opening Balance + Deposits - Withdrawals + Realized Buy/Sell Profit/Loss - Fees, without including transfers. If the equation doesn't hold, there is a transfer that hasn't been matched.

  3. Fixed frequency: It's better to do this at the end of each month, rather than digging through 12 months of data at year-end — the exchange's export time limit (up to 90 days or 1 year) will cause you to miss records older than the allowed range.

Completion standard: You have a fixed Excel template or bookkeeping habit, and you won't forget to treat "transfer" as a separate step each time you reconcile.

OKX Exchange
A leading global cryptocurrency platform,suitable for both beginners and experienced traders.
New user benefit: 20% off trading fees upon registration!!

Verification After Doing All Steps

Use Binance or OKX's "account statement" function, pick a date to generate a snapshot, and compare the balance with what you calculated in Excel. If they match, your ledger has fully captured all internal transfers.

Next Step: Open your tax software (like Koinly, CoinTracking), check the "Uncategorized" or "Unknown" transaction list — if any transfer records were skipped, manually classify them as "Transfer", ensuring the system does not count them as buys or sells for profit/loss. Do this check once, then just spend 5 minutes each month to verify.