Skip to main content

Supported exchange

Universal CSV Template for UK Crypto Tax (Any Exchange)

Download the CryptoTaxCheck Universal CSV template, add one row per transaction from any exchange or wallet, and import it with your other files.

Last reviewed
Last reviewed by Andrew Pickett
Reviewed by
Reviewed byIndependent tax reviewer to be confirmed
On this pageShow

Not every exchange is in our launch set, and some transactions never appear in any export — coins moved between your own wallets, a gift, holdings from an exchange that closed years ago. The Universal CSV covers all of that: one row per transaction, a fixed set of headings, and a Type column that tells the calculator how HMRC treats the row. Import it alongside your other files and it is matched under the same same-day, 30-day and section 104 pool rules. Like every file you add, it is read in your browser and never uploaded.

Download the Universal CSV template — it contains example rows; delete them before adding yours.

How to download and fill in the template

  1. Download the template. Save cryptotaxcheck-universal-template.csv and open it in Excel, Google Sheets, Numbers or a text editor. The example rows show one of each common transaction; delete them before you start.
  2. Keep the heading row exactly as it is. Headings are case-insensitive and can be in any order, but a heading we do not recognise makes the whole file unrecognised, so a typo is caught rather than silently ignored.
  3. Add one row per transaction. Fill in the date, the type, what was sent and what was received (asset and positive quantity), any fee, and the GBP value if you know it. Leave GBP Value blank to have us look the price up.
  4. Name the source. Put a short label in Source for where the transaction happened — bitstamp, ledger-nano, metamask. Transfers between your own accounts are matched across these labels.
  5. Save as CSV (UTF-8) or Excel. Either format imports. Use a dot as the decimal separator and ISO dates (2025-06-15T23:30:00Z); a date with no time zone is treated as UTC.
  6. Import it with your exchange files. Add the file to the calculator together with your Coinbase, Kraken, Binance, Crypto.com or Revolut exports. Rows that fail a check are listed on the review screen with the reason, and nothing from a failed row is imported.

Which columns does the template have?

ColumnRequiredWhat to put in it
DateYesWhen it happened, in ISO 8601: 2025-06-15T23:30:00Z, 2025-06-15 23:30:00 or 2025-06-15T23:30:00+01:00. No time zone means UTC; a bare date means midnight UTC. Day-first dates (15/06/2025 10:00) are accepted with a warning. We work out the UK tax date for you.
TypeYesOne of the values in the next table (friendly spellings such as purchase, trade, withdrawal or staking reward are accepted).
Sent AssetYes*Ticker of what left your hands: BTC, ETH, GBP. Blank if nothing was sent.
Sent AmountYes*Quantity sent, as a positive number.
Received AssetYes*Ticker of what you received. Blank if nothing was received.
Received AmountYes*Quantity received, as a positive number.
Fee AssetNoTicker the fee was paid in — GBP for a fiat fee, BTC for a network fee taken in coin. Fill both fee columns or neither.
Fee AmountNoFee quantity, positive.
GBP ValueNoMarket value of the transaction in pounds, excluding fees, if you know it. Blank means we look the price up. Required for OPENING_BALANCE (the total cost of the holding).
SourceNoWhere it happened, e.g. bitstamp, ledger-nano. Used to match transfers between your own accounts. Defaults to universal.
NotesNoAnything you want to remember; shown on the review screen and in the report.
IDNoYour own reference, such as the exchange's transaction id, to help avoid duplicates.

* All four asset and amount columns must be in the heading row; which ones a row fills depends on its type, and an asset and its amount must always be filled together. Thousands separators and a £ sign are tolerated ("1,253.10", £12.41), and amounts are always positive — the Type says which way the asset moved.

Which transaction types can I use?

TypeUK treatmentMust have
BUYBought crypto with fiat. Not a disposal; sets the cost of what you bought.Received; Sent (fiat) recommended
SELLSold crypto for fiat. Disposal.Sent; Received (fiat) recommended
SWAPCrypto for crypto, including into stablecoins. Disposal of the sent asset.Sent and Received
TRANSFER_OUTMoved to another wallet or exchange you own. Not taxable; any network fee is a small disposal.Sent
TRANSFER_INReceived from another wallet or exchange you own.Received
INCOME_STAKINGStaking reward. Income at its pound value on receipt.Received
INCOME_MININGMining reward. Income.Received
INCOME_INTERESTLending or savings interest. Income.Received
INCOME_REWARDAny other reward for doing something — referral bonus, learn-and-earn, cashback you treat as income.Received
AIRDROPTokens you were given. Flagged for review — HMRC's treatment depends on whether you did anything in return (CRYPTO21250).Received
GIFT_INReceived as a gift from someone else.Received
GIFT_OUTGiven away, other than to your spouse or civil partner. Disposal at market value.Sent
GIFT_SPOUSE_OUTGiven to your spouse or civil partner. No gain, no loss — flagged for review.Sent
SPENDPaid for goods or services with crypto. Disposal.Sent
FEEA standalone fee not attached to another row.Fee Asset and Fee Amount, or Sent
OPENING_BALANCECoins you already held before your records start. Enter the pool at the pound cost you give.Received and GBP Value
UNKNOWNYou are not sure — we ask you on the review screen.Anything

What does a filled-in file look like?

Date,Type,Sent Asset,Sent Amount,Received Asset,Received Amount,Fee Asset,Fee Amount,GBP Value,Source,Notes
2025-04-06T10:15:00Z,BUY,GBP,500,BTC,0.0100,GBP,2.50,500,my-exchange,Bought BTC with GBP
2025-05-01T09:00:00Z,SWAP,BTC,0.0050,ETH,0.1200,BTC,0.00001,,my-exchange,GBP value left blank — we look it up
2025-05-02T18:30:00Z,TRANSFER_OUT,ETH,0.1200,,,ETH,0.0003,,my-exchange,Sent to my hardware wallet
2025-05-02T19:00:00Z,TRANSFER_IN,,,ETH,0.1197,,,,my-wallet,Received from my exchange
2025-06-01T00:00:00Z,INCOME_STAKING,,,ETH,0.0010,,,2.10,my-wallet,Staking reward worth £2.10
2025-07-15T12:00:00Z,SELL,ETH,0.0500,GBP,95.00,GBP,0.95,95.00,my-exchange,Sold ETH for GBP
2019-04-06T00:00:00Z,OPENING_BALANCE,,,BTC,0.2500,,,900.00,my-wallet,Held before my records start

The transfer pair in the example shows the pattern for moving coins between your own accounts: the TRANSFER_OUT row carries the network fee, the TRANSFER_IN row receives slightly less, and the two different Source values let the calculator pair them.

How are rows checked?

Every row is validated before it reaches the calculator. Rows that fail are listed on the import review screen with the reason (for example "SELL rows need a Sent Asset and Sent Amount") and nothing from that row is imported. Rows that pass are cleaned up (control characters removed, very long text shortened) and become transactions with the pound value you supplied recorded as your figure, a price lookup where you left it blank, transfers flagged for matching across your Source labels, and airdrops, spouse gifts and unknown rows flagged for your review.

Can I use it for DeFi, NFTs or margin trading?

You can record them, but the calculator does not work out the tax on them. DeFi lending and liquidity pools, NFTs and margin or futures positions are outside what it supports; if those make up a meaningful part of your history, a tool built for them, or an adviser, is the right route. For ordinary buys, sells, swaps, transfers and rewards from any platform, the Universal CSV is all you need.

Frequently asked questions

When should I use the Universal CSV?
For any exchange or wallet we do not read natively — Bitstamp, Gemini, a hardware wallet, a closed exchange — and for the odd transaction that never appears in an export, such as a gift or an opening balance. Import it alongside your Coinbase, Kraken, Binance, Crypto.com or Revolut files; transfers between them are matched using the Source column.
Can I leave GBP Value blank?
Yes, for anything except an OPENING_BALANCE row. If you leave it blank we look up the pound value for that coin on that date; only the coin and the date are sent to our price service. If you know the value, fill it in and it is recorded as your figure.
What is an OPENING_BALANCE row for?
It records coins you already held before your records start, with their total cost in pounds, so they enter your section 104 pool at that cost instead of appearing as a sale of something you never bought. Use it when an old exchange has closed or a wallet history cannot be recovered.
Does the Universal CSV work in Excel or Google Sheets?
Yes. Open the template, keep the heading row exactly as it is, add your rows and save as CSV (UTF-8) or as an Excel .xlsx file. Use a dot as the decimal separator and write dates in ISO format such as 2025-06-15T23:30:00Z.

Sources

Written by Andrew Pickett

Founder of CryptoTaxCheck. Every guide cites GOV.UK and the HMRC Cryptoassets Manual, uses figures consistent with the calculator’s golden tests, and shows when it was last reviewed. An independent, qualified UK tax reviewer will be credited here once confirmed.

Last reviewed About CryptoTaxCheckHow the calculation works

This is general information, not personal tax advice. You are responsible for your own return; if your situation is complex, speak to a qualified adviser. See our disclaimer.