2025 Canadian federal election: riding competitiveness
One-off riding-grain intelligence from the 45th Canadian general election (2025-04-28): all 343 federal electoral districts with the winner, victory margin in votes and share points, runner-up, a documented competitiveness tier (tossup <2pp, marginal 2-5, competitive 5-10, comfortable 10-15, safe >=15), the effective number of parties (1/sum(share^2)), turnout from official elector rolls (void and never-held polls excluded), an incumbent_hold flag, and the minor-party vote share. Built from the keyless Elections Canada poll-by-poll Format 2 ZIP (343 riding CSVs, one row per candidate per poll): votes are summed to parties through a closed affiliation vocabulary, rejected ballots and electors are counted once per distinct poll, and the winner is read from the official Elected indicator (exactly one per riding; asserted). Primary key: riding_number; join keys: riding_number, riding_name_en, province, election_date. Caveats: tiers and ENP describe the 2025 result, not a forecast; riding boundaries are the 2023 Representation Order; independents pool into one ENP bucket. Who joins this: a media team joins competitiveness + margin_pp to a riding watchlist on riding_number; a demographics team joins turnout_pct to riding demographics on riding_number or riding_name_en + province.
- Rows
- 343
- Columns
- 28
- Source cadence
- Yearly
- Last refreshed
- Sep 27, 2026
- Theme
- government
| Column | Type | Description |
|---|---|---|
| election_date | string | Election day of the 45th general election: 2025-04-28. Part of the join keys with riding_number. (unit: ISO date) |
| country_code | string | Always CAN (ISO alpha-3). (unit: ISO alpha-3) |
| riding_number | integer | Elections Canada 5-digit electoral district number. Primary key; the join key for riding-level data. (unit: code) |
| riding_name_en | string | Electoral district name (English), verbatim from Elections Canada. (unit: text) |
| riding_name_fr | string | Electoral district name (French), verbatim from Elections Canada. (unit: text) |
| province | string | Province/territory from the two-digit district prefix (verified against the official 2025 seat allocation). (unit: text) |
| valid_votes | integer | Total valid votes cast for candidates in the riding, summed over all polls. (unit: votes) |
| ballots_cast | integer | valid_votes + rejected_ballots. (unit: ballots) |
| rejected_ballots | integer | Rejected ballots, counted once per distinct poll. (unit: ballots) |
| total_electors | integer | Registered electors, summed once per distinct non-void, held poll. Void and never-held polls are excluded by design. (unit: electors) |
| turnout_pct | float | 100 * ballots_cast / total_electors. Official elector rolls as denominator. (unit: percent) |
| polls_reporting | integer | Distinct polling divisions that were held (excludes void and never-held polls). (unit: count) |
| num_candidates | integer | Distinct candidates on the riding ballot. (unit: count) |
| winner_party_short | string | Winner's party short code from the connector's closed vocabulary (LPC/CPC/NDP/BQ/GPC/PPC/IND/…). (unit: code) |
| winner_party | string | Winner's affiliation string verbatim from Elections Canada. (unit: text) |
| winner_candidate | string | Elected candidate's name ('First Family'). (unit: text) |
| winner_share | float | Winner's party share of valid votes. (unit: percent) |
| runnerup_party_short | string | Runner-up party short code (empty in a one-party riding). (unit: code) |
| runnerup_candidate | string | Leading candidate of the runner-up party. (unit: text) |
| runnerup_share | float | Runner-up party share of valid votes. (unit: percent) |
| margin_votes | integer | Winner's party votes minus runner-up party votes. (unit: votes) |
| margin_pp | float | winner_share minus runnerup_share, in percentage points. (unit: pp) |
| competitiveness | string | tossup (<2pp) / marginal [2,5) / competitive [5,10) / comfortable [10,15) / safe (>=15). Describes the 2025 result; not a forecast. (unit: tier) |
| enp | float | Effective number of parties = 1/sum(share^2) over the normalized affiliation buckets (independents pooled). (unit: index) |
| incumbent_hold | boolean | True when the elected candidate was the incumbent; False when the seat changed hands or no incumbent ran. (unit: boolean) |
| minor_party_share | float | Share of valid votes outside the six major parties (LPC/CPC/NDP/BQ/GPC/PPC). (unit: percent) |
| row_hash | string | Deterministic 16-hex content hash over (riding_number, winner_party_short, winner_votes, valid_votes, margin_votes, turnout_pct) — identical input yields an identical snapshot. (unit: hash) |
| data_as_of | string | UTC date the snapshot was built. (unit: ISO date) |
First 10 sample rows — a preview, not the complete dataset.
| election_date | country_code | riding_number | riding_name_en | riding_name_fr | province | valid_votes | ballots_cast | rejected_ballots | total_electors | turnout_pct | polls_reporting | num_candidates | winner_party_short | winner_party | winner_candidate | winner_share | runnerup_party_short | runnerup_candidate | runnerup_share | margin_votes | margin_pp | competitiveness | enp | incumbent_hold | minor_party_share | row_hash | data_as_of |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2025-04-28 | CAN | 10,001 | Avalon | Avalon | Newfoundland and Labrador | 47,030 | 47,419 | 389 | 70,859 | 66.92 | 227 | 4 | LPC | Liberal | Paul Connors | 58.61 | CPC | Steve Kent | 36.05 | 10,610 | 22.56 | safe | 2.102 | false | 0.49 | 3563226b91ab93d4 | 2026-09-27 |
| 2025-04-28 | CAN | 10,002 | Cape Spear | Cape Spear | Newfoundland and Labrador | 45,988 | 46,439 | 451 | 69,828 | 66.5 | 184 | 5 | LPC | Liberal | Tom Osborne | 68.25 | CPC | Corey Curtis | 25.75 | 19,544 | 42.5 | safe | 1.869 | false | 0.37 | dc5d97a6d99eb9dc | 2026-09-27 |
| 2025-04-28 | CAN | 10,003 | Central Newfoundland | Central Newfoundland | Newfoundland and Labrador | 40,636 | 41,128 | 492 | 64,095 | 64.17 | 254 | 3 | CPC | Conservative | Clifford Small | 54.08 | LPC | Lynette Powell | 43.55 | 4,279 | 10.53 | comfortable | 2.072 | true | 0 | e6e2ba3689a42a5e | 2026-09-27 |
| 2025-04-28 | CAN | 10,004 | Labrador | Labrador | Newfoundland and Labrador | 11,284 | 11,452 | 168 | 20,027 | 57.18 | 98 | 3 | LPC | Liberal | Philip Earle | 51.5 | CPC | Ella Wallace | 41.73 | 1,102 | 9.77 | competitive | 2.253 | false | 0 | ddd43c0139591c27 | 2026-09-27 |
| 2025-04-28 | CAN | 10,005 | Long Range Mountains | Long Range Mountains | Newfoundland and Labrador | 46,143 | 46,595 | 452 | 71,680 | 65 | 274 | 5 | CPC | Conservative | Carol Anstey | 50.35 | LPC | Don Bradshaw | 42.75 | 3,506 | 7.6 | competitive | 2.281 | false | 1.38 | 87d54eba2cc63a10 | 2026-09-27 |
| 2025-04-28 | CAN | 10,006 | St. John's East | St. John's-Est | Newfoundland and Labrador | 46,051 | 46,491 | 440 | 66,394 | 70.02 | 203 | 5 | LPC | Liberal | Joanne Thompson | 62.28 | CPC | David Brazil | 25.93 | 16,740 | 36.35 | safe | 2.138 | true | 0.21 | 5f7f191c37674c25 | 2026-09-27 |
| 2025-04-28 | CAN | 10,007 | Terra Nova--The Peninsulas | Terra Nova--Les Péninsules | Newfoundland and Labrador | 40,875 | 41,694 | 819 | 64,709 | 64.43 | 284 | 3 | CPC | Conservative | Jonathan Rowe | 47.96 | LPC | Anthony Germain | 47.93 | 12 | 0.03 | tossup | 2.167 | false | 0 | 1fc1d7c2ee162a14 | 2026-09-27 |
| 2025-04-28 | CAN | 11,001 | Cardigan | Cardigan | Prince Edward Island | 25,261 | 25,494 | 233 | 32,251 | 79.05 | 102 | 6 | LPC | Liberal | Kent MacDonald | 57.02 | CPC | James Aylward | 37.38 | 4,962 | 19.64 | safe | 2.147 | false | 1.6 | 39dc3ea47b486926 | 2026-09-27 |
| 2025-04-28 | CAN | 11,002 | Charlottetown | Charlottetown | Prince Edward Island | 21,089 | 21,303 | 214 | 28,003 | 76.07 | 86 | 5 | LPC | Liberal | Sean Casey | 64.75 | CPC | Natalie Jameson | 29.11 | 7,517 | 35.64 | safe | 1.976 | true | 0 | a53321f16e7e7af3 | 2026-09-27 |
| 2025-04-28 | CAN | 11,003 | Egmont | Egmont | Prince Edward Island | 24,008 | 24,249 | 241 | 31,387 | 77.26 | 109 | 4 | LPC | Liberal | Bobby Morrissey | 51.92 | CPC | Logan McLellan | 43.4 | 2,047 | 8.53 | competitive | 2.178 | false | 0 | fde16b11b51b9662 | 2026-09-27 |
- Current
20260927T224149Z-b608821bb05f · sha256 b608821bb05f…
343 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/ca_federal_election_2025_riding_intel/ca_federal_election_2025_riding_competitiveness" | jq '{title, rows, columns_count, license}'import requests
ds = requests.get("https://datazimuts.com/v1/datasets/ca_federal_election_2025_riding_intel/ca_federal_election_2025_riding_competitiveness").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/ca_federal_election_2025_riding_intel/ca_federal_election_2025_riding_competitiveness
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 20260927T224149Z-b608821bb05f and its content hash, so readers get exactly the data you used.
2025 Canadian federal election riding competitiveness (agent-curated). (2026). 2025 Canadian federal election: riding competitiveness [Data set, snapshot 20260927T224149Z-b608821bb05f, sha256 b608821bb05f]. Datazimuts. Retrieved 2026-09-28, from https://datazimuts.com/en/datasets/ca_federal_election_2025_riding_intel/ca_federal_election_2025_riding_competitiveness?snapshot=20260927T224149Z-b608821bb05f
@misc{dz_ca_federal_election_2025_riding_intel_ca_b608821b,
title = {{2025 Canadian federal election: riding competitiveness}},
author = {{2025 Canadian federal election riding competitiveness (agent-curated)}},
year = {2026},
publisher = {Datazimuts},
howpublished = {\url{https://datazimuts.com/en/datasets/ca_federal_election_2025_riding_intel/ca_federal_election_2025_riding_competitiveness?snapshot=20260927T224149Z-b608821bb05f}},
note = {Snapshot 20260927T224149Z-b608821bb05f, sha256 b608821bb05f3308bbdccb72824e0705dd460ef49bc0d3919e0185424a65529b; accessed 2026-09-28}
}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=ca_federal_election_2025_riding_intel%2Fca_federal_election_2025_riding_competitiveness&lang=en&theme=auto&snapshot=20260927T224149Z-b608821bb05f&x=election_date&y=riding_number&agg=avg" title="2025 Canadian federal election: riding competitiveness" 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.