Every flight you've ever taken
Forward a booking confirmation. TravStats reads the route, draws the arc on your globe, and remembers it forever — from the first transatlantic to last weekend's hop.
Your trips · Your map · Your story
Forward a booking email — TravStats reads it, draws the route on your globe, and never lets your data leave your server.
How it works
TravStats reads the kind of confirmation emails airlines send you anyway — pulls out the flight, the route, the date. Every other detail stays where it was. Pick a sample below to see what the parser sees.
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.
Best results come from the Ollama parser (local LLM, recommended). The pure-regex fallback without an LLM is still under development.
What it looks like
The web UI works on your laptop, your tablet and your phone. Three of the views you'll spend the most time in:
Globe
Every flight as a great-circle arc, every cruise as a sea route.
Distance
247,381 km
6.2× around Earth
Countries
38
of 195
Top airlines
Statistics
Distance, countries, top airlines, top aircraft, top airports.
Flight
LH 401
15 June 2026 · A340-600 · Economy
FRA
10:35
JFK
13:25
Distance
6,206 km
Tag
Family
Flight detail
Aircraft, route, distance, tags — every flight is a small story.
Mockups stand in for the live UI until v1.3 ships. Real screenshots will replace these images soon.
Why TravStats
Forward a booking confirmation. TravStats reads the route, draws the arc on your globe, and remembers it forever — from the first transatlantic to last weekend's hop.
Flights are just the start. Import a cruise from email or PDF: the ship, every port, every sea day — and the flights of a fly & cruise trip along with it. Hotels and places of interest join the map next.
TravStats lives in a Docker container on your own hardware. No ads. No analytics. No terms of service that change next week.
How many miles? How many countries? Most-flown airline? TravStats answers questions you didn't think to ask about your own travel history.
Drop your Flightradar24 export, an OpenFlights CSV, or any per-flight spreadsheet. TravStats maps the columns, shows you a preview, and imports — in seconds, not an evening.
Personal world records
Every TravStats user lands here eventually — surprised by their own travel history. The figures below are illustrative, but the categories are real.
58 quiet little brags
Every flight you log unlocks more than a line in a database. TravStats hands out 58 achievements across five categories — for the long-haulers, the frequent flyers, the country collectors and the weird-route enthusiasts. The stories you forgot you were collecting.
Touch down in 25 different countries.
Survive a single flight 12 hours or longer.
Log your hundredth flight.
Cover the Earth's circumference — 40,075 km logged. 14,206 km to go
Land on five different continents. Africa & Oceania left
Cross the Arctic Circle on a single flight.
+ 52 more — from Equator Crosser and Antimeridian to Star Alliance Loyalist and Red-Eye Specialist. You unlock them as you go; TravStats backfills them retroactively when you import old flights.
Plays well with your stack
A single Docker image and a Postgres container. If you can run containers, you can run TravStats.
Or any Linux box with Docker. The wiki has setup notes for each platform.
Set up takes about ten minutes. The wiki walks you through every step.
Frequently asked
No. TravStats parses booking emails, stores flights, and renders maps entirely on the server you run it on. No telemetry. No analytics. No cloud account. The only outbound traffic by default is to fetch map tiles from OpenStreetMap-compatible tile servers — and even that can be self-hosted if you prefer.
Yes. With a self-hosted tile server (or pre-cached map tiles), TravStats has zero dependency on any external service. The map and globe both work air-gapped — perfect for a homelab on a private network.
Your data lives in a Postgres database in a Docker volume on hardware you own. Nothing about that changes if the project goes quiet. The schema is documented; the JSON-export feature lets you dump every flight and cruise to a portable format any time.
No. TravStats is happiest at http://travstats.lan:3010 on your local network. If you want HTTPS or remote access, a Cloudflare Tunnel or Tailscale link is the friendliest option — both work without exposing ports.
Tiny. A flight record is a few kB; even thousands of flights stay well under 100 MB of database. The Docker image itself is around 200 MB. No video, no images, no blobs.
Yes. Since v1.5, TravStats ships three dedicated importers: a Flightradar24 importer that takes the unmodified my.flightradar24.com CSV export, a universal CSV mapping wizard that auto-detects column headers (OpenFlights, FlightDiary, custom spreadsheets) and shows a preview before commit, plus an Excel re-import for round-trip edits. Details in the User Guide → Import & Export; FlightDiary column mapping is on the comparison page.
Not yet. The web UI is responsive and works well on mobile; you can add a home-screen icon to make it feel native. A proper PWA install path is on the roadmap.
Documentation
From your first docker compose up
to the API — the docs are part of the project. Open source,
versioned, no tracking.
Installation, first-time setup and the initial login.
Flights, cruises, maps, statistics and achievements.
Email parser, boarding-pass OCR and custom templates.
Optional APIs for flight data, OCR and mail.
REST API and personal access tokens for scripts.
Backups, database, reverse proxy and admin panel.
How does TravStats differ from other tools?
When something breaks — common issues and how to fix them.
Full overview in the wiki — searchable, with sidebar and full-text search.