← Crypto cost basis calculator

Import Coinbase, Kraken, Binance and other exchange CSVs for crypto taxes

Most exchanges let you download your history as a CSV. The free calculator reads those files directly in your browser, converts them to one plain format, and runs FIFO, LIFO, HIFO, LOFO and a tax-aware rule across all of them together, so a coin bought on one exchange and sold on another is matched correctly. Nothing is uploaded.

Open the free calculator

Exports it recognises

The page detects the format from the column headers. Several files can be loaded at once, or use the command-line version: node cli.mjs --method HIFO --year 2024 --form8949 8949.csv coinbase.csv kraken.csv.

What it will not guess

A coin-for-coin swap, a staking reward or an airdrop often has no dollar value in the export. The importer leaves the total empty and lists the row so you can fill it in from that day's price. It never writes a silent zero, because a zero would overstate your gain on the next sale. Fees paid in a coin rather than dollars are likewise left at zero with a note when the export carries no dollar value for them.

These readers were written from the column layouts the exchanges publish and have not been checked against every real account, so open the result, compare one or two rows with your exchange, and read the notes the importer prints.

If your export is not on the list

The page offers a column mapper: pick which column is the date, type, asset, quantity, USD total or price and fee, say what each type value means (buy, sell, income, transfer or leave out), and it rewrites the file in the plain format on your device. Rows it cannot read, or that have no dollar value, are listed instead of being zeroed.

Leaving a paid tax service

If you have a Koinly universal CSV, the calculator reads buys and sales against USD, splits coin-for-coin swaps into a sale and a buy at Koinly's USD value, and treats labelled staking, mining and airdrop receipts as income. Unlabelled transfers, non-USD fiat and non-USD fees are skipped with a note. It lets you re-run the five-method comparison locally, without an account.

Common questions

Is my transaction history uploaded?

No. The files are read and matched in your browser and are not sent anywhere. Anonymous feature counts stay in local storage and can be switched off.

Why does a row have an empty total?

Because the export did not carry a dollar value for it, for example a coin-for-coin swap or a staking reward. Fill it in from that day's price; the importer leaves it empty on purpose rather than writing zero.

Can I combine several exchanges?

Yes. Load every export, optionally turn on per-wallet matching, and record transfers between wallets with a to-wallet column so basis follows the coins.