DeusAcc/flight-fare-history

Observed flight fares over time: median, 10th percentile and minimum per route and departure month. Updated daily.

0

33 commits

updated Sep 23, 2026

See the code

See what people are saying

README

Flight fare history — what routes actually cost, measured

823,323 observed fares on 49,726 city pairs, collected continuously since 2026-06-14. Not a search engine snapshot: the same routes are observed again and again, so what you get here is the distribution of a route's price, which is the thing a live search can never tell you. Updated daily. Source: https://piratefly.com/?src=github

Files

FileOne row perColumns
fares-by-month.csvroute × departure monthobservations, median, 10th percentile, minimum
routes.csvrouteobservations, median, minimum, months covered, first/last observation
summary.jsontodaytotals, observation window, published thresholds
daily/<date>.jsoneach daythe immutable daily snapshot — this directory is the series

Prices are in EUR, per one-way fare as advertised, including the price shown at collection time.

What it answers that a flight search cannot

A search engine tells you today's price. This tells you whether today's price is good: the median of what the same route has actually cost, the 10th percentile (what a good deal looks like), the lowest ever observed, and which departure months are cheap on that route. That judgement needs a history, and a history cannot be reconstructed after the fact — which is why this file exists.

The live version of this judgement, per route and in one call, is a free public MCP server (flight_price_verdict, cheapest_months, when_to_book): https://piratefly.com/?src=github

Method, and what it does not cover

  • Every row is an observed advertised fare, stored at collection time, never a modelled estimate.
  • A route × month group is published only with at least 5 observations; thinner groups are left out entirely instead of being filled with a plausible-looking median.
  • Observation window: 2026-06-14 → 2026-09-22. Anything older than that does not exist here.
  • Coverage follows where fares were found, not a designed sample: city pairs are unevenly represented and this is not a random sample of the world's air traffic.
  • One-way advertised fares only. No taxes breakdown, no seat class, no availability guarantee, and a fare observed is not a fare you can still buy.

Citing

Piratefly flight fare history, 2026-09-23. 823,323 observed fares, 25,389 routes. https://piratefly.com/?src=github

Licence: CC BY 4.0 — use it, say where it came from.

dataset
flights
open-data
prices
time-series
travel

Contributors

DeusAcc

33 commits

DeusAcc/flight-fare-history

Observed flight fares over time: median, 10th percentile and minimum per route and departure month. Updated daily.

0

33 commits

updated Sep 23, 2026

See the code

See what people are saying

README

Flight fare history — what routes actually cost, measured

823,323 observed fares on 49,726 city pairs, collected continuously since 2026-06-14. Not a search engine snapshot: the same routes are observed again and again, so what you get here is the distribution of a route's price, which is the thing a live search can never tell you. Updated daily. Source: https://piratefly.com/?src=github

Files

FileOne row perColumns
fares-by-month.csvroute × departure monthobservations, median, 10th percentile, minimum
routes.csvrouteobservations, median, minimum, months covered, first/last observation
summary.jsontodaytotals, observation window, published thresholds
daily/<date>.jsoneach daythe immutable daily snapshot — this directory is the series

Prices are in EUR, per one-way fare as advertised, including the price shown at collection time.

What it answers that a flight search cannot

A search engine tells you today's price. This tells you whether today's price is good: the median of what the same route has actually cost, the 10th percentile (what a good deal looks like), the lowest ever observed, and which departure months are cheap on that route. That judgement needs a history, and a history cannot be reconstructed after the fact — which is why this file exists.

The live version of this judgement, per route and in one call, is a free public MCP server (flight_price_verdict, cheapest_months, when_to_book): https://piratefly.com/?src=github

Method, and what it does not cover

  • Every row is an observed advertised fare, stored at collection time, never a modelled estimate.
  • A route × month group is published only with at least 5 observations; thinner groups are left out entirely instead of being filled with a plausible-looking median.
  • Observation window: 2026-06-14 → 2026-09-22. Anything older than that does not exist here.
  • Coverage follows where fares were found, not a designed sample: city pairs are unevenly represented and this is not a random sample of the world's air traffic.
  • One-way advertised fares only. No taxes breakdown, no seat class, no availability guarantee, and a fare observed is not a fare you can still buy.

Citing

Piratefly flight fare history, 2026-09-23. 823,323 observed fares, 25,389 routes. https://piratefly.com/?src=github

Licence: CC BY 4.0 — use it, say where it came from.

dataset
flights
open-data
prices
time-series
travel

Contributors

DeusAcc

33 commits