Jede Wählerin und jeder Wähler hat drei Stimmen. Stimmen geteilt durch gültige Stimmzettel ergibt, wie viele davon genutzt wurden. Im Median sind es 2,96.
Ab 0,25 Stimmen je Zettel unter dem Median der übrigen Bezirke derselben Wahl. Der eigene Wert zählt nicht mit, sonst verschiebt ein Ausreißer seinen eigenen Maßstab.
Die 0,25 sind eine einfache Setzung, keine statistisch hergeleitete Grenze. Bezirke mit kleinerer Abweichung tauchen hier nur auf, wenn die zweite Suche sie gefunden hat, obwohl auch anderswo Stimmen fehlen können. Wer enger prüfen will, lädt die Liste aller Bezirke herunter und setzt die Grenze selbst (siehe Selbst nachrechnen).
Parallelwahlen im selben Bezirk, Wahlberechtigte aus dem Wählerverzeichnis, Kommunalwahl 2021. Sie trennen fehlende Stimmen von einer falschen Zettelzahl.
Briefwahlbezirke tragen je Wahl oft dieselbe Nummer, meinen aber nicht immer dasselbe Gebiet. Dort zählt eine Parallelwahl nur, wenn sie fast dieselbe Zahl an Wählenden meldet (höchstens 2 % Abweichung) und selbst unauffällig ist. Meldet ein Ortsrat oder Stadtbezirksrat mindestens 1,3-mal so viele Wählende wie jede gemeindeweite Wahl im selben Briefwahlbezirk und passen seine Stimmen zu deren Zettelzahl, gilt seine Zettelzahl als falsch.
Kommunen berichtigen Ergebnisse nach der Feststellung durch den Wahlausschuss, und die offenen Daten ändern sich dann ohne Ankündigung. Deshalb lädt das Skript regelmäßig alle Ergebnisdateien neu, friert den Abruf ein und vergleicht ihn Bezirk für Bezirk mit dem vorigen. Jeder Abruf ist eine Zeile. Wo sich Zahlen geändert haben, steht die Bezirksliste zum Download: alt, neu, betroffene Listen, Bewertung. „Gelöst“ heißt, ein Bezirk der Liste fällt mit den neuen Zahlen nicht mehr auf; fällt ein Bezirk neu auf, kommt er in die Liste. Was hinter einer Änderung steht, sagen die Wahlausschüsse; der Abgleich zeigt nur, dass und wann eine Kommune neue Zahlen veröffentlicht hat.
Neue Dateien. Kommen Quellen hinzu, erscheinen ihre Dateien beim ersten Abruf als neu. Es gibt noch nichts zu vergleichen, und sie zählen nicht als geänderte Bezirke. Am 25.09.2026 waren das 592 Dateien von Kommunen, die nicht bei votemanager.kdo.de veröffentlichen (siehe Datenquellen). Später kommen zum Beispiel die Stichwahlen vom 27.09. als neue Dateien hinzu.
Was „Datenstand“ heißt. Überall auf dieser Seite ist damit der Zeitpunkt des jüngsten Abrufs bei votemanager gemeint, in Ortszeit, aus der ersten Zeile des Abgleichs unten. Davon getrennt ist der Stand des Verfahrens: das Datum des jüngsten belegten Eintrags im Ereignis-Log. Beides steht in der Fußzeile, zusammen mit dem Tag, an dem die Seite gebaut wurde.
| Abruf | verglichen mit | Dateien neu | Dateien geändert | Bezirke geändert | davon in der Liste | gelöst | weiterhin auffällig | neu auffällig | Bezirksliste |
|---|---|---|---|---|---|---|---|---|---|
| 05.11.2026 06:44 | 31.10.2026 21:22 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | CSV |
| 31.10.2026 21:22 | 20.10.2026 12:41 | 1 | 1 | 2 | 0 | 0 | 0 | 0 | CSV |
| 20.10.2026 12:41 | 13.10.2026 13:00 | 1 | 3 | 5 | 1 | 1 | 0 | 0 | CSV |
| 13.10.2026 13:00 | 07.10.2026 17:33 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | CSV |
| 07.10.2026 17:33 | 03.10.2026 14:47 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | CSV |
| 03.10.2026 14:47 | 01.10.2026 14:24 | 0 | 25 | 1282 | 21 | 20 | 1 | 8 | CSV |
| 01.10.2026 14:24 | 30.09.2026 00:23 | 0 | 23 | 59 | 14 | 14 | 0 | 0 | CSV |
| 30.09.2026 00:23 | 28.09.2026 23:19 | 0 | 15 | 105 | 3 | 3 | 0 | 0 | CSV |
| 28.09.2026 23:19 | 27.09.2026 20:56 | 0 | 35 | 162 | 1 | 1 | 0 | 0 | CSV |
| 27.09.2026 20:56 | 26.09.2026 22:07 | 6 | 88 | 3160 | 0 | 0 | 0 | 0 | CSV |
| 26.09.2026 22:07 | 26.09.2026 21:07 | 0 | 1 | 6 | 0 | 0 | 0 | 0 | CSV |
| 26.09.2026 21:07 | 26.09.2026 15:18 | 0 | 1 | 35 | 0 | 0 | 0 | 0 | CSV |
| 26.09.2026 15:18 | 25.09.2026 19:10 | 0 | 13 | 235 | 0 | 0 | 0 | 0 | CSV |
| 25.09.2026 19:10 | 25.09.2026 10:01 | 9 | 98 | 1025 | 13 | 5 | 1 | 0 | CSV |
| 25.09.2026 10:01 | 25.09.2026 00:24 | 2 | 6 | 33 | 0 | 0 | 0 | 0 | CSV |
| 25.09.2026 00:24 | 24.09.2026 17:44 | 592 | 1 | 1 | 1 | 1 | 0 | 0 | CSV |
| 24.09.2026 17:44 | 20.09.2026 | 3 | 244 | 1101 | 21 | 16 | 5 | 2 | CSV |
Jede Datei hier ist die aktuelle Fassung. Was vorher drinstand, zeigt die öffentliche Versionsgeschichte: Die Quelldateien liegen im Repository der Seite, jede Änderung ist ein Commit mit Datum. „Historie“ führt zur Liste aller Änderungen einer Datei, „letzte Änderung als Diff“ zeigt Zeile für Zeile, was sich geändert hat.
Kommen neue Pipeline-Daten, etwa nach Feststellung der endgültigen Ergebnisse, behält die aktuelle Datei ihren Namen und ihren Link. Frühere Fassungen stehen in der Versionsgeschichte. Die Stände hier (Stand, Version) kommen direkt aus Git.
Datenquelle sind die Open-Data-CSV-Dateien der votemanager-Instanzen (votemanager.kdo.de), für 2021 dieselben Instanzen unter dem Termin 12.09.2021. Seit dem 24.09.2026 liest das Skript auch die Kommunen, die votemanager auf eigenen Servern betreiben oder eine andere Software (IVU) nutzen; deren Dateien bringt es beim Einlesen in dasselbe Format. Welche Kommune welchen Weg nutzt und wo es keine Datei gibt, steht unter Datenquellen. Das Prüfskript kw_ebenen.py ist offen (MIT-Lizenz).
Für technisch Versierte. Das Skript ist ein Python-Programm (ab Python 3.10, mit pandas, numpy und requests). Es lädt die Wahlergebnisse aller niedersächsischen Kommunen, die sie als Datei veröffentlichen, selbst von deren Servern (votemanager, bei einigen Kreisen IVU; siehe Datenquellen), prüft jeden Bezirk und schreibt die Ergebnisse als CSV-Dateien. Das Dockerfile beschreibt eine Umgebung, in der es ohne eigene Python-Installation läuft. Mit den Daten vom oben genannten Datenstand entstehen die Bezirke der zettelcheck.csv, die diesen Datenstand tragen (Spalte datenstand). Fällt ein Bezirk erst in einem späteren Abruf auf, etwa weil seine Zahlen am Wahlabend noch fehlten, kommt er mit dem Datum dieses Abrufs hinzu und behält die Zahlen von damals. Sind Ergebnisse inzwischen berichtigt, fällt der betreffende Bezirk mit den neuen Daten nicht mehr auf, bleibt aber mit seinem Verfahrensstand in der Liste.
Die Schritte der Prüfung, jeweils als Unterbefehl des Skripts. Alle Optionen nennt kw_ebenen.py <befehl> --help.
probe --prefix NDS votemanager-Instanzen aller Kommunen finden discover Open-Data-Dateien je Instanz auflisten download --alle Dateien laden plausi Stimmen je Stimmzettel prüfen, auffällige Bezirke finden histdownload Bezirksdaten der Kommunalwahl 2021 laden zettelcheck auffällige Bezirke gegen Parallelwahlen, Wahlberechtigte und 2021 prüfen wirkung Anteil fehlender Stimmen je Wahl und Landkreis
Eigene Schwelle, eigene Kommune. Dafür braucht es das Skript nicht: alle_bezirke.csv herunterladen und selbst nachsehen. Darin stehen alle 26.950 geprüften Bezirke aus 396 Kommunen, auch die unter der Grenze, jeweils mit Kommune, Wahl, Stimmen je Zettel, dem Median der übrigen Bezirke derselben Wahl und der Abweichung davon. Die Datei ist nach der Abweichung sortiert, die auffälligsten Bezirke stehen oben, und sie öffnet sich direkt in Excel oder LibreOffice. Nach der eigenen Kommune filtern, bei abweichung eine eigene Grenze setzen, etwa −0,15 statt −0,25, und schauen, welche Bezirke dann auffallen. in_der_liste zeigt, ob ein Bezirk hier schon geführt wird. Bezirke ohne Wert bei abweichung haben keinen Vergleich: Ihre Wahl hat nur diesen einen Bezirk.
| Grenze | Bezirke darunter |
|---|---|
| −0,25 (diese Auswertung) | 224 |
| −0,20 | 309 |
| −0,15 | 469 |
| −0,10 | 925 |
Mehr Bezirke unter einer engeren Grenze heißt nicht mehr Fehler: Je näher am Median, desto öfter erklärt sich eine Abweichung durch den Bezirk selbst, etwa durch viele Wählende, die nicht alle drei Stimmen vergeben. Die Rohausgabe des Skripts mit allen Prüfsummen ist plausibilitaet.csv (Abweichung in abw_vom_median, Gemeindeschlüssel in ags). Im Skript ist die Schwelle die Konstante OUTLIER_TOL.
Wer so in der eigenen Kommune etwas findet, kann genauso vorgehen wie hier: Wahlbezirk und Zahlen bei der Wahlleitung nennen, um Prüfung der Niederschrift bitten, die Einspruchsfrist im Blick behalten. Ein Hinweis an diese Seite hilft, damit der Bezirk hier mit auftaucht.
Fehlen in einem Bezirk Stimmen, folgt die nächste Frage: Hätten sie einen Sitz verschoben? Die Rechnung hat drei Teile. Erstens die Sitzverteilung nach § 36 NKWG: Hare/Niemeyer auf alle Stimmen jeder Liste, mit Mehrheitsklausel, danach innerhalb der Liste die Aufteilung auf Personen- und Listensitze. Zweitens: Wie knapp war der letzte Sitz, verglichen mit den fehlenden Stimmen? Drittens: Wem gehören die fehlenden Stimmen? Das lässt sich nur schätzen, deshalb rechnet der Zettelcheck drei Wege: gleichmäßig wie die gezählten Stimmen im Bezirk, nach der Parallelwahl im selben Bezirk (etwa Kreistag neben Gemeinderat, bereinigt um den üblichen Unterschied beider Wahlen) und nach der Listenlücke, wenn einer Liste auffällig viele Listenstimmen fehlen. Aus der Spanne ergeben sich die Stufen A1 bis F der Kippfälle-Papiere.
Mit einer KI nachrechnen. Den ganzen Weg mit Beispielen, den genauen Regeln der Skripte und Links zum Gesetz enthält der Rechenweg (bei den Papieren). Er ist so geschrieben, dass man ihn zusammen mit den Daten der eigenen Kommune einer KI geben kann: Rechenweg und die CSV-Datei der Kommune hochladen und etwa fragen: „Rechne die Sitzverteilung für den Gemeinderat nach und prüfe, ob die fehlenden Stimmen aus Bezirk 3 einen Sitz verschieben könnten.“ Auch eine KI kann sich verrechnen. Der Rechenweg nennt deshalb eine Probe und die häufigsten Fehler.
Für technisch Versierte. Die Skripte rechnen unabhängig von kw_ebenen.py eine eigene Sitzverteilung und prüfen sie gegen die veröffentlichte. Sie brauchen einen Datenstand von kw_ebenen.py abgleich (Ordner nds/data/stand/<Stand>) und die zettelcheck.csv zu diesem Stand (nds/out/stand/<Stand>). Die Reihenfolge, jeweils mit dem Namen des Stands:
kippfaelle.py <Stand> Räte: Sitzverteilung, Schätzungen A, B, L, Schwellen kippfaelle_bericht.py <Stand> Stufen A1 bis F, Bericht KIPPFAELLE.md und kippfaelle.csv kippfaelle_kreistag.py <Stand> Kreistage und Regionsversammlung
Die Grenze von 0,25 war frei gewählt. Eine zweite Suche geht von der anderen Seite aus: von Räten, in denen wenige Stimmen über einen Sitz entscheiden. Dort kann auch ein Bezirk zählen, der nur leicht unter den übrigen liegt. Ein Bezirk kommt dazu, wenn
Zum Vergleich: Die Grenze von 0,25 entspricht bei Briefwahlbezirken etwa 15, bei Urnenbezirken etwa 8 solcher Standardabweichungen. Die zweite Suche findet also kleinere Abweichungen, aber nur dort, wo sie für die Sitze eine Rolle spielen könnten. Solche Bezirke sind in den Tabellen als „Nachgetragen“ markiert. Das ist ein Hinweis zur Prüfung, kein Nachweis. Die Wahlleitungen haben dazu eine Mail bekommen. Auch mit der zweiten Suche ist die Liste nicht vollständig.
Die zweite Suche lief auf den Datenständen vom 27. und 28.09.2026 und wird nicht fortgeschrieben. Die Einspruchsfristen sind abgelaufen (zwei Wochen nach Bekanntmachung des Wahlergebnisses, § 46 Abs. 3 NKWG); neue Hinweise kämen für eine Prüfung zu spät. Was aus den gelisteten Bezirken wird, zeigt der Datenabgleich weiter.
Skripte: knapp_zuerst.py (Knappheit, Abweichungen), knapp_kipp.py (Kippfall-Stufen), zweite_suche.py (Auswahl), im Analyse-Repo unter nds/out/knapp_zuerst/. In der Verfahrensliste zettelcheck.csv zeigt die Spalte kriterium, welche Suche einen Bezirk gefunden hat (schwelle_025 oder zweite_suche).
Jede Anfrage, jede Antwort und jede Änderung in den offenen Daten ist ein Eintrag im Ereignis-Log dieser Seite, mit Datum, Quelle und, wo vorhanden, Beleg. Daraus entstehen der Stand je Bezirk und Kommune und der Zeitstrahl.
Ein Bezirk ist „offen“, bis die Anfrage verschickt ist, dann „angefragt“, nach einer Reaktion der Wahlleitung „in Prüfung“. Am Ende steht eines von drei Ergebnissen: „berichtigt“, wenn die Zahlen jetzt passen; „aufgelöst“, wenn die Wahlleitung nachgesehen hat und die Abweichung plausibel begründet ist; „geprüft, bleibt offen“, wenn sich das festgestellte Ergebnis nur noch per Einspruch ändern ließe. Dann steht beim Bezirk, ob die fehlenden Stimmen überhaupt Sitze verschieben könnten.
„Berichtigt“ geht auch ohne Antwort: Veröffentlicht eine Kommune neue Zahlen und fällt der Bezirk damit nicht mehr auf, trägt der Datenabgleich das ein. Leert eine Kommune ihre Zahlen für eine Neueingabe, bleibt der Bezirk offen und ist als „Neueingabe“ markiert. Die Einspruchsfrist einer Kommune bestimmt der Rechner auf der Seite Einsprüche.