Daten

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
Übersicht

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.

EndpunktFormatInhaltParameterBeispiel
/api/umfragenJSONÜbersicht aller 18 Parlamente mit aktuellem Umfrage-Mittelwert, Zahl der einbezogenen Umfragen und Links auf die Detail-Endpunkte.keine
/api/umfragen/{wahl}JSON, CSVAlles 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/ergebnisseJSONAlle amtlichen Ergebnisse seit 2017 für Bund, Länder und Europawahl, neueste zuerst.keine
/api/ergebnisse/{wahl}JSON, CSVAlle Ergebnisse eines Parlaments seit 2017, als JSON oder CSV..csv am Ende für die Tabelle
/api/verlauf/{wahl}JSONJede einzelne Umfrage der letzten Jahre als Punkt für Verlaufsgrafiken.tage: Zeitraum in Tagen, 30 bis 5000, Standard 730
/api/tickerJSONDer 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/amtsinhaberJSONBürgermeister und Landräte aller Gemeinden und Kreise aus Wikidata, je Gemeindeschlüssel (AGS) und Kreisschlüssel.keine
/api/personenJSONKompakte 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/statusJSONDatenstand aller Quellen: Alter der dawum-Daten, letzte Ergebnisse je Parlament, europäische Umfragen, nächste Wahlen, was automatisch läuft.keine
/api/sucheJSONOrtssuche über Gemeinden, Kreise, Wahlkreise und Länder, die zehn besten Treffer.q: Suchbegriff (ab 2 Zeichen)
/feed.xmlRSS 2.0Der Wahlticker als RSS-Feed, die 60 neuesten Meldungen mit festen GUIDs.keine
Felder

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

FeldBedeutung
updatedZeitpunkt der letzten Aktualisierung bei dawum
elections[].electionName der Wahl, z. B. Bundestagswahl
elections[].slugKennung für die Detail-Endpunkte
elections[].as_ofDatum des Mittelwerts (neueste einbezogene Umfrage)
elections[].polls_in_averageZahl der Umfragen im Mittelwert
elections[].averageMittelwert je Partei in Prozent, Schlüssel ist das Parteikürzel
elections[].next_electionTermin oder voraussichtlicher Zeitraum der nächsten Wahl
elections[].page, json, csvAdressen der Seite und der Detail-Daten
source, publisherQuelle der Rohdaten mit Lizenz, Herausgeber der Berechnung

/api/umfragen/{wahl} JSON, CSV

FeldBedeutung
as_of, next_election, methodDatum des Mittelwerts, nächste Wahl, Beschreibung des Verfahrens
averageMittelwert je Partei in Prozent
seatstotal, majority, method, threshold_percent und distribution (Sitze je Partei)
house_effectssince, institutes[] mit polls und effects je Partei (Prozentpunkte), adjusted_average
last_electiondate, 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
probabilitiesruns, 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
citationfertige Zitierzeile mit Datum, Adresse und Lizenz
CSV-Spalteninstitut; auftraggeber; veroeffentlicht; zeitraum_von; zeitraum_bis; befragte; methode; dann eine Spalte je Partei. Erste Datenzeile ist der Mittelwert.

/api/ergebnisse JSON

FeldBedeutung
countZahl der Wahlen
items[].parliament, election, dateSlug, Name und Wahltag
items[].statusvorläufig oder endgültig
items[].resultsStimmenanteil je Partei in Prozent, Schlüssel ist die dawum-Partei-ID
items[].otherAnteil der sonstigen Parteien
items[].urlSeite mit dem vollständigen Ergebnis
partyIds, licenseZuordnung der Partei-IDs, Lizenz der Rohdaten

/api/ergebnisse/{wahl} JSON, CSV

FeldBedeutung
parliament, electionSlug und Name der Wahl
items[].date, status, results, other, urlwie bei /api/ergebnisse
CSV-Spaltendatum; status; partei_{id} je Partei; sonstige

/api/verlauf/{wahl} JSON

FeldBedeutung
slug, tageWahl und gewählter Zeitraum
points[].dateVeröffentlichungsdatum der Umfrage
points[].instituteIddawum-Institut-ID
points[].valuesProzent je Partei, Schlüssel ist die dawum-Partei-ID

/api/ticker JSON

FeldBedeutung
generated, countErzeugungszeitpunkt und Zahl der Meldungen
events[].id, date, kindKennung, Datum, Art (umfrage, ergebnis, kommunalwahl, europa, termin, personen)
events[].label, title, textRubrik, Überschrift, Meldungstext
events[].parties[]id, short und value der genannten Parteien, falls vorhanden
events[].url, permalinkZielseite und feste Adresse im Ticker
upcoming[]anstehende Wahltermine im selben Format

/api/amtsinhaber JSON

FeldBedeutung
kreise{schlüssel}, gemeinden{ags}Objekt je Gebiet, Schlüssel ist der amtliche Gebietsschlüssel
name, title, femaleName, Amtsbezeichnung, Geschlecht
party, partyLabeldawum-Partei-ID (0 = parteilos, null = ohne Angabe) und Parteiname aus Wikidata
start, wikipedia, qidAmtsantritt, Wikipedia-Artikel, Wikidata-Kennung
sourceQuelle, Lizenz und Abrufdatum

/api/personen JSON

FeldBedeutung
total, offsetTrefferzahl insgesamt und Startposition
items[].s, nSlug und Name
items[].p, pidParteikürzel und dawum-Partei-ID
items[].pl, parliamentParlamentskürzel und ausgeschriebener Name
items[].wkWahlkreis, falls vorhanden
items[].tm = aktuelles Mandat, k = Kandidatur
items[].img, urlFoto (falls vorhanden) und Profilseite

/api/status JSON

FeldBedeutung
generatedErzeugungszeitpunkt
dawumsource (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

FeldBedeutung
hits[].typeGemeinde, Kreis, Wahlkreis oder Land
hits[].name, subName und Zusatz (Kreis, Land oder Wahl)
hits[].hrefPfad der Seite

/feed.xml RSS 2.0

FeldBedeutung
item.title, link, descriptionRubrik und Überschrift, Zielseite, Meldungstext
item.guidfeste Adresse der Meldung im Ticker
item.category, pubDateRubrik und Datum
Beispiele

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.

JavaScript (fetch)
// 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 Koalition
Python (requests, pandas)
import 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="#")
R (jsonlite)
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")
curl
# Ü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.csv
Bedingungen

Lizenz 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.

Betrieb

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.

Datenstand · /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.

Tabelle als CSV

Für den Download benötigen wir einmalig Ihre E-Mail-Adresse. Danach laden Sie jede Tabelle der Seite direkt herunter.