Calculation Methodology
Every rule behind the ActiveACB ACB calculator, with CRA references and known limitations.
1. Adjusted Cost Base Pooling
Canadian tax law (ITA s. 47(1)) requires that identical securities held in a taxable account form a single ACB pool. When you buy, the total ACB increases by the full cost (price × quantity + commission). When you sell, you remove a proportional slice of the pool: ACB removed = (ACB per share) × (quantity sold). The remaining shares carry the adjusted per-share ACB forward. The rules themselves, with worked examples, are in the guide to adjusted cost base.
For accurate results, upload your full trading history from account inception. If part of your history is genuinely unavailable, reconstruct the missing early trades in the starter template from the column mapper guide and upload it alongside your broker files; the engine derives opening positions and opening foreign-cash balances from the trades before your tax year. These pooled figures are what the CRA expects on your return; see T5008 and Schedule 3 for how they replace the broker’s Box 20 numbers.
CRA reference: IT-387R2 “Meaning of Identical Properties”
2. Superficial Loss Rules
A superficial loss (ITA s. 54) occurs when you sell a security at a loss and you, or an affiliated person, buys the same or identical property within the 61-day window: 30 days before the sale, the day of the sale, and 30 days after. For a complete breakdown with worked examples, see the superficial loss rule guide.
Denied loss = min(window buys, shares held at window end, shares sold at a loss).
The denied amount is added to the ACB of the replacement shares (deferred, not permanent).
- Identical property: Any security with the same CUSIP or a call option on the same underlying. ITA s. 54 para (i) deems a right to acquire property identical to it, and CRA 2008-0284441C6 applies that rule to call options. IT-387R2 remains a secondary identical-property reference.
- Affiliated persons: Spouse or common-law partner, corporation controlled by you, and registered accounts (TFSA, RRSP, RRIF, FHSA) you contribute to. The engine detects cross-account superficial losses when you upload multiple accounts in the same session.
- TFSA/RRSP replacement: If the replacement purchase is inside a registered account, the denied loss is permanently lost (not added to the ACB of replacement shares), because the registered account’s ACB is irrelevant for tax purposes. The engine flags this separately.
- December-to-January look-forward: The 30-day window extends into January. The engine scans the full window even when it crosses a tax-year boundary.
- Partial fills: When a broker reports one sale as several fills, the sales at a loss of one security in one account on the same day are tested as a single sale and the denied amount is shared across the fills in proportion to their size. Splitting an order into pieces does not deny more of the loss.
CRA references: ITA s. 54, s. 40(2)(g)(i); IT-387R2
3. Foreign Currency (FX) ACB
Every purchase or sale of a foreign security requires converting to CAD at the exchange rate on the settlement date. The exchange rate used is the Bank of Canada nominal rate for that date (or the annual average if the daily rate is unavailable). Cost converts at the buy-date rate and proceeds at the sell-date rate; broker gain/loss reports typically convert net P&L at a single rate, which is not the CRA method. For explicit currency conversions, the engine uses the actual rate at which your broker executed the conversion.
USD cash held in your account is itself a foreign currency and subject to FX gain/loss rules. The engine maintains a running ACB pool for USD (and any other foreign currency) just like a security pool. Each purchase of USD (when you buy a USD security) adds to the pool at the rate paid. Each sale of USD (when you sell a USD security) removes a proportional slice and computes a gain or loss. See USD cash ACB Canada for a worked example.
CRA reference: ITA s. 39(1), 39(1.1); Folio S5-F4-C1
4. Options
The CRA treats options premiums and the shares acquired or disposed through them as linked events. The engine applies the following four-way matrix:
- Buy a call, then exercise: Premium paid increases the ACB of the shares acquired on exercise.
- Write (sell) a call, shares assigned away: Premium received increases the proceeds of the shares disposed of.
- Buy a put, then exercise: Premium paid reduces the proceeds of the shares disposed of.
- Write (sell) a put, shares assigned to you: Premium received reduces the ACB of the shares acquired.
- Expiry: A purchased option that expires worthless is a capital loss equal to the premium paid. A written option that expires unexercised is a capital gain equal to the premium received.
- Written options held across a year end: For options written from 2026 on, the premium is a capital gain of the year written (section 49(1)) when the contract is still open at year end. A later expiry adds nothing, a buy-back is a loss of its cost, and an assignment moves the premium into the shares with an amended return for the year written (section 49(4)). Options written before 2026 are reported when they close, unless you tell the calculator your earlier returns already reported them.
The engine links exercise and assignment events to the original option opening trade by matching symbol, expiry, strike, and option type within your uploaded data.
CRA reference: IT-479R “Transactions in Securities”; ITA s. 49
5. Corporate Actions
- Splits and consolidations: Share count scales by the factor; ACB per share scales inversely so total ACB is unchanged.
- Spinoffs: A portion of the parent’s ACB is allocated to the new entity based on the relative fair market value at the time of the spinoff. Standard cost-base allocation spinoffs are applied automatically using the ratio in your broker's corporate action data; taxable spinoffs that require a deemed disposition are flagged for manual review rather than calculated automatically.
- Mergers and name/CUSIP changes: Name and CUSIP changes rename the pool without resetting ACB. Qualifying share-for-share exchanges use the automatic rollover by default. Reporting the gain on Schedule 3 opts out where the statute allows it. Canadian amalgamation rollovers are mandatory. Cash-only and unallocated mixed-consideration mergers are treated as dispositions at the consideration received.
- Return of capital (ROC): ROC distributions reduce the ACB of the security. If ROC reduces ACB below zero, the excess is a capital gain in that year. Verified annual per-unit ROC and reinvested-distribution factors are applied automatically for covered Canadian ETFs, with a review panel during each calculation. See Known Limitations below for coverage.
- Fractional shares, cash-in-lieu: Treated as proceeds from a partial disposition of the position.
- Worthless securities: ITA s. 50(1) allows an election to treat a security as disposed of at nil proceeds. The engine processes worthless-security elections and detects reversal events within the 30-day window.
6. T1135 Foreign Property Warnings
If the total cost of your foreign property (securities, real property, and other specified foreign property) exceeds $100,000 CAD at any point in the tax year, you are required to file Form T1135. The engine monitors the running cost of foreign-currency securities and flags a warning when the $100,000 threshold is approached (from $80,000) or exceeded based on your uploaded data.
Shares of a Canadian company are not foreign property, even when you bought them on a US exchange, and neither are units of a Canadian trust such as the Sprott physical bullion trusts. The engine recognizes more than 200 Canadian issuers under their US tickers, including a ticker a company used before its current one, and leaves them out of the total. Each one is confirmed from its own annual reports filed with the SEC, and only for the dates those reports and the ticker’s history cover, because a ticker can pass to another company and a company can leave Canada. Outside those dates the holding stays in the total. Whenever leaving a company out changes what the report says, the report names it for you to check. Canadian mutual funds held under a fund code (for example ATL5070) and TD Investment Savings Account balances are left out as well, in whatever currency they are held.
The warning appears on your results page and in the PDF and text downloads. It is informational. The engine does not generate a T1135 form. Use CRA My Account or tax software for that.
CRA reference: ITA s. 233.3; Form T1135
7. Verification, Reconciliation, and Corrections
- Broker Reconciliation (IBKR): for IBKR uploads, the broker's own realized P&L per symbol is compared against the engine's Schedule 3 figure, with each difference explained by flags such as superficial loss, return of capital, phantom distributions, FX method, options, and short sales. Shown on results, in history, and in the PDF.
- T5008 checker: enter your slip's Box 21 and Box 20 totals and the checker compares them against the engine's figures entirely in your browser, with delta explanations. Works for any broker.
- Report detail: the PDF shows every disposition with date, quantity, proceeds, ACB, ACB per share, gain, and superficial-loss flags, plus replacement-purchase linkage, short sales, FX results, broker reconciliation, and a Notes and Assumptions page. Figures are consistent to the penny across pages. Dual-listed journal transfers carry a wash-sale disclosure, and a disclosure is added when speculative FX positions are present but not calculated.
- Correcting trades: an inline editor on the results page lets you fix, add, or delete rows with per-action validation and re-run the calculation without re-uploading. You can also enter a prior-year net capital loss to apply against the year's gains; the entry survives trade edits and re-runs.
8. Test Coverage
The engine runs over 13,000 automated test cases on every release. Test categories include:
- ACB pooling: buy/sell sequences, partial fills, average cost across multiple lots
- Superficial loss: basic denial, three-limiter edge cases, cross-account TFSA/RRSP, December-to-January look-forward, options as identical property
- FX: USD pool ACB, $200 exemption, multi-currency, annual average vs. daily rate
- Options: all four exercise/assignment cases, expiry, same-day linking, multi-contract fills
- Corporate actions: splits, reverse splits, spinoffs, mergers, ROC, name changes, worthless-security elections and reversals
- Multi-account: cross-account superficial loss detection, merged pool ACB
- Multi-year: carry-forward ACB from prior years, prior-year net capital loss application
- Parser: IBKR Flex Query XML edge cases, Questrade XLSX edge cases, Wealthsimple CSV edge cases, CIBC, TD, Qtrade and National Bank export edge cases, multi-file deduplication
9. Known Limitations
- Supported brokers: Interactive Brokers (Flex Query XML), Questrade (Activity Report XLSX), Wealthsimple (Activity Export CSV), CIBC Investor's Edge (Transaction History CSV), TD Direct Investing (activity CSV), Qtrade Direct Investing (account history XLSX), and National Bank Direct Brokerage (activity history CSV) are parsed natively. Any other broker's trade-history CSV or XLSX imports through the column mapper. Mapped generic files import trades, and with an Amount column mapped they also import dividend, withholding, interest, and FX conversion rows. Options are recognized per row from a standard option symbol or explicitly mapped option columns, including exercise, assignment, and expiry. Stock splits and ticker renames import from generic files when their action words are explicitly mapped to those row types; mergers for shares and spinoffs are not read from generic files.
- ETF/fund distribution adjustments: Automated coverage is limited to the verified issuer dataset: more than 215 Canadian ETFs for tax years 2022 through 2025 (2026 factors publish in early 2027, and current-year runs warn accordingly). Covered funds have per-unit ROC and reinvested-distribution amounts applied automatically and shown with issuer sources in the review panel. For funds outside the dataset, enter the per-unit amounts from the issuer’s tax factor sheet in the same panel. See the Canadian ETF tax factor lookup for the public factor table and ETF return of capital and ACB for how these adjustments work.
- Cryptocurrency: Not supported. CRA guidance on crypto ACB is still evolving and the asset class requires a separate calculation approach.
- Corporations and trusts: A corporation's calculation covers its fiscal year ending in any month and applies the corporate rules, with no $200 foreign exchange exemption and with a loss on a repurchase suspended under subsection 40(3.4) instead of denied as a superficial loss. The dividend stop-loss under subsection 112(3) is estimated for review and not taken off the figures. The report gives the fiscal year's change in the capital dividend account from capital gains and losses and the aggregate investment income in the uploaded accounts, leaving out fund and trust distributions, whose character is on the T3. A holding the broker files do not show to be a fund or a corporation's share is listed apart, out of the share dividends, for its slip to settle. Only the uploaded accounts are checked for repurchases. The owner's or a sister company's accounts count when they are uploaded with the corporation's and listed as an affiliated person's accounts. Trusts are not supported.
- Taxable spinoffs: Native surrender-type spinoffs are calculated as dispositions at the FMV received. Pure taxable spinoffs still create foreign dividend income at FMV, and standard cost-base allocation spinoffs are handled.
- Short selling: Tracked separately from long pools and reported on its own line, including cover trades that cross tax years. Complex synthetic short positions involving multiple instruments may require manual review.
- Professional advice: Unusual corporate actions, cross-border estates, section 85 rollovers, and other non-standard events may require a tax professional to review the output.
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