Import Any Broker File with the Column Mapper
TD Direct Investing, RBC Direct Investing, BMO InvestorLine, CIBC Investor’s Edge, Scotia iTRADE, National Bank Direct, Desjardins Disnat, or anything else that exports a CSV or XLSX.
How it works
ActiveACB has native parsers for IBKR, Questrade, and Wealthsimple. For every other broker, the column mapper does the same job: upload your trade-history file, tell us which column holds the date, symbol, action, quantity, and price, and the engine runs the full calculation: ACB pooling, superficial loss detection, FX conversion, and a filing-ready report. Run your own broker export through the ACB calculator. Your first calculation is free. The adjusted cost base guide covers the underlying rules with worked examples.
Map the optional Amount column and your dividend, withholding, interest, and FX conversion rows import as well, feeding the income summary and the section 39 foreign-currency gain calculation. Option rows are recognized from a standard option symbol (or from mapped option columns when your file spells them out in words), with the quantity read as contracts. Stock splits and ticker renames have their own row types when you would rather not restate your history by hand. Mergers for shares, split-offs, and spinoffs come through natively supported broker exports or the corporate-action builder after your first calculation.
When you add a file the calculator doesn’t recognize, the mapping panel opens automatically with our best guess at your columns pre-filled. Review the five-row preview, adjust anything that looks wrong, and confirm. Your mapping is saved in your browser, so next year’s file from the same broker maps itself.
Exporting from your broker
Every platform labels it differently, but you are looking for a transaction, activity, or trade-history export as CSV or XLSX, not a holdings summary, statement PDF, or performance report. Set the date range to your full account history from inception: ACB is cumulative, so a single year’s activity will produce wrong cost-base numbers for positions you opened earlier.
- TD Direct Investing: WebBroker → Accounts → Activity → Export.
- RBC Direct Investing: My Portfolio → Activity → Download (CSV).
- BMO InvestorLine: My Portfolio → Account History → Download.
- CIBC Investor’s Edge: Accounts → Transaction History → Export.
- Scotia iTRADE: Accounts → History & Statements → Export.
- NBDB / Disnat: account activity or transaction report download; French-language exports (Achat/Vente, semicolon-separated) are handled automatically.
Menus move; if yours has changed, any export that lists one row per trade with a date, symbol, action, quantity, and price will work.
What the mapper needs
Five required columns: date, symbol, action, quantity, price. Optional but recommended when your file has them: commission, currency, account number, settlement date. Buy/sell wording is normalized automatically (Buy, Bought, BOT, Achat, Sell Short, Buy to Cover…), and the mapper shows every action word in your file so you can point any unrecognized one at the right meaning. Add the optional amount column (net cash) and dividend, withholding, interest, and FX conversion rows import too. Cash rows the engine cannot use (deposits, transfers, fees) are set aside and reported in your warnings so nothing is silently miscounted.
Two details worth checking on the preview: pick the correct date format if your file writes dates like 03/04/2025 (we refuse to guess when it’s ambiguous), and tick the Canadian-listed symbols option if your file writes TSX tickers without the .TO suffix. That keeps cross-broker ACB pooling and T1135 foreign-property tracking accurate.
Use Verify file before you calculate. ActiveACB reads the staged file on the server and shows the rows it will import, the rows you chose to ignore, skipped rows with their row numbers, and option, split, or ticker rename rows that deserve a closer look. The audit is saved with the result so you can reopen it from history.
Building the file yourself, or consolidating history by hand? Start from the starter template (XLSX), which is the one to learn from: it carries the worked examples, the rows to leave out, and a Read Me that names the action word and columns for every event type. There is also a plain CSV holding the example rows on their own, for when you just want a file to fill in.
Its columns map automatically, and its 45 example rows walk through the events a consolidated history actually contains. Multi-lot averaging, a fractional DRIP reinvestment, USD trades, both legs of a Norbert's gambit under one symbol, a short sale and cover, a pre-split restatement, a renamed ticker, a transferred-in position, a superficial-loss repurchase, Canadian and US dividends with withholding, cash interest, an FX conversion pair, a bought call closed in the market, and a written put left to expire, each carrying a note that explains the convention.
The XLSX adds four more sheets: the same examples split into Simple Actions and Advanced Actions so you can start with only what you need, a No ACB Effect sheet showing the rows to leave out (deposits, withdrawals, journals, fees, and the CAD side of a conversion), and a Read Me that maps every event type to its action word, the columns to fill, and the columns to leave blank. Together the file doubles as a blueprint for converting any unsupported broker's history. Combining multiple accounts in one file, like uploading multiple files, requires season access, while single-account imports work on the free tier.
USD and foreign-currency files
If your file has a currency column, or you select a default currency, native-currency prices are converted to CAD using Bank of Canada rates for each trade’s settlement (or trade) date, the same convention the engine applies to IBKR and Questrade data. See USD cash ACB in Canada for how foreign-currency gains themselves are taxed.
Frequently asked questions
My broker only exports PDFs. Can I use those?
Not directly. Re-type the trades into the starter template (or any spreadsheet with date, symbol, action, quantity, price, and commission columns), save as CSV or XLSX, and map it. For a large history, ask your broker for a machine-readable export; most will provide one on request.
Does the mapper handle options or short selling?
Both. Sell Short and Buy to Cover rows open and close short positions. For options, any row whose symbol is a standard option symbol (NVDA 261218C00300000, or the spaced form SPY 20MAR26 692 C) is recognized as an option: enter the quantity as the number of contracts and the price as the per-share premium, and the contract size of 100 is applied for you. Rows with the action reading Exercised, Assigned, or Expired close the position against its pooled premium and fold that premium into the share leg the way section 49 requires. If your export describes options in words rather than printing a symbol, tick the option-columns box in the mapping panel and map the underlying, expiry, strike, and put/call columns instead.
What about my dividends and interest?
Map the Amount column and they import directly. Dividend rows build your income summary (amounts by payment currency, with tax character left to your T3 and T5 slips, and US withholding folds into the matching dividend), interest rows carry an income or expense flag, and FX conversion rows feed the foreign-currency gain calculation with its $200 exemption. Without an Amount column those rows are counted and listed in your warnings instead, and the amounts come from your T5/T3 slips when you file.
What about stock splits and ticker changes?
You have two ways, and you must pick exactly one. The simplest needs no extra rows: restate your pre-split trades in post-split terms (multiply the quantity by the ratio, divide the price by it) and use the current ticker on every row. The alternative leaves your history exactly as it happened and adds a row for the event, which suits a long history you would rather not rewrite. For a split, put the ratio in the quantity column (10 or 10:1 for a 10-for-1 split, 0.1 or 1:10 for a 1-for-10 consolidation) and point that action word at Split in the mapping panel. For a rename, map a column holding the new ticker and point the action word at Rename.
Because both paths reach the same answer, split and rename are never applied automatically from a familiar-looking word. Choose them in the mapping panel when you want the engine to apply those events. Doing both, restating your trades and importing a split row, applies the ratio twice and nothing downstream can detect it. Stock split rows also feed the superficial loss calculation, so a loss sale and replacement buy on either side of a split are compared on one share scale. Mergers taken for shares, split-offs, and spinoffs cannot be expressed as flat rows at all. Add them in the corporate-action builder after your first calculation.
Can you add native support for my broker?
Yes, that’s exactly how we prioritize. Email support@activeacb.ca with a sample export (redact amounts if you like; we need the column layout) and we’ll ship a preset so your broker maps automatically for everyone.
Building the file by hand? Start from the starter template (XLSX), or the plain CSV if you only want the rows. Before you file from the slip, see why your T5008 may not reflect your true ACB.