Calgary’s downtown Free Fare Zone.
The 7 Avenue corridor where Calgary Transit has been free since 1981 is under active Council review. This page collects what’s actually been said and decided: the motion text, the City staff report, ridership counts, the full decision history since 1981, and the claims now circulating online — every number linked to the original document.
Annual ridership and system share
The Free Fare Zone’s annual ridership and the Calgary Transit system total it sits inside, from Open Calgary’s Calgary Transit Ridership dataset (iema-jbc4), summed by year from 2007 to the most recent year. The 2024 value — 9.8M on the FFZ column, 9.7%of the system — is also surfaced as a bento stat in the piece header above.
Free Fare Zone ridership · system total ridership · share % labels above each FFZ bar.
Hatched bars (2015–2019): estimate-fill plateau in the upstream dataset (identical 8,540,060 across all five years — not a measured year-over-year sequence). Striped bar (2025 partial year): January through Sep only; rendered honestly so a reader does not extrapolate it to a full year and excluded from the headline FeatureStat.
The 2024 share — 9.7%— is what the ‘loses money’ framing has to land against: the FFZ corridor is roughly one in ten trips on the system, and admin’s own up-to-$5M projected uplift is conditional on the 23%-would-pay survey response.
data · data.calgary.ca / iema-jbc4
Methodology
The series is the verbatim aggregate of two columns on dataset iema-jbc4 — free_fare_zone_ridership and ridership(the system total) — grouped by year and ordered by year, filtered to year>=2007. The verbatim SoQL is recorded in the artefact’s meta.derivation so it is re-runnable from the source URL below. Per-year ffz_share is computed once in scripts/transit/free_fare_zone/numbers.py at generate time as ffz_ridership / total_ridership so the rebuttal in claims.json reads from a single source of truth rather than re-implementing the division in TS prose.
The Socrata response envelope re-renders volatile keys per request even when the data is unchanged, so the source is hashed under hash_strategy: json-canonical — volatile top-level keys are dropped and the payload is serialised with sorted keys before hashing. A verify.py --refetch run that reports drift therefore measures real content change, not render noise.
Two–three upstream caveats are surfaced honestly rather than smoothed over: (1) 2015–2019 in the published dataset carry the identical FFZ value 8,540,060 across all five years — implausible as a measured year-over-year sequence, almost certainly a placeholder fill — so those bars are rendered with a hatched fill on the chart and flagged estimate_fill: true on their series rows. (2) The most recent year (2025) covers only 9 of 12 months at the time of retrieval; that row is rendered with a striped fill, flagged partial: true, and excluded from the headline FeatureStat so it does not jump downward each January. (3)The column’s unit is undocumented in the dataset’s column metadata — the most recent full-year total (9.8M) does not match the May 7 2026 IPC admin report’s “about 5.4 million trips per year” restatement, which likely reflects this column counting boardings rather than linked trips. The hero stat is labelled “ridership column · 2024” for that reason; readers should not promote it to a trips claim.