How OpenStats works

Methodology

How OpenStats Builds Rankings

OpenStats ranks Canadian cities from public data. Topic sites publish the municipal readings that feed those rankings. This page explains how data moves from source to city page to ranking.

OpenStats runs six topic sites, each covering one subject: building permits, property tax, indoor radon, drinking water quality, broadband availability, and natural hazards. Each topic site ingests public data on an automated schedule, normalizes it into a common per-municipality format, and publishes a dedicated page for every tracked city. Those readings feed OpenStats rankings on openstats.ca. This page describes the process shared across all six topics; each topic site also carries its own methodology notes specific to its subject.

City ranking history corpus

The hub also maintains a curated ranking corpus under studies. External commercial rankings are stored as newspaper-style citations (place, rank, year, publisher, source URL). OpenStats-owned lists (radon, permit value, mill rates) and open government tables may include full ranked rows. Hometown pages at /cities/ chart placements over time. The OpenStats City Score averages standing across OpenStats-owned rankings built from public data (radon, permit value, mill rates). External lists remain on hometown pages as separate published appearances.

Ingest

Ingest pipelines connect directly to the originating source for each dataset: a Statistics Canada table download, a federal agency CSV or GraphQL feed, a provincial open data portal, or a municipality's published water quality report. Each pipeline runs on a fixed schedule appropriate to how often the underlying source updates, records a timestamped audit entry noting the source table or feed, the record count returned, and any errors encountered, and writes results into a per-site data file before publication.

Where a source changes its format, moves its data behind a new endpoint, or temporarily fails to respond, the ingest step logs the failure rather than silently substituting stale or fabricated data. Pages that cannot be refreshed from a live source keep their most recent successfully ingested figures and are not updated until the next successful run.

Normalize

Raw source data rarely matches a municipality one-to-one. Statistics Canada geography codes, provincial administrative boundaries, and a city's common name do not always line up directly, so each pipeline maps source records to a fixed master list of Canadian municipalities using published geography codes, boundary files, or, where neither is available, nearest-match geographic proximity. Units are converted to a common basis (for example, mill rates expressed consistently per $1,000 of assessed value, or hardness expressed consistently in mg/L as calcium carbonate) so figures can be compared across municipalities and across topics without a reader needing to convert units themselves.

Data tiers

Not every dataset reports every municipality at the same level of geographic precision. Rather than hide that gap, every OpenStats city page states which data tier applies to the figures shown on it.

  • Direct. The figure is reported specifically for that municipality in the underlying source, or matched to it with high geographic confidence (for example, a hex grid cell or point dataset that falls clearly within the municipal boundary).
  • Regional proxy. The municipality is not separately broken out in the underlying source, so the page uses the nearest available broader geography, typically a census metropolitan area, regional health authority, or watershed, as the best available estimate. Regional proxy figures are labeled as such because they can understate or overstate the true municipal-level figure, particularly for smaller municipalities inside a large CMA.
  • Seed / fallback. Used only where no live source currently covers a municipality at all. Seed records are built from the most recent reliable published figure available at the time the page was created and are replaced by live data as soon as a pipeline covers that municipality directly. Seed-tier pages are excluded from monetization gating on Health/Money/Legal (YMYL) topics until upgraded to direct or regional-proxy status.

Refresh cadence

Refresh frequency follows how often each underlying source actually updates, not a fixed OpenStats schedule. Statistics Canada building permit tables update monthly with roughly a six-week publication lag; the ISED National Broadband Data map updates roughly twice a year; municipal water quality and property tax figures update on each municipality's own annual or fiscal-year reporting cycle; and hazard layers such as wildfire and seismic hazard update on the cadence set by Natural Resources Canada, ranging from near-real-time for active fire hotspots to multi-year for the seismic hazard model itself. Each city page reports the period the current figures cover so a reader can judge how current a given number is.

Limitations

OpenStats creates rankings from public data and publishes topic readings that cite those sources. It does not independently verify source accuracy or conduct its own field measurement. Errors present in an underlying source, such as a misclassified geography code in a federal table or an outdated figure in a municipal report, will carry through to the corresponding city page until the source itself is corrected and the next ingest run picks up the correction.

Geographic matching, particularly for regional-proxy and seed-tier pages, is an approximation and should not be treated as a precise measurement for any single address or property. Figures on health, financial, and legal topics such as radon, water quality, and property tax are provided for general informational and comparative purposes; decisions with material health or financial consequences should rely on direct testing, a licensed professional, or an official government determination specific to the property or situation in question, not solely on a city-level average published here.

Where a dataset is later found to contain a systemic error affecting many municipalities, the correction is applied at the next scheduled ingest run for that pipeline; OpenStats does not keep historical snapshots of a page as it appeared before a correction.

Related: Methodology · Data sources · All guides