Die Datenquelle: Tankerkönig
Tankerkönig ist ein gemeinnütziges Projekt, das seit 2014 lückenlos alle Kraftstoffpreise aller deutschen Tankstellen aufzeichnet.
Jede Tankstelle ist gesetzlich verpflichtet, Preisänderungen innerhalb von 5 Minuten zu melden — diese Meldungen landen alle bei Tankerkönig.
Tankerkönig stellt die Daten kostenlos unter einer Creative-Commons-Lizenz zur Verfügung:
als Live-API (aktuelle Preise) und als PostgreSQL-Dumps (die gesamte Historie seit 2014).
Tankerkönig speichert nicht den Preis jeder Tankstelle zu jeder Minute. Stattdessen wird nur dann ein Eintrag gespeichert, wenn sich ein Preis ändert. Eine Tankstelle mit stabilem Preis taucht also tagelang nicht in der Datenbank auf. Das bedeutet: "Günstigster Preis an Tag X" heißt genauer "günstigste Preismeldung an Tag X".
Der Import: Wie kommen die Daten in die Datenbank?
Mehrere Dumps können nacheinander importiert werden — die Daten werden zusammengeführt, nicht überschrieben. So landen Daten aus verschiedenen Zeiträumen alle in derselben Datenbank.
Die Datenbankstruktur
Die importierten Dumps erzeugen zwei Tabellen in PostgreSQL:
Alle Preise stehen als ganze Zahlen in der Datenbank, in Zehntel-Cent. Der Wert 1850 bedeutet also 1850 Zehntel-Cent = 185,0 Cent = 1,850 €. Ungültige Einträge haben den Wert -1 (Tankstelle hat keinen Preis gemeldet). Wir filtern alle Preise unter 500 (= 0,50 €) heraus, um fehlerhafte Daten zu ignorieren.
Die drei Auswertungen
Methode: Diese Auswertung braucht keine historischen Daten — sie nutzt die Live-API von Tankerkönig. Der südlichste Punkt Deutschlands ist das Haldenwanger Eck in Bayern (47,2701° Nord / 10,1789° Ost), nahe Oberstdorf. Die API erlaubt es, alle Tankstellen innerhalb eines Radius um einen Koordinatenpunkt zu suchen — wir suchen mit dem maximal erlaubten Radius von 25 km um diesen Punkt.
Die zurückgegebenen Stationen werden nach dem Breitengrad (lat) aufsteigend sortiert. Kleiner Breitengrad = weiter südlich. Die Station ganz oben in der Liste ist damit die südlichste.
Ergebnis: Auf der Karte erscheint die gefundene Station mit einem Marker, daneben alle weiteren Stationen aus dem Suchradius.
Methode: Wir durchsuchen die importierte Datenbank (Dumps 3 + 4) nach allen E10-Preismeldungen zwischen dem 1. Januar 2023 und dem 31. Dezember 2023. Jede Zeile in der gas_station_information_history-Tabelle, die in diesen Zeitraum fällt und einen gültigen E10-Preis enthält (über 500 Zehntel-Cent = über 50 Cent), wird berücksichtigt.
Die Abfrage sortiert alle Einträge nach Preis aufsteigend und gibt die 100 günstigsten zurück. Da nur Preisänderungen gespeichert sind, bedeutet ein Eintrag: "An diesem Datum hat diese Tankstelle ihren E10-Preis auf diesen Wert gesenkt."
Was bedeutet das konkret: Wenn eine Tankstelle am 15. März auf 1,499 € senkt und am 20. März wieder erhöht, erscheint sie mit dem Eintrag vom 15. März in der Liste. Es ist der günstigste gemeldete Preis, nicht der Durchschnitt.
Methode: Das Datum ist frei wählbar (Standard: vorgestern, da aktuelle Daten manchmal noch nicht vollständig sind). Die Abfrage sucht in Dump 5 (15.2.2025 bis heute) nach allen Diesel-Preismeldungen, deren Zeitstempel — umgerechnet in die Berliner Zeitzone — auf den gewählten Tag fällt.
Die Zeitzone ist wichtig: Eine Meldung um 23:30 Uhr UTC ist in Deutschland bereits 0:30 Uhr des nächsten Tages. Wir rechnen deshalb alle Zeitstempel explizit in Europe/Berlin um, bevor wir nach Datum filtern.
Ergebnis: Die 100 Tankstellen mit dem niedrigsten gemeldeten Dieselpreis an diesem Tag, sortiert nach Preis. Auf der Karte sieht man die Verteilung über Deutschland — günstige Tankstellen finden sich oft in bestimmten Regionen oder an Autobahnzubringern mit starker Konkurrenz.
Technischer Aufbau
Die App läuft als Docker-Stack auf einem TrueNAS-Server. Drei Container arbeiten zusammen:
Browser → nginx → FastAPI → PostgreSQL → FastAPI → nginx → Browser.
Für die Südlichste-Tankstelle-Abfrage: Browser → nginx → FastAPI → Tankerkönig-API → FastAPI → nginx → Browser.
nginx fungiert dabei als CORS-Proxy, weil Browser direkte API-Anfragen zu externen Servern aus Sicherheitsgründen blockieren würden.