Field notes

Why exchange CSVs disagree on the same wallet balance

Open three CSV exports from three exchanges for the same reporting hour and you will often find three slightly different stories about the same economic position. The desktop importer does not erase that friction; it surfaces it inside one portfolio ledger so you can name it.

Timestamp skew

One venue settles the export at 00:00 UTC. Another uses exchange-local midnight. A deposit that crossed the boundary appears on Tuesday in one file and Wednesday in another. When you reconcile, pin a single cutoff and treat anything crossing it as an in-flight item rather than a permanent gap.

Fee rows that look like balances

Some exports list trading fees as separate negative rows; others net them silently. If your ledger expects gross balances, fee presentation alone can invent a mismatch that never existed on the exchange screen.

Internal transfers

Moving coins between a main account and a sub-account can appear as a withdrawal in one export and a deposit in another — or vanish from both if the venue treats the move as internal. Label sub-accounts before you import, or the portfolio ledger will double-count or under-count depending on which file you trust first.

A practical check

Before blaming the importer, open each venue’s live balance UI at the same moment and write the headline totals on paper. Compare paper to ledger. Only then dive into CSV archaeology. The multi-exchange import desktop is fastest when the human already knows which number is the reference.