Where the taxable events hide
Selling for dollars is the disposition everyone counts. The ones that get missed decide the return: swapping one coin for another is a sale of the first coin at its fair market value in that moment, paying for anything with crypto is a sale of the coins spent, and even a network fee settled in ETH is a small disposition of ETH. A stablecoin is not cash, so rotating into USDC to sit out a dip is itself a taxable event. A busy DeFi year can hold thousands of these, and each one needs a Canadian-dollar value on its own date.
The important non-event is the transfer between your own wallets. Moving coins from an exchange to cold storage is not a disposition, but in a raw export it looks identical to a sale on one side and a purchase on the other. Unlabelled, it either doubles your history or resets your cost base to the transfer-day price. We tag self-transfers explicitly so cost carries across intact.
One cost base per coin, across everything you have ever held
Units of the same cryptocurrency are identical properties, so their costs average into a single adjusted cost base per coin, across every wallet and platform combined. There is no such thing as your exchange BTC cost and your cold-wallet BTC cost; there is one number, and every acquisition anywhere moves it. Leave one old account out of the ledger and every later gain in that coin is measured from the wrong base.
Coins you never bought need a base too. Where mining or staking is carried on as a business, rewards are income at fair market value on the day they arrive, and that same value becomes their cost base. Recorded properly, a reward is taxed once as income and never again as a phantom gain on sale; recorded as a zero-cost windfall, it gets taxed twice. For a validator receiving small rewards daily, that is hundreds of timestamped income entries a year, which is exactly why crypto is a bookkeeping problem before it is a tax problem.
Reconstruction software helps exactly as much as its inputs
Koinly, CoinTracking and similar tools are genuinely useful, and they are wrong out of the box more often than people expect. The failure modes are predictable:
- Unlabelled self-transfers treated as dispositions, inventing gains and losses that never happened.
- Missing platforms, especially closed ones, leaving lots with no cost history, so proceeds get taxed as if they were pure gain.
- Duplicate imports where an API feed and a CSV overlap, doubling volume and mangling the averages.
- Fiat values pulled at day-end instead of transaction time, which matters on the volatile days that are precisely when you traded.
The software's report is a draft, not an answer. We reconcile it against actual wallet balances and bank movements, chase the gaps back to source, and sign off on a cost base schedule we can defend, because a reviewer tests the basis behind the report, not the logo on it.
The record each event needs
A complete ledger stores something slightly different for each kind of event:
| Event | What it is for tax | What the ledger must hold |
|---|---|---|
| Buying with dollars | No tax, but the base of everything later | Date, CAD amount, fees, units received |
| Coin-to-coin swap | Disposition of the coin given up | Both sides of the trade and the CAD value at that time |
| Fee or gas paid in coin | A small disposition of the fee coin | The fee amount, its CAD value, and what it related to |
| Transfer between your own wallets | Not a disposition | Both addresses labelled as yours, so cost base carries over |
| Staking or mining reward | Income at fair market value on receipt | Timestamped units and CAD value, which becomes cost base |
How we run crypto books
End-to-End Accounting puts all of this on a cycle: exchange exports and wallet addresses come in on a schedule, a maintained disposition ledger and per-coin cost base schedule come out, and the filings are prepared from the same records. Year-end becomes a report instead of an archaeology project, and the file that answers a CRA letter already exists the day the letter arrives.
One genuine simplification deserves saying out loud: trading itself creates no HST obligations. Most major cryptocurrencies are virtual payment instruments under the GST/HST rules, and buying or selling them is an exempt financial supply, so no volume of trading pushes an investor toward HST registration.
Plenty of holders need answers more than they need a full engagement. CPA Quick Support at $99 a month keeps a CPA on call for unlimited questions and CRA letter review, sized for an investor whose file is small but whose questions are not. Either way, it starts with a free 15-minute discovery call with our Mississauga team, and every fee is quoted in writing.
Source: CRA — Guide for cryptocurrency users and tax professionals.
