Every Canadian crypto gain or loss starts from your adjusted cost base (ACB): the average cost of the units you hold, in Canadian dollars. This workbench reads your exchange CSV files in your browser, pools the same coin across every wallet and exchange, splits swaps into a sale and a purchase, finds superficial losses, and adds up the four totals Schedule 3 asks for. It works in CAD throughout, the currency CRA asks you to report in.
How to use it
- Click “Choose CSV files” (or drop files on the box) and add the exports from every platform you used. Use “Download the template” for wallets, DeFi or any platform the importer does not recognise.
- Read the note under each file name, then check the Records table. Fix any row an import got wrong: Date, Type, Asset, Qty, “Got / paid”, CAD value and “Fee $” are all editable.
- Fill in a CAD value for every row flagged as having none, using the figure your platform showed for that trade where you can.
- Pick the Tax year and read the Schedule 3 totals, the per-asset table and the “Check before you file” list.
- Download the ledger CSV and the Schedule 3 summary (CSV) and keep them with your original exchange exports.
What the importer reads, and where your files go
The importer recognises CSV exports from Wealthsimple, Kraken, Coinbase, Newton, Shakepay, NDAX and Bitbuy, plus the site's own template for wallets and everything else. Files are read in your browser and never uploaded; closing the tab discards them. Each file shows how many records were read and any rows it could not interpret, and every row stays editable, because export formats change without notice.
Import every platform you used. CRA treats units of the same coin as identical properties, so their cost is pooled into one average wherever they sit, and a sale on one exchange uses the average cost of all your units. Leave a file out and every later sale is wrong; a sale of more units than the ledger holds is flagged as “earlier purchases are missing”. Moves between your own wallets are “Transfer in” or “Transfer out (own wallet)” rows, which change nothing.
How the engine treats each kind of record
A swap is split into a disposition of the coin you gave up and an acquisition of the coin you received, both at the same CAD value; CRA lists exchanging one crypto-asset for another as a disposition. A fee paid in crypto disposes of the fee coins. When an import lists a fee in a coin, the engine disposes of those coins at their value and counts that value as an outlay of the trade. Typing rows yourself, add a “Fee paid in crypto” row and put the same CAD amount in the trade's “Fee $” column; the result is identical.
For example (illustrative): you bought 1 ETH for $5,000, then swapped 0.5 ETH for USDC worth $2,000 and paid 0.002 ETH of gas worth $8. The gas is a disposition of 0.002 ETH with a cost of $10, a $2 loss. The swap disposes of 0.5 ETH with a cost of $2,500 for $2,000 less the $8 outlay, a $508 loss. Your remaining 0.498 ETH keep a cost of $5,000 per ETH.
| Type in the tool | Units | Pool cost (ACB) | Creates |
|---|---|---|---|
| Buy | Up | Up by price plus fee | Nothing taxable yet |
| Sell | Down | Down by average cost × units | Capital gain or loss |
| Swap / convert | Down in one coin, up in the other | Received coin starts at the swap's CAD value | Gain or loss on the coin given up |
| Reward / income | Up | Up by its CAD value when received | Income in that year |
| Fee paid in crypto | Down | Down by average cost × units | A small gain or loss |
| Transfer in / out (own wallet) | No change | No change | Nothing |
Worked example: the default sample year
The sample “A year with BTC, ETH, a swap and rewards” uses illustrative values typed into each row. In 2025 it buys 0.2 BTC for $28,000 plus a $42 fee and 4 ETH for $18,400 plus $28, receives 0.03 ETH of staking rewards worth $120, swaps 1.5 ETH for 22 SOL valued at $3,900, sells 0.1 BTC for $15,500 less $23, sells the 22 SOL for $3,300 less $5, and buys 10 SOL for $1,450 plus $2 fifteen days later.
The reward raises the ETH pool to $18,548 for 4.03 ETH, or $4,602.48 each. The swap disposes of 1.5 ETH with a cost of $6,903.72 for $3,900: a loss of $3,003.72, even though no dollars changed hands. The 22 SOL start with a cost of $3,900. The BTC sale gains $1,456.00 ($15,500 less $23 less half the $28,042 cost).
The SOL sale loses $605.00, but 10 SOL were bought back within 30 days and still held, so 10/22 of that loss, $275.00, is a superficial loss. It is denied for now and added to the new SOL, whose cost becomes $1,727 ($172.70 each). The year closes with a net capital loss of $1,877.72. CRA says a net capital loss can be carried back three years or forward indefinitely against taxable capital gains.
| Total | Amount |
|---|---|
| Proceeds of disposition | $22,700.00 |
| Adjusted cost base | $24,824.72 |
| Outlays and expenses | $28.00 |
| Gain or loss (after superficial losses) | −$1,877.72 |
| Superficial losses denied | $275.00 |
| Reward income (reported separately) | $120.00 |
Superficial losses and CAD values: what to check
For each sale at a loss, the engine counts units of the same coin acquired from 30 days before to 30 days after the sale (purchases, rewards and swaps in) and the units held at the end of day 30, across every file you imported, so a repurchase on another exchange is caught. It matches coins by ticker, so ETH and a wrapped or staked ETH count as different coins; CRA has not said whether such tokens are identical. It cannot see purchases by your spouse or a corporation you control, which the rule also counts. The superficial loss calculator walks through one sale in detail.
CRA's records page asks for the CAD value at the time of each transaction. The engine takes the CAD value in the export or typed by you first, then the dollar side of a trade against CAD. A crypto-to-crypto swap often has neither, so use the CAD figure your platform showed for the trade; failing that, take a daily price from one documented source and use the same source every time. A row with no value counts as $0 and is listed under “Check before you file”. Also watch year-end timestamps: the engine uses the date in the file, and a UTC time can move a December 31 evening trade into the next tax year.
What this tool is not
It is a working file, not a filing service. It assumes your crypto is capital property; if your activity is a business, the whole profit is income. Whether a liquidity-pool deposit, wrapping or bridging is a disposition is a judgment call CRA has not addressed: record such events consistently as a swap or as a transfer, and get advice on large amounts. The detailed rules, with CRA sources, are linked from our tax hub.
What this means for you
Export the full history from every platform, not just this year's: the average cost depends on every purchase since you first bought. Load all the files at once and check the warnings for swaps without a Canadian-dollar value.
The Schedule 3 box gives the proceeds, cost and gain to copy into your return; reward income goes on a different line. Keep the downloaded ledger CSV with your records in case the CRA asks.
Definitions
- Proceeds of disposition
- What you received for the crypto you gave up, in Canadian dollars at the time; for a swap, the fair market value of what you received.
- Outlays and expenses
- Costs of selling, such as trading fees, which reduce the gain.
- Identical properties
- Units of the same coin; the CRA averages their cost wherever they are held.
