Skip to main content

Berlin · Methodology

Methodology · Election data

This page documents the data sources, aggregation strategy and known coverage gaps of the election data. Values describe vote shares, not an assessment.

1. Data sources

Bundestag elections
Federal Election Commissioner (Bundeswahlleiterin) polling district statistics (_wbz.zip). Obtained directly for each election year from bundeswahlleiterin.de. Licence: Data licence Germany, attribution, version 2.0.
House of Representatives (Abgeordnetenhaus, AGH) + District Assembly (BVV)
Statistics Office Berlin-Brandenburg (Amt für Statistik Berlin-Brandenburg), XLSX sheet pipeline (DL_BE_*.xlsx). Obtained from statistik-berlin-brandenburg.de. Licence: Data licence Germany, attribution, version 2.0. AGH and BVV 2026 come directly from wahlen-berlin.de (Berlin State Election Commissioner, Landeswahlleiterin Berlin), as of the provisional official result.
Polling district geometries
Statistics Office Berlin-Brandenburg, shapefile releases per election: RBS_OD_Wahlgebiete_BTW17.zip, RBS_OD_UWB_AH21.zip, RBS_OD_UWB_AH26.zip (polling district geometry AGH/BVV 2026) and others. Reprojection from ETRS89 UTM33 to WGS84 via mapshaper pipeline, simplify visvalingam + keep-shapes.

2. Data cutoff

The election data cover elections from 2011. Pre-2011 data from the Federal Election Commissioner are partly available in different formats and require mapping to the 2001 Bezirk reform. Bundestag elections begin in 2013 because the Federal Election Commissioner publishes polling district data only from that year.

  • Bundestag elections: 2013, 2017, 2021, 2025
  • House of Representatives elections: 2011, 2016, 2021, 2023 (repeat), 2026 (provisional)
  • District Assembly (BVV) elections: 2011, 2016, 2021, 2023 (repeat), 2026 (provisional)
  • European elections: currently not included
  • Referendums: not included

3. Postal-vote groups

Berlin counts postal votes in separate postal districts that have no area of their own, apart from the in-person polling districts. Bezirk and Berlin overall always include all votes because they sum over all polling districts.

On the map, the postal-vote group is therefore the smallest level: all in-person polling districts of a postal district plus that postal district together form one area (dissolve of the in-person polygons), analogous to the Tagesspiegel presentation “Stimmbezirke 726, 727 und 7P”. This applies to all elections with polling district geometry.

In the Kiez aggregate, postal voting is a proportional estimate by eligible voters, see section 4. For elections without polling district geometry, the map shows only Bezirk and Berlin level, see section 6.

4. Polling district to Kiez aggregation

Polling district values are aggregated spatially at four levels: polling district, Kiez (LOR Bezirksregion), Bezirk (12) and Berlin overall.

For the Kiez level, the polygon centroid is calculated for each polling district (via turf-center) and mapped to the LOR Bezirksregion that contains it (booleanPointInPolygon). Polling districts outside all LOR polygons stay unmapped and flow only into Bezirk + Berlin. The SQL aggregation sums per Kiez and party from the raw polling district rows (see scripts/build-wahl-kiez-aggregat.ts).

Postal votes flow in proportionally: each polling station of a postal-vote group receives a share of the group's postal votes (ist_briefwahl_aggregat = true) according to its eligible voters. This is an estimate, not an official split. If the eligible voters are missing for one or more polling stations of a group, the postal votes are distributed evenly across the group's polling stations.

5. Repeat election 2023

The Berlin Constitutional Court declared AGH 2021 + BVV 2021 partly invalid. AGH 2023 and BVV 2023 are the respective repeat elections. In the database they carry the flag is_repeat_election and refer to the respective original election via parent_election_id.

The polling district geometry of the repeat election is identical to the original election of September 2021. The separate SBB source RBS_OD_Wahllokale_AH23.zip contains only polling station locations (points), not polling district polygons. That is why navigator.berlin maps AGH 2023 and BVV 2023 to the polygon layer ah21 for the choropleth + Kiez aggregation.

6. Geometries + coverage

Polling district polygons are available for: Bundestag 2017, 2021, 2025 as well as AGH + BVV 2016, 2021 (also used for the 2023 repeat election) and 2026. Bundestag 2013 as well as AGH + BVV 2011 have no published polling district geometries. These elections are accessible only at Bezirk and Berlin aggregate level. The Kiez aggregate is empty for them, and the choropleth component falls back to 12 Bezirk polygons with an inline note.

Reprojection: ETRS89 UTM33 → WGS84 via mapshaper Node API, simplify visvalingam + keep-shapes so that sliver polygons survive the simplify step.

7. Update cadence

Election data are updated manually after each election. There is no live refresh from the source APIs, because the official final results only become available weeks after election day, and the Federal Election Commissioner and the Berlin State Election Commissioner do not publish their datasets through a stable API.

AGH and BVV 2026 show the provisional official result from election day, 20 September 2026. The data is as of 21 September 2026. The source is wahlen-berlin.de (Berlin State Election Commissioner). The portal, election detail pages and API/tool responses mark the figures as “provisional” and show an as-of date where available. The final result is expected from 30 September 2026 (BVV) and from 5 to 8 October 2026 (AGH). When the final result arrives, a new data import replaces the provisional figures. The label then disappears.

The build pipeline downloads and parses the raw data, rebuilds the polling district layers and updates the Kiez aggregate. A lint gate blocks evaluative vocabulary in code and docs.

8. Party aliases

Party names vary over the years (PDS → Die Linke, GRÜNE in spelling variants). A case-insensitive alias table in scripts/wahlen/lib/partei-seed.ts resolves source columns to canonical kurzname values. Unresolved entries end up under “Other” and are not listed in the inspector's top N.

9. Cross-layer linking

Election data appear on Kiez pages (see election trend block) and in the address inspector next to other layers (rent index residential area, noise mapping, rent index social level, Kiez score), without causal linking or evaluative framing. Editorial guidelines for this are in the cross-layer templates preview (noindex, co-design stage).

All elections individually
deen