Methodology

How the observatory is built

One pipeline per source turns official returns into a standard polling-unit table; one builder turns those tables into every figure on the site. This page states what is published, how it is standardised, and where the limits are.

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:

TableColumns
votespolling_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)
locationpolling_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:

The crew — five roles, four gatesagents/ in the repo ↗
Nothing checkable → the run stops here, with the reason.G1Any candidate outside its bound → nothing is written.G2Map join below 95% unexplained → the layer doesn't ship.G3Anything red → fix or revert. Never merge red.G4Takes a country, office and years. Runs the four phases in order and enforces every gate.country-leadentry · orchestratorProbes what the authority publishes: URLs, formats, grain, rounds, and the declaration to check against.1source-scoutphase 1Writes Pipelines/countries/<country>.py and reconciles every candidate against the certified total.2pipeline-smithphase 2Registers flags, boundaries, levels, dates and the ledger row that turn tables into a profile.3geo-wirerphase 3Rebuilds everything, runs the suite, checks the joins, updates the docs.4release-verifierphase 4A person reads every pipeline and every discrepancy note before it is merged; the repository history shows who did what.mergehuman reviewstarts runcountry-lead supervises every phase
step 1 of 6 · entry · orchestrator
country-lead

Takes 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

CountryOfficesElectionsFinest map levelPublishing authority
ArgentinaPresidential, Chamber of Deputies6 · 20152025ProvincesDirección Nacional Electoral (DINE)
AustraliaHouse of Representatives7 · 20072025DivisionsAustralian Electoral Commission
BelgiumChamber of Deputies5 · 20072024Electoral cantonsSPF Intérieur — official election results
BoliviaPresidential3 · 20202025DepartmentsÓrgano Electoral Plurinacional (OEP)
BrazilPresidential3 · 20182022RegionsTribunal Superior Eleitoral (TSE)
CanadaHouse of Commons3 · 20152021Electoral districtsElections Canada
ChilePresidential, Chamber of Deputies, Senate, Municipal, Municipal councils, Mayors, Regional councils, Regional governors, Plebiscites50 · 19582025CommunesServicio Electoral de Chile (SERVEL)
ColombiaPresidential2 · 20222022DepartmentsRegistraduría Nacional del Estado Civil
CzechiaChamber of Deputies7 · 20022025MunicipalitiesCzech Statistical Office (volby.cz)
DenmarkFolketing6 · 20072026municipalitiesDanmarks Statistik
EgyptPresidential3 · 20122014GovernoratesNational Election Authority / Supreme Presidential Electoral Commission
El SalvadorPresidential2 · 20192024DepartmentsTribunal Supremo Electoral (TSE)
EstoniaRiigikogu3 · 20152024national totalsEstonian National Electoral Committee
FinlandEduskunta7 · 19992023municipalitiesStatistics Finland (Tilastokeskus)
FranceEuropean Parliament, Referendums, Cantonal councils, Presidential, Chamber of Deputies, Regional councils, Municipal, Departmental councils57 · 19992026DépartementsMinistère de l'Intérieur (data.gouv.fr)
GermanyBundestag2 · 20212025LandsBundeswahlleiterin (Federal Returning Officer)
GhanaPresidential2 · 20202024RegionsElectoral Commission of Ghana
IndiaLok Sabha3 · 20092024ConstituenciesElection Commission of India (ECI)
IndonesiaPresidential3 · 20142024ProvincesKomisi Pemilihan Umum (KPU)
IranPresidential2 · 20242024ProvincesMinistry of Interior (published returns)
ItalyChamber of Deputies, Senate, European Parliament48 · 19482024RegionsMinistero dell'Interno — Archivio storico / Eligendo open data
JapanHouse of Representatives4 · 20212024DistrictsMinistry of Internal Affairs and Communications (MIC)
KenyaPresidential2 · 20172022CountiesIndependent Electoral and Boundaries Commission (IEBC)
MexicoPresidential1 · 20182018StatesInstituto Nacional Electoral (INE)
NetherlandsTweede Kamer9 · 20022025MunicipalitiesKiesraad
New ZealandHouse of Representatives1 · 20232023RegionsElectoral Commission
NigeriaPresidential3 · 20152023StatesIndependent National Electoral Commission (INEC)
NorwayStorting6 · 20052025municipalitiesStatistisk sentralbyrå (SSB)
ParaguayPresidential1 · 20232023DepartmentsTribunal Superior de Justicia Electoral (TSJE)
PeruPresidential2 · 20212021RegionsOficina Nacional de Procesos Electorales (ONPE)
RomaniaPresidential2 · 20092009CountiesAutoritatea Electorală Permanentă (AEP)
RussiaPresidential2 · 20182024Federal subjectsCentral Election Commission (CEC)
South AfricaNational Assembly2 · 20192024ProvincesElectoral Commission of South Africa (IEC)
South KoreaPresidential4 · 20122025Province or citiesNational Election Commission (NEC)
SpainCongress of Deputies, Senate, European Parliament20 · 20002019MunicipalitiesMinisterio del Interior
SwedenRiksdag6 · 20022022municipalitiesStatistiska centralbyrån (SCB)
SwitzerlandNational Council5 · 20072023MunicipalitiesFederal Statistical Office (BFS)
TaiwanPresidential8 · 19962024TownshipsCentral Election Commission (CEC)
TunisiaPresidential1 · 20242024GovernoratesIndependent High Authority for Elections (ISIE)
UkrainePresidential3 · 20142019OblastsCentral Election Commission (CEC)
United KingdomHouse of Commons5 · 20102024ConstituenciesHouse of Commons
United StatesPresidential7 · 20002024CountiesMIT 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.