Datadory notebook

Historical Ads-B Flight Data Download Data: Dataset Structure and Field Coverage

1,744 datasets. Pick your catch. Every guide here is built on what the catalog can actually prove.

1,744 datasets. Pick your catch.

What fields does an ADS-B state vector include?

Every row is a positional array keyed by the ICAO24 transponder address, so a cargo-freighter track decomposes like this:

  1. icao24 - the unique 24-bit address in hex (sample value 3c6444), the join key to registries and type codes.
  2. callsign - up to 8 characters (DLH441), null when none was received.
  3. Position - WGS-84 longitude and latitude in decimal degrees, nullable.
  4. Altitude - barometric and geometric, both in meters.
  5. Motion - ground velocity in m/s, true track in degrees clockwise from north, vertical rate positive climbing and negative descending.
  6. Context - origin country inferred from the ICAO24 block, Unix timestamps time_position and last_contact, transponder squawk, special-purpose indicator flag, and position_source (0 ADS-B, 1 ASTERIX, 2 MLAT, 3 FLARM) so mixed-sensor tracks stay identifiable.
  7. category - when extended=1 is requested, a 0-20 aircraft category where 6 marks heavies above 300,000 lbs.

A sample capture from the 21 August 2026 research pass shows callsign EJU46EK at 11,551.92 meters geometric altitude doing 245.06 m/s - the granularity you get on every covered movement.

How do you query the OpenSky archive step by step?

Three routes, split by how far back you need:

RouteReachHow it worksLimits
Trino SQL (history)State vectors since 2013; flights since 2016Apply under My OpenSky, then query trino.opensky-network.org, catalog minio, schema oskyEvery query must filter on the partition column (hour for vectors, day for flights); two concurrent plus two queued queries; 30-minute timeout
Full-day snapshotsWhole-day archivesPrebuilt scientific datasetsAd-hoc bulk extraction is discouraged

A concrete pattern for a cargo-utilisation study: filter state_vectors_data4 on one hour partition, keep rows where callsign matches your target operator prefix and on_ground = false, then aggregate velocity and vertical-rate samples into cruise-versus-climb shares. Repeat per hour partition inside the two-concurrent limit. Note that Trino accounts are granted by application review to university-affiliated researchers, government organizations and aviation authorities - budget that approval step before your project timeline assumes data in hand.

How does ADS-B Exchange compare for bulk position archives?

ADS-B Exchange Historical Data, cataloged in Datadory's agricultural-products-services slice as a related dataset, is the commercial mirror image of OpenSky: unfiltered coverage including military, private and blocked (PIA/LADD) airframes, sold rather than research-gated. Its archive splits into four product families:

  1. readsb-hist snapshots - all airborne traffic archived at fixed intervals back to July 2016, tightening to roughly five-second sampling from May 2020.
  2. Per-hex trace files - organized by date and last two hex digits, with a high-resolution variant sampled twice per second from February 2022.
  3. flights-ax-v2 - complete origin-to-destination flight records in CSV from July 2024; a verified 1 July 2026 file held 101,898 flights with callsign, origin and destination codes, scheduled times, registration, hex, equipment and wake category.
  4. operations-ax-v2 - takeoff and landing events with runway used; the same-date verification file held 327,410 events across 28 columns.

Delivery runs over public sample buckets, REST API, gRPC streaming and S3-compatible pulls as gzip-compressed JSON or CSV, and a daily basic aircraft database holds 615,568 airframes. The catch mirrors OpenSky's in reverse: subscriptions carry minimum annual commitments, exclude one-time extracts, and gate backfills up to ten years behind payment - first-of-month complete data is published free but scoped strictly to testing and evaluation.

When should you use statistics instead of raw positions?

Raw state vectors answer where an aircraft flew; they say nothing about what it carried. Pair the telemetry with the slice's public-domain aggregates, which cover commercial reuse without negotiation:

Where does FlightAware fit for cargo tracking?

FlightAware Live Flight Tracking fuses more than 41,000 terrestrial ADS-B receivers with Aireon satellite ADS-B, ACARS datalink and radar feeds, against a database of over 699 million flights and roughly 201,000 arrivals tracked per day. Freighter movements sit throughout it - FedEx, UPS and Atlas Air flights are tracked identically to passenger traffic - which makes the public site a fast qualitative check on cargo routings.

Pick up where this leaves off

Every one of these ships with sample rows before you commit to anything.

Air Freight & Logistics Global, wherever volunteer-fed ADS-B/Mode-S/FLARM receivers…

OpenSky Network Historical & Live Flight Data

icao24 · callsign · origin_country …+14 more

Air Freight & Logistics Global - 41,000+ terrestrial ADS-B receivers plus space-based…

FlightAware Live Flight Tracking

Air Freight & Logistics United States and its territories for domestic tables

BTS T-100 Air Carrier Statistics (Form 41 Traffic)

UniqueCarrier · AirlineID · OriginAirportID …+4 more

Air Freight & Logistics United States: roughly 132 domestic FAF regions (states, state…

Freight Analysis Framework Version 5 (FAF5)

dms_orig · dms_dest · sctg2 …+2 more

Agricultural Products & Services Global - more than 10,000 airports, 13,000 airlines and 250…

AviationStack Flight & Airport API

Agricultural Products & Services Global - worldwide community receiver coverage including…

ADS-B Exchange Historical Data

icao · operation · airport …+9 more

Want rows instead of a pitch? Name the datasets.

API, files, or your warehouse. Daily, weekly, or hourly.

Get a sample

Questions worth asking

How far back does OpenSky's historical ADS-B archive go?

state_vectors_data4 stores state vectors with unlimited retention back to 2013 and flights_data4 has held flight-level rows since 2016 - together trillions of records across 14 Trino tables. The live REST API reaches only 30 days back, so anything older requires a Trino query filtered on the hour or day partition column.