OpenSky Live Flight Tracking Scraper
Pricing
from $1.75 / 1,000 results
OpenSky Live Flight Tracking Scraper
Live ADS-B aircraft positions worldwide plus airport arrival and departure history, from the OpenSky Network. Turns OpenSky's bare positional arrays into named fields, strips padded callsigns and keeps barometric and GNSS altitude apart.
Pricing
from $1.75 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Live ADS-B aircraft positions worldwide, plus airport arrival and departure history, from the community-run OpenSky Network. Around 8,600 aircraft are airborne at any moment.
Free, no API key, no login, no WAF.
What this actor is actually for
OpenSky returns each aircraft as a bare 17-element array:
["4bb143","THY4 ","Turkey",1787703164,1787703164,5.2191,52.5453,10668,false,255.01,122.73,0,null,10980.42,"1166",false,0]
Nothing in the payload says what any position means. Every consumer has to carry the index table, and — worse — an index-based reader keeps working if OpenSky ever inserts a column, silently returning altitude where velocity used to be. This actor turns those into named fields, refuses a row whose layout does not match rather than guessing, and fixes three things upstream gets awkwardly right.
Input
| Field | Type | Default | Meaning |
|---|---|---|---|
mode | enum | liveStates | liveStates (airborne now) or flights (airport history). |
boundingBoxes | string[] | — | lamin,lomin,lamax,lomax, e.g. 51,3,53,6. Empty = whole world. |
icao24Codes | string[] | — | Restrict to specific transponder addresses. |
airports | string[] | — | flights mode. ICAO codes, e.g. EHAM. |
direction | enum | both | flights mode. |
hoursBack | integer | 6 | flights mode, max 24 — see below. |
maxResultsPerQuery | integer | 500 | 0 = unlimited. |
{ "mode": "liveStates", "boundingBoxes": ["51,3,53,6", "40,-75,43,-70"] }
Four things this actor will not let you get wrong
1. Every callsign is whitespace-padded
"THY4 ", not "THY4" — measured on 8,436 of 8,450 non-empty callsigns
worldwide. Any join, group-by or lookup on the raw value fails silently and
completely. Stripped into callsign, with the wire value kept in
callsignRaw.
2. There are two altitudes, both in metres, and they differ on every row
baroAltitude (barometric) and geoAltitude (GNSS) differed on every single
row measured — commonly by 300–450 m. On one live sample the gap was 457 m:
picking the wrong field is a 1,500 ft error.
Both are published, in metres and feet, under names that say which is which,
plus altitudeDeltaM. Neither is presented as "the" altitude.
3. Nulls are invisible in a small sample
A 12-aircraft bounding box showed zero nulls in every field. The identical request over the whole world showed 97 aircraft with no position fix, 895 with no barometric altitude, and 168 with a blank callsign.
A null latitude read as 0 puts an aircraft in the Gulf of Guinea, so
hasPosition is a field rather than something you infer, and the summary
counts aircraftWithoutPosition and aircraftWithoutAltitude per run.
4. A 404 [] means "no flights" or "no such airport" — identically
/flights/arrival?airport=EHAM (quiet window) -> 404 []/flights/arrival?airport=ZZZZ (no such code) -> 404 []
Byte-identical. Upstream cannot tell you which it was, so the ICAO code shape
is validated here (4 letters), and when a well-formed code still returns
nothing the error is no_results_or_unknown_airport — which says plainly that
the two cannot be separated, instead of picking one and sounding confident.
Also: the anonymous history wall
A window 1 day back is served; 2 days back answers hoursBack is capped at 24 with the measurement in the message.
Output
Envelope on every row: _input, _source, _scrapedAt, recordType.
AIRCRAFT_STATE— named fields, both altitudes in m and ft, speed in m/s, knots and km/h, vertical rate in m/s and ft/min,positionSourceName, ISO timestamps,hasPositionFLIGHT— departure/arrival airports, first/last seen, durationSEARCH_SUMMARY— counts,creditsRemaining, null counts,paddedCallsignsCleaned,malformedRowsSkippedERROR—_error+_errorDetail
Credits
Anonymous users get 400 credits a day, shared per IP; a bounding box costs
1–4 depending on area. OpenSky publishes x-rate-limit-remaining — unusual
enough that this actor surfaces it as creditsRemaining on every summary. It
is reported, not used to predict cost: the counter is shared and was observed
to refill mid-run. A free account raises the budget.