Holdbound

How to Export Crypto Transaction History CSV from Binance, OKX, Coinbase, and Kraken (Step by Step)

2026-08-21 · draft (noindex)

You want one simple number: what did I actually pay for the coins I still hold, and what did I really make on the ones I sold? The exchange dashboard will not tell you. It shows the last 90 days, splits trades from deposits, hides fees in a different column, and forgets the account you closed in 2022. The only reliable starting point is to export crypto transaction history CSV files from every exchange you have ever used, then do the math yourself or feed the files into a tool.

In this guide I walk through the current export paths on Binance, OKX, Coinbase, and Kraken, and the traps that produce wrong cost-basis numbers: date-range caps, exports that quietly leave out deposits and withdrawals, and timestamps in a timezone you did not expect. Full disclosure: I build Holdbound, a tracker that imports these exact files, so read the product parts near the end with that in mind. I checked every menu path against the exchanges' own help articles in August 2026. Interfaces change; if a button has moved, the section names below are usually still searchable in the exchange's help center.

What "complete history" actually means

A full record of a spot account is at least four things:

  1. Trades (buys, sells, conversions, including the fee and which asset it was charged in)
  2. Deposits (fiat and crypto coming in)
  3. Withdrawals (crypto going out to a wallet or another exchange)
  4. Everything else that changes a balance: staking rewards, referral bonuses, airdrops, dust conversions

Most exchanges do not put all four in one file. If you only export trades, a transfer from Coinbase to Kraken looks like coins appearing from nowhere on Kraken, and their cost basis becomes zero. In the import problems people bring me, that single omission is the most common reason their "realized gains" come out absurdly high.

My rule of thumb: for each exchange, export trades and the balance-change ledger, for the entire life of the account.

Quick reference table

ExchangeWhere to export (web)Separate exports needed?Per-export range capTimestampsLink expiry
BinanceAssets > Asset History > export icon > Export Transaction Records; or Orders > Spot Order > Trade History > ExportYes: trade history vs. transaction records/deposit-withdrawalQuick export: 6 months, 10,000 rows; generated statement: up to 1 yearUTC7 days
OKXAssets > Order Center > (Trading / Order / Funding history) > DownloadYes: trading, funding, and deposit/withdrawal are separate reportsPages show 90 days; downloads go back to early 2021 (app: 12 months)You choose the time zone at exportCopied links expire in 1 hour
CoinbaseProfile > Settings/Accounts > Statements > Generate custom statementUsually no (all assets + all transaction types in one file); Coinbase Advanced/Pro history is separateCustom range, set start date as early as possibleNot documented; verify in the fileDownload on generation
KrakenProfile icon > Documents > Create ExportYes: "Ledgers" and "Trades" are two exportsStart/end date required; no documented hard capUTC by default14 days

Treat the table as a checklist, not gospel. Details per exchange follow.

Binance: two exports, two different limits

Binance has overlapping export paths with different caps. Here is what Binance's own support articles say (I checked them in August 2026):

Full transaction records (the one you want first)

  1. On the website, go to Assets > Asset History.
  2. Hover over the export icon and choose Export Transaction Records.
  3. Pick a preset range (last 6 months) or Customize for older periods. Each generated statement covers up to one year.
  4. Click generate. Binance sends an SMS/email when it is ready; the download link expires after 7 days.
  5. Repeat for each year you have held the account. Binance caps the number of statements per month (the quota is shown in the interface; Binance's own help pages quote 15 to 40 for transaction records and 5 for trade-history statements), so do not burn them on test exports.

On the app: Assets > History > My Trades > Order History > Download icon.

Spot trade history only

Profile > Orders > Spot Order > Trade History > Export Trade History. The quick export is limited to a 6-month range and 10,000 rows; anything older goes through the slower generated statement (up to one year per statement, no row cap, 5 statements per month).

Gotchas

OKX: pick the time zone before you download

OKX splits history into report types, all under Assets > Order Center on the web (I took these from the OKX help center in August 2026):

On the app: Assets > Bills > Assets > download icon.

Gotchas

Coinbase: one custom statement, set the start date early

I could not fetch Coinbase's help page while writing this (it returned a 403), so this section relies on the help-center summary surfaced in search plus CoinLedger's 2026 import guide, which matches it:

  1. On the web, click your profile icon > Settings > Accounts > Statements (app: Account and settings > Statements), or go straight to accounts.coinbase.com.
  2. Stay on the Transactions tab, not Futures.
  3. Under Generate custom statement, choose All assets, All transactions, and a Custom date range starting as far back as your account goes.
  4. Choose CSV and generate. Monthly statements are also available individually in CSV, PDF, or HTML.

Gotchas

Kraken: Ledgers plus Trades, and be patient

Kraken's export lives under Documents (per Kraken support, which I checked in August 2026):

  1. Click your profile icon in the top right, choose Documents.
  2. In Exports, click Create Export (some pages say New Export).
  3. Create two exports: Ledgers and Trades. Ledgers "includes deposits, withdrawals, fees, and other balance changes over time"; Trades has the execution details for each fill.
  4. Set start and end dates (required), leave all assets and fields selected, choose CSV, click Generate.
  5. Come back and check. Kraken does not email you, and says processing can take "anywhere from a few minutes to up to a week." Exports stay downloadable for 14 days.

Gotchas

Gotchas that survive every interface redesign

Date-range caps. Binance limits each statement to a year and the quick export to six months; other exchanges have caps that are not always advertised. I name files by exchange and year (binance-2023.csv) so a missing one stands out.

Separate deposit/withdrawal files. Without transfer records, coins arriving from your other exchange get a cost basis of zero and your realized gains look far larger than they are.

Timezones. Binance and Kraken export in UTC, OKX lets you choose, Coinbase is undocumented. Pick one convention (UTC is least ambiguous), because the date of a sale decides which year's summary it lands in and whether a position counts as held 7 days or 90 (and, for US filers, whether a lot has been held more than one year).

Excel re-saves. Saving a CSV from Excel can rewrite long numbers in scientific notation, strip leading zeros from transaction IDs, and reformat dates to your locale. Look in Excel if you like; import the original download.

Fees in a third asset. Binance may charge fees in BNB, Kraken in the quote currency, Coinbase as a separate line. A tracker that ignores the fee column quietly overstates gains, which is why I treat the fee column as required, not optional.

Closed accounts. Export before you close anything; statement access often shrinks once an account is restricted.

What to do with the files once you have them

You now have between four and twenty CSVs in four column layouts. Three ways forward that I consider reasonable:

A spreadsheet. One exchange, fewer than a couple hundred trades, no transfers between accounts: a spreadsheet with a FIFO column is honestly the right tool, and I say that as someone who sells an alternative. Free, transparent, and you understand every number.

Tax-reporting services such as Koinly, CoinTracker, or CoinLedger. They connect by API or CSV, handle DeFi and NFTs, and produce country-specific tax forms. Pricing is tiered by transaction count and renews yearly; check their current pricing pages. If you need a filled-in tax form, this category is the answer and Holdbound is not a substitute.

Importing both files of one exchange does not double-count

This guide has you export two files from the same exchange on purpose: the statement (which has deposits, withdrawals, fees and rewards) and the trades file (which has per-fill detail). They describe the same fills in different rows, so a naive import books every trade twice — doubled holdings, doubled cost basis, and a portfolio that looks nothing like your exchange balance.

A tool has to handle that explicitly. Holdbound does: on import it recognises fills that already arrived from the other kind of export of the same exchange, keeps the statement version (it is the complete record) and leaves the duplicate fills out of the calculation, telling you how many rows that affected. Re-importing the same file changes nothing at all, because a row's identity comes from its contents.

One consequence worth knowing before it surprises you: nothing is deleted from your data. The de-duplication happens when the numbers are computed, so your full CSV export and your JSON backup still contain every row you ever imported, while the dashboard and the yearly summary count each trade once. If you compare the row count in an export against what the dashboard says, that is why they differ.

Where Holdbound fits, and who should not use it

Your trades stay on your computer. Pay once.

Holdbound. I built its import feature around exactly the exports in this guide. It is a single HTML file: you download it from https://holdbound.com/download and open it in your browser. Drop in the CSVs from this article and it detects the Binance, OKX, Coinbase, and Kraken formats (plus a generic template), matches transfers between accounts automatically with a manual override for the ones it gets wrong, and computes FIFO or average-cost basis with realized and unrealized P&L. Nothing is uploaded: I store the data in your browser's IndexedDB with one-click JSON backup and restore, and the only time the file goes online is the refresh you hit: live prices from CoinGecko, and with them a small version file from my site that powers the update notice. No signup, no API keys. The first 30 days are free and fully functional; after that it is $29 once. Every version released in the following 12 months is yours to keep and keeps working forever; renewing for more updates is $15 a year and optional. If the trial ends without a purchase the app goes read-only — you can still open it, view everything and export all your data; only adding transactions and refreshing prices stop. That is the only case: once you have paid, nothing is ever switched off, including if you let the optional renewal lapse. You cannot add new transactions or refresh prices. Buying the one-time license or renewing puts it back to full use.

For US readers, one sentence belongs next to any average-cost figure: average cost is a mutual-fund rule and is not a recognized method for crypto in the US. For US taxpayers the IRS recognizes specific identification (with contemporaneous records) or, by default, FIFO, applied wallet-by-wallet since 2025. Holdbound offers an average-cost mode for readers in jurisdictions that pool, such as Canada's adjusted cost base, and for comparison; which method you use is a decision for you and your accountant, not for the app.

Who should not use it:

If that is you, a spreadsheet or a tax service will serve you better, and the export steps above are the same either way.

FAQ

How do I export my full transaction history from Binance? Assets > Asset History on the website, click the export icon, choose Export Transaction Records. Each statement covers up to one year, so generate one per year. Links expire after 7 days and there is a monthly cap on statements.

Why is my exchange CSV missing deposits and withdrawals? Trade-history exports only contain trades. On Binance and OKX, deposits and withdrawals are separate exports; on Kraken they are in Ledgers, not Trades. Download both and import both.

Are crypto exchange CSV timestamps in UTC or local time? Binance and Kraken export in UTC. OKX asks you to choose. Coinbase does not document it, so compare one row against the app first. Use the same convention for every exchange.

Can I export more than 90 days of history from OKX? Yes. The page only displays 90 days, but Download under Assets > Order Center accepts a longer range, and OKX says downloads go back to early 2021. On the app, statements only cover the past 12 months, so use the website for older years.


This article is for general information only — not financial or tax advice.