Sample dataset · CC0
Flight delays, with the cancellations left in.
Eleven columns of departure record across eight invented carriers and sixteen airports. Most flights are close to on time, a long tail runs hours late, and about two percent are cancelled and carry blanks where the actual departure would be.
11 columns · 100 or 1,000 rows as a file · up to 1,000,000 rows generated here · CSV, JSON, JSONL, Excel, Parquet
Take a file
The 1,000-row file covers eight months of departures. It is a good size for a delay distribution and a small one for anything per route.
| Format | Small | Standard |
|---|---|---|
| CSV | 100 rows (9.9 KB) | 1,000 rows (97.3 KB) |
| JSON | 100 rows (25.8 KB) | 1,000 rows (257.6 KB) |
| JSONL | 100 rows (25.5 KB) | 1,000 rows (254.6 KB) |
| Excel | 100 rows (22.7 KB) | 1,000 rows (149.4 KB) |
| Parquet | 100 rows (6.0 KB) | 1,000 rows (32.5 KB) |
Enough volume for a league table
A hundred thousand flights over the same eight months gives enough volume per route and per carrier for a league table to mean something, which is the analysis this dataset invites.
The first eight rows
The first eight rows of the 1,000-row file. Look at the timestamp format: local time, no zone, space separated.
| flight_id | flight_date | airline | origin | destination | scheduled_dep | actual_dep | dep_delay_min | arr_delay_min | distance_km | status |
|---|---|---|---|---|---|---|---|---|---|---|
| BY2752 | 2026-01-01 | Blue Yonder | LAX | ATL | 2026-01-01 11:20:00 | 466 | cancelled | |||
| TR2153 | 2026-01-01 | Tailspin Regional | PHX | CMH | 2026-01-01 12:10:00 | 2026-01-01 12:21:00 | 11 | 20 | 504 | on time |
| AW3023 | 2026-01-01 | Adventure Works Air | SAN | BOS | 2026-01-01 07:45:00 | 2026-01-01 07:52:00 | 7 | 0 | 1391 | on time |
| NW4729 | 2026-01-02 | Northwind Air | SEA | DEN | 2026-01-02 07:55:00 | 2026-01-02 10:37:00 | 162 | 146 | 1079 | delayed |
| TR3903 | 2026-01-02 | Tailspin Regional | CMH | SEA | 2026-01-02 22:20:00 | 2026-01-02 22:13:00 | -7 | 7 | 1290 | on time |
| PR3582 | 2026-01-02 | Proseware Airlines | BOS | RDU | 2026-01-02 16:00:00 | 2026-01-02 15:58:00 | -2 | -5 | 1181 | on time |
| BY842 | 2026-01-02 | Blue Yonder | BOS | PHX | 2026-01-02 14:20:00 | 2026-01-02 14:49:00 | 29 | 15 | 1394 | delayed |
| AW870 | 2026-01-03 | Adventure Works Air | ATL | LAX | 2026-01-03 13:35:00 | 2026-01-03 13:28:00 | -7 | -19 | 411 | on time |
Eleven columns, and what each one holds
| Column | Type | What it holds | Example |
|---|---|---|---|
| flight_id | text | Airline code plus number, for example NW1284. | BY2752 |
| flight_date | date | Date of the scheduled departure, ascending through the file. | 2026-01-01 |
| airline | text | One of eight invented carriers. | Blue Yonder |
| origin | text | Three letter origin code. | LAX |
| destination | text | Three letter destination code. Never the same as origin. | ATL |
| scheduled_dep | timestamp | Scheduled departure, local time, no zone suffix. Deliberately different in shape from the UTC columns elsewhere in the catalogue. | 2026-01-01 11:20:00 |
| actual_dep | timestamp | Actual departure. Blank on cancelled flights. | |
| dep_delay_min | integer | Minutes late, negative when early. Blank on cancelled flights. | |
| arr_delay_min | integer | Arrival delay in minutes. Usually near the departure delay, sometimes recovered in the air. | |
| distance_km | integer | Great circle distance for the pair, fixed per route. | 466 |
| status | text | on time, delayed, cancelled or diverted. | cancelled |
What it models
An on-time performance export: what was meant to leave when, what actually left when, how late it was at both ends, how far it went and what became of it. It is the shape of the public flight performance data that turns up in every data journalism course, without the licensing question that comes with the real thing.
Eight carriers and sixteen airports, with the origin and destination guaranteed different. Distance is fixed per airport pair rather than drawn per row, so a route has one distance and a distance-versus-delay analysis is not fighting noise it should not have.
The timestamp format is a deliberate problem
scheduled_dep and actual_dep are written as a date and a time separated by a space, in local time, with no zone and no offset. That is the format flight data actually arrives in, and it is a format with a genuine ambiguity in it: a departure at 09:15 in Seattle and a departure at 09:15 in Boston are three hours apart and the file does not say so.
Every other timestamp in this collection is UTC with a Z suffix, precisely so that this one stands out. Loading both into the same tool and watching how each is parsed is a fast way to find out whether the tool is guessing, and guessing about time zones is where a surprising share of production data bugs come from.
The practical consequence is that dep_delay_min is the trustworthy column and any duration you compute yourself from the two timestamps is only trustworthy within a single airport. The dataset gives you both so you can see the difference.
Delays, and the shape of them
About 62 percent of flights depart between twelve minutes early and nine minutes late, which is the tight cluster around the scheduled time that real on-time data shows. The rest run from ten minutes late to about four hours, with the distribution squared so long delays are rare and short ones common.
arr_delay_min is the departure delay give or take about a quarter of an hour, because time can be made up in the air or lost in a holding pattern. That relationship is what makes a scatter plot of the two columns informative: a tight diagonal with visible spread, rather than either a perfect line or a cloud.
Roughly two percent of flights are cancelled. Those rows have blanks in actual_dep, dep_delay_min and arr_delay_min, because a flight that did not leave has no departure time and no delay. Averaging delay without excluding them is fine if your tool ignores nulls and wrong if it treats them as zero, and finding out which is a two-minute experiment on this file.
What people use it for
- Timestamp parsing, on local times with no zone alongside a collection of UTC files.
- Delay distributions with a realistic tight cluster and a long tail.
- Handling rows where three related columns are blank together.
- Route and carrier league tables, once you generate enough volume.
- Computing a duration from two timestamps and comparing it against the given delay.
Open it somewhere useful
Timestamp parsing is the first hurdle here, so open it somewhere that shows you what it decided the column was.
License, and the people in it
This dataset is dedicated to the public domain under CC0 1.0. Put it in a course, a paid product, a test suite, a bug report, a screenshot, a conference talk or a book. There is nothing to ask for, nothing to sign and no attribution required. A link back is welcome and is not a condition.
No real airline, flight number, passenger or crew appears in this file. The eight carriers are invented, the airport codes are real three-letter codes used as labels only, and no departure here corresponds to a flight that existed.
Questions people ask about this file
Why do the timestamps have no time zone?
Because flight data is published in local time and usually without an offset, and pretending otherwise would make the file easier and less useful. Every other timestamp in this collection is UTC with a Z suffix, so loading the two side by side shows you exactly how your tool handles the difference, which is worth knowing before a production dataset teaches you.
What is blank on a cancelled flight?
Three columns together: actual_dep, dep_delay_min and arr_delay_min. A flight that did not leave has no departure time and no delay, so those cells are empty rather than zero. About two percent of rows are affected. If your average delay changes when you exclude them, your tool is treating the blanks as zero and you have found something worth fixing.
Is the arrival delay related to the departure delay?
Yes. It is the departure delay plus or minus about a quarter of an hour, because time can be recovered in the air or lost waiting for a gate. That gives a scatter plot of the two a tight diagonal with real spread, which is more informative than either a perfect correlation or an unrelated cloud.
Are the airlines real?
No. The eight carriers are invented names of the kind used in software documentation, with two-letter codes to match. The airport codes are real three-letter identifiers used purely as labels, because inventing airport codes would make the file harder to read without making it any safer.
More sample data
All twenty datasets · Messy files and every other format · Build your own schema