How the tax report calculates

    The rules behind the tax estimate - Canada vs US, ACB vs FIFO, superficial losses and wash sales, options, currency, transfers and the Excel export.

    The Tax page turns your closed trades and dividends into an estimate of the tax you owe for a year or a quarter. This page explains the rules it follows, so you can tell why a number is what it is.

    An estimate, not tax advice. The report uses federal rates only and simplifies many things (listed at the end of this page). Use it to plan and to check your broker's slips, then confirm with a tax professional.

    What the report counts

    • Sales that closed in the period. A position counts in the year (or quarter) it was sold or bought back, not the year it was opened.
    • Every dividend paid in the period, in the selected accounts.
    • Only the accounts you select. The report never mixes in an account you didn't pick.

    Selected accounts

    When the page opens, every account is selected except tax-exempt ones (TFSA, RRSP, FHSA, RESP, RDSP, LIRA, RRIF, LIF, IRA, Roth IRA, 401(k), 403(b), 457(b), HSA, SEP IRA). Gains inside those accounts are not taxed, so they normally stay out. You can still add them.

    The account type you set on Accounts & Data is what decides this. If an account shows the wrong type, fix it there first.

    A tax-exempt type only counts for its own country. A TFSA shelters gains from the CRA, not from the IRS, so for a United States report the app treats a TFSA like a regular account when it looks for wash-sale replacements.

    Your grouping doesn't change your taxes

    Taxes follow your trades, not how you grouped them. If you merged a wheel into one user group, the report still splits it back into each account, each security and each contract, and taxes each sale in its own year. Strategies don't affect the report at all.

    Canada vs United States

    Pick the Country you file in. It changes the currency, the rules and the brackets.

    CanadaUnited States
    Report currencyCADUSD
    GainsOne "Capital Gains" bucketShort-term (held 365 days or less) and long-term (more than 365 days)
    How gains are taxedInclusion rate (50% or 100%) of the net gain, at federal bracketsShort-term at ordinary federal brackets; long-term at the 0% / 15% / 20% rates
    DividendsAdded to income at federal brackets; a Canadian company's are grossed up and credited (see Dividends)Ordinary federal brackets; qualified ones (when your broker says so) at the 0% / 15% / 20% rates (see Qualified dividends)
    Losses on salesSuperficial loss ruleWash sale rule
    Default cost methodACBFIFO

    The inclusion rate is the share of a Canadian capital gain that is taxed. At 50%, a $1,000 gain adds $500 to your taxable income.

    Losses first cancel out gains of the same year. In a Canadian report, if your losses are bigger than your gains, the tax on capital gains is zero; the extra loss does not lower the tax on your salary. In a US report, up to $3,000 of the extra loss lowers your other income; the rest carries forward to later years (the report says how much, and leaves it out of the estimate).

    Dividends (Canada)

    A Canadian report taxes each dividend by what paid it. The app reads the security's ISIN (its first two letters are the company's country) and its security type, not where it trades: TD on the New York exchange is still a Canadian company.

    Paid byTaxed as
    A Canadian company (Canadian ISIN, common or preferred shares)Eligible dividend: grossed up 38% into income, then the federal dividend tax credit (15.0198% of the grossed-up amount)
    A Canadian fund or trust (ETFs, REIT and income-trust units)Ordinary income, flagged: its T3 slip splits it into eligible dividends, other income, capital gains and return of capital
    A company with no ISINOrdinary income, flagged: the app can't tell whether it's Canadian
    Anything else (US and other foreign companies and funds)Ordinary income

    A company decides whether its dividends are eligible. Listed Canadian companies almost always designate them eligible, so the app assumes it; the Dividends sheet of the export says, on every row, how it was taxed. Check against your T5 slips. The credit can bring the tax on your other income down, but never below zero. A return of capital is never treated as an eligible dividend.

    Qualified dividends (US)

    In a US report, a dividend your broker labels qualified is taxed at the long-term rates (0%, 15% or 20%), stacked on your ordinary income before your long-term gains. Schwab labels them (Qualified Dividend vs Cash Dividend); the other brokers' files don't say, so their dividends are taxed as ordinary income, which overstates the tax on the qualified ones. The export's Dividends sheet shows each one's label (Yes, No or Not stated). The broker's label comes from its own records; its 1099-DIV has the final word. Dividends imported before this label existed get it the next time you import that file.

    Foreign tax credit

    When your broker withholds tax on a dividend (US tax on a Canadian resident's US dividends, for example), the import keeps it as a cash record linked to that dividend (see Cash records). The report credits it:

    CanadaUnited States
    CreditWhat was withheld, at most 15% of each dividendWhat was withheld
    LimitThe federal tax on that income (your tax ร— foreign dividends รท taxable income)The US tax on that income, the same way
    Withholding above 15%Shown, not applied: most residents can deduct it, but a US person recovers it on the US returnโ€”
    • A refund from the broker lowers what was withheld.
    • Withholding linked to no dividend is set against that stock's other dividends in the account for the period; with none, it's flagged and earns no credit.
    • Tax withheld in a TFSA, RRSP or other tax-free account is never credited.
    • Nothing is assumed: a broker that doesn't report withholding gives no credit.
    • Federal only: Canada's provincial foreign tax credit isn't included. In the US, more than $300 of foreign tax needs Form 1116 (the report has no filing status).

    The export's Foreign Tax sheet lists each dividend, what was withheld and the part above 15%.

    Dividends that may be net. DISNAT and Schwab report a dividend at its gross amount with the tax withheld on a line of its own. For the other brokers no file has shown how they report it, so a dividend there with no withholding stored is compared with the market data's dividend per share (and the stock's splits since). When it's 8% to 40% lower, as withholding would make it, the report flags it (Dividend May Be Net): the amount may already be after tax, so neither the income nor the credit would be complete. It never changes the amount.

    Cost basis: ACB vs FIFO

    Your cost basis is what you paid for the shares you sold, commissions included. Gain or loss = what you got for the sale minus that cost.

    • FIFO (First In, First Out): the oldest shares are sold first. Each sale is matched with specific purchases.
    • ACB (Average Cost Basis): every purchase goes into one pool, and each sale uses the pool's average cost per share on the day of the sale. This is how the CRA wants identical shares handled.

    Example: you buy 10 shares at $20, then 10 more at $30, then sell 10 at $35.

    MethodCost of the 10 soldGain
    FIFO10 x $20 = $200$350 - $200 = $150
    ACB10 x $25 (average) = $250$350 - $250 = $100

    Choosing Canada switches the method to ACB; choosing United States switches it to FIFO. You can change it after.

    How ACB works in the app:

    • The pool is shared by all the selected accounts. Shares in accounts you didn't select are not in it.
    • Cross-listed versions of the same company (for example DLR and DLR.U) share one pool.
    • ACB applies to stock you own (long). Short stock and options always use the matched trades.

    Superficial losses (Canada) and wash sales (US)

    Both rules stop you from claiming a loss when you sell and buy the same shares back right away. The loss is not lost: it is added to the cost of the replacement shares, so you get it back (as a smaller gain or bigger loss) when you sell those.

    Superficial loss (Canada)Wash sale (US)
    Window30 days before to 30 days after the losing sale30 days before to 30 days after the losing sale
    "Still hold" testYes: if you sold the replacement shares within 30 days after the losing sale, the loss is allowedNo
    Applies toStock losses onlyStock losses only

    Example (US): you sell 100 shares of XYZ on March 10 for a $500 loss and buy 100 back on March 20. The $500 is disallowed this time and added to the cost of the March 20 shares. If you buy back only 40 shares, $200 (40 of the 100 shares) is disallowed and the other $300 stays a loss.

    What the app does:

    • It matches the same security, including its cross-listed twin (DLR / DLR.U). Two different funds that track the same index are not matched.
    • Option losses are never treated as wash sales or superficial losses. A different strike or expiration is a different security.
    • The earliest replacement purchase is used first. One purchase can only cover as many shares as it holds.
    • A loss in December of the year before with a replacement in January is caught: the disallowed part raises this year's replacement cost, and the export flags it so you can check last year's return didn't claim it.

    Replacement purchases in your other accounts

    Both rules look at all your accounts, not only the ones in the report. Buying the shares back in your spouse's account or in a retirement account still counts.

    • Replacement in a taxable account that is not in the report: the loss is disallowed and added to those shares' cost. The export flags it ("Replaced in Other Account") so you remember the higher cost when you sell them.
    • Replacement in a tax-exempt account (TFSA, RRSP, IRA, ...): shares in those accounts have no cost basis to add the loss to, so that part of the loss is gone for good. The export flags it ("Replaced in Registered Account").

    Commissions

    Commissions are already inside every gain and loss: they are added to the cost of each purchase and taken off the proceeds of each sale. The export has a Commissions sheet for your records. Don't deduct them a second time.

    Options

    United States: an option position is taxed when it closes (bought back, sold or expired): the net of what you received and paid, in the year it closed.

    Canada: for an option you sold to open (a covered call or cash-secured put), each side is taxed in its own year.

    • Sell to open, then it expires: the premium is a gain in the year you sold it.
    • Sell to open, then buy to close: the premium is a gain in the year you sold it, and the buy-back cost is a loss in the year you paid it.
    • An option you sold this year that is still open at year-end: the premium is a gain in this year.

    For an option you bought (buy to open), nothing is taxed while you hold it. It is taxed once, in the year it ends:

    • Sold: the sale minus what you paid, in the year you sold it. A call bought in December for $500 and sold in January for $800 is a $300 gain in January's year.
    • Expired: what you paid is a loss in the year it expired.
    • Still open at year-end: nothing for this year.

    Assignments

    When an option is assigned, its premium is not a gain of its own (both countries):

    • Put assigned: you bought shares. The premium lowers the cost of those shares.
    • Call assigned: you sold shares. The premium raises the proceeds of that sale.

    Example: you sell a $50 put for $2 ($200 for one contract) and get assigned 100 shares at $50. Your cost is $5,000 - $200 = $4,800, or $48 a share. Nothing is taxed until you sell the shares.

    The app finds the share trade the assignment created (same account, a buy for a put or a sale for a call, within 5 days, near the strike). If it can't find one, it does not guess: the export flags it ("Assignment Premium Not Applied") so you can import the missing trade.

    In a Canadian report, a premium received this year on an option assigned next year is left out of this year and flagged ("Cross-Year Assignment"). If you already filed it as a gain, the flag tells you to amend.

    Exercises

    When you exercise an option you bought, what you paid for it is not a loss of its own (both countries):

    • Call exercised: you bought shares. The option's cost raises the cost of those shares.
    • Put exercised: you sold shares. The option's cost lowers the proceeds of that sale.

    Example: you buy a $10 call for $3 ($300 for one contract) and exercise it: 100 shares at $10. Your cost is $1,000 + $300 = $1,300. Sell them next year at $15 and the gain is $200, in that year.

    The share trade is found the same way as for an assignment (a buy for a call, a sale for a put); if there is none, the export flags it and the option's cost is not applied.

    Currency conversion

    A Canadian report adds up CAD amounts; a US report adds up USD amounts. Once your workspace is multi-currency, every trade and dividend is stored in both, converted at the Bank of Canada daily rate for its own date (the closest earlier business day when there's no rate that day). If everything you hold is in USD, a US report needs nothing more; running a Canadian report makes the workspace multi-currency first, once (see When the app starts converting).

    Because the rate moves, one sale can be a gain in one currency and a loss in the other. Example: you buy a US stock for US$1,000 when US$1 = C$1.40 (C$1,400) and sell it for US$1,050 when US$1 = C$1.30 (C$1,365). That's a US$50 gain but a C$35 loss. The report uses the currency you file in. See Currencies for more.

    Transfers and journals

    Moving shares between accounts (a transfer) or between a stock's US and Canadian listings (a journal, as in Norbert's Gambit) is not a sale. The app carries the original cost to the new account and taxes the shares only when they are really sold. Transfers in the period are listed on the Transfer Audit sheet of the export. See Transfers.

    Stock splits

    A split doesn't change what you paid or what you got, so it never changes a past year's result. The export shows the number of shares as you sold them (what your broker's slip shows), even if the stock split later.

    Unknown cost basis and trades the report skips

    The report only counts what it can price.

    • Unknown cost basis: shares that arrived by transfer without their original purchase (for example, history from the old broker was never imported), or a sale with no purchase on file. These positions are left out of the totals and listed under Positions left out on the results page (ticker, account, dates, quantity, why, and what to do), and under Unresolvable Groups in the export. A call written on such shares keeps its own premium; their dividends are still taxed. Import the older statements to fix them.
    • Trades in no group: buys or sales that aren't matched (Data Quality lists them as unallocated) or pieces you unmerged by hand. They are not counted, and the export lists them so you can fix them.

    See Data issues and Find and fix data issues.

    What's in the Excel export

    The Export button on the results page downloads an Excel file. Sheets marked "if any" only appear when there is something to show.

    SheetWhat it holds
    Income BreakdownDividends and gains by category (one column per account when you picked several)
    Tax BreakdownTax on base income, dividends and gains, the dividend tax credit (Canada), the foreign tax credit, and the total
    Tax LotsOne row per lot (a purchase and the sale that closed it): account, dates, quantity, cost, proceeds, gain, days held, wash sale / superficial loss amounts, notes
    DividendsEvery dividend payment counted; how each was taxed (Canada: Taxed As; US: Qualified)
    Per-Ticker StatsTotal gain or loss, number of sales, wins and losses, average days held, per ticker, in the report's currency
    Superficial Losses / Wash SalesEach loss that was disallowed and its replacement shares (if any)
    Transfer AuditTransfers between accounts and their cost per share (if any)
    Unresolvable GroupsPositions left out and what to do about them (if any)
    Notes & FlagsItems to review with your accountant (if any)
    Foreign TaxTax withheld on dividends, the dividends it's set against, the part above 15% (Canada) and the credit (if any)
    NotesWhat the estimate leaves out (see Simplifications)
    CommissionsCommissions per account and ticker, for information (if any)
    Broker ComparisonYour broker's numbers next to the app's, when you uploaded broker tax files (if any)

    Simplifications

    The estimate leaves out:

    • State and provincial tax.
    • Deductions and credits (the brackets apply directly to the base income you enter), alternative minimum tax (AMT) and the net investment income tax (NIIT).
    • Losses carried over from earlier years.
    • Qualified dividends in the US from brokers that don't label them: taxed like regular income (see Qualified dividends).
    • Non-eligible dividends from Canadian private companies: listed Canadian companies' dividends are treated as eligible (see Dividends).
    • Foreign tax the broker doesn't report as withheld, Canada's provincial foreign tax credit, and the deduction for withholding above 15% (see Foreign tax credit).
    • A quarter uses the full-year brackets.

    The results page's Disclaimer and the export's Notes sheet list the same points.

    For a step-by-step walk-through, see Run a tax report.