Methodology · last revised 6 August 2026
Where these numbers come from
Every figure on this site traces to a municipal building permit. No surveys, no "industry averages", no numbers supplied by contractors who want your business.
The source
We use the City of Toronto's Active Building Permits dataset, published through the city's open data portal. It holds 209,454 permit records. Each record includes the type of work, a free-text description, the month it was issued, the first three characters of the postal code, and a declared construction value.
We refresh from the portal weekly. The date at the foot of every cost page is the last permit we ingested, not the day the page was published.
Toronto also publishes a larger "Cleared Permits" file with 428,473 records. We do not use it. Its construction-value field is populated on roughly 2% of rows, and almost exclusively for drain permits. Reporting a median from it would be arithmetic performed on absence.
How a permit becomes a number
- Match the workEach permit's description and work-type text is tested against hand-written patterns for a specific job. A permit reading "underpin existing basement, lower slab 2ft" matches underpinning. One reading "demolish existing dwelling, construct new 3 storey" does not, even though it contains the word, because it is a whole house.
- Discard implausible valuesDeclared values below $500 are clerical placeholders. Values above the job's plausible ceiling are decimal-place typos. Both are dropped before anything is calculated.
- Remove statistical outliersWe apply Tukey fences at 1.5× the interquartile range. A single mistyped $4,000,000 deck would otherwise drag a mean into fiction.
- Refuse to publish thin dataA job and city combination is only published when at least 30 permits survive the steps above, spread across at least 6 separate months. Combinations that fail are not published as a page with a caveat. They are not published at all.
- Show the distribution, not a rangeWe report the 10th, 25th, 50th, 75th and 90th percentiles and draw the full shape. Renovation costs are right-skewed, so an average is misleading and a min-to-max range is close to meaningless.
What a declared value does not include
This is the most important limitation on the site and we would rather you learned it here than after a quote surprised you. The declared construction value is what the applicant stated when filing. It excludes:
- City permit and application fees
- Structural engineering and architectural drawings
- Cost overruns discovered after work began, which in underpinning are common
- Finishing work that follows, such as framing, drywall and flooring
- HST
It is also self-reported and unaudited. Some applicants round down. Treat every figure here as the construction line of a budget, not the budget.
What we deliberately do not do
- We do not join permits back to street addresses. The city supplies both, but combining them would produce an address-level record of what identifiable households spent on their homes. We store only the first three postal characters and discard the rest at ingest.
- We do not let contractors edit the numbers. Contractors pay us for homeowner introductions. They have no access to the dataset, the methodology, or the pages.
- We do not publish a city we have no permit data for. If a page exists, the data behind it exists.
Corrections
If a figure looks wrong, tell us and include the page. We will re-run the query and either fix it or explain the derivation. Corrections are noted at the foot of the page with a date.