PrivateACB

Specifications

Measured from the program, not written about it. Each row names the registry it was read from.

Countries Canada · United States · Australia · United Kingdom jurisdiction registry
Reporting currency Canada: CAD · United States: USD · Australia: AUD · United Kingdom: GBP jurisdiction registry
Cost-basis methods Canada: ACB · United States: FIFO, LIFO, HIFO · Australia: FIFO, LIFO, HIFO · United Kingdom: ACB jurisdiction registry
Tax year starts Canada: 1 January · United States: 1 January · Australia: 1 July · United Kingdom: 6 April jurisdiction registry
Special rules Canada: superficial loss · United States: wash sale · Account-by-Account (2025+) · Australia: CGT discount · United Kingdom: Section 104 matching jurisdiction registry
Reports 22 — Canada: Schedule 3, T1135 Foreign Property, Income Report, Superficial Loss, ACB Summary, Audit Provenance · United States: Form 8949, Schedule D, Income Report, Wash Sale Report, Lot Tracking, Audit Provenance · Australia: CGT Summary, CGT Worksheet, Income Report, Lot Tracking, Audit Provenance · United Kingdom: SA108 - Capital Gains Tax summary, Capital Gains Details, Income Report, Pool History, Audit Provenance report registry
Transaction types 67 types in 5 classes transaction class registry
Built-in export layouts 14 — NDAX Trades, NDAX Staking, Generic Standard, Coinbase, Coinbase (2025 format), Coinbase (2021 format), Coinbase (2024 format), Newton, Shakepay, Kraken Trades, Kraken Ledger, Crypto.com App, Binance Transaction History, Wealthsimple Crypto format registry
Automated tests 1,768 passing cargo test --lib, at release
Program version 2.20.0 Cargo.toml
Prices and exchange rates CoinGecko (prices) · DefiLlama (prices, older dates) · Binance (prices, fallback) · Bank of Canada · FRED (exchange rates) the outside-services list

Generated from PrivateACB 2.20.0, commit dba753a4 (v2.20.0), on 2026-10-03.

The four countries side by side

Generated from the running program's jurisdiction registry.

CountryCurrencyMethodsTax year startsSpecial rules
CanadaCADACB1 Januarysuperficial loss
United StatesUSDFIFO, LIFO, HIFO1 Januarywash sale · Account-by-Account (2025+)
AustraliaAUDFIFO, LIFO, HIFO1 JulyCGT discount
United KingdomGBPACB6 AprilSection 104 matching

The export layouts it recognises

Generated from the running program's format registry. A file that matches none of these is read column by column in the Import window.

FormatRow shapeFee conventionNotes
NDAX Tradestrading-pair rowsfees in what the trade receivedFee behavior verified against real NDAX exports — fees are charged in what the trade received.
NDAX Stakingone row per transactionnot declared — determined per fileA staking-only export with no fee column — rewards carry no fees.
Generic Standardone row per transactionnot declared — determined per fileThe simple layout the program documents itself: date, type, asset, quantity, price, currency, fee, exchange, notes.
Coinbaseone row per transactionfees in the pair's quote currencyMatches the older USD-denominated Coinbase export, the one with "USD" in its column names.
Coinbase (2025 format)one row per transactionfees in the pair's quote currencyThe current eleven-column export, read below its two heading lines. Amounts are in each row's own price currency; bank deposits are skipped. A Convert row names its second coin only in the notes, so it is held for your decision rather than guessed.
Coinbase (2021 format)one row per transactionfees in the pair's quote currencyAn earlier ten-column export, with a Spot Price Currency column. Read the same way as the current one: amounts in each row's own currency, a Convert's second coin from its note.
Coinbase (2024 format)one row per transactionfees in the pair's quote currencyAn earlier ten-column export, with a Spot Price Currency column. Read the same way as the current one: amounts in each row's own currency, a Convert's second coin from its note.
Newtonsent/received columnsa fee-currency column states itCarries its own fee-currency column — the one built-in format that states fee currency explicitly.
Shakepaysent/received columnsnot declared — determined per fileThe real 11-column export; it carries no fee column — Shakepay prices through its spread.
Kraken Tradestrading-pair rowsfees in the pair's quote currencyVerified against a real 16-column export. Not importable alone — attach it to a Kraken Ledger file, which carries the deposits and rewards this file lacks.
Kraken Ledgerledger entries, groupedfees in the row's own assetMatches the current 12-column export; older variants map automatically. Fees are in each row's own asset.
Crypto.com Appsent/received columnsnot declared — determined per fileSent and received columns, with the amount's sign giving direction; the export carries no fee column.
Binance Transaction Historyledger entries, groupedfees in the row's own assetLedger-style rows grouped by time; fee rows carry their own coin.
Wealthsimple Cryptoone row per transactionfees in the pair's quote currencyThe 2026 sixteen-column Crypto Activities export. Cost and proceeds are the net cash that moved; the commission is recorded as the fee and counted once, and the quoted unit price is kept for the record and checked against the cash — rows where Wealthsimple's own columns disagree are reported. Bank deposits and withdrawals are skipped. The export leaves out staking rewards and coin-to-coin swaps, and Wealthsimple's own book value for coins transferred in is not your cost.

Transaction types

Generated from the running program's registry.

ClassTax treatmentTypes
Exchangecapital gains15
Incomeincome at value on receipt15
Transferno tax event10
DeFicapital gains13
Ignoredleft out entirely14
Every type the program knows (67)
TypeClassWhat it isIncome category
buyExchangeAn acquisition — the units enter your holdings at what they cost.—
futuresExchangeA derivatives row; acts through its buy or sell side.—
limitExchangeAn order-type label; acts through its buy or sell side.—
limit_buyExchangeA buy placed as a limit order — an acquisition.—
limit_sellExchangeA sell placed as a limit order — a disposal.—
marginExchangeA margin-trading row; acts through its buy or sell side.—
marketExchangeAn order-type label; acts through its buy or sell side.—
market_buyExchangeA buy placed as a market order — an acquisition.—
market_sellExchangeA sell placed as a market order — a disposal.—
optionsExchangeAn options row; acts through its buy or sell side.—
rolloverExchangeA periodic financing charge on an open margin position (Kraken).—
sellExchangeA disposal — the units leave and the gain or loss is realized.—
settledExchangeSettlement of a margin position on spot (Kraken).—
stopExchangeAn order-type label; acts through its buy or sell side.—
tradeExchangeOne asset for another; the program reads the row's buy or sell side.—
airdropIncomeCoins distributed to you unsolicited — income on receipt.windfall income
bonusIncomeA bonus credit — income at its value on receipt.passive income
cashbackIncomeCashback paid in crypto — income at its value on receipt.passive income
dividendIncomeA dividend paid in crypto — income at its value on receipt.passive income
forkIncomeCoins created by a chain split — income on receipt.windfall income
hard_forkIncomeCoins created by a chain split — income on receipt.windfall income
interestIncomeInterest paid in crypto — income at its value on receipt.passive income
invite_bonusIncomeA sign-up or invite credit — income on receipt.windfall income
miningIncomeMined coins — income at their value on receipt.passive income
realized_pnlIncomeAn exchange-reported trading profit or loss, taken as income.trading income
referralIncomeA referral payment — income at its value on receipt.passive income
rewardIncomeA reward credited to you — income at its value on receipt.passive income
rewardsIncomeA reward credited to you — income at its value on receipt.passive income
stakingIncomeA staking reward — income at its value on receipt.passive income
yield_farmingIncomeYield-farming proceeds — income at their value on receipt.passive income
depositTransferCoins arriving at an account — the Transfers check looks for the matching withdrawal.—
internal_transferTransferA movement inside one venue — no tax event.—
receiveTransferCoins received — no tax event; their cost carries from wherever they left.—
sendTransferCoins sent out — no tax event; a movement, paired where possible.—
spendTransferCoins leaving, recorded as a movement — no gain is computed for this type.—
transferTransferA movement of your own coins; the program pairs its two legs where it can.—
transfer_inTransferCoins arriving — no tax event; their cost carries from wherever they left.—
transfer_outTransferCoins leaving — no tax event; the other leg should arrive somewhere in your data.—
unstakeTransferStaked units returning to you — a principal return, not new income.—
withdrawalTransferCoins leaving an account — no tax event; often the other leg of a deposit.—
borrowingDeFiBorrowed units arriving — treated as an acquisition.—
bridgeDeFiA cross-chain movement; on its own it neither adds nor removes units.—
collateralDeFiUnits posted as collateral — treated as a disposal.—
flash_loanDeFiA same-transaction loan; on its own it neither adds nor removes units.—
lendingDeFiUnits lent into a protocol — treated as a disposal.—
liquidationDeFiA position closed by the protocol; on its own it neither adds nor removes units.—
liquidity_addDeFiUnits placed into a pool — treated as a disposal.—
liquidity_inDeFiUnits placed into a pool — treated as a disposal.—
liquidity_outDeFiUnits returned from a pool — treated as an acquisition.—
liquidity_removeDeFiUnits returned from a pool — treated as an acquisition.—
lp_depositDeFiUnits placed into a pool — treated as a disposal.—
lp_withdrawDeFiUnits returned from a pool — treated as an acquisition.—
swapDeFiOne token exchanged for another through a contract — a disposal and an acquisition.—
approvalIgnoredA contract permission, not a movement of value — set aside.—
approveIgnoredA contract permission, not a movement of value — set aside.—
borrowIgnoredA loan-drawdown label some exports use — set aside; the DeFi borrowing type is the one that adds units.—
contract_callIgnoredA contract interaction with no value moved — set aside.—
contract_interactionIgnoredA contract interaction with no value moved — set aside.—
dustIgnoredAmounts too small to track — set aside.—
dust_attackIgnoredTiny amounts sent to bait interaction — set aside.—
failedIgnoredA transaction that did not complete — set aside.—
failed_transactionIgnoredA transaction that did not complete — set aside.—
internalIgnoredA venue's internal bookkeeping row — set aside.—
null_transactionIgnoredA placeholder row with no value — set aside.—
repayIgnoredA loan-repayment label — set aside.—
revokeIgnoredA permission withdrawn, not a movement of value — set aside.—
spamIgnoredUnrequested tokens — set aside from all calculations.—

The same tables are in the program: Help → PrivateACB Handbook, Part III. See also the example reports for what the figures look like.