Bitcoin Tax Software

How to Export Bitcoin Transaction History for Tax Records

If you bought Bitcoin on an exchange, moved some into self-custody, and now need to organize records, your history probably does not live in one place. Part is in an exchange account, part in a wallet, part visible on-chain, and part only makes sense because of labels and notes you kept. So the practical goal is not "download one file" - it is to assemble a complete export set across every source, in a form software or a professional can actually use.

  • Records first
  • No tax advice
  • Bitcoin-only
Bitcoin transaction-history export concept showing records from exchanges, wallets, and on-chain transaction IDs.

Assemble a complete export set (source-agnostic steps)

If you bought Bitcoin on an exchange, moved some into self-custody, and now need to organize records, your history probably does not live in one place. Part is in an exchange account, part in a wallet, part visible on-chain, and part only makes sense because of labels and notes you kept. So the practical goal is not "download one file" - it is to assemble a complete export set across every source, in a form software or a professional can actually use.

This page tells you how to do that, source-agnostically, and gives you a checklist to confirm the set is complete. The core distinction still holds - exports preserve facts; they do not decide tax treatment - and this page is educational only, not tax, legal, or financial advice; rules differ by jurisdiction and change over time. For the scope of the lane, read the Bitcoin tax disclaimer; for the map, start at the hub.

Assemble a complete export set (source-agnostic steps)

Work through these in order. Each step protects the one after it.

  1. List every source your Bitcoin has touched. Every exchange or broker, every wallet (mobile, desktop, hardware), and any account you no longer use. A source you forget is the single most common cause of a broken import or a missing-basis warning later, so make the list before you download anything.
  2. From each exchange, pull the full record set - not just one file. Most platforms separate activity into different exports: trade history, deposit history, withdrawal history, and fee or statement records. One "transactions" file is rarely the whole account. Gather each type the platform offers, because the missing one is usually the one that later explains a gap.
  3. Cover the full date range. Export every year you were active, from your first acquisition to the present - including years you remember as "quiet." Partial-year or recent-only exports are a frequent source of missing history, and old years are exactly the ones that are hardest to reconstruct later.
  4. From each wallet, export the transaction history and capture the transaction IDs. Wallet history follows your self-custody activity after coins leave a platform; the transaction IDs are the anchors that let each on-chain movement be matched to its other side.
  5. Gather both sides of every movement. For each withdrawal from an exchange, make sure you also have the matching wallet receipt (and for each wallet receipt, the source withdrawal). Keep the transaction ID, fee, and a label with each. (Getting both sides into the set is assembly; understanding why the two records differ, and how to line them up, is covered on the reconciliation page linked below.)
  6. Preserve originals; work only on copies. Keep each original export untouched as the source record. If you need to inspect or clean a file, do it on a copy - re-saving an original through a spreadsheet or editor can quietly change dates, decimal precision, or formatting, and that damage is easy to miss.
  7. Label the set as you build it. For each file, note what it is, which source and account it came from, the export date, and the record type. A folder of unlabeled exports is only slightly better than no exports; a labeled set stays understandable months later.

That is the export job. It does not decide treatment - it hands software or a professional a complete, coherent set of facts to work from, which is the difference between a review that goes smoothly and one that stalls on missing data.

Export completeness review

Before you rely on a software import, check the set against these prompts. Each "no" or "unsure" is where to look before trusting any output:

  • All sources included? Every exchange and every wallet, including old or unused accounts.
  • Full history? Every year covered, back to your first acquisition - no missing years.
  • All activity types? Buys, sells, deposits, withdrawals, recurring buys, and fees - not only trades.
  • Transaction IDs? Present for on-chain movements.
  • Both sides connected? Each exchange withdrawal matched to its wallet receipt.
  • No duplicates? The same activity has not been pulled twice from overlapping sources or files.
  • Values and timestamps preserved? As shown by the source, not rewritten by a tool that reformatted the file.
  • Gaps marked? Anything you cannot find is noted "missing - needs review" rather than left silently blank.

A set that passes these prompts is not guaranteed to produce a correct tax result - that depends on facts and rules beyond this page - but it removes the most common reasons software output is wrong before you ever open the software.

What an export is (and is not)

A transaction-history export is a factual record from a source you used - an exchange, wallet, account, or on-chain lookup. It may show dates, times, amounts, transaction IDs, fees, values, deposits, withdrawals, buys, or sells, depending on what the source tracks. What it does not do is decide treatment, tell you what to file, prove why a wallet movement happened, know every wallet you control, or automatically connect all activity across sources. It is an input, not a verdict. (For the general field-by-field record guide, see Bitcoin tax records.)

Why one export rarely tells the whole story

A single exchange export shows what happened inside that exchange - not what happened after Bitcoin left. Wallet history shows later movements - not the original purchase details. A transaction ID shows that Bitcoin moved on-chain - not why, or who controlled both sides. So one source can be accurate and still incomplete, which is exactly why the assembly steps above gather several sources and keep both sides of each movement. The instinct to find "the one file that solves everything" is understandable, and after self-custody that file usually does not exist.

What each source can and cannot preserve

  • Exchange records - may preserve buys, sells, deposits, withdrawals, recurring purchases, fees, source-shown values, reference IDs, timestamps, and statements. An exchange may split these across several exports, so do not assume one file is complete. This page gives no exchange-specific menu paths; interfaces change, and the durable task is source-agnostic - gather the records that show what happened while Bitcoin was inside that account.
  • Wallet history - may preserve incoming and outgoing transactions, transaction IDs, timestamps, amounts, network fees, labels, and address history. It usually does not know what you paid on an exchange, the source-shown value of an older movement, or why you moved funds. It is not weaker than exchange history - it answers different questions.
  • On-chain data (a transaction ID) - can show that a transaction exists, when it confirmed, how much moved, which addresses were involved, and the fee. It does not prove purpose or ownership, decide treatment, show what you originally paid, or preserve cost-basis continuity. The transaction ID is the anchor; labels, notes, and source records provide the context.

(For why these sources disagree on timestamps, fees, and values - and how to line them up - see exchange CSV vs wallet history.)

Connecting exchange withdrawals to wallet receipts

The common pattern: you buy on an exchange, later withdraw to your own wallet; the exchange records an outgoing withdrawal, the wallet records an incoming transaction, and the blockchain records movement between addresses - three views of one story. As part of assembling a complete set, keep those three views together for each movement: the original acquisition record, the withdrawal record, the receiving-wallet record, the transaction ID, date and time, amount, fee, a receiving-wallet label, a note explaining the movement, and any later movement of the same coins. (For the movement boundary itself, see wallet transfer vs taxable event; for the cost-basis input, see Bitcoin cost basis basics.)

Why software depends on clean imported records

Software can organize and calculate from records; it cannot reliably replace records you never gathered. Import one exchange but not another and it may miss acquisition history; import a wallet without its sending exchange and it sees a receipt with no purchase context; skip labels and it needs more context before a movement can be reviewed confidently. Different tools handle data, warnings, and imports differently - the durable principle is that output quality follows input quality. Export preparation is the step that makes the records usable. (For what a tool can and cannot do, see what tax software can and cannot do; for how it goes wrong, see Bitcoin tax software limitations.)

A practical record-source map

Record source What it may help preserve What it does not decide
Exchange transaction history Buys, sells, deposits, withdrawals, fees, source-shown values, timestamps, reference IDs What happened after Bitcoin left, or how any event is treated
Exchange statements or confirmations Source records for account activity and acquisitions Wallet context after withdrawal
Wallet history Incoming/outgoing activity, transaction IDs, amounts, fees, timestamps, wallet labels Original exchange purchase details or treatment
On-chain transaction data Movement, addresses, confirmation time, transaction ID, fees Purpose, ownership context, cost-basis continuity, or treatment
Personal labels and notes Why a movement happened, which wallet was yours, how records connect Tax treatment or filing position
Professional review materials Organized facts for qualified interpretation A substitute for the underlying records

Each source preserves part of the factual history; none decides tax treatment.

When incomplete records become a professional question

Some gaps are simple export-preparation problems - a missing file, a skipped wallet, an unlabeled transfer, an unconnected withdrawal. Others are more serious: old exchange access is lost, source records are missing, wallet and exchange history do not line up, software output looks wrong and the cause is unclear, coins were received from another person or organization, outgoing movements may need treatment review, acquisition records cannot be connected to later movements, or the amount makes guessing irresponsible. At that point the question is no longer "which export should I download?" - it is a facts-and-review question. (See when to use a tax professional.)

A simple way to start

Before you download anything, list every place your Bitcoin history may live and answer: which exchanges did I use, which wallets did I use, did I make recurring buys, did I withdraw to self-custody, did I move coins between wallets, did I deposit any back to an exchange, did I send or receive Bitcoin from another person, which movements have transaction IDs, which have labels, and which records are missing? Then gather the source records before you try to interpret them. Clean exports do not make the tax question disappear - they make the next step far less fragile.

FAQ

What is a Bitcoin transaction-history export? A factual record from a source you used - an exchange, wallet, statement, or on-chain lookup - showing dates, times, amounts, fees, transaction IDs, source-shown values, deposits, withdrawals, or buys. It preserves facts; it does not decide treatment.

Is one exchange export enough for Bitcoin tax records? Usually not for a self-custody holder. An exchange export shows activity inside that exchange, not what happened after Bitcoin left. Wallets, other exchanges, and on-chain movements may need gathering too.

Do I need wallet history if I already have exchange records? If Bitcoin moved into self-custody, yes - wallet history explains later movements. The exchange may show the withdrawal; the wallet shows the receipt and later movement. A complete record often needs both.

Does a transaction ID show why Bitcoin moved? No. It can show that an on-chain transaction happened and help identify time, amount, addresses, and fees. It does not prove purpose, ownership, treatment, or cost-basis continuity.

Can tax software fix missing exports? It can organize and calculate from records it receives; it cannot replace records you never gathered. A missing exchange, wallet, label, or acquisition record means the output needs more context before it can be reviewed.

What should I gather before using tax software? Exchange trade, deposit, withdrawal, and fee history; wallet history; on-chain transaction IDs; statements where available; acquisition records; labels; notes; and records connecting withdrawals to receipts - covering every source and every year.

When should incomplete records go to a qualified professional? When source records are missing, old exchange access is lost, wallet and exchange history do not line up, output looks wrong, coins were received from another party, or treatment depends on facts this page cannot evaluate.