Helpcentrum

Custom CSV Import

Laatst bijgewerkt: 09 maart 2026
3 min leestijd
Custom CSV Import

Last updated: March 2026

Use the Custom CSV import to add transactions that are not automatically fetched through an exchange integration or wallet import. Common use cases include:

  • Transactions from an exchange not yet supported by CryptoTax
  • OTC trades (e.g. directly with a counterparty)
  • Mining income or airdrops not recorded on-chain
  • Migration from another tax tool

You create a CSV file with your transactions and upload it to CryptoTax. Below we explain step by step how it works.

Quick Start

  1. Download the CSV template via this link.
  2. Open the file in Excel, Google Sheets or Numbers.
  3. Fill in your transactions — one row per transaction.
  4. Save as CSV (UTF-8 encoding).
  5. Log in to CryptoTax → Add AccountCSV ImportCustom CSV.
  6. Upload your file.
  7. Review the results in your transaction overview.

Column Reference

The first row of your CSV file must contain the column names. Column names are case-insensitive.

ColumnRequiredDescriptionExample
dateYesTimestamp in ISO 8601 format (UTC)2024-03-15T14:32:00Z
typeYesTransaction type (see table below)BUY
assetYesCryptocurrency ticker symbolETH, BTC, USDC
amountYesQuantity, always positive0.5, 1000.00
price_eurNoEUR price per unit at the time of the transaction. Leave blank for automatic lookup.2000.00
fee_amountNoFee paid (commission)5.00
fee_assetNoTicker of the asset used to pay the feeEUR, ETH
exchangeNoFree-text label (e.g. exchange name)Bitvavo, OTC
tx_idNoUnique transaction ID for deduplication. Required for TRADE pairs.trade-abc
notesNoFree-text note (included in the accountant report)First ETH purchase

The minimum for a valid CSV file is: date, type, asset, amount.

Type Values & Tax Treatment

TypeDescriptionTax Treatment
BUYBought crypto with EURAcquisition
SELLSold crypto for EURDisposition (taxable event)
TRADECrypto-to-crypto swapSwap: disposition + acquisition
DEPOSITReceived from external sourceInternal transfer (no tax)
WITHDRAWALSent to external destinationInternal transfer (no tax)
INCOMEStaking, mining, airdropsTaxable income
GIFT_INReceived as giftGift (continuity basis)
GIFT_OUTGiven as giftGift (disposition)
LOSTLost, stolen or hackedLoss recognition
FEEStandalone feeDeductible expense

How to Record a Swap (TRADE Pairing)

A crypto-to-crypto swap consists of two rows with the same tx_id. The first row is the outgoing leg (what you sell), the second is the incoming leg (what you receive).

Example: you swap 1 ETH for 2,500 USDC.

date,type,asset,amount,price_eur,fee_amount,fee_asset,exchange,tx_id,notes
2024-03-10T09:00:00Z,TRADE,ETH,1.0,2300.00,,,Bitvavo,trade-abc,Sold ETH
2024-03-10T09:00:00Z,TRADE,USDC,2500.0,1.00,5.0,USDC,Bitvavo,trade-abc,Received USDC
  • Both rows have tx_id = trade-abc — this tells CryptoTax they belong together.
  • The first row (ETH) is automatically marked as outgoing, the second (USDC) as incoming.
  • A TRADE row without a matching partner is flagged as an orphan. Add a second row with the same tx_id, or change the type to BUY or SELL.

Date Format

CryptoTax accepts the following date formats (ISO 8601):

FormatExampleNote
UTC with Z suffix2024-03-15T14:32:00ZRecommended
With timezone offset2024-03-15T14:32:00+02:00
Without timezone2024-03-15T14:32:00UTC assumed
Space instead of T2024-03-15 14:32:00UTC assumed

Not supported: 15-03-2024, 03/15/2024, March 15, 2024.

Common Errors

ErrorCauseFix
Unrecognised headerColumn names don't matchEnsure the first row contains at least: date,type,asset,amount
Invalid amountNon-numeric or negative valueUse positive numbers only (e.g. 0.5)
Cannot parse dateWrong date formatUse yyyy-MM-ddTHH:mm:ssZ
Unknown typeUnsupported transaction typeUse one of: BUY, SELL, TRADE, DEPOSIT, WITHDRAWAL, INCOME, GIFT_IN, GIFT_OUT, LOST, FEE
Orphaned TRADESingle TRADE row without a matching pairAdd a second TRADE row with the same tx_id, or change the type to BUY/SELL

FAQ

What if I don't know the EUR price?

Leave the price_eur column blank. CryptoTax automatically looks up the price at the transaction timestamp.

Can I upload multiple CSV files?

Yes. Add multiple Custom CSV accounts, one per file.

How do EUR transactions work?

For BUY and SELL types, the EUR side is calculated from amount × price_eur. You don't need to add a separate EUR row.

Can I re-upload after fixing errors?

Yes. Delete the CSV account and re-upload the corrected file.

Download Template

Download the ready-made template with example transactions: custom-csv-template.csv

Hulp nodig met crypto belastingen?

Ons helpcentrum begeleidt je bij elke stap. Klaar om te beginnen?

Gratis starten