For most of aviation history, "who is flying over this region right now?" was a question only air navigation service providers could answer well. Today a researcher with a laptop can query open ADS-B data for most of the commercial traffic over Europe or North America. That shift is real and useful for safety research, crisis response, environmental studies and newsroom verification. It is also easy to over-trust. This post explains how ADS-B works, what open networks can and cannot tell you, and how we model a fused air picture in Kimo Defense Intelligence.
§01What is ADS-B and how does it work?
ADS-B (Automatic Dependent Surveillance–Broadcast) is a surveillance technique in which an aircraft determines its own position, usually from GNSS, and broadcasts it together with other state data. It is automatic because no pilot or controller input is needed, dependent because it depends on the aircraft's own navigation system, and broadcast because anyone with a receiver can listen. On the widely used 1090 MHz Extended Squitter link, each message is a 112-bit frame carrying a 24-bit ICAO aircraft address and a 56-bit payload whose first five bits, the type code, say what the message contains: identification, surface position, airborne position, velocity or status1Source 1 · Junzi Sun, TU Delft (mode-s.org)The 1090 Megahertz Riddle: ADS-B basicsmode-s.org.
Broadcast rates differ by message type. Under ADS-B version 2, airborne position and airborne velocity are each sent at about 2 Hz, identification at 0.2 Hz in flight, and aircraft status jumps from 0.2 Hz to 1.25 Hz when the squawk code changes1Source 1 · Junzi Sun, TU Delft (mode-s.org)The 1090 Megahertz Riddle: ADS-B basicsmode-s.org. That last detail matters for alerting: a change of transponder code is announced more frequently, so an emergency code reaches receivers quickly.
| Message group (type code) | What it carries | Nominal rate (v2, airborne) |
|---|---|---|
| 1–4: Identification | Callsign and emitter category | 0.2 Hz |
| 9–18: Airborne position (baro altitude) | CPR-encoded latitude/longitude, barometric altitude | 2 Hz |
| 19: Airborne velocity | Ground speed, track, vertical rate | 2 Hz |
| 20–22: Airborne position (GNSS height) | Position with geometric altitude | 2 Hz |
| 28: Aircraft status | Emergency/priority status, squawk | 0.2 Hz, 1.25 Hz on change |
| 31: Operational status | Version, NIC/NAC/SIL supplements | 0.4 Hz, 1.25 Hz on change |
Every position also comes with quality indicators. NIC (Navigation Integrity Category) expresses a containment radius the aircraft is confident its true position lies within, and NACp (Navigation Accuracy Category for position) expresses a 95% accuracy bound; NACp 9, for example, means the estimated position uncertainty is under 30 m2Source 2 · Junzi Sun, TU Delft (mode-s.org)The 1090 Megahertz Riddle: Uncertainty, accuracy and integritymode-s.org. These fields are easy to ignore when you only want dots on a map. They turn out to be the most interesting part of the feed, as we explain in Mapping GNSS interference with ADS-B quality indicators.
§02What can open receiver networks actually see?
A single ADS-B receiver is a small radio, an antenna and a decoder. Networks aggregate thousands of them. The OpenSky Network, built by academic researchers, started as a sensor network in Central Europe; its founding paper reported coverage of roughly 720,000 km² and more than 30% of European commercial air traffic after about two years of operation4Source 4 · Schäfer, Strohmeier, Lenders, Martinovic, Wilhelm — IPSN 2014, 2014Bringing up OpenSky: A large-scale ADS-B sensor network for researchopensky-network.org. It has grown considerably since, but the principle holds: you see what volunteers' antennas can hear.
OpenSky exposes this data as state vectors, one row per aircraft per time step, through a public REST API. A state vector includes the ICAO24 address, callsign, longitude, latitude, barometric and geometric altitude, velocity, track, vertical rate, squawk, an SPI flag, an on_ground flag and a position_source that tells you whether the position came from ADS-B, ASTERIX, MLAT or FLARM3Source 3 · OpenSky NetworkOpenSky REST API documentationopenskynetwork.github.io. Anonymous users get the most recent vectors at 10-second resolution with a daily credit quota; authenticated users get 5-second resolution and up to an hour of history3Source 3 · OpenSky NetworkOpenSky REST API documentationopenskynetwork.github.io.
§03What open ADS-B data cannot tell you
Good analysis starts with honest limits. We keep this list on the wall of our defense team:
- Absence is not evidence. If an aircraft disappears, the first suspects are receiver coverage, terrain and low altitude, not anything dramatic. Coverage thins out over oceans, mountains and sparsely populated areas.
- Not every aircraft broadcasts. Equipage rules vary by airspace and aircraft type, and some aircraft legitimately fly without ADS-B Out. An open air picture is a picture of cooperative traffic.
- Messages are unauthenticated. ADS-B carries no cryptographic protection; the security literature has long documented that messages can be spoofed or injected5Source 5 · Strohmeier, Lenders, Martinovic — IEEE Communications Surveys & Tutorials (arXiv 1307.3664), 2015On the Security of the Automatic Dependent Surveillance-Broadcast Protocolarxiv.org. Treat implausible tracks as data-quality events first.
- Positions are only as good as the aircraft's navigation. When GNSS is degraded, ADS-B positions degrade with it, which is exactly what NIC and NACp reveal2Source 2 · Junzi Sun, TU Delft (mode-s.org)The 1090 Megahertz Riddle: Uncertainty, accuracy and integritymode-s.org.
- Identity is partial. The ICAO24 address identifies a transponder, not a flight plan. Callsigns may be missing or reused; enrichment requires reference data.
§04How multilateration and reference data fill the gaps
Some aircraft carry Mode S transponders that reply to radar interrogations but do not broadcast their position; Mode S adds altitude reporting and data exchange to classic secondary-radar replies6Source 6 · SKYbrary Aviation SafetyTransponderskybrary.aero. When enough time-synchronized receivers (typically four or more) hear the same reply, the network can compute a position from the time difference of arrival. That technique, multilateration (MLAT), is why OpenSky labels some positions with position_source = 23Source 3 · OpenSky NetworkOpenSky REST API documentationopenskynetwork.github.io. MLAT positions are independent of the aircraft's own GNSS, which makes them a useful cross-check, but they need dense receiver geometry and are usually less precise.
Reference layers turn raw tracks into context: airport and airspace boundaries, terrain, OpenStreetMap infrastructure for points of interest, aircraft registry data for type and operator, and the regulatory meaning of transponder codes. None of these are glamorous. All of them are required to answer "is this normal?"
§05How to fuse ADS-B into one air picture
Scroll sideways to see the full diagram.
We think of fusion as four modeling steps, each of which produces a table you can query on its own. This is the structure of the Airspace watch template and of the step-by-step ADS-B ingestion guide.
- Step 2:
Deduplicate and order
Multiple receivers hear the same message. Keep one row per aircraft per time bucket, preferring ADS-B over MLAT and fresher over staler, and drop vectors whose implied speed between consecutive points is physically implausible.
- Step 3:
Segment into flights and tracks
Split each aircraft's timeline into flights using ground/air transitions and gaps longer than a threshold (we default to 15 minutes airborne). A flight is the unit analysts reason about.
- Step 4:
Score confidence and enrich
Attach coverage (how many receivers heard it), source type, quality indicators and reference context. The output is a
tracksmodel that maps, alerts and Ask Kimo all share.
select icao24, ts, lat, lon,
haversine_km(lat, lon, prev_lat, prev_lon)
/ nullif(extract(epoch from ts - prev_ts), 0) * 3600 as implied_kmh
from (
select *,
lag(lat) over w as prev_lat,
lag(lon) over w as prev_lon,
lag(ts) over w as prev_ts
from state_vectors
window w as (partition by icao24 order by ts)
) v
where haversine_km(lat, lon, prev_lat, prev_lon)
/ nullif(extract(epoch from ts - prev_ts), 0) * 3600 > 1500;The 1,500 km/h ceiling is a deliberately generous plausibility bound for civil traffic, not a physics constant; tune it per region and aircraft category. Rows that fail it are not deleted. They are routed to a data-quality view, because a burst of impossible jumps in one area is itself a signal worth investigating.
- ADS-B
- MLAT
§06What is an open-data air picture good for?
Used with its limits in mind, a fused air picture supports a wide range of legitimate work:
- Safety and resilience monitoring: emergency squawks, unusual descents, and regional GNSS degradation. EASA notes that GNSS interference is increasing, particularly in regions surrounding conflict zones, and around the Mediterranean, the Black Sea, the Middle East, the Baltic Sea and the Arctic7Source 7 · EASAGlobal Navigation Satellite System outages and alterationseasa.europa.eu.
- Crisis and disaster response: which airports are still receiving traffic after a storm, where medical and firefighting flights are operating.
- Research and journalism: verifying claims about airspace closures or diversions with reproducible queries.
- Operations analytics: holding patterns, diversions and delay propagation for airports, operators and regulators.
In Kimo, the Airspace view renders the tracks model on a map with confidence styling, and Alerts run rules against the same model. Because both sit on one definition, the number in the alert is the number on the map. For alert design, read Emergency squawks and flight anomalies; for the full methodology and limits, the Airspace Awareness from Open Data whitepaper.
§07Where should the air picture live?
Many teams that collect their own receiver data cannot ship it to a third-party cloud. With Kimo Bridge, the receiver database stays on your server and Kimo queries it live through an outbound-only tunnel; with Cloud mode, Kimo keeps a synced copy for long history. Fully disconnected environments can run Kimo air-gapped, as described in the on-premise docs.
Frequently asked questions
Is ADS-B data public?
ADS-B messages are broadcast unencrypted on open frequencies, so anyone with a receiver can decode them. Networks such as OpenSky make aggregated data available for research under their own terms of use, which you should read before building on them.
How accurate are ADS-B positions?
Usually very accurate, because they come from the aircraft's GNSS receiver. Each position is accompanied by NACp and NIC values that state its accuracy and integrity; when GNSS is degraded those values drop, and you should treat the position with caution.
Why do aircraft disappear from ADS-B maps?
Most often because no receiver can hear them: low altitude, terrain, distance from the nearest antenna or ocean areas. Less often, the transponder is off or the aircraft is not ADS-B equipped. A gap is a coverage question before it is anything else.
What is the difference between ADS-B and MLAT positions?
ADS-B positions are reported by the aircraft itself. MLAT positions are computed by the receiver network from the arrival times of a transponder signal at several receivers. MLAT is independent of the aircraft's navigation system but needs good receiver geometry and is usually less precise.
Can I use Kimo without sending receiver data to the cloud?
Yes. Kimo Bridge lets Kimo query your receiver database live without storing it, and Kimo can also run fully on-premise or air-gapped.
Sources
7 references- The 1090 Megahertz Riddle: ADS-B basics (opens in a new tab)Junzi Sun, TU Delft (mode-s.org)mode-s.org
Frame structure, type codes and broadcast rates.
- The 1090 Megahertz Riddle: Uncertainty, accuracy and integrity (opens in a new tab)Junzi Sun, TU Delft (mode-s.org)mode-s.org
NIC, NACp and SIL definitions and tables.
- OpenSky REST API documentation (opens in a new tab)OpenSky Networkopenskynetwork.github.io
State vector fields, position_source values, resolution and credits.
- Bringing up OpenSky: A large-scale ADS-B sensor network for research (opens in a new tab)Schäfer, Strohmeier, Lenders, Martinovic, Wilhelm — IPSN 20142014opensky-network.org
720,000 km² coverage and more than 30% of European commercial traffic after almost two years of operation.
- On the Security of the Automatic Dependent Surveillance-Broadcast Protocol (opens in a new tab)Strohmeier, Lenders, Martinovic — IEEE Communications Surveys & Tutorials (arXiv 1307.3664)2015arxiv.org
Lack of security measures in ADS-B.
- Transponder (opens in a new tab)SKYbrary Aviation Safetyskybrary.aero
Transponder modes and special codes.
- Global Navigation Satellite System outages and alterations (opens in a new tab)EASAeasa.europa.eu
Regions affected by GNSS interference.
External sources were accessed at the time of writing. Kimo product details, customers and figures in examples are illustrative unless a source is cited.
- #ADS-B
- #Airspace
- #OSINT
Writes about ADS-B, Airspace, OSINT, GNSS.
Kimo people and customers mentioned are illustrative; example charts use simulated data unless a source is cited. All aircraft data shown in Kimo is simulated.



