← All datasets

One-time snapshot

DOT Airline On-Time Performance 2018–2024

45,968,068 reported flight records across all 84 months, with all 109 BTS source fields, exact delay values and separate cancellation/diversion outcomes.

Snapshot coverage

Records: 45,968,068 flight records across 84 months

Coverage: January 2018–December 2024; all 84 months

Format: CSV + Parquet

Package uploaded: 2026-09-19

Listing reviewed: 2026-09-19

The upload and review dates do not extend the source coverage. This is a dated snapshot; future updates are not included.

Get this snapshot

$99one time

CSV and Parquet files for the coverage described here. Review the limitations and sample before purchasing.

Buy dated snapshot

Commercial license terms

View 1,000-row sample

New annual update subscriptions are unavailable. Existing customers can use their purchase download links or contact support.

Known limitations

  • Dated snapshot of all 84 official monthly files for January 2018–December 2024, retrieved September 19, 2026. Future updates are not included. BTS can revise historical records.
  • BTS Reporting Carrier data covers reported nonstop domestic flights, including required and voluntary reporting carriers. It is not every US flight, international service, passenger totals or the separate Marketing Carrier network table. Carrier participation can change across years.
  • Breaking schema repair: all 109 native BTS fields replace the former 47-column reduced table. Parquet adds source_month and source_row. The original monthly CSVs retain agency spelling, formatting, blanks and an empty trailing delimiter column. No rows were deduplicated or dropped. Former route, cancellation_reason and is_delayed fields are removed.
  • There are 1,001,102 cancelled records, 108,460 diverted records and 1,109,916 missing ArrDelay values. Missing arrival delay does not mean on time. Use separate Cancelled, Diverted and ArrDel15 fields, and state the denominator. Diverted arrival outcomes use DivReachedDest and DivArrDelay.
  • The candidate key FlightDate + Reporting_Airline + Flight_Number_Reporting_Airline + Origin + Dest has 2 excess duplicate rows, all retained. source_month + source_row is unique only within this release and is not a stable flight identity across agency revisions.
  • Local HHMM times are strings, preserving leading zeros and the source 2400 convention. They are not UTC timestamps; do not subtract HHMM integers or infer elapsed time without dates/time zones. Negative departure/arrival delays mean early movement and are retained. Delay measures use exact decimal types; blank source values become null in Parquet.
  • Delay-cause minutes are conditional reported outcomes, not universal weather observations. Blank causes are not automatically zero. Post-flight fields are not available when making pre-departure predictions. No airport/weather joins, exposure adjustment, predictive model or risk score is supplied.
  • Airport and airline codes can be reused. Prefer the supplied DOT/airport identifiers for longitudinal analysis and distinguish airport IDs from time-specific airport sequence IDs. Identifiers and code fields remain strings.
  • Every source field and monthly count reconciles to the persisted Parquet with an independent CSV parser. This does not independently certify agency accuracy or flights outside the reporting universe. The 1,000-row sample covers every month but is not statistically representative.
  • Source exceptions retained: 354 records marked neither cancelled nor diverted have missing arrival delay; 1 record has at least one missing flight identifier. See the monthly reconciliation for period counts. No missing values were inferred.

Files in this snapshot

Row counts are per table and should not be added as independent events. Expand a file to see its delivered Parquet field names and types.

parquet/*.parquet — 45,968,068 rows · 111 fields
FieldType
Yearint32
Quarterint32
Monthint32
DayofMonthint32
DayOfWeekint32
FlightDatedate32[day]
Reporting_Airlinestring
DOT_ID_Reporting_Airlinestring
IATA_CODE_Reporting_Airlinestring
Tail_Numberstring
Flight_Number_Reporting_Airlinestring
OriginAirportIDstring
OriginAirportSeqIDstring
OriginCityMarketIDstring
Originstring
OriginCityNamestring
OriginStatestring
OriginStateFipsstring
OriginStateNamestring
OriginWacstring
DestAirportIDstring
DestAirportSeqIDstring
DestCityMarketIDstring
Deststring
DestCityNamestring
DestStatestring
DestStateFipsstring
DestStateNamestring
DestWacstring
CRSDepTimestring
DepTimestring
DepDelaydecimal128(20, 2)
DepDelayMinutesdecimal128(20, 2)
DepDel15decimal128(20, 2)
DepartureDelayGroupsint32
DepTimeBlkstring
TaxiOutdecimal128(20, 2)
WheelsOffstring
WheelsOnstring
TaxiIndecimal128(20, 2)
CRSArrTimestring
ArrTimestring
ArrDelaydecimal128(20, 2)
ArrDelayMinutesdecimal128(20, 2)
ArrDel15decimal128(20, 2)
ArrivalDelayGroupsint32
ArrTimeBlkstring
Cancelleddecimal128(20, 2)
CancellationCodestring
Diverteddecimal128(20, 2)
CRSElapsedTimedecimal128(20, 2)
ActualElapsedTimedecimal128(20, 2)
AirTimedecimal128(20, 2)
Flightsdecimal128(20, 2)
Distancedecimal128(20, 2)
DistanceGroupint32
CarrierDelaydecimal128(20, 2)
WeatherDelaydecimal128(20, 2)
NASDelaydecimal128(20, 2)
SecurityDelaydecimal128(20, 2)
LateAircraftDelaydecimal128(20, 2)
FirstDepTimestring
TotalAddGTimedecimal128(20, 2)
LongestAddGTimedecimal128(20, 2)
DivAirportLandingsint32
DivReachedDestdecimal128(20, 2)
DivActualElapsedTimedecimal128(20, 2)
DivArrDelaydecimal128(20, 2)
DivDistancedecimal128(20, 2)
Div1Airportstring
Div1AirportIDstring
Div1AirportSeqIDstring
Div1WheelsOnstring
Div1TotalGTimedecimal128(20, 2)
Div1LongestGTimedecimal128(20, 2)
Div1WheelsOffstring
Div1TailNumstring
Div2Airportstring
Div2AirportIDstring
Div2AirportSeqIDstring
Div2WheelsOnstring
Div2TotalGTimedecimal128(20, 2)
Div2LongestGTimedecimal128(20, 2)
Div2WheelsOffstring
Div2TailNumstring
Div3Airportstring
Div3AirportIDstring
Div3AirportSeqIDstring
Div3WheelsOnstring
Div3TotalGTimedecimal128(20, 2)
Div3LongestGTimedecimal128(20, 2)
Div3WheelsOffstring
Div3TailNumstring
Div4Airportstring
Div4AirportIDstring
Div4AirportSeqIDstring
Div4WheelsOnstring
Div4TotalGTimedecimal128(20, 2)
Div4LongestGTimedecimal128(20, 2)
Div4WheelsOffstring
Div4TailNumstring
Div5Airportstring
Div5AirportIDstring
Div5AirportSeqIDstring
Div5WheelsOnstring
Div5TotalGTimedecimal128(20, 2)
Div5LongestGTimedecimal128(20, 2)
Div5WheelsOffstring
Div5TailNumstring
source_monthstring
source_rowint64

Inspect the public CSV

import pandas as pd

df = pd.read_csv(
    "https://huggingface.co/datasets/claritystorm/dot-airline-ontime/resolve/main/sample_1000.csv"
)
print(df.shape)
print(df.columns.tolist())
print(df.head())

This CSV is a sample, not the full package. It does not establish complete historical coverage or represent every field’s missingness. License details are on the Hugging Face card.

Source: government source portal · Dataset changelog