Data
The observatory republishes official election returns at the finest geography the authority makes public — the polling station (mesa) where it exists, the commune, district or constituency otherwise. Each source has an ETL pipeline in the public repository that converts the published files (spreadsheets, CSV exports, result APIs, or the authority's historical result pages) into one standard table per election.
Chile is the reference country: every national office since 1989 — presidential rounds, Chamber of Deputies, Senate, regional governors and councils, mayors and municipal councils, and the plebiscites — plus the presidential series back to 1958. France carries every office the Ministère de l'Intérieur publishes at bureau-de-vote level. For every other country the observatory follows one national office over time, at the finest geography the authority makes machine-readable — which for some (Nigeria, Egypt, South Korea, Indonesia) is the first-level division of the official declaration.
The standard table
Every election is stored as two tables with the same columns whatever the source:
| Table | Columns |
|---|---|
votes | polling_id, candidate, party, coalition (where published), value (votes), rate (share in the unit), rank, flag_candidates (1 for a candidate or list, 0 for blank and null ballots) |
location | polling_id and the geography of the unit: region, province, commune, district, polling place, table number, and the registered electorate where the source publishes it |
From these the builder derives, for each election, the national totals and the votes of every candidate in every unit of every geographic level; the site never recomputes a total by hand. Shares are of valid votes; blank and null ballots are reported separately, and turnout only where the electorate per unit is published.
Names and colours
Sources shout and vary: the same person appears as “MARCO ENRIQUEZ-OMINAMI”, “MARCO ENRIQUEZ-OMINAMI GUMUCIO” and “MARCO ANTONIO ENRIQUEZ-OMINAMI GUMUCIO” in different years. The observatory keeps one canonical name per candidate, party and coalition, with accents, across every election (atlas/chile_names.py); a name that is not curated is title-cased from the source. Lists (pactos) that carry a party suffix (“Chile Vamos UDI – Independientes”) are folded into their coalition.
Colours follow political families, so a candidate keeps a colour across elections and a coalition keeps it across offices: right (blue), far right (navy), centre-left (red), left (purple), communist (dark red), Partido de la Gente (teal), regionalists and greens (green), humanists and progressives (orange), independents (grey). In countries without a curated family table, colours follow the national rank.
Geography
Results are aggregated from the polling unit up to every level the location table allows. For Chile that is region → province → commune; provinces are derived from the commune through one reference table so the 56 provinces are the same in every year. Elsewhere the level is chosen once per country (department, state, county, NUTS region) for stability over the series.
Maps are drawn from official or open boundary files (national agencies, Eurostat NUTS, geoBoundaries), projected with a Lambert azimuthal equal-area projection centred on each country. Unit keys are normalised (upper-case, accents folded, alphanumerics only) before the join, and a short alias table reconciles the spellings the electoral tables and the boundary files disagree on.
What the figures show
- Treemap — the vote in the current scope (the country, or one unit) by candidate, party or coalition; area is votes. Coalitions open into parties, parties into candidates.
- Map — each unit painted with the winner in the current grouping, or, when a group is selected, with that group's share on a single-hue scale.
- Table — every unit of the level with the winner, share, margin, valid votes and turnout where available.
- History — every election of the office, stacked by the national share of each candidate or list.
Limits
- Preliminary and final counts. The 2025 Chilean results are SERVEL's preliminary files (99%+ of tables); they are replaced by the final TRICEL counts when published.
- Multi-member races (chambers, councils) list votes for candidates and lists, not seats; seat allocation is not computed.
- Historical commune-level results (Chile 1989–2009 for Congress and municipalities) come from the authority's historical site, which publishes communes, not polling stations.
- Where a source publishes a single national district, the profile carries national totals only.
Built with AI agents
The observatory is built and maintained by a crew of specialised AI agents working in the public repository under human direction — and it says so, because the reason it exists is the reason the agents are needed: elections are published in a form too varied and too voluminous for one person to systematise. Each authority has its own file layouts, its own spellings of the same candidate, its own idea of a geography, and changes all three between elections. Every pipeline in the repository was written by an agent that read the source, wrote the parser, and reconciled the result against the authority's own declaration before anything was kept.
What the agents do:
country-leadTakes a country, office and years. Runs the four phases in order and enforces every gate.
gateAsks before anything ambiguous; a human reviews before merge.
agents/country-lead.md ↗- No figure is ever generated by a model — every share is a sum of published returns.
- The authority's declaration is the arbiter of every pipeline.
- A person reads every pipeline before it is merged.
- Read the source and write the pipeline. Downloads, the record layout, the encoding quirks, the alias table for the region names a boundary file spells differently — one script per source, each documenting what it found.
- Reconcile before writing. A pipeline sums its parsed table per candidate and compares it with the national total the authority certified. If they differ beyond a stated bound, the pipeline stops and writes nothing. Where they differ within it — a provisional count against a definitive one, a transcription slip in the source — the gap is bounded in the code, printed on every run and recorded in the source audit.
- Keep the audit trail. Every URL is probed and dated; every discrepancy is named with its size; every superseded pipeline says what replaced it.
- Build the site. The catalogues, the election files, the candidate and party profiles and the map layers are produced by the same scripts, so a new election is a data build, not an edit.
The five roles above are defined in the repository as agents/ — plain role files with inputs, steps, gates and outputs, runnable from any agent harness with no vendor-specific tooling: the crew.
What they do not do:
- Generate numbers. No figure on the site is a model's output. Every share is a sum of published returns; nothing is estimated, imputed or smoothed.
- Decide what is true. The electoral authority's certified declaration is the arbiter of every pipeline. Where a source is only available second-hand — a declaration transcribed on Wikipedia because the commission publishes scanned forms — the page says so, and the transcription still has to reproduce the declaration to the vote (or within a bound the code states).
- Publish unreviewed. A person reads every pipeline and every discrepancy note before it is merged; the repository history shows who did what.
The point is transparency in both directions. Systematised returns let anyone — a newsroom, a researcher, a citizen — check an election down to the ballot box in one format, across countries and decades, instead of taking the summary on trust; and an open, reproducible build lets anyone check the observatory itself.
Sources by country
| Country | Offices | Elections | Finest map level | Publishing authority |
|---|---|---|---|---|
| Presidential, Chamber of Deputies | 6 · 2015–2025 | Provinces | Dirección Nacional Electoral (DINE) | |
| House of Representatives | 7 · 2007–2025 | Divisions | Australian Electoral Commission | |
| Chamber of Deputies | 5 · 2007–2024 | Electoral cantons | SPF Intérieur — official election results | |
| Presidential | 3 · 2020–2025 | Departments | Órgano Electoral Plurinacional (OEP) | |
| Presidential | 3 · 2018–2022 | Regions | Tribunal Superior Eleitoral (TSE) | |
| House of Commons | 3 · 2015–2021 | Electoral districts | Elections Canada | |
| Presidential, Chamber of Deputies, Senate, Municipal, Municipal councils, Mayors, Regional councils, Regional governors, Plebiscites | 50 · 1958–2025 | Communes | Servicio Electoral de Chile (SERVEL) | |
| Presidential | 2 · 2022–2022 | Departments | Registraduría Nacional del Estado Civil | |
| Chamber of Deputies | 7 · 2002–2025 | Municipalities | Czech Statistical Office (volby.cz) | |
| Folketing | 6 · 2007–2026 | municipalities | Danmarks Statistik | |
| Presidential | 3 · 2012–2014 | Governorates | National Election Authority / Supreme Presidential Electoral Commission | |
| Presidential | 2 · 2019–2024 | Departments | Tribunal Supremo Electoral (TSE) | |
| Riigikogu | 3 · 2015–2024 | national totals | Estonian National Electoral Committee | |
| Eduskunta | 7 · 1999–2023 | municipalities | Statistics Finland (Tilastokeskus) | |
| European Parliament, Referendums, Cantonal councils, Presidential, Chamber of Deputies, Regional councils, Municipal, Departmental councils | 57 · 1999–2026 | Départements | Ministère de l'Intérieur (data.gouv.fr) | |
| Bundestag | 2 · 2021–2025 | Lands | Bundeswahlleiterin (Federal Returning Officer) | |
| Presidential | 2 · 2020–2024 | Regions | Electoral Commission of Ghana | |
| Lok Sabha | 3 · 2009–2024 | Constituencies | Election Commission of India (ECI) | |
| Presidential | 3 · 2014–2024 | Provinces | Komisi Pemilihan Umum (KPU) | |
| Presidential | 2 · 2024–2024 | Provinces | Ministry of Interior (published returns) | |
| Chamber of Deputies, Senate, European Parliament | 48 · 1948–2024 | Regions | Ministero dell'Interno — Archivio storico / Eligendo open data | |
| House of Representatives | 4 · 2021–2024 | Districts | Ministry of Internal Affairs and Communications (MIC) | |
| Presidential | 2 · 2017–2022 | Counties | Independent Electoral and Boundaries Commission (IEBC) | |
| Presidential | 1 · 2018–2018 | States | Instituto Nacional Electoral (INE) | |
| Tweede Kamer | 9 · 2002–2025 | Municipalities | Kiesraad | |
| House of Representatives | 1 · 2023–2023 | Regions | Electoral Commission | |
| Presidential | 3 · 2015–2023 | States | Independent National Electoral Commission (INEC) | |
| Storting | 6 · 2005–2025 | municipalities | Statistisk sentralbyrå (SSB) | |
| Presidential | 1 · 2023–2023 | Departments | Tribunal Superior de Justicia Electoral (TSJE) | |
| Presidential | 2 · 2021–2021 | Regions | Oficina Nacional de Procesos Electorales (ONPE) | |
| Presidential | 2 · 2009–2009 | Counties | Autoritatea Electorală Permanentă (AEP) | |
| Presidential | 2 · 2018–2024 | Federal subjects | Central Election Commission (CEC) | |
| National Assembly | 2 · 2019–2024 | Provinces | Electoral Commission of South Africa (IEC) | |
| Presidential | 4 · 2012–2025 | Province or cities | National Election Commission (NEC) | |
| Congress of Deputies, Senate, European Parliament | 20 · 2000–2019 | Municipalities | Ministerio del Interior | |
| Riksdag | 6 · 2002–2022 | municipalities | Statistiska centralbyrån (SCB) | |
| National Council | 5 · 2007–2023 | Municipalities | Federal Statistical Office (BFS) | |
| Presidential | 8 · 1996–2024 | Townships | Central Election Commission (CEC) | |
| Presidential | 1 · 2024–2024 | Governorates | Independent High Authority for Elections (ISIE) | |
| Presidential | 3 · 2014–2019 | Oblasts | Central Election Commission (CEC) | |
| House of Commons | 5 · 2010–2024 | Constituencies | House of Commons | |
| Presidential | 7 · 2000–2024 | Counties | MIT Election Data + Science Lab |
The exact download URLs, their verification dates and the state of every pipeline are kept in Pipelines/DATA_SOURCES.md.
Citation
Cite the publishing authority named on the figure together with the observatory: Electoral Observatory, Carlos Navarrete, 2026, 35.254.142.75.sslip.io. Code and pipelines: GitHub.