Canadian screened air-passenger intelligence (monthly)
Monthly Canadian screened air-passenger intelligence from Statistics Canada table 23-10-0312-01 (CATSA screened-passenger counts at Canada's eight largest airports, in plain units, 2019-01 onward): the national total plus Toronto Pearson, Montreal Trudeau, Vancouver, Calgary, Edmonton, Halifax Stanfield, Winnipeg Richardson and Ottawa Macdonald-Cartier, split into domestic, transborder and other-international sectors. Every series carries the same-month-2019 pre-pandemic anchor and a recovery ratio, year-over-year and month-over-month changes, the airport's share of the national total, the sector mix on airport-sector rows, a documented 0-100 recovery score min-maxed within each member-month across peer airports with ranks, a recovery band (at or above 2019, near, partial, depressed), record-high flags, and national context on every row. Exact identity gates hold wherever all inputs are published: total passengers equals the sum of the three sectors, total screened equals passengers plus non-passengers, and the national total equals the sum of the eight airports — all exact to the unit. Caveats: the latest month is provisional and may be revised; suppressed months at smaller airports are kept absent, never interpolated; screened counts differ slightly from airline enplanement statistics; recovery ratios anchor on 2019, a high-water mark for Canadian aviation. Provenance: Statistics Canada Web Data Service (keyless WDS), 54 curated vector ids verified unit-for-unit against the full-table CSV; Statistics Canada Open Licence (commercial reuse allowed; attribution required). Primary key: (member_code, airport_code, ref_month). Join keys: country_code (ISO 3166-1 alpha-3, always CAN), year, ref_month. Cadence: monthly.
- Source
- Statistics Canada
- Rows
- 4,837
- Columns
- 26
- Source cadence
- Monthly
- Last refreshed
- Sep 27, 2026
- Theme
- transport
| Column | Type | Description |
|---|---|---|
| ref_month | string | Reference month label (YYYY-MM). The panel covers 2019-01 onward — every month the publisher has released; the latest month is provisional and may be revised. |
| year | integer | Reference year. (unit: year) |
| month_num | integer | Month number within the year (1-12). (unit: month) |
| country_code | string | ISO alpha-3 country code (CAN for every row). (unit: ISO 3166-1 alpha-3) |
| member_code | string | Stable member code: total_screened (context), total_passengers (headline), domestic, transborder, other_intl (sectors), non_passengers (context). Primary join key with airport_code and ref_month. |
| member_name | string | Provider-verbatim member name from the StatCan table. |
| member_kind | string | Member kind: headline, sector or context. Only headline and sector rows carry a recovery score. |
| airport_code | string | Stable airport code: total (national headline) or yyz, yul, yvr, yyc, yeg, yhz, ywg, yow. Primary join key with member_code and ref_month. |
| airport_name | string | Airport display name. |
| province_code | string | Two-letter province code of the airport (on, qc, bc, ab, ns, mb); '--' for the national total. |
| is_headline | integer | 1 for the eight-airport national total, 0 for individual airports. The headline carries no recovery score or rank. (unit: binary) |
| passengers | float | Published screened count, kept verbatim (CATSA screened passengers / non-passengers). (unit: persons) |
| recovery_base | float | Same calendar month's 2019 count — the pre-pandemic anchor for the recovery ratio. (unit: persons) |
| recovery_ratio_pct | float | 100 * passengers / recovery_base: the traffic level versus the same month of 2019. Null when the 2019 anchor is missing or zero. (unit: percent) |
| yoy_pct | float | Year-over-year percent change (12-month lag). Null when the lag is missing or zero (e.g. all of 2019). (unit: percent) |
| mom_pct | float | Raw month-over-month percent change (1-month lag). Aviation is strongly seasonal: prefer yoy_pct or the 2019-anchored recovery ratio for like-for-like comparisons. (unit: percent) |
| airport_share_of_total_pct | float | The airport's share of the eight-airport national total for that member and month (the concentration lens). Null on the total rows. (unit: percent) |
| sector_mix_pct | float | The sector's share of that airport's total passengers that month (sector rows only). (unit: percent) |
| recovery_score | float | Documented 0-100 composite: 100 * min-max of recovery_ratio_pct within each (member, month) across the eight airports. Higher = the standout recovery versus peer airports that month. Degenerate months score 50.0 neutral. Null for context members, the total rows, and where the recovery ratio is null. (unit: 0-100 score) |
| recovery_rank | integer | Per-(member, month) rank of recovery_score across the scored airports (1 = strongest recovery). Null where the score is null. (unit: rank) |
| recovery_band | string | Recovery band from recovery_ratio_pct: at_or_above_2019 (>= 100), near_recovery (90-100), partial_recovery (70-90), depressed (< 70). Null where the ratio is null. |
| record_high_flag | integer | 1 when the month's count is the highest ever published for that (member, airport) over the full fetched span (2019-01 onward). (unit: binary) |
| national_passengers | float | Month-level context: the eight-airport total screened passengers for this month. (unit: persons) |
| national_recovery_ratio_pct | float | Month-level context: the eight-airport recovery ratio for this month. (unit: percent) |
| source_table | string | StatCan product ID behind the row (23100312). |
| row_hash | string | Deterministic 16-hex row hash of member_code + airport_code + ref_month (idempotency). |
First 10 sample rows — a preview, not the complete dataset.
| ref_month | year | month_num | country_code | member_code | member_name | member_kind | airport_code | airport_name | province_code | is_headline | passengers | recovery_base | recovery_ratio_pct | yoy_pct | mom_pct | airport_share_of_total_pct | sector_mix_pct | recovery_score | recovery_rank | recovery_band | record_high_flag | national_passengers | national_recovery_ratio_pct | source_table | row_hash |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | total | Total of eight largest airports, Canada | -- | 1 | 4,412,813 | 4,412,813 | 100 | — | — | — | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | da0d01eed0ee9f65 |
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | yyz | Toronto Pearson International | on | 0 | 1,608,410 | 1,608,410 | 100 | — | — | 36.449 | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | 74fae296530071ee |
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | yul | Montreal Trudeau International | qc | 0 | 691,340 | 691,340 | 100 | — | — | 15.667 | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | 266c56f9996101d1 |
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | yvr | Vancouver International | bc | 0 | 832,669 | 832,669 | 100 | — | — | 18.869 | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | 27d0d06dbc7974e2 |
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | yyc | Calgary International | ab | 0 | 499,917 | 499,917 | 100 | — | — | 11.329 | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | 9f59e09c6422f1d5 |
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | yeg | Edmonton International | ab | 0 | 289,016 | 289,016 | 100 | — | — | 6.549 | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | 84277140ef8c363f |
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | yhz | Halifax Stanfield International | ns | 0 | 106,232 | 106,232 | 100 | — | — | 2.407 | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | de61d4b4ed25848b |
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | ywg | Winnipeg Richardson International | mb | 0 | 179,058 | 179,058 | 100 | — | — | 4.058 | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | 4527cd80a49fd95a |
| 2019-01 | 2,019 | 1 | CAN | total_screened | Total screened traffic | context | yow | Ottawa Macdonald-Cartier International | on | 0 | 206,171 | 206,171 | 100 | — | — | 4.672 | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | bed94660e28d29a1 |
| 2019-01 | 2,019 | 1 | CAN | total_passengers | Total passengers | headline | total | Total of eight largest airports, Canada | -- | 1 | 4,329,693 | 4,329,693 | 100 | — | — | — | — | — | — | at_or_above_2019 | 0 | 4,329,693 | 100 | 23100312 | 3e4238b736504403 |
- Current
20260927T103950Z-f68a96012e8c · sha256 f68a96012e8c…
4,837 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_air_pax_intel/ca_screened_air_pax_monthly" | jq '{title, rows, columns_count, license}'import requests
ds = requests.get("https://datazimuts.com/v1/datasets/statcan_air_pax_intel/ca_screened_air_pax_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_air_pax_intel/ca_screened_air_pax_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 20260927T103950Z-f68a96012e8c and its content hash, so readers get exactly the data you used.
Statistics Canada. (2026). Canadian screened air-passenger intelligence (monthly) [Data set, snapshot 20260927T103950Z-f68a96012e8c, sha256 f68a96012e8c]. Datazimuts. Retrieved 2026-09-27, from https://datazimuts.com/en/datasets/statcan_air_pax_intel/ca_screened_air_pax_monthly?snapshot=20260927T103950Z-f68a96012e8c
@misc{dz_statcan_air_pax_intel_ca_screened_air_pa_f68a9601,
title = {{Canadian screened air-passenger intelligence (monthly)}},
author = {{Statistics Canada}},
year = {2026},
publisher = {Datazimuts},
howpublished = {\url{https://datazimuts.com/en/datasets/statcan_air_pax_intel/ca_screened_air_pax_monthly?snapshot=20260927T103950Z-f68a96012e8c}},
note = {Snapshot 20260927T103950Z-f68a96012e8c, sha256 f68a96012e8c309abba5595cd51eeade837a46f28a5bb647ab1060c3a61d094d; accessed 2026-09-27}
}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_air_pax_intel%2Fca_screened_air_pax_monthly&lang=en&theme=auto&snapshot=20260927T103950Z-f68a96012e8c&x=year&y=year&agg=avg" title="Canadian screened air-passenger 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.