Sammler für deutsche Wahldaten. Lädt Bundestagswahl, Europawahl, die jeweils jüngste Landtags- und Gemeinde-/Stadtratswahl aller sechzehn Länder sowie die Kreistagswahlen der 294 Landkreise und legt sie als kompakte JSON-Dateien ab.
Nicht Teil dieses Repos: Regionalatlas und Zensus 2022. Dieses Repo liefert ausschließlich
Wahldaten. Regionalatlas und Zensus 2022 sind eine eigene, live abgefragte externe
Datenquelle - kein Sync-Job, kein JSON-Snapshot, nichts davon steckt in sammeln.py oder
quellen.json:
| Quelle | Endpunkt |
|---|---|
| Regionalatlas | https://www.gis-idmz.nrw.de/arcgis/rest/services/stba/regionalatlas/MapServer/dynamicLayer/query |
| Zensus 2022 (100-m-Raster) | https://services2.arcgis.com/jUpNdisbWqRpMo35/arcgis/rest/services/Zensus2022_grid_final/FeatureServer/0/query |
Beides öffentliche ArcGIS-REST-Dienste, live per Umkreisabfrage genutzt (kein Bulk-Download, keine Anmeldung).
Eine ausführliche technische Einführung für Entwickler und KI-Assistenten steht in
PROJECT_CONTEXT.md.
Installieren (klont nach ./Asset, prüft git/python3, läuft Selbsttest):
irm https://raw.githubusercontent.com/Parteicoder/Asset/main/install.ps1 | iex
curl -fsSL https://raw.githubusercontent.com/Parteicoder/Asset/main/install.sh | bash
Aktualisieren (im geklonten Verzeichnis, git pull --ff-only + Selbsttest):
.\update.ps1
./update.sh
Daten sammeln (nach Installation/Update):
python3 scripts/sammeln.py --land NN
Die zweistellige Landkennzahl (erste zwei Ziffern des AGS, --land NN) steht in quellen.json,
den Dateinamen unter daten/ und den CLI-Aufrufen - hier zum Nachschlagen:
| NN | Land |
|---|---|
| 01 | Schleswig-Holstein |
| 02 | Hamburg |
| 03 | Niedersachsen |
| 04 | Bremen |
| 05 | Nordrhein-Westfalen |
| 06 | Hessen |
| 07 | Rheinland-Pfalz |
| 08 | Baden-Württemberg |
| 09 | Bayern |
| 10 | Saarland |
| 11 | Berlin |
| 12 | Brandenburg |
| 13 | Mecklenburg-Vorpommern |
| 14 | Sachsen |
| 15 | Sachsen-Anhalt |
| 16 | Thüringen |
Alle Quellen inklusive URL, Lizenz und Auswertungsdatei stehen maschinenlesbar in
quellen.json - diese Tabellen sind daraus abgeleitet, für eine schnelle
Übersicht ohne die JSON öffnen zu müssen. Es gibt keine GENESIS-Anmeldung mehr, keine Secrets und
keine automatische Tabellensuche.
Basis (alle 16 Länder, wo unten keine Ergänzung greift):
| Wahl | Quelle | URL |
|---|---|---|
| Bundestagswahl 2025 | Bundeswahlleiterin, kerg2 | https://www.bundeswahlleiterin.de/bundestagswahlen/2025/ergebnisse/opendata/btw25/csv/kerg2.csv |
| Europawahl 2024 | Bundeswahlleiterin, kerg2 | https://www.bundeswahlleiterin.de/europawahlen/2024/ergebnisse/opendata/ew24/csv/kerg2.csv |
| Landtagswahlen | GERDA, state_harm_25.csv |
https://github.com/awiedem/german_election_data/raw/refs/heads/main/data/state_elections/final/state_harm_25.csv |
| Gemeinde-/Stadtratswahlen | GERDA, municipal_harm_25.csv |
https://github.com/awiedem/german_election_data/raw/refs/heads/main/data/municipal_elections/final/municipal_harm_25.csv |
| Kreistagswahlen | GERDA, county_elec_harm_21_cty.csv |
https://github.com/awiedem/german_election_data/raw/refs/heads/main/data/county_elections/final/county_elec_harm_21_cty.csv |
Landtagswahl-Ergänzungen (ersetzen GERDA für dieses Land, weil aktueller oder amtlich statt harmonisiert):
Gemeinde-/Stadtratswahl-Ergänzungen:
| Land | Jahr | Quelle | URL |
|---|---|---|---|
| Rheinland-Pfalz | 2024 | Landeswahlleiter Rheinland-Pfalz (manuell geprüfter Snapshot, quellen/rlp-kommunalwahlen-2024-gemeindeebene.json) |
https://rlp-kw24.wahlen.23degrees.eu/ |
| Thüringen | 2024 | Thüringer Landeswahlleiter (manuell geprüfter Snapshot, quellen/thueringen-gemeinderatswahl-2024.json) |
https://wahlen.thueringen.de/NeuLesen.asp?seite=GWInfoG2024 |
| Mecklenburg-Vorpommern | 2024 | Landeswahlleiter Mecklenburg-Vorpommern (LAIV-MV) | https://www.laiv-mv.de/static/LAIV/Wahlen/3-Kommunalwahlen/2024/Ergebnisse/k_gemeinden.csv |
| Brandenburg | 2024 | Amt für Statistik Berlin-Brandenburg | https://wahlergebnisse.brandenburg.de/12/300/20240609/gemeindevertretungswahl_land/DL/DL_BB_GVW2024.xlsx |
Kreistagswahl-Ergänzungen:
| Land | Jahr | Quelle | URL |
|---|---|---|---|
| Rheinland-Pfalz | 2024 | Landeswahlleiter Rheinland-Pfalz (manuell geprüfter PDF-Snapshot, quellen/rlp-kommunalwahlen-2024-kreisebene.json) |
https://www.wahlen.rlp.de/fileadmin/wahlen.rlp.de/KW/KW_2024_Ergebisse_Kreisebene.pdf |
| Mecklenburg-Vorpommern | 2024 | Landeswahlleiter Mecklenburg-Vorpommern (LAIV-MV) | https://www.laiv-mv.de/static/LAIV/Wahlen/3-Kommunalwahlen/2024/Ergebnisse/k_wahlkreise.csv |
| Bayern | 2026 | Bayerisches Landesamt für Statistik | https://kommunalwahl2026.bayern.de/downloads/gremienwahl/Kommunalwahl_Gremien_Landkreise.xml |
Die Rheinland-Pfalz-Kommunalwahl-Ergänzung für 2024 deckt inzwischen fast alle rund 2.300
Gemeinden ab (nicht mehr nur die 12 kreisfreien Städte wie beim früheren PDF-Snapshot, siehe
LIZENZ-DATEN.md) - nur die Kreistagswahl (24 Landkreise) kommt weiterhin aus einer PDF ohne
zuverlässig per Standardbibliothek auswertbare Tabellenstruktur.
Die Thüringen-Ergänzung für die Gemeinde-/Stadtratswahl 2024 ersetzt GERDAs Datensatz für das ganze
Land vollständig, statt ihn nur zu ergänzen: GERDAs municipal_harm_25.csv führte für Thüringen
zwar 600 Gemeinden, aber keine der fünf kreisfreien Städte (Erfurt, Gera, Jena, Suhl, Weimar) – die
amtliche Quelle deckt alle 605 Gebiete einheitlich ab (siehe LIZENZ-DATEN.md, Abschnitt
„Thüringen: Gemeinde- und Stadtratswahl 2024").
Die Thüringen-Ergänzung für die Landtagswahl 2024 ersetzt GERDAs Datensatz ebenfalls vollständig,
diesmal für einheitliche Quellenlage statt einer echten Lücke bei GERDA. Mit bekannter
Einschränkung: Die Briefwahl lässt sich aus der amtlichen Datei für viele Gemeinden nicht
zuverlässig zurückrechnen, wodurch Wahlbeteiligung und Parteianteile bei kleineren Gemeinden
spürbar von GERDAs korrekt harmonisiertem Stand abweichen können (Details und Zahlen in
LIZENZ-DATEN.md, Abschnitt „Thüringen 2024 (Landtag)").
Die frühere Lösung las Landtagswahlen aus der Regionaldatenbank GENESIS. Das hatte zwei grundsätzliche Probleme:
- Der Abruf verlangte persönliche Zugangsdaten.
- Bei gemeinsam ausgezählter Briefwahl fehlen in GENESIS auf Gemeindeebene Stimmen oder werden dem falschen Gebiet zugerechnet. Das betrifft vor allem ostdeutsche Länder und kann Ergebnisse deutlich verschieben.
GERDA liest die Rohdateien der Landeswahlleitungen und statistischen Landesämter, vereinheitlicht die Parteinamen und teilt gemeinsam ausgewiesene Briefwahl nachvollziehbar zu. Der Sammler lädt die jeweilige GERDA-Datei einmal pro Lauf, sucht darin für jedes Land automatisch das jüngste Wahljahr und schreibt daraus kleine App-Dateien.
Verwendet wird state_harm_25.csv. Diese Fassung bildet Ergebnisse auf die Gemeindegrenzen von
2025 ab und enthält Gemeindename und achtstelligen AGS. Das passt zur App, die ebenfalls mit
aktuellen AGS arbeitet. Wer wissenschaftlich die Grenzen am jeweiligen Wahltag untersuchen will,
sollte stattdessen direkt GERDAs state_unharm.csv verwenden; für die aktuelle App-Karte wäre
diese Fassung nicht der richtige Join-Schlüssel.
Für Gemeinde- und Stadträte wird entsprechend municipal_harm_25.csv verwendet. GERDA führt dort
zehn größere Parteien einzeln; lokale Listen, gemeinsame Wahlvorschläge und Einzelbewerber stehen
zusammengefasst als Sonstige. Wo ausschließlich diese Sammelgruppe vorliegt, kennzeichnet die
JSON-Datei das ausdrücklich mit einem Hinweis.
Kreistagswahlen kommen aus county_elec_harm_21_cty.csv. Der Sammler trennt wiederkehrende Parteien,
Wählervereinigungen und Einzelbewerber und fasst alle verbleibenden lokalen Listen verlustfrei als
Sonstige zusammen. Namen und Gebietstypen stammen aus county_council_seats.csv; dadurch werden
die Räte kreisfreier Städte nicht fälschlich als Kreistage ausgegeben. Berlin, Bremen und Hamburg
haben keine Landkreise und deshalb keine kreistag.json in ihren Landesordnern.
Lokal genügt:
python3 scripts/sammeln.pyEs gibt kein pip install und keine requirements.txt. CSV, JSON, Netzabruf und selbst die
amtliche XLSX-Datei werden nur mit der Python-Standardbibliothek verarbeitet.
Weitere Befehle:
python3 scripts/sammeln.py --nur-laender # GERDA und Länder-Ergänzungen
python3 scripts/sammeln.py --nur-kommunal # Gemeinde-/Stadtrats- und Kreistagswahlen
python3 scripts/sammeln.py --nur-bund # Bundestags- und Europawahl
python3 scripts/sammeln.py --land 14 # alle landesabhängigen Dateien für Sachsen
python3 scripts/sammeln.py --land 14 --nur-kommunal
python3 scripts/sammeln.py --land 7 # einstellige Schreibweise ist ebenfalls erlaubt
python3 scripts/selbsttest.py # Parser ohne Netz prüfenAuf GitHub: Actions → Daten sammeln → Run workflow. Der Workflow läuft zusätzlich am Ersten jedes Monats. Er committet nur, wenn sich Daten wirklich geändert haben.
GERDA enthält für Rheinland-Pfalz derzeit noch die Wahl 2021. Deshalb ersetzt der Sammler dieses eine Land mit dem amtlichen Endergebnis vom 22. März 2026.
Die offizielle CSV kann dafür nicht sicher verwendet werden: Lange Identifikationsschlüssel sind dort teilweise in wissenschaftlicher Schreibweise auf zu wenige Stellen gerundet. Aus einem solchen Wert lässt sich kein eindeutiger Gemeinde-AGS zurückgewinnen. Die parallel veröffentlichte amtliche XLSX-Datei enthält dieselben Ergebnisse mit vollständigen Schlüsseln und wird daher direkt gelesen.
58 kleine Gemeinden weisen laut Quelldatei kein getrenntes Ergebnis aus. Ihre Stimmen sind mit einer anderen Gemeinde zusammengefasst. Für diese Flächen übernimmt der Sammler das amtlich gemeinsam ausgewiesene Ergebnis und ergänzt zwei Felder:
{
"hinweis": "Gemeinsam ausgewiesenes Ergebnis mit Peterslahr",
"zusammengelegt_mit": "07132089"
}Damit bleiben alle 2.300 Gemeinden in der Datei, ohne ein getrenntes Ergebnis vorzutäuschen.
daten/index.json listet alle vorhandenen Dateien, Wahljahre, Gebietsanzahlen, Quellen und
Lizenzen auf. Jedes Land besitzt einen Ordner nach seiner zweistelligen amtlichen Kennzahl:
daten/bundestagswahl-2025.jsondaten/europawahl-2024.jsondaten/01/landtag.jsonbisdaten/16/landtag.jsondaten/01/kommunal.jsonbisdaten/16/kommunal.jsondaten/XX/kreistag.jsonfür die 13 Flächenländer mit Landkreisen
Die bisherigen Adressen daten/land-XX.json, daten/kommunal-XX.json und
daten/kreistag-XX.json bleiben als bytegleiche Kompatibilitätsdateien bestehen. Neue Verbraucher
sollen die Landesordner verwenden, beispielsweise daten/14/kommunal.json für Sachsen.
gemeinderat/<land>/<AGS>.json (Repository-Wurzel, nicht unter daten/) ist eine
Direktabruf-Datei je Gemeinde, für wer nicht die ganze Landesdatei laden will. Für Eilenburg
(14730110) lautet sie gemeinderat/14/14730110.json. Bewusst getrennt von daten/ gehalten:
ein statischer Datei-Host mit Dateilimit würde bei einer Datei je der bundesweit ~11.000 Gemeinden
allein durch gemeinderat/ gerissen (siehe
GEMEINDERAT_ZIEL in scripts/sammeln.py). gemeinderat/index.json beschreibt alle Länder;
zusätzlich enthält jeder Landesordner ein kleines index.json mit Wahljahr, Gemeindezahl und dem
Dateimuster {ags}.json. Die gebündelten daten/XX/kommunal.json bleiben für Auswertungen eines
ganzen Landes erhalten.
Beispiel:
{
"land": "14",
"name": "Sachsen",
"titel": "Landtagswahl Sachsen 2024",
"jahr": 2024,
"wahl_datum": "2024-09-01",
"schluesselart": "ags",
"quelle": "GERDA – German Election Database",
"gebiete": {
"14730110": {
"name": "Eilenburg",
"beteiligung": 70.8,
"parteien": {
"AfD": 35.1,
"CDU": 33.2,
"BSW": 12.3
}
}
}
}schluesselart verhindert, dass eine Zahl falsch gedeutet wird:
| Wert | Bedeutung |
|---|---|
ags |
achtstelliger Gemeindeschlüssel, bei der Europawahl auch fünfstelliger Kreisschlüssel |
kreis-ags |
fünfstelliger Kreisschlüssel; nur echte Landkreise, keine kreisfreien Städte |
btw-wahlkreis |
Nummer des Bundestagswahlkreises |
GERDA liefert Parteianteile als Brüche zwischen 0 und 1. Durch Harmonisierung und proportionale
Briefwahl-Zuteilung kann ihre Summe geringfügig von 1 abweichen. Der Sammler akzeptiert nur
plausible Summen von 0,95 bis 1,05 und normiert diese für die Anzeige auf 100 Prozent. Abgeleitete
GERDA-Spalten wie far_right werden ausdrücklich nicht als Parteien gelesen.
scripts/selbsttest.py prüft unter anderem:
- Auswahl des jüngsten Wahljahrs pro Land,
- führende Nullen in AGS,
- Abgrenzung echter Parteien von GERDA-Kennzahlen,
- Gemeinde-/Stadtratswahlen auf 2025er AGS und ihre jüngsten Wahljahre,
- vollständige 294 Landkreise ohne kreisfreie Städte,
- direkt abrufbare und idempotent erzeugte Gemeinderatsdateien je AGS,
- Erhalt unbekannter lokaler Listen als
Sonstige, - vollständige RLP-Schlüssel und Zusammenlegungsziele,
- XLSX-Lesen ohne Fremdpaket,
- Gebietsebene und Zweitstimme im kerg2-Format,
- unveränderte Dateien ohne künstlich neues Laufdatum.
Beim echten RLP-Abruf kommen weitere harte Prüfungen hinzu: ungefähr 2.300 Gemeindezeilen, eindeutige AGS und Parteistimmensummen, die exakt den gültigen Landesstimmen entsprechen. Ein Formatbruch stoppt den Lauf, statt unbemerkt falsche Daten zu veröffentlichen.
Code, Workflows, Konfiguration und Dokumentation stehen unter AGPL-3.0-or-later (LICENSE). Für
die erzeugten Daten gelten die Bedingungen der jeweiligen Quelle:
| Dateien | Lizenz / Hinweis |
|---|---|
| Bundestags- und Europawahl | Datenlizenz Deutschland – Namensnennung 2.0 |
| GERDA-Länderdateien | CC BY 4.0, mit GERDA-Zitation |
| GERDA-Gemeinde-/Stadtrats- und Kreistagsdateien | CC BY 4.0, mit GERDA-Zitation |
| Rheinland-Pfalz 2026 | amtliche Wahlergebnisse; Quellenhinweis und Nutzungsbedingungen der Quelle beachten |
| Rheinland-Pfalz 2024 (Kommunal-/Kreistagswahl) | amtliche Wahlergebnisse; Quellenhinweis und Nutzungsbedingungen der Quelle beachten |
| Thüringen 2024 (Gemeinde-/Stadtratswahl) | amtliche Wahlergebnisse; Quellenhinweis und Nutzungsbedingungen der Quelle beachten |
| Thüringen 2024 (Landtag) | amtliche Wahlergebnisse; Quellenhinweis und Nutzungsbedingungen der Quelle beachten; bekannte Briefwahl-Einschränkung, siehe LIZENZ-DATEN.md |
| Hessen 2023 (Landtag) | amtliche Wahlergebnisse; Quellenhinweis und Nutzungsbedingungen der Quelle beachten |
Jede JSON-Datei trägt quelle, quellenvermerk, lizenz, lizenz_url und quellendatei selbst.
Einzelheiten stehen in LIZENZ-DATEN.md.