Canadian building-permit construction intelligence (monthly)
Monthly building-permit construction intelligence for Canada and the 13 provinces/territories (Statistics Canada table 34-10-0292-01, seasonally adjusted): total/residential/non-residential/multi-family permit values in millions of CAD plus new dwelling-unit counts, with MoM and YoY momentum, 3-month annualized growth, residential share, 12-month record-high and surge/slump flags, and a documented 0-100 construction-momentum score ranked per month (m1 strong .. m4 weak). Trailing 36 complete months. Statistics Canada Open Licence (commercial reuse allowed); source: Statistics Canada.
- Rows
- 504
- Columns
- 27
- Source cadence
- Monthly
- Last refreshed
- Sep 26, 2026
- Theme
- economy
| Column | Type | Description |
|---|---|---|
| geo_name | string | English geography name (Canada + 13 provinces/territories). |
| geo_code | string | StatCan 2-letter geography code (CAN for Canada). |
| country_code | string | ISO alpha-3 country code (CAN for all rows). |
| month | string | Reference month, first day of month (ISO date). |
| as_of | string | Last complete month in the snapshot (pinned for idempotent re-runs). |
| value_total_mcad | float | Total value of building permits, seasonally adjusted. (unit: millions of CAD) |
| value_residential_mcad | float | Residential building-permit value, seasonally adjusted. (unit: millions of CAD) |
| value_nonresidential_mcad | float | Non-residential building-permit value, seasonally adjusted. (unit: millions of CAD) |
| value_multiple_mcad | float | Multiple-dwelling residential building-permit value, seasonally adjusted. (unit: millions of CAD) |
| dwellings_total | float | Number of new dwelling units, seasonally adjusted. (unit: units) |
| mom_pct_total | float | Month-over-month percent change of total permit value. (unit: percent) |
| yoy_pct_total | float | Year-over-year percent change of total permit value. (unit: percent) |
| yoy_pct_residential | float | Year-over-year percent change of residential permit value. (unit: percent) |
| yoy_pct_nonresidential | float | Year-over-year percent change of non-residential permit value. (unit: percent) |
| yoy_pct_multiple | float | Year-over-year percent change of multiple-dwelling permit value. (unit: percent) |
| yoy_pct_dwellings | float | Year-over-year percent change of dwelling-unit counts. (unit: percent) |
| mom_3m_ann_total | float | 3-month change in total permit value, annualized. (unit: percent per year) |
| residential_share_pct | float | Residential value as a share of total permit value. (unit: percent) |
| record_high_12m | boolean | True when total permit value is the trailing-12-month maximum. |
| surge_flag | boolean | True when total permit value rose >= 10% month-over-month. |
| slump_flag | boolean | True when total permit value fell >= 10% month-over-month. |
| residential_led | boolean | True when residential share >= 60% of total value. |
| momentum_score | string | 0-100 construction-momentum score: 100*(0.45*min-max YoY total value + 0.30*min-max 3-month annualized total + 0.25*min-max YoY dwelling units), each component winsorized (+/-100%, +/-60%, +/-100%) and min-max normalized across geographies within the month; 50 when degenerate. Null when any component is unavailable for that geography-month. (unit: score) |
| momentum_rank | string | Per-month momentum rank across geographies (1 = strongest); deterministic tie-breaks on total value then geography name. Null when the score is null. |
| momentum_tier | string | m1 strong (>=70) / m2 firm (>=45) / m3 soft (>=20) / m4 weak (<20); null when the score is null. |
| row_hash | string | SHA-256 (truncated) of the row's content fields. |
| source_retrieved | string | Source data vintage: latest reference month present in the retrieved vectors (content-pinned so identical re-fetches hash identically). |
First 10 sample rows — a preview, not the complete dataset.
| geo_name | geo_code | country_code | month | as_of | value_total_mcad | value_residential_mcad | value_nonresidential_mcad | value_multiple_mcad | dwellings_total | mom_pct_total | yoy_pct_total | yoy_pct_residential | yoy_pct_nonresidential | yoy_pct_multiple | yoy_pct_dwellings | mom_3m_ann_total | residential_share_pct | record_high_12m | surge_flag | slump_flag | residential_led | momentum_score | momentum_rank | momentum_tier | row_hash | source_retrieved |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Saskatchewan | SK | CAN | 2023-08-01 | 2026-07-01 | 256.817 | 119.879 | 136.939 | 64.479 | 491 | 63.879 | 76.596 | 63.181 | 90.293 | 371.062 | 125.229 | 27.798 | 46.679 | true | true | false | false | 91.95 | 1 | m1 | 4e55b3606e9beed5 | 2026-07-01 |
| New Brunswick | NB | CAN | 2023-08-01 | 2026-07-01 | 192.251 | 119.592 | 72.66 | 69.067 | 538 | 15.292 | 63.573 | 45.677 | 105.034 | 85.008 | 31.22 | 129.977 | 62.206 | true | true | false | true | 88.02 | 2 | m1 | f04333a806220e94 | 2026-07-01 |
| Nova Scotia | NS | CAN | 2023-08-01 | 2026-07-01 | 308.327 | 203.523 | 104.804 | 109.545 | 850 | 3.371 | 40.475 | 20.441 | 107.5 | 32.345 | 20.226 | 229.214 | 66.009 | true | false | false | true | 80.64 | 3 | m1 | 9cd4b01572fa470a | 2026-07-01 |
| Manitoba | MB | CAN | 2023-08-01 | 2026-07-01 | 393.394 | 216.614 | 176.781 | 128.1 | 645 | -1.616 | 18.148 | 21.63 | 14.145 | 95.997 | 18.785 | 525.797 | 55.063 | false | false | false | false | 74.65 | 4 | m1 | f3c73b46367c35e8 | 2026-07-01 |
| Newfoundland and Labrador | NL | CAN | 2023-08-01 | 2026-07-01 | 43.949 | 28.961 | 14.987 | 8.944 | 103 | 15.677 | 1.102 | 18.761 | -21.468 | 90.948 | 5.102 | 310.552 | 65.897 | false | true | false | true | 68.51 | 5 | m2 | a2ba79a943e34e58 | 2026-07-01 |
| Alberta | AB | CAN | 2023-08-01 | 2026-07-01 | 1,331.811 | 928.185 | 403.626 | 443.738 | 3,635 | 6.319 | 0.064 | 0.621 | -1.195 | 13.134 | 3.15 | 13.363 | 69.693 | false | false | false | true | 56.34 | 6 | m2 | 8015d4a510dd302b | 2026-07-01 |
| British Columbia | BC | CAN | 2023-08-01 | 2026-07-01 | 2,022.652 | 1,101.238 | 921.414 | 814.443 | 2,869 | 18.361 | -3.725 | -32.688 | 98.201 | -37.165 | -46.564 | 38.86 | 54.445 | false | true | false | false | 55.52 | 7 | m2 | 7f599689a3b4e434 | 2026-07-01 |
| Ontario | ON | CAN | 2023-08-01 | 2026-07-01 | 5,010.404 | 3,047.275 | 1,963.129 | 1,775.791 | 8,164 | -1.581 | -10.478 | -19.665 | 8.841 | -19.776 | -17.61 | 30.22 | 60.819 | false | false | false | true | 55.22 | 8 | m2 | dac27b4181bd3c85 | 2026-07-01 |
| Canada | CAN | CAN | 2023-08-01 | 2026-07-01 | 11,658.188 | 6,933.438 | 4,724.75 | 4,096.655 | 20,732 | 0.676 | -3.948 | -15.445 | 19.998 | -14.843 | -18.175 | 20.89 | 59.473 | false | false | false | false | 54.51 | 9 | m2 | 8311218ec5620089 | 2026-07-01 |
| Yukon | YT | CAN | 2023-08-01 | 2026-07-01 | 12.705 | 2.142 | 10.563 | 0.076 | 12 | -74.714 | 35.868 | -60.891 | 172.664 | -97.306 | -42.857 | -48.326 | 16.86 | false | false | true | false | 44.47 | 10 | m3 | 5b20c9471f461643 | 2026-07-01 |
Profiled Sep 26, 2026 from snapshot 20260926T041504Z-d1e04f2fa27e
Measured- Completeness
- 99.7%
- Rows
- 504
- Columns
- 27
- Columns with gaps
- 6
| Column | Missing | Distinct | Range | Distribution |
|---|---|---|---|---|
| geo_namevarchar | 0% | 15 | — |
|
| geo_codevarchar | 0% | 13 | — |
|
| country_codevarchar | 0% | 1 | — |
|
| monthvarchar | 0% | 33 | — |
|
| as_ofvarchar | 0% | 1 | — |
|
| value_total_mcaddouble | 0% | 444 | 0 → 14,748median 281.22 | 12 outside 1st–99th percentile |
| value_residential_mcaddouble | 0% | 528 | 0 → 8,917median 157.43 | 12 outside 1st–99th percentile |
| value_nonresidential_mcaddouble | 0% | 436 | 0 → 6,838median 105.09 | 12 outside 1st–99th percentile |
| value_multiple_mcaddouble | 0% | 513 | 0 → 6,080median 83.53 | 6 outside 1st–99th percentile |
| dwellings_totaldouble | 0% | 457 | 0 → 28,640median 637 | 6 outside 1st–99th percentile |
| mom_pct_totaldouble | 0% | 457 | -100 → 3,483median -0.0027 | 12 outside 1st–99th percentile |
| yoy_pct_totaldouble | 0% | 628 | -100 → 25,796median 9.58 | 12 outside 1st–99th percentile |
| yoy_pct_residentialdouble | 0% | 571 | -100 → 23,875median 10.96 | 12 outside 1st–99th percentile |
| yoy_pct_nonresidentialdouble | 0% | 583 | -100 → 55,320median 11.97 | 11 outside 1st–99th percentile |
| yoy_pct_multipledouble | 0.4% | 537 | -100 → 92,853median 14.23 | 5 outside 1st–99th percentile |
| yoy_pct_dwellingsdouble | 1.8% | 403 | -100 → 22,200median 8.85 | 5 outside 1st–99th percentile |
| mom_3m_ann_totaldouble | 0% | 481 | -100 → 605,537,004median 7.2 | 12 outside 1st–99th percentile |
| residential_share_pctdouble | 0.2% | 513 | 0 → 100median 62.53 | 12 outside 1st–99th percentile |
| record_high_12mboolean | 0% | 2 | — |
|
| surge_flagboolean | 0% | 2 | — |
|
| slump_flagboolean | 0% | 2 | — |
|
| residential_ledboolean | 0% | 2 | — |
|
| momentum_scoredouble | 1.8% | 394 | 0 → 100median 52.05 | |
| momentum_rankbigint | 1.8% | 16 | 1 → 14median 7 | |
| momentum_tiervarchar | 1.8% | 4 | — |
|
| row_hashvarchar | 0% | 493 | — |
|
| source_retrievedvarchar | 0% | 1 | — |
|
- Current
20260926T041504Z-d1e04f2fa27e · sha256 d1e04f2fa27e…
504 rows · first snapshot
Point any LLM at the metadata endpoint — the documentation above is machine-readable too (JSON-LD + Croissant).
curl "https://datazimuts.com/v1/datasets/statcan_permit_signals/permit_construction_intel_monthly" | jq '{title, rows, columns_count, license}'import requests
ds = requests.get("https://datazimuts.com/v1/datasets/statcan_permit_signals/permit_construction_intel_monthly").json()
print(ds["title"], ds["rows"], "rows")
# Sample rows for an LLM context window
for row in ds.get("sample_rows", [])[:5]:
print(row)API endpoint: https://datazimuts.com/v1/datasets/statcan_permit_signals/permit_construction_intel_monthly
Tip: fetch /llms.txt for the full machine-readable catalog.
Where this data comes from and what was made from it. Other people's work shows as counts; only shared projects are named.
Cite this snapshot
Pinned to snapshot 20260926T041504Z-d1e04f2fa27e and its content hash, so readers get exactly the data you used.
Statistics Canada building-permit construction intelligence. (2026). Canadian building-permit construction intelligence (monthly) [Data set, snapshot 20260926T041504Z-d1e04f2fa27e, sha256 d1e04f2fa27e]. Datazimuts. Retrieved 2026-09-26, from https://datazimuts.com/en/datasets/statcan_permit_signals/permit_construction_intel_monthly?snapshot=20260926T041504Z-d1e04f2fa27e
@misc{dz_statcan_permit_signals_permit_constructi_d1e04f2f,
title = {{Canadian building-permit construction intelligence (monthly)}},
author = {{Statistics Canada building-permit construction intelligence}},
year = {2026},
publisher = {Datazimuts},
howpublished = {\url{https://datazimuts.com/en/datasets/statcan_permit_signals/permit_construction_intel_monthly?snapshot=20260926T041504Z-d1e04f2fa27e}},
note = {Snapshot 20260926T041504Z-d1e04f2fa27e, sha256 d1e04f2fa27e8811b82c5fea0999a98b2c5ccb223f26c1ac3d4f8d23f2c5fec8; accessed 2026-09-26}
}Embed a table or a chart
Paste this into any page. The embed is pinned to the same snapshot, follows the reader's light or dark setting, and always shows the source, license and a link back.
<iframe src="https://datazimuts.com/embed/chart?dataset=statcan_permit_signals%2Fpermit_construction_intel_monthly&lang=en&theme=auto&snapshot=20260926T041504Z-d1e04f2fa27e&x=geo_name&y=value_total_mcad&agg=avg" title="Canadian building-permit construction intelligence (monthly)" width="100%" height="380" style="border:0" loading="lazy"></iframe>
Ask about this dataset. Answers come only from its catalog record, measured profile and change history, and list the facts they used.