Import Any Broker File with the Column Mapper
RBC Direct Investing, BMO InvestorLine, Scotia iTRADE, Desjardins Disnat, or anything else that exports a CSV or XLSX. CIBC Investor’s Edge, TD Direct Investing and National Bank Direct Brokerage exports are read directly. See the CIBC, TD and National Bank guides.
How it works
ActiveACB has native parsers for IBKR, Questrade, Wealthsimple, CIBC Investor’s Edge, TD Direct Investing, Qtrade and National Bank Direct Brokerage. 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, with 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: read directly, see the TD guide. Only the older eight-column export without a Symbol column comes through the mapper.
- RBC Direct Investing: My Portfolio → Activity → Download (CSV).
- BMO InvestorLine: My Portfolio → Account History → Download.
- CIBC Investor’s Edge: read directly, see the CIBC guide.
- Scotia iTRADE: Account details → Transactions → CSV. The mapper fills in Scotia’s columns for you. See the Scotia iTRADE guide.
- National Bank Direct Brokerage: read directly, see the National Bank guide. A French-language export comes through the mapper.
- Desjardins 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. Shares moved in kind from a taxable account into your own TFSA, RRSP, FHSA or RRIF import from rows whose action reads Contribution in kind, with the broker-recorded fair market value per share as the price and zero commission. As on every row, the price is in the row's currency, so a US-dollar row is converted at that day's rate. A plain Contribution row is read as a cash deposit unless you point it at Contribution in kind. 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.
If one action word covers purchases and sales (a Trade column), each row’s quantity sign gives its direction, so a negative quantity is a sale, and the results say so. Map the Amount column as well and its sign confirms each row.
A return of capital row is read as on a T3 slip, where a positive amount lowers the ACB and a negative one raises it, unless you choose under Return of capital amounts that the amount is the change in ACB, as some brokers write it. Wealthsimple’s ReturnOfCapital rows marked “Adjusted Cost Base Entry Only” are written that way, so a negative amount lowers the ACB. The mapper suggests that reading when your file’s rows say so, and keeps the choice you saved for the same layout. A non-cash (phantom) distribution raises the ACB without any cash and is read that way unless you set its action word to Ignore. Rows set to Ignore are never imported, so Recalculate cannot bring them back into a saved calculation. Upload the file again with the corrected mapping instead.
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. The free calculation takes one uploaded file with any number of accounts in it, so multiple accounts combined in one file work on the free tier. Uploading several files needs season access.
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. Currency cells such as US$, USD$ or C$ are read as USD and CAD, and a row whose currency is not a currency code is left out and listed with the reason. See USD cash ACB in Canada for how foreign-currency gains themselves are taxed.
A symbol with no listing suffix whose every row is in CAD is read as a Canadian listing (TSX or CDR). It stays out of the T1135 foreign property test and its dividends count as Canadian, and your results name every symbol read this way. If you converted a US listing’s prices to CAD yourself, give those rows a currency column with USD and the US dollar amounts instead.
A workbook with several sheets, such as one sheet of USD transactions and one of CAD transactions, shows its sheets above the columns. Tick each sheet that holds transactions and give each its currency for rows that name none. Sheets read together need the same columns, so ticking a sheet with other columns starts over on that sheet’s columns.
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. If your statement gives each dividend's gross, tax withheld and net on one row, map the optional Dividend withholding tax column as well: Amount is then read as the gross dividend, both columns in the row's currency, and a separate withholding row that repeats the same tax is counted once. 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. If another company later took the old ticker, choose Ticker rename (old ticker reused later) instead, so the rows from before the rename move to the new ticker and later rows under the old ticker stay a separate holding.
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.
Prefer ActiveACB in your Google results. Add activeacb.ca as a preferred source and Google shows you more of our tax guides in your own search results.
Add ActiveACB in Google