Datenbank und API
Alles, was auf diesen Seiten steht, gibt es auch maschinenlesbar: Umfragen und Mittelwerte, Sitzverteilungen, Koalitionen und Wahrscheinlichkeiten, amtliche Ergebnisse seit 2017, Abgeordnete, Bürgermeister und Landräte, der Wahlticker. Ohne Anmeldung, ohne Schlüssel, ohne Limit im normalen Gebrauch. Bedingung ist nur die Quellenangabe.
- Endpunkte
- 11
- Lizenz
- ODbL, dl-de/by-2-0, CC0
- Aktualisierung
- täglich, Umfragen stündlich
- Format
- JSON, CSV, RSS
Alle Endpunkte
Alle Adressen sind relativ zu https://wahlergebnisse.io. {wahl} steht für bundestagswahl, europawahl oder den Slug eines Bundeslands wie bayern, nordrhein-westfalen oder sachsen-anhalt. Prozentwerte sind Zahlen mit einer Nachkommastelle, Datumsangaben ISO-8601, CSV mit Semikolon und UTF-8.
| Endpunkt | Format | Inhalt | Parameter | Beispiel |
|---|---|---|---|---|
/api/umfragen | JSON | Übersicht aller 18 Parlamente mit aktuellem Umfrage-Mittelwert, Zahl der einbezogenen Umfragen und Links auf die Detail-Endpunkte. | keine | |
/api/umfragen/{wahl} | JSON, CSV | Alles zu einer Wahl: Mittelwert, Sitzverteilung, Hauseffekte, letztes Wahlergebnis mit Treffsicherheit der Institute, mehrheitsfähige Koalitionen, Mehrheitswahrscheinlichkeiten und jede einbezogene Umfrage. | .csv am Ende oder ?format=csv für die Tabelle der Umfragen | |
/api/ergebnisse | JSON | Alle amtlichen Ergebnisse seit 2017 für Bund, Länder und Europawahl, neueste zuerst. | keine | |
/api/ergebnisse/{wahl} | JSON, CSV | Alle Ergebnisse eines Parlaments seit 2017, als JSON oder CSV. | .csv am Ende für die Tabelle | |
/api/verlauf/{wahl} | JSON | Jede einzelne Umfrage der letzten Jahre als Punkt für Verlaufsgrafiken. | tage: Zeitraum in Tagen, 30 bis 5000, Standard 730 | |
/api/ticker | JSON | Der Wahlticker: jede neue Umfrage, jedes amtliche Ergebnis, Kommunalwahl-Stände, Mandatswechsel und anstehende Termine der letzten 45 Tage, mit fester Adresse je Meldung. | keine | |
/api/amtsinhaber | JSON | Bürgermeister und Landräte aller Gemeinden und Kreise aus Wikidata, je Gemeindeschlüssel (AGS) und Kreisschlüssel. | keine | |
/api/personen | JSON | Kompakte Liste aller Abgeordneten des Bundestags, der Landtage und des Europaparlaments sowie der Kandidierenden der letzten sechs Monate, filterbar. | q: Namenssuche (ab 2 Zeichen); parlament: Kürzel wie BT, EU, BY, NW; partei: dawum-Partei-ID; typ: m (Mandat) oder k (Kandidatur); limit: bis 300, Standard 100; offset | |
/api/status | JSON | Datenstand aller Quellen: Alter der dawum-Daten, letzte Ergebnisse je Parlament, europäische Umfragen, nächste Wahlen, was automatisch läuft. | keine | |
/api/suche | JSON | Ortssuche über Gemeinden, Kreise, Wahlkreise und Länder, die zehn besten Treffer. | q: Suchbegriff (ab 2 Zeichen) | |
/feed.xml | RSS 2.0 | Der Wahlticker als RSS-Feed, die 60 neuesten Meldungen mit festen GUIDs. | keine |
Was in den Antworten steht
Die wichtigsten Felder je Endpunkt. Parteien erscheinen in den Umfrage-Endpunkten mit ihrem Kürzel (CDU/CSU, SPD, AfD …), in den Ergebnis-Endpunkten mit der dawum-Partei-ID, die im Feld partyIds erklärt wird.
/api/umfragen JSON
| Feld | Bedeutung |
|---|---|
| updated | Zeitpunkt der letzten Aktualisierung bei dawum |
| elections[].election | Name der Wahl, z. B. Bundestagswahl |
| elections[].slug | Kennung für die Detail-Endpunkte |
| elections[].as_of | Datum des Mittelwerts (neueste einbezogene Umfrage) |
| elections[].polls_in_average | Zahl der Umfragen im Mittelwert |
| elections[].average | Mittelwert je Partei in Prozent, Schlüssel ist das Parteikürzel |
| elections[].next_election | Termin oder voraussichtlicher Zeitraum der nächsten Wahl |
| elections[].page, json, csv | Adressen der Seite und der Detail-Daten |
| source, publisher | Quelle der Rohdaten mit Lizenz, Herausgeber der Berechnung |
/api/umfragen/{wahl} JSON, CSV
| Feld | Bedeutung |
|---|---|
| as_of, next_election, method | Datum des Mittelwerts, nächste Wahl, Beschreibung des Verfahrens |
| average | Mittelwert je Partei in Prozent |
| seats | total, majority, method, threshold_percent und distribution (Sitze je Partei) |
| house_effects | since, institutes[] mit polls und effects je Partei (Prozentpunkte), adjusted_average |
| last_election | date, status, results je Partei, accuracy_of_final_polls[] mit institute, poll_date, mean_abs_deviation, deviations |
| majority_coalitions[] | parties und seats jeder Kombination über der Mehrheit |
| probabilities | runs, majority[] mit parties und probability_percent, above_threshold und strongest je Partei |
| polls[] | institute, commissioned_by, published, fieldwork.start/end, respondents, method, results je Partei |
| citation | fertige Zitierzeile mit Datum, Adresse und Lizenz |
| CSV-Spalten | institut; auftraggeber; veroeffentlicht; zeitraum_von; zeitraum_bis; befragte; methode; dann eine Spalte je Partei. Erste Datenzeile ist der Mittelwert. |
/api/ergebnisse JSON
| Feld | Bedeutung |
|---|---|
| count | Zahl der Wahlen |
| items[].parliament, election, date | Slug, Name und Wahltag |
| items[].status | vorläufig oder endgültig |
| items[].results | Stimmenanteil je Partei in Prozent, Schlüssel ist die dawum-Partei-ID |
| items[].other | Anteil der sonstigen Parteien |
| items[].url | Seite mit dem vollständigen Ergebnis |
| partyIds, license | Zuordnung der Partei-IDs, Lizenz der Rohdaten |
/api/ergebnisse/{wahl} JSON, CSV
| Feld | Bedeutung |
|---|---|
| parliament, election | Slug und Name der Wahl |
| items[].date, status, results, other, url | wie bei /api/ergebnisse |
| CSV-Spalten | datum; status; partei_{id} je Partei; sonstige |
/api/verlauf/{wahl} JSON
| Feld | Bedeutung |
|---|---|
| slug, tage | Wahl und gewählter Zeitraum |
| points[].date | Veröffentlichungsdatum der Umfrage |
| points[].instituteId | dawum-Institut-ID |
| points[].values | Prozent je Partei, Schlüssel ist die dawum-Partei-ID |
/api/ticker JSON
| Feld | Bedeutung |
|---|---|
| generated, count | Erzeugungszeitpunkt und Zahl der Meldungen |
| events[].id, date, kind | Kennung, Datum, Art (umfrage, ergebnis, kommunalwahl, europa, termin, personen) |
| events[].label, title, text | Rubrik, Überschrift, Meldungstext |
| events[].parties[] | id, short und value der genannten Parteien, falls vorhanden |
| events[].url, permalink | Zielseite und feste Adresse im Ticker |
| upcoming[] | anstehende Wahltermine im selben Format |
/api/amtsinhaber JSON
| Feld | Bedeutung |
|---|---|
| kreise{schlüssel}, gemeinden{ags} | Objekt je Gebiet, Schlüssel ist der amtliche Gebietsschlüssel |
| name, title, female | Name, Amtsbezeichnung, Geschlecht |
| party, partyLabel | dawum-Partei-ID (0 = parteilos, null = ohne Angabe) und Parteiname aus Wikidata |
| start, wikipedia, qid | Amtsantritt, Wikipedia-Artikel, Wikidata-Kennung |
| source | Quelle, Lizenz und Abrufdatum |
/api/personen JSON
| Feld | Bedeutung |
|---|---|
| total, offset | Trefferzahl insgesamt und Startposition |
| items[].s, n | Slug und Name |
| items[].p, pid | Parteikürzel und dawum-Partei-ID |
| items[].pl, parliament | Parlamentskürzel und ausgeschriebener Name |
| items[].wk | Wahlkreis, falls vorhanden |
| items[].t | m = aktuelles Mandat, k = Kandidatur |
| items[].img, url | Foto (falls vorhanden) und Profilseite |
/api/status JSON
| Feld | Bedeutung |
|---|---|
| generated | Erzeugungszeitpunkt |
| dawum | source (api oder snapshot), lastUpdate, ageHours, polls, latestPoll |
| results[] | je Parlament lastElection, resultDate, status, missing, government, nextElection |
| europa[] | je Land polls, latestPoll, retrieved, ageDays |
| upcoming[], automation[] | nächste Wahlen und Liste der automatischen Abläufe |
/api/suche JSON
| Feld | Bedeutung |
|---|---|
| hits[].type | Gemeinde, Kreis, Wahlkreis oder Land |
| hits[].name, sub | Name und Zusatz (Kreis, Land oder Wahl) |
| hits[].href | Pfad der Seite |
/feed.xml RSS 2.0
| Feld | Bedeutung |
|---|---|
| item.title, link, description | Rubrik und Überschrift, Zielseite, Meldungstext |
| item.guid | feste Adresse der Meldung im Ticker |
| item.category, pubDate | Rubrik und Datum |
So lesen Sie die Daten ein
Vier Zeilen genügen. Alle Endpunkte außer der Ortssuche liefern Access-Control-Allow-Origin: *, der Aufruf aus dem Browser funktioniert also ohne Proxy.
// Mittelwert der Bundestagswahl, Sitze und Koalitionen
const r = await fetch("https://wahlergebnisse.io/api/umfragen/bundestagswahl");
const d = await r.json();
console.log(d.as_of, d.average); // { "CDU/CSU": 27.5, "AfD": 24.0, ... }
console.log(d.seats.distribution); // Sitze je Partei
console.log(d.majority_coalitions[0].parties); // erste mehrheitsfähige Koalitionimport requests, pandas as pd
d = requests.get("https://wahlergebnisse.io/api/umfragen/bayern").json()
polls = pd.DataFrame(d["polls"]) # eine Zeile je Umfrage
print(d["as_of"], d["average"])
# oder direkt als Tabelle
csv = pd.read_csv("https://wahlergebnisse.io/api/umfragen/bayern.csv", sep=";", comment="#")library(jsonlite)
d <- fromJSON("https://wahlergebnisse.io/api/umfragen/nordrhein-westfalen")
d$as_of
d$average # benannte Liste, Prozent je Partei
polls <- d$polls # data.frame, eine Zeile je Umfrage
# amtliche Ergebnisse seit 2017 als CSV
e <- read.csv2("https://wahlergebnisse.io/api/ergebnisse/nordrhein-westfalen.csv")# Übersicht aller Parlamente
curl -s https://wahlergebnisse.io/api/umfragen | jq '.elections[] | {election, as_of}'
# Wahlticker der letzten 45 Tage
curl -s https://wahlergebnisse.io/api/ticker | jq '.events[0]'
# Umfragen als CSV speichern
curl -s -o umfragen-bund.csv https://wahlergebnisse.io/api/umfragen/bundestagswahl.csvLizenz und Quellenangabe
Umfragen: Die Rohdaten stammen aus der Datenbank von dawum.de und stehen unter der Open Database License (ODbL). Die hier bereitgestellte Datenbank ist eine abgeleitete Datenbank im Sinne der ODbL und steht ebenfalls unter ODbL: Sie dürfen sie kopieren, verändern und weitergeben, müssen dawum.de und wahlergebnisse.io nennen und abgeleitete Datenbanken unter derselben Lizenz weitergeben. dawum.de, ODbL 1.0.
Amtliche Ergebnisse: Bundeswahlleiterin und Landeswahlleitungen, Datenlizenz Deutschland, Namensnennung 2.0 (dl-de/by-2-0). Kommunalwahl-Ergebnisse stammen aus den amtlichen Ergebnisdarstellungen der Wahlbehörden. dl-de/by-2-0.
Personen: abgeordnetenwatch.de und Wikidata, beide CC0. Fotos nur mit dem auf der Profilseite genannten Urheber und der dort genannten Lizenz.
Geodaten: © GeoBasis-DE / BKG 2025 (Verwaltungsgebiete VG250), dl-de/by-2-0.
Mittelwerte, Sitzverteilungen, Koalitionen, Wahrscheinlichkeiten, Hauseffekte und Treffsicherheit sind eigene Berechnungen von wahlergebnisse.io, Verfahren unter Methodik. Sie dürfen frei genutzt werden, auch kommerziell, mit Quellenangabe. Methodik.
Empfohlene Zitierweise
wahlergebnisse.io, Bundestagswahl: Umfrage-Mittelwert vom 24.9.2026, https://wahlergebnisse.io/bundestagswahl (Daten: dawum.de, ODbL)Das Feld citation in /api/umfragen/{wahl} enthält diese Zeile fertig mit dem aktuellen Datum. Bei amtlichen Ergebnissen bitte die Wahlleitung als Quelle nennen, bei Personen abgeordnetenwatch.de und Wikidata.
Aktualisierung
- Umfragen werden bei jedem Aufruf spätestens nach einer Stunde neu von dawum.de geladen; die JSON-Antworten sind bis zu eine Stunde zwischengespeichert (Cache-Control im Header).
- Amtliche Ergebnisse, Personen, Amtsinhaber, Wahlkalender und europäische Umfragen laufen täglich über GitHub Actions in das Repository und von dort auf die Seite.
- Am Wahlabend liest eine eigene Automatik die Ergebnisdarstellungen der Wahlleitungen alle 15 Minuten, bis das vorläufige Ergebnis feststeht.
- Was zuletzt wann aktualisiert wurde, steht unter /status und maschinenlesbar unter /api/status.
Grafiken statt Daten?
Wer die fertigen Grafiken braucht, findet unter Einbetten Widgets und Bilder mit Quellenlink für jede Wahl, Gemeinde und jeden Wahlkreis. Für Redaktionen gibt es eine eigene Übersicht. Einbetten · Für Redaktionen.
Fehlt ein Feld oder ein Format? Schreiben Sie an info@bernard.digital.