What it does
It compares two paths over your mortgage term: buying a home, versus renting and investing the money you would have spent on ownership. Both people spend the same amount each month, so it is an apples-to-apples comparison. The headline is each path’s projected after-tax net worth at the end of the term, and the year (if any) when one overtakes the other.
How the comparison is kept fair
- Matched cash flows. The buyer pays mortgage P&I, property tax, insurance, condo fees and maintenance. In the early years ownership usually costs more than rent, so the renter invests the difference. After the “crossover” year — when rising rent passes the (largely fixed) ownership cost — the owner invests the difference instead.
- Up-front cash. The renter also invests what the buyer sank into the down payment and closing costs, so neither side gets a free head start.
- One lump at the end. Net worth = the owner’s home equity (net of selling costs) plus their side investments, versus the renter’s portfolio — each taxed appropriately (below).
The buying side
- Mortgage: fixed-rate, fully amortizing over the term (monthly P&I).
- Home value: grows at a regional appreciation rate.
- Carrying costs: property tax (grows yearly), insurance, condo/HOA fees, and maintenance as a % of the home’s value.
- CMHC insurance when the down payment is under 20% (premium financed into the loan; PST on it paid up front; homes over $1.5M can’t be insured).
The renting + investing side
The comparable rent is estimated from your home’s price within its region, not a flat regional average: each region has a benchmark price/rent pair, and we scale the rent by your price using a sub-linear price-to-rent relationship (rent ≈ price0.7), so a pricier home rents for more and a cheaper one for less — but gross rental yields fall as price rises, as they do in reality. That rent then grows each year. Whatever the renter saves versus owning is invested in a broad stock index at a long-run nominal return (dividends included). The owner does the same with any surplus after crossover. (Power users can still override the rent with the slider.)
Tax layer
- Registered accounts: your age sets cumulative TFSA room; your income sets annual RRSP room and your marginal rate. The “shelter-first” strategy fills TFSA, then RRSP, then a taxable account; RRSP refunds are reinvested and withdrawals taxed at a lower retirement rate.
- Capital gains on the taxable portion use the 50% inclusion rate.
- Principal-residence exemption: the home’s own gain is tax-free on sale, so only the side investments are taxed.
Transaction costs
At purchase: province-correct land-transfer tax — Ontario (plus Toronto’s municipal LTT inside the city), BC’s Property Transfer Tax, Manitoba’s LTT, Québec transfer duties (with Montréal’s luxury tiers), the Atlantic deed taxes, and the nominal land-title fees in Alberta and Saskatchewan (which levy no LTT) — plus legal/inspection fees, with first-time-buyer rebates where applicable. At sale: ~5% realtor commission + HST + legal. The buyer’s up-front costs are credited to the renter’s invested lump to keep things fair.
GST/HST on new construction. Resale homes are GST/HST-exempt, so this only applies when you mark the home as a new build. A new home owes 5% federal GST (everywhere), plus the provincial HST portion in HST provinces. New-housing rebates claw a chunk back: the federal rebate (36% of GST, fully phased out by $450k); the 2025 first-time-buyer GST rebate (up to 100% of the GST on a new home ≤$1M, phasing out by $1.5M); and Ontario’s provincial rebate (75% of the 8% portion, capped at $24,000). Only Ontario’s provincial rebate is modelled — BC/AB/SK/MB are GST-only (so the 5% layer is exact), while Québec (QST) and the Atlantic HST provinces model only the federal 5% (their provincial rebates are out of scope).
Ontario 2026 temporary rebate (opt-in). For purchase agreements signed between April 1, 2026 and March 31, 2027, Ontario rebates the full 13% HST on a new build to all buyers (not just first-time): 100% up to $1M (so $0 tax), a flat $130,000 from $1M–$1.5M, declining to $24,000 by $1.85M. Tick “Ontario 2026 HST rebate” on a new build to apply it (Ontario postal codes only). It is off by default because it is a time-limited program.
Where the numbers come from
Regional assumptions are matched to your postal code: researched values for Toronto/North York and 10 Ontario CMAs (Ottawa, Hamilton, Kitchener–Waterloo, London, Windsor, Oshawa, Barrie, Kingston, Guelph, St. Catharines–Niagara) and an Ontario-wide tier. All ten provinces route to a province-correct tier (with metro tiers for Vancouver, Calgary, Edmonton, Montréal, Winnipeg, and Halifax); the territories use a national fallback. The 5-year mortgage rate is live from the Bank of Canada (cached, with an offline fallback). Anything regional can be overridden on the form. Note: outside Ontario the land-transfer/property-tax rules and rates, benchmark prices, and rents are data-grounded (WOWA 2025 / CREA / CMHC); only the long-run appreciation is a forward-sustainable estimate.
Market & regional data (evaluator/data.py)
- property tax: https://www.toronto.ca/services-payments/property-taxes-utilities/property-tax/property-tax-rates-and-fees/
- mortgage rates: https://www.ratehub.ca/best-mortgage-rates/5-year/fixed ; Statcan 34-10-0145-01
- appreciation: https://rates.ca/resources/toronto-home-prices-20-years-growth ; TRREB market data
- rent: https://www.zumper.com/rent-research/toronto-on ; CMHC HMIP rental tables
- sp500: https://www.slickcharts.com/sp500/returns ; https://www.macrotrends.net/2526/sp-500-historical-annual-returns
- ontario appreciation: Teranet-National Bank HPI (Ontario CMAs) ; StatCan New Housing Price Index
- ontario rent: CMHC Housing Market Information Portal (Ontario CMAs)
- ontario property tax: Municipal residential rate tables (MPAC assessed) ; rates vary by municipality
- ontario cma property tax: Per-city 2025 total residential rates: wowa.ca/taxes/<city>-property-tax + city by-laws (re-verify annually)
- ontario cma rent: Blended SFH/3-bed asking rents: rentals.ca, zumper.com/rent-research/<city>-on, CMHC HMIP
- ontario cma appreciation: Per-region forward-sustainable rate derived from long-run HPI (see appreciation_methodology); anchors + confidence are inline beside each region's home_appreciation_rate.
- teranet nb hpi: Teranet-National Bank House Price Index, composite-11 + extended CMAs, base June 2005=100 -- https://housepriceindex.ca/ (index history & monthly reports)
- crea mls hpi: CREA MLS Home Price Index / benchmark price, by board -- https://www.crea.ca/housing-market-stats/mls-home-price-index/hpi-tool/ ; board series at https://creastats.crea.ca/
- trreb hpi: TRREB MLS HPI (Toronto/Durham/Oshawa) -- https://trreb.ca/market-data/mls-home-price-index/
- kwar hpi: Kitchener-Waterloo Assoc. of REALTORS HPI dashboard -- https://kwar.ca/hpi-dashboard/
- statcan nhpi: Statistics Canada, New Housing Price Index, table 18-10-0205 -- https://www150.statcan.gc.ca/t1/tbl1/en/tv.action?pid=1810020501
- nhpi crosscheck: Cross-check (2026-06-30): the per-region forward rates were sanity-checked against actual StatCan NHPI CAGRs computed from table 18-10-0205 (Total house+land, 2005-01 -> 2026-05): Toronto 2.2%, Ottawa 3.3%, Kitchener-Waterloo 3.1%, London 2.9%, Windsor 2.0%, St. Catharines-Niagara 2.3%, Ontario 2.5%, Canada 2.6% (Barrie & Kingston not in NHPI). NHPI measures NEW-build contractor prices and is quality-controlled, so it structurally UNDERSTATES the resale appreciation an owner realizes (Teranet/CREA resale ran ~6-8% over the same window) -- it is a FLOOR, not the modelling basis. The forward rates (3.75-4.50%) sit sensibly above this quality-controlled floor and below the un-repeatable resale boom CAGRs.
- teranet nbc report: National Bank of Canada, Teranet-NB HPI monthly economic note -- https://www.nbc.ca/ (economic-news-teranet)
- appreciation methodology: Forward rates were derived from each market's long-run Teranet-NB HPI and CREA MLS HPI benchmark history (June-2005=100 base, 2005-2024): take the boom-era CAGR (2005-2022) and the full-window CAGR, then apply a downward forward-sustainability haircut for a 20-30yr horizon reflecting the affordability ceiling, mortgage-rate normalization, softer immigration/demographics, and supply elasticity (larger haircut where land is abundant, smaller where constrained). Rounded to the nearest 0.0025, kept within a defensible ~3.75-4.50% band (~1-2% above expected inflation). Smaller CMAs (KW, London, Windsor, Oshawa, Barrie, Kingston, Guelph, St. Catharines-Niagara) rely on CREA board benchmarks rather than the core Teranet-11 -> lower confidence (flagged inline). Verified 2026-06-30; all markets were mid-correction at that time, so these are mid-cycle trend assumptions, not near-term forecasts.
- live mortgage rate: Bank of Canada Valet API series BD.CDN.5YR.DQ.YLD (5yr GoC benchmark yield) + lender spread
- rent from price: Rent scaled from each region's benchmark price/rent pair via a sub-linear price-to-rent elasticity (rent ~ price^0.7); gross yields fall as price rises.
- province coverage: Phase 3 (2026-07-01): all ten provinces now route to a province-correct tier by postal first-letter (V=BC, T=AB, S=SK, R=MB, G/H/J=QC, A/B/C/E=Atlantic; K/L/M/N/P=ON), with metro overrides for Vancouver, Calgary, Edmonton, Montreal, Winnipeg, and Halifax. Each tier carries a province-correct ltt_region so land-transfer tax (BC PTT, MB LTT, QC/Montreal welcome tax, AB/SK title fees, NS/NB/PE/NL deed taxes) and the CMHC-premium PST use the right provincial rules. The non-Ontario tiers were scraper-grounded (2026-07-01): property_tax_rate = each city's WOWA 2025 final residential rate (Winnipeg/Saskatoon/Regina converted from portioned assessment to effective-on-market); benchmark_price = current CREA/board detached benchmarks; rent = CMHC HMIP + Rentals.ca/Zumper. Appreciation stays a forward-sustainable estimate (boom CAGR minus haircut) since per-city Teranet index levels are not fetch-extractable; confidence is flagged inline (Manitoba/NS-ex-Halifax/PEI/NL are lowest).
- province metro data: Non-Ontario property-tax rates: wowa.ca/taxes/<city>-property-tax (2025 finals, cities: vancouver, surrey, victoria, calgary, edmonton, winnipeg, saskatoon, regina, montreal, quebeccity, halifax, moncton, charlottetown, stjohns). Benchmarks/prices: CREA MLS HPI + boards (REBGV gvrealtors.ca/market-watch, Saskatchewan stats.crea.ca/board/sra, NL/NB creastats.crea.ca) + Royal LePage quarterly reports. Rents: CMHC HMIP (www03.cmhc-schl.gc.ca/hmip-pimh) + Rentals.ca/Zumper 2025-26.
- address geocoding: Optional 'find by address' form helper geocodes a typed address to its Canadian postal code via OpenStreetMap Nominatim (https://nominatim.org/); only the postal code is used, to route regional assumptions. Cached, with graceful fallback to manual postal entry. See evaluator/geocode.py.
- province ltt: Land-transfer/property-transfer tax rules per province (see evaluator/tax.py SOURCES): BC Property Transfer Tax; Manitoba LTT; Quebec transfer duties + Ville de Montreal luxury tiers; Nova Scotia (Halifax 1.5%), New Brunswick 1%, PEI 1%, Newfoundland ~0.4%; Alberta & Saskatchewan levy no LTT (nominal land-title registration fees).
Tax, insurance & transaction costs (evaluator/tax.py)
Key assumptions
- Rates (appreciation, rent growth, returns) are long-run averages applied smoothly — the real world is volatile and path-dependent.
- By default one rate applies for the whole amortization; tick “Model 5-year renewals” to renew at a chosen rate every 5 years (Canadian style) — the payment resets on the remaining balance at each renewal.
- Insurance and condo fees grow ~3%/yr (not held flat), like the property-tax bill.
- Rent for a comparable home is a single figure, not a range.
- Figures are in future (nominal) dollars by default; tick “Show in today’s dollars” in the what-if panel to deflate everything to present-day purchasing power (default 2%/yr inflation). It never changes the verdict — both sides are deflated by the same factor — it just makes the magnitudes intuitive.
- The charts use one steady rate per assumption; “Run simulation” (Monte Carlo) instead draws hundreds of futures with appreciation and returns that vary year to year, reporting how often buying wins and the range of outcomes.
Testing how sure the verdict is (Monte Carlo)
The headline verdict is a single most-likely path. The Monte Carlo panel on the results page stress-tests it: it runs the full model hundreds of times, each with home appreciation and investment returns drawn randomly (and mildly correlated) around their averages, varying year by year so the order of good and bad years matters (sequence-of-returns risk). The result is a probability that buying ends ahead, a net-worth fan chart (10th–90th percentile band around the median), and a histogram of the final gap. A band that straddles $0 means the verdict is genuinely uncertain. Because both paths scale together, that probability is unaffected by the today’s-dollars toggle.
What it deliberately leaves out
- Horizon: the comparison runs to the end of the mortgage term. A renter could of course buy later; net worth at the term end is a complete snapshot, so terminal value / imputed rent beyond the term is out of scope.
- The charts themselves use a single average return; volatility and sequence-of-returns risk are explored separately by the sensitivity heatmap and the Monte Carlo panel.
- Lifestyle factors, mobility, maintenance effort, and non-financial value.
- Per-city Teranet index reads for the non-Ontario provinces (appreciation there is a forward-sustainable estimate; the LTT, property-tax, benchmark, and rent figures are grounded).
See knowledge/METHODOLOGY_GAPS.md in the repository for the detailed list of modelling gaps and decisions.