Jeder Flug, den du je gemacht hast
Leite eine Buchungsbestätigung weiter. TravStats liest die Route, zeichnet den Bogen auf deinem Globus und merkt sie sich für immer — vom ersten Transatlantik-Flug bis zum Wochenend-Hop.
Deine Reisen · Deine Karte · Deine Geschichte
Leite eine Buchungs-E-Mail weiter — TravStats liest sie aus, zeichnet die Route auf deinem Globus und lässt deine Daten nie deinen Server verlassen.
So funktioniert's
TravStats liest die Bestätigungen, die Airlines, Reedereien und Hotels dir sowieso schicken — als weitergeleitete Mail, als .msg- oder .eml-Datei, als PDF oder als Foto einer Rechnung. Ein Dokument sagt selbst, ob es ein Flug, eine Kreuzfahrt oder ein Hotel ist; eine Bordkarte wird zuerst über ihren Strichcode gelesen; ein Werbe-Newsletter wird kein Flug. Alles andere bleibt, wo es war. Wähle unten ein Beispiel und sieh, was der Parser sieht.
Extracted
Flight
LH 401
From
Frankfurt (FRA)
To
New York JFK (JFK)
Date
15 June 2026
Cabin
Economy
Privacy mode active. These are fictional booking confirmations with fake passenger names, PNRs and card numbers. In your own self-hosted TravStats, your real emails are parsed locally — they never leave your server.
Die besten Ergebnisse erzielt der Ollama-Parser (lokales LLM, empfohlen). Ohne LLM arbeiten die festen Vorlagen — Booking.com, bekannte Airlines, Pauschalreise-Unterlagen — und die Dokumenterkennung; was keine Vorlage kennt, braucht Ollama.
So sieht's aus
Das Web-UI läuft auf deinem Laptop, deinem Tablet und deinem Smartphone. Fünf Ansichten, in denen du die meiste Zeit verbringen wirst:
Globus
Jeder Flug als Großkreis-Bogen, jede Kreuzfahrt als Seeroute — alle Bereiche auf einem Globus.
Statistiken
Ein Reiter pro Bereich und einer für alles; jedes Jahr einzeln oder im Vergleich.
Auf dem Telefon
Dasselbe Web-UI in 390 Pixel Breite — kein eigenes Layout, dieselben Daten.
Kreuzfahrt
Jeder Hafen, jeder Seetag, die Seeroute auf der Karte — und ein Knopf, um sie von Hand zu korrigieren.
Flug
Jeder Flug hat eine Seite, auf der man ihn liest — Sitz, Gate, Buchung, Flugzeug, Preis, Begleiter.
Echte Screenshots aus TravStats 2.6.0 — Demo-Konto, deutsche Oberfläche, unbearbeitet.
Warum TravStats
Leite eine Buchungsbestätigung weiter. TravStats liest die Route, zeichnet den Bogen auf deinem Globus und merkt sie sich für immer — vom ersten Transatlantik-Flug bis zum Wochenend-Hop.
Flüge sind nur der Anfang. Importiere eine Kreuzfahrt aus E-Mail oder PDF: Schiff, jeder Hafen, jeder Seetag — und die Flüge einer Fly-&-Cruise-Reise gleich mit. Die Seeroute wird berechnet und lässt sich von Hand korrigieren.
TravStats lebt in einem Docker-Container auf deiner eigenen Hardware. Keine Werbung. Keine Analytics. Keine AGB, die sich nächste Woche ändern.
Wie viele Kilometer? Wie viele Länder? Meist-geflogene Airline? TravStats beantwortet Fragen über deine eigene Reisegeschichte, die du dir nie gestellt hast.
Wirf deinen Flightradar24-Export, eine OpenFlights-CSV oder eine beliebige Flug-Tabelle rein. TravStats erkennt die Spalten, zeigt dir eine Vorschau und importiert — in Sekunden, nicht einem Abend.
Unterkünfte
Übernachtungen werden geführt wie Flüge und Kreuzfahrten: ein Haus mit Kette, Adresse und Nadel auf der Karte, und darunter jeder Aufenthalt mit Zimmer, Verpflegung, Bewertungen je Kategorie, Preis, Bonusprogramm und der Reise, zu der er gehört. Fotos vom Haus, der Lobby oder dem Blick hängen am Hotel und überleben jeden Aufenthalt.
Der Unterkünfte-Reiter, bevor das erste Hotel drin ist
Eine frische Instanz landet auf einem Startpunkt, nicht auf einer leeren Karte: Hotel anlegen, oder Buchungs-E-Mail, PDF und CSV-Liste importieren. Das Demo-Konto hat keine Aufenthalte, darum ist die Karte hier leer.
Länder
Ein Land zählt nach dem, was beweist, dass du dort warst — nicht danach, wo ein Flug aufgesetzt hat. Die alte Zahl war zu hoch und zu niedrig zugleich: ein vierstündiges Umsteigen zählte als Besuch, ein Land, das du mit dem Auto erreicht und eine Woche lang drin geschlafen hast, gab es gar nicht. Jetzt trägt jedes Land seinen stärksten Beleg.
Übernachtet
Ein abgeschlossener Aufenthalt, ein erfasstes Haus, ein Hafenanlauf über Nacht — oder Ankunft und Abflug an verschiedenen Ortstagen.
Besucht
Ein Aufenthalt am selben Tag oder ein erfasster Ort. Ein Tagesausflug ist kein Umsteigen: MUC–FCO–FRA ist ein Tag in Rom.
Durchgereist
Mit dem Auto durchgefahren, gelesen aus der Standorthistorie einer Dawarich-Anbindung. Die Stufe erscheint erst, wenn ein Konto eine Standorthistorie hat.
Nur umgestiegen
Flugzeug gewechselt und sonst nichts. Standardmäßig nicht in der Kopfzahl — aber ausgegraut in der Liste, nie versteckt, weil Flüge lückenhaft erfasst sind.
Wie streng gezählt wird, ist eine Einstellung: eine Vorgabe der Instanz, die jedes Konto übersteuern darf. Die Wahl ist eine der Belegstufen — es gibt mit Absicht keine Stunden-Schwelle, weil sechs und zwölf Stunden auf einem echten Konto dieselben Länder ergaben. Angaben, die sich widersprechen — eine Adresse in einem anderen Land als dem gespeicherten, ein Check-out vor dem Check-in — landen als Frage im Posteingang. Nichts wird still korrigiert, und keine Markierung ändert eine Zahl von selbst.
Der Reisepass — hinter dem Beta-Schalter
Jedes gezählte Land nennt seine Stufe und die Datensätze dahinter; eine Zeile aufklappen listet Flüge, Kreuzfahrten, Orte und Häuser mit Link. Die Zählweise gilt für alle — nur diese Seite ist Beta.
Der Posteingang
Offene Fragen zu deinen Daten und vorgeschlagene Flug-Updates an einer Stelle. Jede Frage nennt beide Werte und markiert keinen als richtig. Steht immer im Menü; das Abzeichen sagt, ob etwas wartet.
Geld
Ein Preis darf in jeder der 155 ISO-4217-Währungen stehen — in der, in der du wirklich bezahlt hast. Umgerechnet wird zuerst über die Europäische Zentralbank, verbindlich und selbst hostbar, zurück bis 1999; für Währungen, die die EZB nicht führt, über einen freien, schlüssellosen Datensatz, den du als Betreiber ganz abschalten kannst.
Wo keine Quelle einen Kurs hat, bleibt der Betrag in seiner Währung stehen, wird als „kein Kurs“ gekennzeichnet, zählt in keine Summe — und die Summe sagt, wie viele Einträge ihr fehlen. Einen eigenen Kurs darfst du eintragen; er wird immer als deiner ausgewiesen, nie als amtlicher. Kreuzfahrt-Kosten werden je Währung berichtet und nie addiert. 300 USD und 300 EUR werden nirgends mehr zu „600 €“.
Geld & Währungen im Handbuch →Beispiel · Hotelkosten 2025
4.812 €
aus 11 Aufenthalten — 2 ohne Kurs, nicht enthalten
Illustration mit erfundenen Zahlen. Die Formulierungen — „kein Kurs“, „dein Kurs“, „nicht enthalten“ — sind die der App.
Eine Reise, die alles zusammenhält
Flüge, Kreuzfahrten, Aufenthalte und Orte hängen an einer Reise; sie zählt Länder, Reisende und den Gesamtpreis. Der Touren-Reiter und die KI-Zusammenfassung sind auf diesem Demo-Konto sichtbar, weil dort der Beta-Schalter an ist.
Import & Export
Das ganze Logbuch exportiert in eine Tabelle — ein Blatt je Tabelle: Flüge, Kreuzfahrten und ihre Stopps, Häuser und ihre Aufenthalte, Orte und ihre Besuche — und kommt wieder zurück. Spalte A trägt die Id: eine Zeile, die mit einer zurückkommt, ändert den Datensatz, den sie nennt; eine ohne wird angelegt. Flughäfen reisen als IATA-Code, weil ein Code das ist, was du tippen und prüfen kannst.
Sicherheit
Ein Reise-Logbuch weiß, wann du nicht zuhause bist. Seit 2.6.0 kannst du dein Konto entsprechend absichern.
TOTP aus jeder Authenticator-App, mit einmalig nutzbaren Wiederherstellungscodes. Der zweite Faktor wird vor einer erzwungenen Passwortänderung abgefragt, nie danach — ein Test hält die Reihenfolge fest.
Ein Passkey ersetzt das Passwort ganz und gilt zugleich als zweiter Faktor, weil er Besitz plus eine lokale Geste beweist. Die Anmeldung fragt nicht nach einem Namen, damit dein Passwortmanager den Schlüssel selbst anbieten kann. Ein Administrator kann einen ausgesperrten zweiten Faktor zurücksetzen.
Die Seite trägt eine CSP; Skripte kommen nur von deiner Instanz. Die Emoji-Datenbank des Listensymbol-Pickers liefert deine Instanz selbst, nicht ein Content-Netzwerk — so funktioniert sie auch ohne Weg ins Internet.
Jede API-Antwort ist standardmäßig Cache-Control: no-store, weil ein geteilter Cache dabei beobachtet wurde, die Antwort eines angemeldeten Nutzers einem anderen auszuliefern. Die Sitzung liegt in einem HttpOnly-Cookie, nie im Local Storage.
Beta
Unfertige Bereiche liegen hinter einem Schalter in den Admin-Einstellungen. Aus ist die Vorgabe; wer testen will, schaltet ein. Das Admin-Panel listet, was der Schalter einschaltet — gelesen aus derselben Registratur, die die App selbst prüft, damit es nichts behaupten kann, was der Build nicht tut. Jeder Eintrag nennt, warum er noch versteckt ist und was ihn zurückbringt.
Ein eigener Bereich mit Listen, die du selbst baust, kuratierten Checklisten — die Weltwunder, das UNESCO-Welterbe mit 1.247 Stätten, Nationalparks, Museumsschiffe — und dem Import gespeicherter Google-Maps-Listen. Die Routen sind für API und Companion live; das Web-Panel wartet auf den Rest des Bereichs.
Stempel, ein Kontinente-Band und die Ländertabelle mit Beleg je Land. Fertig und mit der Statistik-Seite abgeglichen, aber mitten in einem Release-Kandidaten gelandet — darum hier, bis er eine Release-Prüfung hatte.
Eine Reise gewandert, gefahren, geradelt oder mit der Fähre — Abschnitte mit eigener Linie auf der Karte und einem Routeneditor für die Maus. Funktioniert Ende zu Ende; der Eigentümer hat sie als unfertig eingestuft.
TravStats Companion ist in Erprobung. Die Kopplung eines Telefons — der Geräte-Abschnitt, in dem ein Kopplungscode entsteht — liegt hinter dem Schalter. Keinen Store-Eintrag, kein Termin.
Die Anbindung an eine Dawarich-Instanz liefert aufgezeichnete Strecken für Touren und die Stufe „Durchgereist“. Koordinaten leben nur für die Dauer eines Laufs; gespeichert wird der Tag, das Land und eine Zahl an Messpunkten.
Eine eigene Farbe je Bereich statt der Markenfarbe — offen ist, ob eine Instanz ihre Bereiche umlackieren darf. Und die KI-Zusammenfassung einer Reise, die auf eine fertige Reisen-Seite wartet.
Persönliche Weltrekorde
Jeder TravStats-Nutzer landet irgendwann hier — überrascht von der eigenen Reisegeschichte. Die Zahlen unten sind illustrativ, die Kategorien sind echt.
Über 270 leise kleine Trophäen
Jeder Flug, jede Kreuzfahrt, jede Nacht im Hotel und jeder Ort, den du loggst, schaltet mehr frei als eine Zeile in der Datenbank. TravStats verteilt über 270 Errungenschaften in acht Kategorien — für Langstrecken-Reisende, Hotelketten-Sammler, Länder-Sammler und Liebhaber kurioser Zufälle: Freitag der 13., ein Palindrom-Datum, eine 777 in einer 777. Ein Abzeichen wird nur an einem echten Freischalttag vergeben, und ein einmal erreichtes bleibt erreicht.
Lande in 25 verschiedenen Ländern.
Überstehe einen einzelnen Flug von 12 Stunden oder mehr.
Befahre dein erstes Schiff.
Lege den Erdumfang zurück — 40.075 km geloggt. Noch 14.206 km
Übernachte bei drei verschiedenen Hotelketten. 1 von 3
Besuche Orte in fünf verschiedenen Städten. Orte sind ein Beta-Bereich
+ 270 weitere — von Äquator-Crosser und Antimeridian über Nicht wählerisch (drei Unterkunftsarten) bis Flottenbesuch (zehn Museums-Kriegsschiffe). Du schaltest sie frei, während du reist; TravStats trägt sie rückwirkend nach, wenn du alte Flüge, Kreuzfahrten oder Aufenthalte importierst.
Die Erfolge-Seite
Gefiltert nach Bereich, Kategorie und Stufe; jedes Abzeichen zeigt seinen Fortschritt. Das Demo-Konto steht bei 83.
Spielt gut mit deinem Stack
Ein einzelnes Docker-Image und ein Postgres-Container. Wenn du Container ausführen kannst, kannst du TravStats ausführen.
Oder jede Linux-Maschine mit Docker. Das Wiki hat Setup-Notizen für jede Plattform.
Das Setup dauert etwa zehn Minuten. Das Wiki führt dich durch jeden Schritt.
Häufig gefragt
Nichts ohne dein Zutun. TravStats liest Buchungen, speichert Daten und rendert Karten auf dem Server, auf dem du es betreibst. Kein Cloud-Konto, keine Analytics; die anonyme Nutzungsstatistik ist opt-in und lässt sich abschalten. Standardmäßig ausgehend sind drei Dinge: das Laden von Map-Tiles von OpenStreetMap-kompatiblen Tile-Servern (selbst hostbar), Airline-Logos von einem öffentlichen Logo-Dienst, der dafür nur den Airline-Code erfährt (ohne Internet fehlt das Logo, sonst nichts), und alle sechs Stunden eine Anfrage an GitHub, ob eine neue Version erschienen ist (schlägt offline still fehl). Optional und je nach Konfiguration kommen dazu: Wechselkurse von der Europäischen Zentralbank und ein freier Kursdatensatz für Währungen, die die EZB nicht führt (abschaltbar); Geocoding, wenn du Adressen aus einer Nadel ableiten lässt; Flugdaten-APIs, wenn du Schlüssel einträgst; und Ollama, wenn es auf einem anderen Rechner läuft.
Ja. Mit einem selbst gehosteten Tile-Server (oder vorgecachten Map-Tiles) und ohne konfigurierte Zusatzdienste hat TravStats keine Abhängigkeit zu externen Diensten. Karte und Globus funktionieren air-gapped; Beträge in Fremdwährung bleiben dann in ihrer Währung stehen und werden als „kein Kurs“ markiert, statt geraten zu werden.
Deine Daten liegen in einer Postgres-Datenbank in einem Docker-Volume auf Hardware, die dir gehört. Daran ändert sich nichts, wenn das Projekt verstummt. Das Schema ist dokumentiert; ein vollständiges Backup und der Tabellen-Export legen dir jederzeit jeden Flug, jede Kreuzfahrt und jeden Aufenthalt in ein portables Format.
Nein. TravStats läuft am liebsten unter http://travstats.lan:3010 in deinem lokalen Netzwerk. Wenn du HTTPS oder Remote-Zugriff willst, sind ein Cloudflare-Tunnel oder Tailscale die freundlichste Option — beide funktionieren ohne offene Ports.
Wenig. Ein Flug-Datensatz ist ein paar kB groß; selbst tausende Flüge bleiben deutlich unter 100 MB Datenbank. Das Docker-Image selbst ist rund 200 MB. Nur Fotos, die du zu Reisen, Hotels oder Orten hochlädst, kommen als Dateien im Datenvolume dazu — so groß, wie du sie machst.
Ja. TravStats bringt drei dedizierte Importer mit: einen Flightradar24-Importer für den unveränderten my.flightradar24.com-CSV-Export, einen Universal-CSV-Wizard, der Spalten automatisch erkennt (OpenFlights, FlightDiary, eigene Spreadsheets) und eine Vorschau vor dem Commit zeigt, plus den Tabellen-Export des ganzen Logbuchs, der wieder zurückkommt. Jeder Import lässt sich als Ganzes zurücknehmen. Details im Benutzerhandbuch → Import & Export und unter Tabelle; FlightDiary-Spalten-Mapping auf der Vergleichsseite.
Eine Begleit-App, TravStats Companion, ist in Erprobung. Die Kopplung eines Telefons mit deiner Instanz liegt hinter dem Beta-Schalter, der standardmäßig aus ist; einen Store-Eintrag gibt es nicht. Das Web-UI ist vollständig responsive und läuft gut auf dem Smartphone; ein Home-Screen-Icon lässt es sich nativ anfühlen.
Dokumentation
Vom ersten docker compose up
bis zur API — die komplette Doku ist Teil des Projekts. Open Source,
versioniert, ohne Tracking.
Installation, Erstkonfiguration und der erste Login.
Flüge, Kreuzfahrten, Hotels, Länder, Karten, Statistiken und Achievements.
E-Mail-Parser, Boarding-Pass-OCR und eigene Templates.
Optionale Dienste für Flugdaten, OCR, Mail und Standorthistorie.
REST-API und Personal Access Tokens für Skripte.
Backups, Datenbank, Reverse-Proxy und Admin-Panel.
Wie unterscheidet sich TravStats von anderen Tools?
Wenn etwas hakt — typische Fehler und ihre Lösungen.
Komplette Übersicht im Wiki — durchsuchbar, mit Sidebar und Volltextsuche.