← Home

Changelog

Engine updates, parser improvements, and feature releases.

Wealthsimple margin interest, currency conversions and transfers

Fix

Wealthsimple margin interest now reaches carrying charges, with refunds reducing the total and registered accounts left out. Paired currency conversion rows are read at their executed rate. Security transfers are named for review and kept through recalculation; their stated value is never applied as a cost base. Rows the importer cannot read now direct you to support with the original export.

Purchase confirmations after unsubscribing

Fix

If you unsubscribe from product emails and later buy a season pass, you still receive your purchase confirmation. It confirms your access without referral promotions. The privacy policy now explains the occasional product reminders you can unsubscribe from.

Corporations: US-listed Canadian dividends and suspended losses

Fix

For a corporation, a dividend a Canadian company pays on its US listing, in US dollars, now counts as a Canadian dividend. It goes in the s.112 deductible dividends and the dividend stop-loss review instead of aggregate investment income. A History spreadsheet saved before October and uploaded with the next year’s broker file no longer releases last year’s suspended loss a second time. A loss whose 30-day window ends on a weekend or market holiday is released once your data reaches the last trading day before it.

Column mapper: dividend withholding tax and workbook sheets

Feature

The column mapper can read a dividend’s withholding tax from its own column, with Amount as the gross dividend. Tax given both in that column and in separate withholding rows is counted once, and a disagreement is refused with the dividend named. Sheet names that start or end with a space now work, a sheet’s currency is taken from its name only when the name holds a real currency code, and Verify file reads a workbook’s trades the same way the calculation does. A trade whose amount is far from quantity times price gets a note, which usually means option contracts were mapped as shares. Tickers seen only on dividend rows are now listed when they are read as Canadian.

Corporations: fund distributions and suspended losses

Fix

A Canadian ETF, fund or trust is no longer counted as a corporation’s share. Its distributions stay with the fund and trust distributions, out of the s.112 deductible dividends and adjusted aggregate investment income, and its units get no dividend stop-loss review. A holding the upload cannot place is named on its own line so you can check the T5 or T3. A suspended loss is now released when the only days missing between two exports are market holidays, and a re-uploaded History spreadsheet keeps the gaps in your data instead of closing them.

Wealthsimple’s new export and files saved again in a spreadsheet

Fix

Wealthsimple’s newer activity export is read directly, with TFSA and other registered accounts left out and return of capital and reinvested distributions applied to the cost base. A broker export opened and saved again in a spreadsheet program is refused with the reason and an example, so it never reaches the column mapper. When registered accounts are left out, the results now say which ones. A History spreadsheet uploaded beside the files it came from no longer counts currency conversions, cash moves or cash in lieu twice.

Column mapper, trade editor and last year’s spreadsheet

Feature

The column mapper can read a workbook’s other sheets, asks how your file writes return of capital, reads one action word used for both buys and sells by its quantity sign, and accepts currency spellings such as US$ and C$. The trade editor handles calculations of up to 25,000 trades. Recalculate puts a day’s purchases before its sales in older custom imports that listed them the other way. Last year’s History spreadsheet now opens this year’s foreign cash balances when you upload it with this year’s files.

Your client records after an Accountant license ends

Feature

An account whose Accountant license has ended can still see and delete its client records, and clear its firm name, preparer name and logo, from the profile page. Calculations linked to a client are no longer removed by the 25-calculation history limit. A calculation made under a paid plan downloads with everything that plan included, whatever plan the account holds now. A recalculation that changes the figures of a calculation marked Final or Ready for review sets it back to In progress, and the page says so.

Accountant batch and bundles

Fix

A batch row now takes the account holder and fiscal year end from the client’s latest calculation, not from the list on screen, so a corporation client is no longer run as an individual by mistake. A batch that reaches the calculation limit waits and carries on instead of failing the rows left, and a request the limit refuses no longer counts against it. A row is locked while it runs, and editing a finished row queues it again. A client bundle holds up to 60 calculations, keeping the newest, and a large practice bundle downloads in parts of up to 60. Bundles and the history download now name each client, including names written in other alphabets.

White label and the methodology letter

Report

The methodology letter now says what each calculation did, such as registered accounts left out, an affiliated person’s accounts set aside, the foreign exchange result and the $200 exemption, a currency left out of Line 13200, a corporation’s dividend stop-loss review, and where each ETF figure came from. ETF figures typed in by hand are labelled as entered, never as verified issuer data. With a firm logo set, the PDF, spreadsheet, filing summary, letter and bundles carry no ActiveACB name or support address, the PDF shows the firm name even without a preparer name, and the letter’s document details name the firm. Pasted control characters in names are removed, and a phone photo used as a logo is stored upright.

Accounts of an affiliated person

Feature

The upload form has a new field for accounts of an affiliated person, such as a spouse, a corporation you control, a corporation's owner or a sister company. Upload their files with yours and list their account numbers, and their purchases, and the shares a spinoff, stock dividend or merger gives them, count in the 30-day test while their trades, income and holdings stay out of your figures. For an individual, a loss denied because of their purchase is added to the cost of the shares they bought, not yours. For a corporation the loss is suspended, and it is released only once, for 30 days in a row, neither the corporation nor those accounts hold the shares bought within 30 days of the sale or in the 31 days before. Shares the affiliated person held before the sale do not keep a loss suspended, and a sale of theirs is taken from the oldest units of that same security. Another corporate action in their accounts on the same shares, such as a delisting, or a merger that exchanges them for another company's shares, is listed as a loss to review before filing. The field is kept through a recalculation, a history reload and a spreadsheet re-upload, and the accountant batch has a column for it.

Capital dividend account and investment income for corporations

Feature

A corporation's report now gives the fiscal year's change in its capital dividend account from capital gains and losses, and its aggregate investment income and adjusted aggregate investment income from the uploaded accounts. Foreign exchange gains and a suspended loss released in the year are included. Dividends are split by payer as an estimate, with Canadian share dividends counted in adjusted aggregate investment income only, and fund and trust distributions listed for you to take from the T3. The figures appear in the results, the PDF, the spreadsheet and the text summary, with a note on what a broker file cannot show, such as the account's opening balance and capital dividends paid.

Superficial losses and corporate actions

Engine

The 30-day superficial loss test now counts shares a merger, spinoff or stock dividend gives you within 30 days before or after a loss sale, the same as shares you buy, and a merger that pays cash for shares you bought back means they are no longer held at the end of the 30 days. A trade on the day of an Interactive Brokers split is read in the share units it ran in, and an option contract a corporate action adjusted into a new symbol is still treated as identical property. The denied loss is added to the cost of the shares received. When shares bought back are exchanged for another company's shares in a rollover within the 30 days, the loss stays denied and is listed as a loss to review before filing. Calculations with none of these events are unchanged.

Corporate-action notes name a corporation's fiscal year

Fix

For a corporation, the note on a foreign spinoff election under section 86.1 now explains how a corporation files it with the T2, in the Notes to Financial Statements section when filing electronically, instead of the individual's rule that the T1 cannot be filed electronically. Notes that say which return an event belongs to now name the fiscal year it falls in, so an October event for a corporation with an August year end is no longer placed in the calendar year's return.

Season access through a corporation’s T2 deadline

Feature

A corporation files its T2 return six months after its fiscal year end, not by the June 15 deadline that season access follows. A corporation’s fiscal year that ends before your season access expires now stays open until its T2 deadline, at the plan you bought, for new calculations, edits and downloads of that fiscal year. A December 31, 2026 year end stays open until its June 30, 2027 deadline, and a March 31, 2027 year end until October 1, 2027. A deadline on a weekend or a CRA public holiday moves to the next business day. Season access for individuals is unchanged.

A reminder after each fiscal year end

Feature

On a corporation’s results page you can ask for one email about a month after each fiscal year end, once the 30 days after the year end that the loss rules look at have passed. It names the fiscal year to run and its T2 deadline. You can turn it off on your profile page or with the unsubscribe link in the email. Individuals keep the T5008 reminder in late February.

Accountant batch runs for corporations

Feature

Each row of an Accountant batch run can now be for a corporation. Choose Corporation and the month its fiscal year ends, and the row runs that fiscal year with the corporate rules, as a single calculation does. The year list names fiscal years by their year end, the registered-account field does not apply to a corporation, and picking a client starts the row with the account holder and year end of that client’s latest calculation. The calculation list names a corporation’s year as FY Aug 2026, and bundles put its files in a folder named the same way.

Contributions in kind from the results card

Feature

The card for a contribution in kind your broker reported now has a button for each transfer. It adds the CONTRIBUTION row in the trade editor with the day, security, units and account filled in, so only the fair market value per share is left to type, and a second click opens the same row. While you edit that row, a link opens the security’s price history around that day. A custom import reads rows whose action reads Contribution in kind, with the fair market value per share as the price in the row’s currency and zero commission. A plain Contribution row is still read as a cash deposit. When shares left a taxable account and your files give no value for the transfer, the card now says how to enter it if they went into your own TFSA, RRSP, FHSA or RRIF.

Contributions in kind to a TFSA, RRSP, FHSA or RRIF

Feature

Shares moved in kind from a taxable account into your TFSA, RRSP, FHSA or RRIF are now calculated. The CRA treats the move as a disposition at fair market value on that day. A gain is taxable, and a loss is denied and can never be claimed. Broker exports give no value for these moves, so enter each one in the trade editor as a CONTRIBUTION row with the day the shares moved, the units, the taxable account they left and the fair market value per share your broker recorded. ActiveACB reports the gain or leaves out the denied loss and takes the shares out of your taxable holding. A loss on another sale of the same shares within 30 days is denied for the shares the plan holds. Wealthsimple and National Bank transfers in your files are matched to the rows you enter, and the results say when a row matches none or repeats one. A contribution to another kind of plan, of anything other than shares and fund units, of more shares than you held, or in a corporation's calculation stops with a message saying what to correct.

Corporations, with any fiscal year end

Feature

A calculation can now be for a corporation whose fiscal year ends in any month. Choose Corporation as the account holder and the month the fiscal year ends, and the report covers that fiscal year, with headings and file names that name it. It uses T2 wording, with Schedule 6 for capital gains, Schedule 4 for the net capital loss carryforward and Schedule 21 for foreign tax credits, and leaves out the TFSA and registered-account content. A corporation has no $200 exemption on foreign exchange gains. A loss on shares bought within 30 days before or after the sale and still held 30 days after it is suspended under subsection 40(3.4) instead of being added to the cost of the shares bought, and it is released as a capital loss once the corporation has held none of them for 30 days. A new Suspended Losses table lists each one. Premiums on options written are counted at the fiscal year end, and the T5008 checker is hidden for a year end other than December, since slips cover calendar years. In the corporate-action builder, a US statutory merger now means a foreign merger under subsection 87(8), and a rollover you enter for an imported merger now applies to that merger in each of your accounts.

National Bank Canadian-dollar and US-dollar accounts read together

Parser

National Bank exports of a Canadian-dollar account and a US-dollar account now read together, including a history split across several exports. A security moved between two of your taxable accounts, such as units moved to the US-dollar side to sell there, is read as a move between your own accounts with its cost base carried over, and the $9.95 transfer fee and its GST are read as account fees. A move into a TFSA, RRSP or other account you entered as registered is a disposition at market value, which ActiveACB does not calculate yet, so your report says it is not complete for that security until the contribution is worked out. A cancelled trade is matched by the date it names, a sale marked /NON-SOL. meets the purchases it closes, and a TSX-listed trade settled in US dollars at a conversion stated on its row is valued at that rate. A distribution posted again as of an earlier day is dated on that day when your trades show the units held then. Shares of one class listed on the TSX and in New York share one cost base once ActiveACB has verified they are one class of shares, as it has for Energy Fuels. Your rows are checked against the running cash balance National Bank writes on each row, so missing activity is named with its dates and amount, and a file of exactly 2,000 rows, the most one export holds, is flagged. A dividend or distribution paid on more units than your trades show is now checked only against the trades that year’s calculation covers.

National Bank tax slips explained

Feature

A new guide explains what the T5008 from National Bank Direct Brokerage does and does not tell you, quoting National Bank’s own tax guide on the cost in box 20. It covers the other slips and summaries National Bank sends for a non-registered account, the 2025 mailing dates, the consolidated T5008 and Relevé 18 for Quebec residents, and what changes when the account belongs to a holding company. The National Bank export guide gains a step for filling in older history and notes on dividend reinvestment and commissions, and the TD T5008 guide now states which date sets the exchange rate for trades and for income.

National Bank Direct Brokerage files are read directly

Parser

The activity history CSV from National Bank Direct Brokerage is now read directly, with no column mapping, and has its own export guide. Each account number in the file is its own account, in Canadian or US dollars as its description says. Buys and sells take their cash from the Net amount column. Distributions are recorded as income under the fund, and a reinvested distribution also adds the reinvested amount to the fund’s cost base. Cancelled postings are dropped along with the rows that cancel them, GICs are left out, and a security with no symbol is identified by its description. Export the file with pipe (|) as the delimiter, a period for decimals and the mm-dd-yyyy date format. A file with decimal commas or day-first dates is refused with a message saying so, and a file whose dates do not show which comes first is read month first with a warning naming a date to check. Cancellations and reinvested distributions are matched across all the National Bank files of an upload. Options, bonds, corporate actions, interest, withholding tax and currency conversions are not read yet, and rows of them are named in your warnings and left out. Rows the parser does not recognize are named in your warnings, never guessed. A results workbook that holds National Bank records is uploaded on its own, and uploading it together with National Bank exports or another workbook is refused with a message saying so. In the trade editor, a typed exchange rate on a National Bank row can be cleared to go back to the Bank of Canada rate for its settlement date. This is early support, so each National Bank file you upload is kept privately for 7 days to help us improve it, and you can turn this off on your profile page.

Files from every broker are kept for 7 days

Privacy

A copy of each file you add on the upload page is now kept privately for 7 days and then deleted, whichever broker it comes from. This includes files you map by hand in the column mapper and files you add but never calculate, so we can fix what our parsers misread and add support for brokers we do not read yet. Interactive Brokers files and Accountant uploads are still never kept, and every account can turn this off on the profile page. The privacy policy, terms and security page describe it in full.

Trade editor: an edit now means what it would mean in your broker file

Fix

Moving a trade to another day now prices it at that day’s exchange rate and gives it the settlement date your broker would, so a sale moved to December 31 lands in the right tax year. Settlement dates have their own column you can change. A ticker you type is matched to the listing already in your calculation, so a missed TSX purchase added as BBB joins your BBB.TO shares instead of becoming a second, foreign holding. Added option trades keep the contract size, trades on the same day can be moved up or down to set their order, and the editor offers trade actions only. The same rules apply when you edit rows in a History spreadsheet and upload it again.

History spreadsheets remember your form answers

Fix

A History spreadsheet now keeps the prior-year net capital loss, the loss claim and your answer about option premiums already reported, and fills those fields when you upload it again for the same tax year. A value you type in the form still wins, and you can now answer no to the option premium question.

Questrade options read the same way after edits

Engine

When you change option rows, add files or recalculate, whether each Questrade option purchase opened or closed a position is now read from all of your rows together, the same way a fresh upload reads it. Calculations saved before this release keep their original reading, and a note says when a new calculation from your original Questrade files would read it again.

Results page, History and accountant tools

Fix

The prior-year check compares with a calculation from the same broker and says which one. The T5008 checker counts short sales, reads amounts written like 1 500,00 and no longer blames commissions for gaps they cannot explain. Money on the results page rounds exactly like your PDF. Accountants get a clearer registered account column in batch runs with a note when an entry matches no account, a confirmation before the firm logo is removed, and a client picker where Enter picks the client you typed. Signing out or deleting your account now clears your saved column mappings and T5008 slips from the browser.

Wealthsimple: foreign tax withheld and foreign income

Fix

Withholding tax on US dividends (the NRT rows in your Wealthsimple export) is now matched to the dividend it was taken from and counted in that dividend’s tax year, so a December 31 dividend whose tax posts on January 2 stays in December’s year. Refunds are subtracted, overlapping exports count each row once, and tax that matches no dividend is listed as claimable on Line 40500 instead of showing as $0.00. US dividends that Wealthsimple pays in Canadian dollars are now named as foreign income in every report. A Canadian company’s dividend is never counted as foreign, even when you bought the shares on a US exchange.

Wealthsimple: same-day order, listings and notes

Fix

A split stock sold and bought back on the same day is now read in the order it happened, and rows in a TFSA no longer change how a taxable account’s day is read. A saved History spreadsheet uploaded with your next export keeps US stocks as US listings, so their dividends and sales are no longer counted twice or lost. TSX US-dollar lines such as DLR.U count as Canadian property for Form T1135. An option sold for less than its fee, and adjusted option contracts after a split, are read correctly. Notes about rows from another year appear only in that year’s report, and an export you extend into January now covers the December superficial-loss check.

History spreadsheets: edited rows and January coverage

Fix

A row you edit in your History spreadsheet now replaces the row of the export it came from when you upload both, for every broker, instead of being counted twice. That includes a sale you move into the next year. A spreadsheet that was only re-sorted keeps its original order. How far your data covers January after the tax year is now kept for each account, across statements, spreadsheets and Recalculate. A December loss is never shown as checked while one account’s January is missing, and you are not asked for January again once every account has it.

A History spreadsheet now reproduces the result it came from

Fix

The data sheet in your History spreadsheet now carries everything a Recalculate needs: your entered opening currency balances, borrowing proof, January coverage, unmatched withholding tax, skipped rows, import notes and the broker reconciliation table. Uploading an unchanged spreadsheet gives the result it came from, where it used to withhold a currency or lose those cards. A spreadsheet uploaded with the statements it came from, with another spreadsheet of the same account, or with a statement that holds the other half of a dividend and its withholding, now counts each dividend, fee and withholding once, in any order. A refund of withholding tax booked near its dividend, or in the next year, is netted the same way whether the dividend came from a statement or a spreadsheet, and a spreadsheet saved before withholding rows were kept keeps the withholding it saved. Records of other tax years stay out of this year’s report and get a note naming their year.

Reports: incomplete labels, superficial-loss page and PDF layout

Report

When a currency is left out, Lines 19900 and 25300 and the carryforward are marked incomplete on page 1 of the PDF, in the spreadsheet and on the results page. The unmatched withholding card lists each entry with its date, symbol and amount and names Line 40500. On the superficial-loss page, option replacements are counted in contracts, the replacement list is capped so very long option series no longer break the PDF, the affiliated account is named, and a replacement bought in a spouse’s non-registered account is described as deferred under s.53(1)(f) rather than permanently lost. Renamed symbols print as OLD to NEW. Every PDF, text and spreadsheet report shows the date it was calculated. Long labels and option symbols wrap inside their cells, no heading is left alone at the bottom of a page, written options are listed as open short options, the ETF Box 42 list shows only this year’s record dates, and the spreadsheet display sheets use real dates with a settlement date column.

Superficial loss replaced in a spouse’s non-registered account

Engine

When the shares that trigger a superficial loss are bought in a spouse’s non-registered account, that part of the denied loss is added to the cost base of the shares bought there (s.53(1)(f)), not to yours. Before, it was added to your own replacement shares. The reports name the amount and the account. No upload path creates such an account today, so no saved result changes. Notes and cards no longer use em dashes.

Currency gains with incomplete history are no longer guessed

Engine

When your upload spends more US dollars (or another currency) than it shows coming in, for example because it starts after you already held US cash, the gain or loss on that currency cannot be worked out correctly. Before, ActiveACB still added a partial figure to Line 13200, and it could even have the wrong sign. That currency is now left out and named, Line 13200 is marked incomplete in every report, on the results page and in your history, and a card says what was missing and how to fix it. Enter your January 1 balance for that currency (0 if you held none) or upload your earlier history, then recalculate. A balance you enter counts only if it covers the year, and a currency left out one year stays flagged the next. The cash check on IBKR statements no longer warns about dividends IBKR books a few days after they are paid.

ETF distribution figures applied in more cases

Engine

If you held an ETF in a year without issuer figures, the figures for all the other years of that fund were skipped. Each covered year is now applied and only the missing year is flagged. A ticker written without .TO in a custom file, such as ZSP or XQQ, now matches its Canadian fund when every trade is in Canadian dollars. A return of capital row from your broker no longer hides a reinvested distribution that still needs adding. The ETF tax factor lookup now has 2022 figures for VFV and 21 other Vanguard funds, from each fund’s Vanguard page, and corrected 2022 return of capital for eight Vanguard funds, including VEQT and VGRO.

TD currency conversions and older results

Fix

TD currency conversions and transfers between your own accounts are now read, so their US dollars are tracked, and a TD option expiry written without a space after the contract size is no longer skipped. Exact repeated trades in a file are now pointed out. Withheld tax with no matching dividend, reversed dividends and Wealthsimple return of capital now move your foreign cash as they should. A result saved before currency conversions were tracked, or one too large to recalculate, now says to upload the files again.

New guide to ETF phantom distributions

Feature

A new guide explains what a phantom distribution is and why it raises your ACB, then adds up four years of phantom distributions and return of capital for 143 Canadian ETFs, per $10,000 invested, from issuer tax documents. It shows where ignoring them overstates a gain the most and where it understates one, and links each fund to its figures in the ETF tax factor lookup. The homepage and the ETF return of capital, DRIP, book cost and ETF tax statistics guides now link to it.

Clearer file rows on the upload page

Fix

File type labels on the upload page now stay on one line and no longer run into the file name. A file that could not be checked shows the reason in an error box under its name, without repeating the name, and the note about files kept for 7 days wraps on a phone instead of being cut off. A file is labelled with its broker once it has been recognized. Share counts on the cards about sales and option trades now read 300 rather than 300.00000.

CIBC and TD files as you download them, and exports of trades only

Parser

A CIBC download can print several lines above its column headings, and ActiveACB refused such a file as one opened and saved in a spreadsheet. It is now read as downloaded. A TD sale of US shares is no longer skipped as rounded by a spreadsheet when TD writes the quantity as 1E+2 and keeps the SEC fee out of the commission. TD’s Canadian-dollar Investment Savings Account rows are now read. A US option traded in a Canadian-dollar TD account now uses the Canadian amount TD charged, instead of converting it a second time. When a Questrade or TD export covers months with only trades in it, and no option expiries, dividends, interest or deposits, a card now says it was probably downloaded with only trades selected and asks for every type of activity. Before, the missing expiries made options look like closing trades, and the cards asked for older history instead. A file that has not been recognized yet is labelled CSV rather than Wealthsimple. Changes to how a file is read apply when you upload it again.

Corporate actions from Questrade, Wealthsimple, CIBC, TD, Qtrade and custom files

Calculation

The corporate-action builder in the trade editor now has Split and Rename, so a split, consolidation or ticker change your file does not apply can be entered once and applied to the whole holding. When a Questrade, CIBC, TD or Qtrade file shows a corporate action that is not applied from the file, a card now names it and opens the builder on it, and the card clears once your entry is applied. Before, those rows were left out with advice to fix a column mapping or export again, and the holding and gain stayed wrong. A symbol entered the way your broker shows it, such as XYZ for a TSX listing held as XYZ.TO, now reaches that holding. A Questrade merger is now applied whichever company it is, and an option contract Questrade adjusts after a split carries its cost or premium to the new contract. A Wealthsimple split now applies when shares were added in the trade editor without an account. When the share count before a split cannot be worked out, the note says why and points to the builder. A Wealthsimple row with no price on a stock is no longer read as an expiry. In custom files, split rows in two files no longer clash, and cash in lieu is matched to each account and up to 31 days after the split. A Rename entry now warns that deleting it does not undo the merge, which takes a new calculation from your broker export. Results saved before this change keep their numbers until you recalculate them.

Superficial losses on options and in each account

Calculation

A loss on an option is now denied as superficial only when you buy the same option series, meaning the same underlying, type, strike and expiry, in the 61-day window and still hold it at the end. Before, a call at another strike or expiry, or the shares themselves, could deny it. A loss on shares can still be denied by a call on those shares bought in the window and held at its end. The loss on an option that expires is never superficial, so the card asking you to check those losses is gone. Replacement shares are now counted by holder. Your taxable accounts together, and each TFSA, RRSP or other registered account on its own, count the lesser of what they bought in the 61-day window and what they hold at its end. Before, a purchase in one account could be matched with shares a TFSA had held since before the window, and the loss denied for good. Only the part matched to a registered account is now denied for good, and the rest is added to the cost of your replacement shares. A December loss is now checked against January at every broker whose data reaches December, and the card names any broker whose data does not cover January. Results saved before this change keep their numbers until you recalculate them.

Options that expire with no closing row, and where your data ends

Calculation

When your data runs past an option’s expiry date with no row closing it, the option is now treated as expired on that date. Before, it stayed held in later years, where it could deny a later loss, count on Form T1135 and bring a card asking you to amend a return that already counted it. For CIBC, TD, Qtrade, Wealthsimple and custom files, and for each account in a Questrade export, your data now ends at that account’s last dated row, or at the As of date a Wealthsimple export prints, not on the day you calculate. An option expiring after that stays open with a note instead of being written off as expired worthless. When an option is assigned or exercised in December and the shares are booked in January, the premium now goes only into those shares, in the next year, instead of counting in both years. A call you wrote, moved into Questrade and bought back there is no longer read as a call you bought that expired worthless. Once you upload the file again, the purchase closes the call you wrote and a card asks for the history with the original sale. Results saved before this change keep their numbers until you recalculate them.

Day order, TD options and foreign cash in custom imports

Calculation

A custom file whose accounts are sorted in different directions, such as one pasted together from several exports, is now read account by account. Before, one direction was guessed for the whole file, and long round trips in the other accounts became short sales. When a sale is listed before same-day purchases that cover it, the purchases now come first, as in Questrade files, and a note says to mark a real same-day short sale as Short and Cover. TD’s short option descriptions and option codes are now read as options. Before, they were imported as shares, so premiums were 100 times too small. With the Amount column mapped, foreign-currency deposits and withdrawals now reach your foreign cash balance as they do for IBKR. A conversion word used for both directions now takes its direction from the sign of the amount. US stocks in an AdjustedCostBase.ca export now count for Form T1135. Rows skipped for an unknown action word now name the words to set under Action words in this file, and warn when a skipped tax word such as Non Res Tax leaves that tax out of your foreign tax credit. Changes to how a file is read apply when you upload it again. Results saved before this change keep their numbers until you recalculate them.

One holding across brokers, and foreign property on Form T1135

Calculation

A Canadian company traded on the TSX at one broker and under its US ticker at another, or on both sides of a TD account, is now one holding when it is on our list of Canadian companies under US tickers. Before, only a Questrade TSX line and an IBKR US line were joined, so a sale at one broker and a purchase at the other could escape the superficial loss rule. A TSX Venture or CSE stock that Wealthsimple, CIBC, TD or Qtrade lists as a TSX stock is now one holding with the same stock at IBKR or Questrade, and an option IBKR lists by its contract code is one holding with the same option at another broker. The PDF and spreadsheet list the name each such holding is shown under. Questrade securities with short names, such as APPLE INC, now find their ticker instead of raising an Unknown CUSIP note. Foreign property for Form T1135 is decided by where the issuer is resident, so Questrade shares bought on the TSX that share a cost base with the US line no longer count as foreign when ActiveACB can confirm the company or fund is Canadian. TSX US-dollar fund units such as XUS.U are Canadian property too, and Sprott Physical Copper Trust (SCOP) joins the list. A US-dollar option on a Canadian company now counts as foreign at Wealthsimple and IBKR as well. Results saved before this change keep their numbers until you recalculate them.

ETF return of capital, spin-offs and the corporate action builder

Calculation

An issuer’s annual return of capital figure now applies only when you held the same number of units all year. Before, it was charged to the units held on December 31 even after a purchase or sale during the year, and your file’s own return of capital rows were dropped. Figures you type in the ETF review now apply even when your holding changed. A distribution now goes to whoever held the units on its record date, counting a trade only if it settles by then. When your file gives no settlement date, a trade settles in one business day, two before May 27, 2024 and three before September 5, 2017. The Cumulative ROC this year line now counts only the tax year. A value you enter in the corporate action builder for a taxable IBKR spin-off now sets the dividend and the cost of the new shares, which had stayed at $0. Section 86.1 covers only spin-offs by foreign companies, so TRP to SOBO and BAM.A to BAM now split your cost between the two holdings with nothing to elect or file. A spin-off from an earlier year of your upload is now a note about that year’s return, not a filing step for this one, and the builder accepts events from any year your upload covers. Foreign cash from a merger or cash in lieu entered in the builder now reaches your foreign cash balance. Results saved before this change keep their numbers until you recalculate them.

Broker files, transfers and same-day order across brokers

Calculation

Foreign-currency deposits and withdrawals at Questrade now reach your foreign cash balance, as they do at IBKR, so a withdrawal no longer leaves cash behind that later shows a currency gain. A TD export with no buy or sell rows lost every dividend, interest and withholding row. Their currency now comes from your TD files, or they are read in Canadian dollars with a note. Files from two CIBC, TD or Qtrade accounts, or two custom files with no account column, are no longer merged as one account when their rows differ on a day both cover, so one account’s dividends are no longer dropped. A sale of shares moved in from another broker, followed by a purchase the same day, is no longer reordered to put the purchase first. Brokers that give no trade times now order a day by what your taxable accounts hold at every broker, even under different tickers such as RY and RY.TO. Wealthsimple’s non-resident tax note now shows only in its own year. Shares withdrawn in kind from a Wealthsimple TFSA, RRSP or FHSA now get a card saying their cost is the fair market value on the transfer date, which you can enter with Add row. Changes to how a file is read apply when you upload it again. Results saved before this change keep their numbers until you recalculate them.

Editing trades and uploading your Raw Trades spreadsheet again

Calculation

In the trade editor, changing a trade’s date now moves its settlement date too, so the tax year and the superficial loss window follow it, and changing a foreign trade’s exchange rate now converts its Canadian dollar price and commission again. Before, the old settlement date was kept and a new rate changed nothing. The ETF review now shows the figures you typed, marked Your figure, with a Use issuer figures button to go back, and with season access it can still be applied after 30 minutes. A broker file uploaded with its own Raw Trades spreadsheet no longer counts every trade twice. In a spreadsheet downloaded after this change, a new exchange rate converts the row the same way, and one from a custom import gives the same result as its files, Form T1135 included. When you edit such a spreadsheet and upload it again, trades from brokers that give no trade times keep the order of the file they came from and each day follows that broker’s own rule, so the result matches the corrected broker file. A row you add keeps its place in later downloads. Results saved before this change keep their numbers until you recalculate them.

Reports, downloads and your calculation history

Report

Payments in lieu of dividends now appear on the results page and in the spreadsheet, PDF and filing summary, beside the foreign tax withheld on them. The History and Accountant lists now show Line 13200, the same figure as the detail page, and label a column-mapped calculation with the broker name you typed or Custom import instead of Unknown. The PDF and filing summary now carry the notes the results page shows, such as rows left out, import notes, settlement timing and filing steps, and count sales larger than your holdings the same way the page does. An Accountant’s PDF downloaded right after Calculate now carries the firm’s branding and file name, as the copy in History does. A PDF or spreadsheet of a calculation you ran with season access can be downloaded again after the season ends, as the pricing page now says. The PDF’s T1135 text now says the form may be required and that late filing carries a penalty of $25 a day, up to $2,500. The JSON download gives one figure for Line 25300 and one for the carryforward. No amounts change.

Large uploads, saved mappings and what our logs keep

Security

A CSV file read by the column mapper is now limited to 20 MB and about 2 million cells, and any CSV with a single line over a million characters is refused with a message saying what to do. Before, one very large file could take up a large share of the service’s memory. Files that together pass 50 MB are now refused when you add them, naming the limit, instead of failing at Calculate. An Accountant’s history is no longer cut to the 25 most recent calculations when a save runs while the license cannot be confirmed. Column mappings saved in your browser are now cleared when you sign out, so the next person on that browser does not see your mapping or broker label. Logs no longer record the names of uploaded files. The privacy policy and security page now say that request logs keep your IP address, that a one-way hash of it is kept for about a minute to enforce rate limits, and what the private Discord channel for staff alerts can contain, and the privacy policy describes saved mappings.

Interactive Brokers files saved without Asset Class

Parser

A Flex Query saved without the Asset Class field had every option trade read as a share trade, so each option you wrote showed as a short sale of shares and its premium was not counted in your capital gains. Options in such a file are now recognized by their symbols, and a card names the fields to add before you export again. The Select All step in our IBKR guide includes them. Results saved before this change keep their numbers until you recalculate them.

Option premium on an assignment with no purchase in your upload

Report

When a call you wrote is assigned, or a put you bought is exercised, on shares your upload never bought, the share sale is treated as a short sale and the option premium goes with it. The item to review now names that premium, says whether it is in your report, and tells you to add the purchase to include it. No amounts change.

Interactive Brokers stock splits, mergers and spin-offs

Calculation

Interactive Brokers reports a stock split as one row holding only the extra shares, and those splits were not applied, so a later sale used the wrong cost per share. Your holding now gains the extra shares and keeps its cost base, spread over the new count, and options adjusted for the split carry their cost to the new contract. A merger that pays shares of two companies now books both. An exchange that gives you new shares of the same company plus shares of another is now read as a share consolidation and a spin-off. Rights that lapsed no longer stay in your holdings. Results saved before this change keep their numbers until you recalculate them.

One holding when Interactive Brokers changes a ticker or listing

Calculation

Interactive Brokers names a security by its ticker and exchange at the time, so a move from the TSX Venture to the TSX, or a new ticker with no corporate action, split one holding into two. The sale went unreported and the old line stayed open. Rows are now matched by IBKR’s own security id, so one holding keeps one cost base, and a company you hold at IBKR on both a Canadian and a US exchange is one holding. Mergers IBKR files under a renamed old symbol, such as BITF.OLD, now find your shares. A share-for-share exchange of one foreign company for another now carries your cost base over, as section 85.1(5) of the Income Tax Act does by default. Tickers such as BRK B are written BRK.B, as other brokers write them. Results saved before this change keep their numbers until you recalculate them.

Interactive Brokers options

Calculation

An option sale IBKR marks as closing, with no purchase in your upload, was read as a new written option. It is now read as a sale of contracts bought before your upload, and a card asks for their cost. An option that expires on December 31 now counts in that year, not the next. A Raw Trades spreadsheet you upload again now remembers where your statements end, so options expiring later are not booked as expired. Trades IBKR marks with a US wash sale code keep their proceeds. An option you wrote and bought back on the last trading day of the year keeps its premium in the year you wrote it. An assignment or exercise of an option opened before your upload now appears among the items to review. Results saved before this change keep their numbers until you recalculate them.

Interactive Brokers foreign income and US dollar balances

Calculation

US dollar deposits and withdrawals at IBKR now move your US dollar balance. Uploading only recent years no longer overstates that balance after margin borrowing, because IBKR’s cash report shows when a currency started at zero. Tax withheld on payments in lieu of dividends now counts as foreign tax paid. A refund of last year’s withholding no longer cancels this year’s credit, and unmatched withholding from other years is no longer listed as claimable this year. A bond’s accrued interest counts once when IBKR also lists it as a cash row. Results saved before this change keep their numbers until you recalculate them.

Superficial losses on short positions, transaction taxes and year boundaries

Calculation

A purchase that closes a short position no longer counts as a replacement share under the superficial loss rule, for every broker, so part of a denied loss is no longer left behind and carried into the next year. Stamp duty and other transaction taxes on IBKR trades are now part of your cost and proceeds. Same-day IBKR trades of one security follow IBKR’s time order, and a trade IBKR cancelled is left out. If none of your statements covers the tax year you chose, a card now says so, and a sale on the last trading day of the year that settles in January is named in that year’s report. Results saved before this change keep their numbers until you recalculate them.

Questrade option buy-backs, partial assignments and where your data ends

Calculation

Questrade does not mark option trades as opening or closing, so a purchase that bought back an option written before your upload was read as a new holding. That could deny a loss on the shares as superficial and later show an expiry loss that never happened. When your data runs past the contract’s expiry with nothing closing it, the purchase is now read as a buy-back, and a sale of an option bought before your upload as a sale. When your data stops first, the purchase keeps the safer reading and a card asks you to check it. When some contracts of a series are assigned and the rest expire on the same day, each part is now booked on its own, and two assignments on one stock on the same day each reach the shares at their own strike. For Questrade, your data now ends at the last row of your export rather than on the day you calculate. Results saved before this change keep their numbers until you recalculate them.

Questrade US dividends and the tax withheld on them

Calculation

Questrade lists a US dividend as one row, after the 15% US tax withheld, and those dividends were left out of your foreign income entirely. They now count at the full amount, with the tax withheld as foreign tax paid, and a note asks you to compare both with your T5 slip. A dividend repeated in overlapping files counts once. The journal fee on a Norbert’s gambit is no longer claimed as a carrying charge, and RIF and spousal RIF accounts are now recognized as registered. Results saved before this change keep their numbers until you recalculate them.

Questrade gambits, mergers, corrected trades and shares on two listings

Calculation

A Norbert’s gambit journal no longer counts as a second currency conversion, so your US dollar balance matches what you actually converted. A share-for-share merger, such as Bitfarms into Keel, now carries your cost base to the new shares. A trade Questrade cancelled with a correction row is left out, whichever of your files holds the correction. The US and Canadian lines of one security now share one cost base, and TSX US-dollar units such as HYLD.U no longer count as foreign property. A Questrade holding is pooled with an Interactive Brokers listing of the same ticker only when the company is Canadian. Results saved before this change keep their numbers until you recalculate them.

Clearer Questrade import notes

Parser

A transfer note now names the ticker and listing of the security you moved, not Questrade’s internal code. Notes about rows in your TFSA and other registered accounts, and about dividends from other years, no longer appear among the items to review.

Options on Canadian-listed stocks and Form T1135

Calculation

Calls and puts on Canadian-listed stocks, such as a Montreal Exchange call on SHOP.TO, no longer count as foreign property for Form T1135. Before, every option you held counted as foreign, whatever it was on. Options on other stocks still count, and so do options bought on a US exchange on a Canadian company. Results saved before this change keep their numbers until you recalculate them.

A renamed ticker that another company took later

Feature

The column mapper has a new action choice, Ticker rename (old ticker reused later). Use it when a company changed its ticker and another company later took the old one, as when BAM was renamed BN and a new BAM began trading. The shares from before the rename move to the new ticker, and the later trades under the old ticker are their own holding. An ordinary rename in that situation is still refused, and its note now points to this choice.

Referral credit is spent once

Fix

Paying with referral credit now takes the credit once, even when the purchase button is clicked twice or a payment is confirmed twice at the same moment.

Custom imports handle reinvestments, options and withholding refunds

Calculation

Custom (column-mapped) imports now count DRIP and REI reinvestment rows as share purchases. Before, they were left out unless you mapped them yourself, so the reinvested shares were missing. With the Canadian-listed symbols option ticked, options now take the listing of their underlying, so an assigned or exercised option links to its shares and a call on the same shares counts for the superficial loss rule. Option rows that name only the underlying in the Symbol column no longer pool with the shares. One contract written as an option code in one row and with the option columns in another, in one file or across files, is now one position. Symbols like SHOP.TO 250620C00095000 are read as options. Withholding tax refunds now reduce the tax withheld whichever sign your file uses, and splitting an export into several files no longer changes the result. Equal payments on the same day at two brokers now count as two payments. A rename is refused, with a note, when the old ticker still trades after the rename date or when another of your files contradicts it. A ticker with the Canadian listing ticked in one file and not in another is now one holding when the second file shows it only in CAD. A ticker with no exchange suffix that your files show only in CAD no longer counts as foreign property for Form T1135. Results saved before this change keep their numbers until you recalculate them.

Custom imports read more files

Fix

The custom import now reads CSV files saved by Excel for Mac and CSV files saved as UTF-16. A file with no header row is refused with a message instead of losing its first transaction. Long action words can now be assigned, and the column mapper offers up to 200 columns. A number too large to be real skips its row with a note instead of stopping the calculation. The preview now refuses a currency the calculation would refuse. Uploading several files at once no longer runs into the file check limit. On the Standard plan, footer and total lines no longer count toward the number of accounts. The column mapper no longer offers Confirm anyway after a definite refusal, and a refused file now says why.

Refunds and referral rewards

Fix

A refunded or disputed purchase can no longer regain access from a late payment notice. The season a purchase buys now always follows the time Stripe took the payment. When a payment is refunded, the referral credit and affiliate commission it earned are taken back once, even when the refund arrives just as the reward vests.

Partial fills of one sale count as one sale

Calculation

When a broker reports one sell order as several partial fills, the superficial loss rule now treats the fills sold at a loss on the same day in the same account as one sale. Before, each fill was checked on its own against the same shares bought back, so a broker reporting an order in pieces denied more of the loss. Selling 100 shares at a loss in ten fills and buying 10 back within 30 days denied the whole loss, where the same order in one fill denied a tenth of it. When the shares were bought back in a TFSA or RRSP, the extra part was lost for good. The denied amount is now the same however the order was filled, and it is shared across the fills in proportion to their losses. Sales on different days or in different accounts are still checked separately. Results saved before this change keep their numbers until you recalculate them.

Several CIBC, TD or Qtrade files count as one account

Fix

On the Standard plan, all the files you upload from CIBC Investor’s Edge now count as one account toward the two-account limit, and the same goes for TD Direct Investing and for Qtrade. Before, each file counted as its own account, so three yearly exports of one account went over the limit. A result you recalculate after an edit now keeps its account count as well.

Recalculations keep the broker’s cash amounts

Calculation

Recalculating a result after a trade edit, a corporate action entry or an ETF review now keeps each trade’s cash amount as the broker file gave it. Before, every trade was rebuilt from its price and quantity, which moved CIBC, TD and Qtrade results by a few dollars and Questrade results by cents with no edits made. The T1135 figure no longer counts Canadian mutual funds held under a fund code or TD Investment Savings Account balances. For IBKR, a December loss is now checked against the days your statements cover after year end. Statements that run through the sale’s 30-day window no longer ask for January data when January had no trades, and a single January trade no longer stands for days the statements leave out. When a loss is denied because only a TFSA or RRSP bought the shares back, the whole denied amount is now shown as permanent. Before, part of it was described as added to a cost base when no taxable shares were left to carry it. The taxable amount for the year was already right. A return of capital recorded while a position is short is no longer booked as a gain. The IBKR broker reconciliation table now stays in place after a recalculation.

Overlapping files count currency conversions once

Calculation

A currency conversion listed in two overlapping Questrade files, or in two overlapping custom files, is now counted once. Before, uploading the same conversions twice doubled the currency gain and the foreign cash balance. If you uploaded overlapping files with conversions in them, rerun your calculation. Overlapping CIBC, TD, Qtrade and custom files now keep the order the fuller export gives a day’s trades, as Questrade and Wealthsimple files already did, so a partial export uploaded first no longer changes a gain. The T1135 notice now appears on the results page, not only in the downloads. The list of Canadian companies under US tickers now knows a company under its earlier ticker too (Barrick as GOLD before B, BRP as DOOO before DOO), counts a company new to a US exchange from its registration, and adds BlackBerry, Brookfield Business Corporation, Orla Mining and the Sprott physical bullion trusts.

Fixes for holdings spread across brokers

Calculation

A stock split that two brokers record a few days apart is now applied once. Before, each broker’s record scaled the combined holding, so 100 shares through a 10-for-1 split could become 10,000. If you hold the same stock at two brokers and it split, rerun your calculation. A file holding only January trades, uploaded beside another broker’s full year, is now used to check December losses instead of being counted as trades of the year. The December loss warning is now kept per broker, so January trades from one broker no longer hide it for a broker whose file ends on December 31. Two overlapping ActiveACB spreadsheets count the rows they share once, and overlapping Questrade or Wealthsimple exports keep the order each export gives a day’s trades. The T1135 check now recognizes more than 200 Canadian companies under their US tickers, each for the dates its SEC annual reports confirm, names any it left out when that matters, and tells you when your foreign property cost is close to $100,000.

Written options are reported in the year written

Calculation

The Income Tax Act treats writing an option as the disposition, so the premium is a capital gain of the year you wrote it. For options written from 2026 on, a contract still open at the end of the year now has its premium in that year’s gains. A later expiry adds nothing, a buy-back is a loss of its cost, and an assignment moves the premium into the shares and tells you what to amend. Contracts written and closed in the same year are unchanged. Options written before 2026 are still reported when they close, which matches earlier results, and a new Written options box lets you say your earlier returns already reported them. If you rerun a 2026 calculation with written options still open, its gains will be higher than before by their premiums.

Qtrade Direct Investing, early support

Feature

Qtrade account-history Excel exports are now read directly, with no column mapping: buys and sells from the Net Amount column, fund distributions as income under the fund, and deposits, transfers and ROC adjustment rows named rather than guessed at. Built from one Canadian-dollar customer export, so it is early support with its own guide; every Qtrade upload is kept for 7 days to mature it.

Early-support broker files are kept for 7 days

Privacy

Exports from brokers whose parser is still maturing (Questrade, Wealthsimple, CIBC Investor’s Edge, TD Direct Investing and Qtrade) are now kept privately for 7 days after an upload so the parser can be tested against real files and fixed where it misreads them. Interactive Brokers files are never kept, nor are Accountant uploads or files mapped by hand, and every account can turn this off on the profile page. The privacy policy, terms and security page describe it in full.

TD Direct Investing, early support

Feature

TD activity exports that carry Symbol, Security Type and Currency columns are now read directly, with no column mapping. Option writes, buy-backs, expiries and assignments close out as they do for the other brokers, dividends carry their withholding, and savings-account interest adds to the account's cost base. Upload the file as TD gives it to you. Other TD exports still go through the column mapper.

CIBC Investor's Edge

Feature

CIBC Transaction History exports are now read directly, with no column mapping. Option writes, buy-backs, expiries and assignments close out the same way they do for Interactive Brokers and Questrade, dividends carry their withholding, and savings-fund interest adds to the fund's cost base. Across every broker, a buy-back the broker marks as closing a contract that is not in your upload is now reported as missing history instead of being treated as a new position that later expires at a loss.

File layout profiles and optional redacted samples

Security

Uploaded files are still deleted as soon as they are processed. We now also keep a short layout profile of each file, listing its column names and a format code for each column with none of the values in your rows, so an upload that fails can be diagnosed afterwards and we can see which brokers people need. You can also choose to share a redacted sample of the first 5 rows, with account numbers, contact details, and name or address columns masked, to help us add your broker. Samples are off unless you turn them on, are deleted after 180 days, and are never taken from Accountant uploads. Profiles are deleted after 365 days or with your account. The privacy policy and terms describe both in full.

Questrade options

Feature

Questrade option trades are now recognized as contracts. Written and bought options close out as capital gains, expiries realize the premium, and assignments carry the premium into the delivered shares. Transfers in are named so a missing cost base is no longer silent. Assignments and exercises are matched to the share trade they delivered even though Questrade posts the event row on the next business day, and the US dollar line of the DLR currency ETF pools with DLR.TO so a Norbert's gambit reports its own gain instead of an unmatched sale. Security codes are read from their descriptions, a same-day purchase listed after its sale is processed first, and zero-amount adjustment rows no longer count as unread.

Free calculation covers one file, any accounts

Feature

The free calculation now runs on any single broker file whatever number of accounts it covers, and the results page names the plan that fits. Multi-file uploads still need season access.

New guide to proceeds of disposition

Feature

A new guide explains what proceeds of disposition means, quotes the Income Tax Act and CRA definitions, shows where the figure comes from when a T5008 reports it and when nothing does, and works twelve examples from a plain share sale to gifts, transfers in kind, death, a principal residence, a rental property and the capital gains reserve. The ACB, T5008, Norbert's gambit and options guides now link to it.

New guide to adjusted cost base

Feature

A new guide explains what adjusted cost base is, quotes the Income Tax Act sections that define it, and works eleven examples with the slip boxes and Schedule 3 lines each one lands on. The homepage, methodology, book cost and superficial loss guides now link to it. The compare page also gained a short FAQ.

Public site cleanup from the Semrush audit

Fix

The homepage no longer downloads its hero image twice on a first visit, two T5008 guides link to the CRA page that replaced a retired one, inner pages dropped an empty duplicate home link that screen readers announced twice, each changelog release now has its own heading, five guides split their longest paragraphs, and a new llms.txt lists the public guides for AI search crawlers.

Audit hardening for edge cases and operations paths

Fix

Corporate-action builder inputs now reject oversized Decimal values, import audit row details are capped, unknown API paths return JSON 404s, and imported stock-for-stock mergers now warn about the s. 85.1 rollover path while keeping the taxable default. Edge cases for cash-in-lieu relief, annual ETF factors, zero-position s. 50(1) elections, and Canadian taxable spinoffs were tightened. Affiliate activation, season-open email selection, and referral-credit locks now page and clean up more predictably.

Audit fixes for public content and frontend polish

Fix

ETF statistics now use true medians, the public ETF factor API accepts bare Canadian symbols where a .TO listing is covered, static table headers carry explicit scope attributes, and the 404 page no longer declares a canonical URL. The calculator now warns earlier for large XLSX uploads, preserves T5008 slip comparisons across recalculation, clears saved slip figures on sign-out, validates empty corporate-action builder entries before saving, and uses clearer timeout copy that tells users to check History before rerunning.

Audit fixes for referral credit, refunds, payouts, and checkout guards

Fix

Referral credit refunds now claw back the same expiring buckets the credit would otherwise spend from, Stripe webhook reversals now retry on Supabase patch failures, credit-funded checkouts are serialized per user, season activation email refs are per account, affiliate payout reference retries can finish partial settlements, short referral and affiliate links accept lower-case codes, and duplicate checkout clicks collapse into one request.

Audit fixes for corporate actions, ETF factors, and client comparisons

Fix

Stored bifurcated merger facts now refine cleanly, builder entries for imported spinoffs, split-offs, and mergers now apply to the imported event instead of duplicating it, ETF factor adjustments now follow renamed holding intervals, and accountant prior-year ACB checks now compare against the selected client's own prior-year calculation.

Superficial loss windows now use settlement dates

Engine

Superficial-loss windows now anchor to settlement dates when broker files provide them, matching CRA technical interpretation 2012-0468931C6. Results can change for sales and repurchases near the 30-day boundary. If a file is missing settlement dates, ActiveACB falls back to trade dates for those rows and warns when that fallback could matter.

Creator affiliate track

Feature

Approved creators can now share an affiliate link that gives readers $10 off Standard or Pro and earns commission on a new account's first purchase. Affiliate program details

Referral program adds preparer codes

Feature

Accountant seats now include a client code that gives clients $10 off Standard or Pro while paying no reward to the preparer. Accountant users can also refer other preparers and earn $50 credit when the new preparer buys an Accountant license. Earned referral credit can now be used on any tier.

Email: season activation, referral reward notices, one-click unsubscribe

Feature

ActiveACB now sends account email for season activation, referral reward notices, and the once-a-season opening reminder. Every app-sent email includes a one-click unsubscribe link, and the same preference can be changed from the profile page.

Refer a friend: give $10, get $10

Feature

Referral links now give a friend $10 off their first Standard or Pro season. The referrer receives $10 in ActiveACB credit 7 days after the qualifying purchase, up to 10 rewards per season. Credit can be used on a future Standard or Pro season or on the Pro upgrade.

ETF tax factors now follow ticker renames

Engine

Verified ETF return-of-capital and reinvested-distribution factors now apply to the pooled ticker after a rename. If issuer rows exist under both old and new tickers, identical rows are counted once and conflicting rows are held back with a review warning. Results change for affected books because missed ETF adjustments are now included.

Native split-offs now calculate as dispositions

Engine

Native broker files with surrender-type spinoffs now remove the foreign-dividend inclusion and add the missing disposition at the FMV of shares received. Results change for affected books.

Reconciliation mode compares slips and prior-year ACB

Engine

The T5008 checker now accepts individual slip rows, can match a slip to engine dispositions by symbol, and keeps those typed slip values in this browser only. Reports also include opening positions so signed-in users can compare this year's starting ACB with their newest prior-year closing position.

Adjusted option contract support

Engine

The corporate-action builder now accepts adjusted option roots and OCC deliverables. Superficial-loss checks use those entered terms for split-adjusted call contracts, while rows without entered terms still receive a review warning.

Corporate-action builder v2

Engine

The corporate-action builder now handles split-offs, qualifying mixed-consideration merger allocations, automatic rollover defaults for share-for-share exchanges, Schedule 3 opt-out acknowledgments, and the CRA $200 cash-in-lieu relief choice. Questrade and Wealthsimple corporate-action detections now appear as review hints instead of log-only notices.

Assisted corporate-action builder

Engine

The trade editor now accepts user-entered spinoffs, mergers, and s.50(1) worthless-security elections. ActiveACB validates those facts on the server, stores them through recalculation, and labels the resulting report assumptions as user-entered.

Custom import audit preview shows how your file was read

Parser

The column mapper now has a Verify file step before calculation. It runs a server-side dry read of the staged CSV or XLSX and shows how many rows will import, how many are ignored, which rows are skipped, and which option, split, or ticker rename rows need review. The same audit is saved with the result and appears again from history and trade edits.

First-party campaign attribution is disclosed and bounded

Security

ActiveACB now records which of our own tagged campaign links brought a visitor here, including tagged arrivals before sign-in. The browser keeps the first and most recent campaign labels in localStorage, and calculation or checkout events carry those labels after sign-in. Anonymous tagged landings are stored without an account ID, kept for the same 180-day analytics window, and reported only in aggregate. No third-party analytics script, tracking pixel, advertising cookie, uploaded file data, file name, tax figure, IP address, or device information is added to the event payload.

Download your history before deleting your account

Security

The profile page now offers a history bundle download before you delete anything. It includes the stored calculation records for everyone, adds report exports where the account tier allows them, and uses JSON-only bundles for larger histories within the self-serve export limit. Very large accountant histories are directed to client bundles or support. Deletion wording across the site was rewritten to state plainly what happens. Deleting an account permanently erases your calculation history and every stored report, and afterward the same email cannot be used on the free tier, though buying season access restores it. Restored access does not bring back deleted history. If you delete by mistake, support can lift that restriction on request.

Custom spreadsheet imports now cover dividends, options, splits, and renames

Parser

Files you map yourself are no longer limited to buys and sells. The importer reads dividends, withholding tax, interest, currency conversions, return of capital, and cash in lieu, so supported custom rows run through the same tax engine as native broker rows. Option rows are recognized from standard contract symbols or from explicit expiry, strike, and put or call columns, with exercise, assignment, and expiry handled as lifecycle events rather than ordinary trades. Stock splits and ticker renames can be declared as rows for files that do not already restate them. The mapping panel gained an editor for teaching it the action words your own file uses, and the starter template now ships as a five-sheet workbook with worked examples.

Superficial losses are now measured correctly across a stock split

Engine

When a split fell between a loss sale and the repurchase that triggered the superficial-loss rule, the three limiters in section 54 were comparing share counts recorded on different scales. A consolidation understated the denied loss and a forward split overstated it. Quantities are now scaled by the cumulative split factor between each trade and the sale, so the denied amount is correct regardless of when the split happened. This changes results for anyone whose loss sale and replacement purchase straddle a split.

Client rosters, batch runs, and workpaper packets for accountants

Report

The Accountant tier now has its own dashboard. Clients are kept as a roster, calculations are assigned to them, and a batch runner works through a queue of client files one after another with retry handling for busy periods. Each client's deliverables download as a single organized bundle, and an entire practice downloads as one archive with a manifest describing what it contains. The workpaper packet adds a transaction-level ACB continuity schedule to the PDF, a methodology letter written for a client file, and the filing summary text file that the engine had always produced but never delivered to anyone.

White-label branding on accountant deliverables

Report

Accountants can upload a firm logo and set a firm name alongside the preparer name. These appear on the PDF, the spreadsheet, the filing summary, and the methodology letter, and file names drop the ActiveACB label so the documents read as the firm's own work product. The methodology letter is now a formatted Word document built from a real business-letter template rather than plain text. Long ticker renames and symbol text inside report tables now wrap properly instead of running past the edge of the page.

Fuller disclosure of processors, data location, and professional use

Security

The privacy policy now names every service that handles your data, including the hosting and network providers that were previously unnamed, and states plainly that processing happens in the United States along with what that means for lawful access. The terms gained a data-processing section for accountants handling client records under PIPEDA, a clause covering material you upload, and wording that makes clear a preparer keeps sole professional responsibility for anything they file.

Capacity and reliability work ahead of tax season

Fix

Calculations now run behind a concurrency limit with a bounded queue, so a burst of simultaneous uploads waits a moment instead of competing for memory. A load test against a separate staging copy of the service confirmed that limit holds well beyond the traffic a filing season is expected to bring. Stored results were slimmed by dropping a section that duplicated data already held elsewhere, health checks report more accurately, and the alerting that watches the service was repaired after it was found to be discarding every message it sent.

Security checklist review

Security

A review of the production security checklist confirmed most controls and found three real defects, all now fixed and covered by tests. One of them meant a check protecting the free calculation had never been enforced since it shipped. No customer calculation or stored result was affected.

Spinoffs, expired options, and multi-year ETF factors

Engine

ActiveACB now recognizes all 270 spinoffs on the CRA's list of approved section 86.1 elections, and applies the allocation automatically for nine of them where the published ratio is known. Expired-option reconciliation is bounded by the period your upload actually covers, so a position that closed outside the file no longer produces a warning about data that was never there. ETF tax factors apply across an entire holding period rather than the reporting year alone, which corrects cost-base adjustments on units held for several years. Edited trades keep their contract multipliers and their broker note codes through a recalculation, and the tax-year selector opens on the most recent completed year.

Multi-file selection and readable sign-in errors

Fix

The file picker accepts several files at once and gives each one its own row. Sign-in, sign-up, and password-reset forms no longer show an empty pair of braces where the error message belongs, which is what appeared whenever the authentication service returned a server error. The published sample report was regenerated so it shows the current report format rather than a version from several releases earlier.

Currency conversions inside registered accounts are no longer taxed

Engine

Foreign-exchange conversions carried out inside a TFSA, RRSP, or other registered account were being pooled together with taxable conversions, which could produce a section 39(2) gain or loss that does not exist. Account information is now carried through the whole currency pipeline and registered conversions are filtered out in one place. Where two conversions genuinely cannot be told apart, the result carries a review note instead of being dropped silently. This changes reported foreign-exchange figures for anyone who converted currency inside a registered account.

Clearer tax reports and consistent wording

Engine

Downloadable reports now show the IBKR wash-sale (LD) and speculative-FX disclosures that previously appeared only in the command-line summary, and the spreadsheet's Superficial Losses sheet lists the replacement purchases. Schedule 3 Line 13200 is shown once with a consistent value throughout the report. The trade editor no longer requires a share quantity on dividend, interest, or cash rows, and site wording now consistently describes the one-time season-access purchase.

Executed FX rates, currency withdrawals, fractional splits, and net withholding tax

Engine

Foreign-exchange conversions are now valued at your executed rates (the actual CAD exchanged) rather than Bank of Canada reference rates. Currency withdrawals are treated as transfers to your own accounts instead of taxable dispositions, with a review note for any that paid third parties. Fractional share positions survive splits when your broker did not pay cash in lieu. Same-day withholding-tax rows now net correctly, so reversed withholding never inflates your foreign tax credit. Superficial-loss window calculations account for short sales, and expired-option handling is more precise.

Questrade DRIP, Wealthsimple return of capital, and overlapping uploads

Engine

Questrade DRIP rows are now recorded as share purchases so reinvested distributions enter your cost base instead of being counted as extra income. Wealthsimple return-of-capital distributions now reduce your cost base under s.53(2)(h) rather than being taxed as dividends. Overlapping date-range exports from any broker are de-duplicated (previously IBKR only), and IBKR Flex files using yyyy-MM-dd dates now parse correctly, including year-end settlement dates.

Consolidated IBKR files, expired options, and incomplete-history detection

Engine

Consolidated IBKR Flex files containing multiple account statements are now parsed in full (previously only the first account was read), with duplicate rows between overlapping statements counted once. Worthless option expiries with no broker closing row no longer fail the calculation and are flagged for superficial-loss verification. Sales that exceed the holdings in your upload are now clearly flagged as probable missing history instead of being treated silently as short sales.

Inline manual trade editor

Engine

Calculation results now include an inline editor for correcting, adding, filtering, or deleting trades without modifying and re-uploading the original broker file. Recalculation preserves non-trade income, registered-account treatment, ETF factors, corporate actions, and FX context while replacing the existing history record.

Automatic ETF tax factor adjustments

Engine

ActiveACB now applies verified return of capital and non-cash distribution factors on each issuer record date using the taxable units held at that time. The workflow supports IBKR, Questrade, and Wealthsimple, prevents covered IBKR estimates from being counted twice, and adds a review step for reconciling results before filing.

Production security and dependency hardening

Security

Private Supabase tables now receive fail-closed startup access checks, sensitive history operations remain owner-scoped, and authentication, upload validation, and rate-limit controls were tightened. Python dependencies are locked and the CI pipeline now runs automated tests and vulnerability auditing on every change.

Delete calculation history

Fix

You can now delete individual calculations from history detail. The deletion flow includes a confirmation modal and preserves the existing authenticated history workflow.

Product analytics and retention controls

Security

Added privacy-bounded product analytics events with documented retention and purge behaviour. This improves product visibility without storing uploaded files or calculation payloads.

MFA step-up protection on sensitive pages

Security

Profile, history, and calculation-detail flows now honour MFA step-up requirements consistently. The UI challenge and auth guards were tightened without changing the public marketing pages.

Multi-year FX rate loading fix

Fix

Resolved failures on multi-year uploads where off-year FX data was not being loaded. This improves reliability for full-history statements that span several tax years.

Warning-panel cleanup and prioritization

Report

Warnings are now grouped and surfaced more cleanly so important action items are easier to spot. This reduces noise when reviewing complex calculations with many edge-case notices.

Superficial-loss window and exchange-rate corrections

Engine

The superficial-loss window was corrected to the full 61 days that section 54 requires, counting the 30 days before a sale, the day of the sale itself, and the 30 days after. Foreign-exchange conversions are valued at the Bank of Canada rate for the settlement date rather than the trade date, following the CRA's published position. Currency gains and losses net against capital losses correctly and carry the same figures into the PDF and the exported data. Mergers where the engine holds fewer shares than the broker's corporate-action row are now prorated instead of overstating the exchange.

Free tier and one-time season access

Fix

Every account gets a free calculation, with downloadable reports and multi-account uploads unlocked by a one-time season purchase rather than a recurring subscription. The upgrade prompt appears at the moment a gated feature is reached and explains what it covers, instead of blocking the calculation itself.

Multi-account upload support

Parser

IBKR and Questrade files from multiple accounts can be uploaded together in a single calculation. The engine merges them chronologically and improves cross-account superficial-loss detection.

Raw Trades re-import workflow

Parser

Added support for re-uploading corrected Raw Trades XLSX files. This gives users a direct path to fix broker-parser misses or manual adjustments without rebuilding a workbook from scratch.

Multi-sheet spreadsheet export

Report

Results download as an Excel workbook covering the filing summary, per-disposition capital gains, open positions, superficial losses, foreign exchange, and the raw trades exactly as the parser read them. The workbook is the audit trail behind the PDF, so every number on the summary can be traced back to the rows that produced it.

CRA-ready PDF filing summary

Report

Added PDF export as a first-class report output. This makes it easier to hand results to an accountant or transfer Schedule 3 figures into tax software.

Rate limiting, structured logging, and storage hardening

Security

Request rate limits run on a shared window per endpoint and per address, so one client cannot crowd out everyone else. Request logging was rebuilt as structured records with an explicit list of permitted fields, which keeps uploaded content and personal detail out of the logs by construction rather than by careful writing.

Cross-account superficial-loss engine coverage

Engine

The engine added stronger affiliated-account logic for TFSA and RRSP replacements, including separation of permanently denied losses from deferred ACB adjustments.

Saved calculation history

Report

Calculations run while signed in are saved to an account history with a list view and a detail page for each one. A past result can be reopened and its reports downloaded again later without re-running the upload.

Accounts, sign-in, and account deletion

Security

Accounts arrived with email and password sign-in, access tokens validated against published signing keys, and an email verification step before a calculation will run. The profile page carries an account deletion path that removes stored calculations along with the account itself.

IBKR and Questrade uploads with export guides

Parser

The calculator accepts Interactive Brokers Flex Query XML and Questrade spreadsheet exports, works out which is which from the file itself, and routes it to the matching parser. Step-by-step export guides for both brokers were published alongside, since getting a complete file out of the broker is the step most people get wrong.

Options exercise and assignment linking

Engine

Implemented the four-way CRA options matrix so premiums flow into the correct ACB or proceeds calculation. This closes a major gap for active options traders.

The engine and the calculator go live

Engine

ActiveACB began as a Canadian adjusted cost base engine covering superficial losses, corporate actions, options, foreign currency, and Schedule 3 output, with 544 tests behind it. A web calculator was built over that engine so a broker file could be turned into filing figures in a browser rather than a spreadsheet maintained by hand.