OpenSky Flight Scraper — Live Aircraft & ADS-B Data avatar

OpenSky Flight Scraper — Live Aircraft & ADS-B Data

Pricing

from $1.50 / 1,000 results

Go to Apify Store
OpenSky Flight Scraper — Live Aircraft & ADS-B Data

OpenSky Flight Scraper — Live Aircraft & ADS-B Data

Scrape live aircraft states and flight history from OpenSky Network. Extract icao24, callsign, position, altitude, velocity, heading for aviation analytics, flight tracking, and ATC research. No API key, no login.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

OpenSky Flight Scraper — Live Aircraft, ADS-B Data & Real-Time Positions

Scrape real-time aircraft positions and live ADS-B data from a global grid of aviation centers — keyless, no login, thousands of aircraft per single run.

What does OpenSky Flight Scraper do?

OpenSky Flight Scraper pulls live aircraft state data from a real-time ADS-B (Automatic Dependent Surveillance–Broadcast) feed covering 52 major aviation centers worldwide. Each run sends concurrent requests to multiple regional endpoints, deduplicates aircraft by ICAO24 hex address, and pushes thousands of clean records to your dataset in seconds.

The engine works without any API key or authentication — just run it. Under the hood it queries a global grid spanning Europe, North America, the Middle East, Asia, Africa, Oceania, and South America. You can scrape the entire world (default) or focus on a bounding box or a single custom center point. Each aircraft record includes tail number (registration), aircraft type code, ICAO24 hex, flight callsign, precise lat/lon, barometric altitude, ground speed, heading, and vertical rate — everything you need for flight tracking, research, or analytics pipelines.

Duplicate aircraft are automatically filtered: if an aircraft appears in range of two adjacent grid centers, only one record is pushed. The result is a clean, deduplicated snapshot of global air traffic.

Who is it for?

  • Aviation researchers and data scientists who need periodic global flight snapshots for modeling, routing, or traffic studies.
  • Flight tracking developers building apps that display live aircraft on a map — without paying per API call.
  • Logistics and cargo companies monitoring specific regions for inbound freight aircraft.
  • Airport operations teams wanting a programmable data feed of airspace activity near their facility.
  • Journalists and analysts covering aviation events, flight patterns, or airspace incidents.

Use cases

  • Build a live flight map dashboard pulling thousands of aircraft positions every few minutes.
  • Monitor aircraft traffic in a specific region (Europe, APAC, North America) for capacity planning.
  • Analyze commercial vs. private vs. cargo aircraft ratios by aircraft type codes.
  • Track specific airlines by filtering results on callsign prefix (BAW=British Airways, UAL=United, etc.).
  • Export daily snapshots to Google Sheets or a database for longitudinal traffic trend analysis.

Why use OpenSky Flight Scraper?

  • Completely keyless: no API account, no signup, no credentials required from you.
  • 16 output fields per aircraft: ICAO24, callsign, registration, type, lat/lon, altitude (baro + geo), speed, heading, vertical rate, squawk, category, region, and timestamp.
  • Global coverage: 52 aviation centers across 6 continents; one default run captures 1,000–6,000+ aircraft.
  • Bounding box or center-point filtering: focus on a country, region, or arbitrary lat/lon + radius.
  • Export to CSV, JSON, Excel, Google Sheets: built-in Apify export formats.
  • Pay-per-result: charged only for actual aircraft records, not compute time.

What data can you extract?

Each aircraft record contains:

FieldTypeDescription
icao24string24-bit ICAO Mode S transponder address (hex)
callsignstringFlight callsign or airline designator (trimmed)
registrationstringAircraft tail number (e.g. G-VIIE, N12345)
aircraftTypestringICAO type code (B738, A320, B77W, C172, etc.)
longitudenumberWGS-84 longitude in decimal degrees
latitudenumberWGS-84 latitude in decimal degrees
baroAltitudenumberBarometric altitude in meters
geoAltitudenumberGPS/geometric altitude in meters
onGroundstring"true" if on ground, "false" if airborne
velocitystringGround speed in m/s
trueTrackstringTrack angle in degrees (0=north, 90=east)
verticalRatestringClimb/descent rate in m/s (positive=climbing)
squawkstringATC transponder squawk code
categorystringADS-B emitter category (A1=light, A3=medium, A5=heavy)
snapshotTimestringUnix timestamp of this data snapshot
regionstringNearest aviation center label (e.g. London, Paris, Tokyo)

Example output record:

{
"icao24": "4005bd",
"callsign": "BAW19N",
"registration": "G-VIIE",
"aircraftType": "B772",
"longitude": -2.576523,
"latitude": 51.740671,
"baroAltitude": 7521,
"geoAltitude": 7986,
"onGround": "false",
"velocity": "223",
"trueTrack": "278.35",
"verticalRate": "7",
"squawk": "7761",
"category": "A5",
"snapshotTime": "1783521184",
"region": "London"
}

How to use

Option A: Full global snapshot (default)

  1. Open the actor input form.
  2. Leave all fields at defaults (mode = liveStates, no bbox, no center point).
  3. Click Run. The actor queries all 52 global grid centers concurrently.
  4. When finished, download your dataset as JSON, CSV, or Excel.

Input example:

{
"mode": "liveStates"
}

Option B: Bounding box (regional focus)

Specify lamin, lomin, lamax, lomax to restrict the scraper to grid centers that fall inside your bounding box.

Input example — Europe only:

{
"mode": "liveStates",
"lamin": 35,
"lomin": -15,
"lamax": 72,
"lomax": 45
}

Option C: Single center point

Set centerLat and centerLon to query one specific location. Adjust radius (in nautical miles, default 100) as needed.

Input example — Dubai airspace:

{
"mode": "liveStates",
"centerLat": 25.2,
"centerLon": 55.4,
"radius": 150
}

Input parameters

ParameterTypeDefaultDescription
modestringliveStatesScraping mode — currently only liveStates is supported
laminnumberMinimum latitude for bounding box filter
lominnumberMinimum longitude for bounding box filter
lamaxnumberMaximum latitude for bounding box filter
lomaxnumberMaximum longitude for bounding box filter
centerLatnumberLatitude of a single custom center point
centerLonnumberLongitude of a single custom center point
radiusinteger100Search radius in nautical miles (max ~150)
proxyobjectOptional Apify proxy configuration

Full input JSON:

{
"mode": "liveStates",
"lamin": 35,
"lomin": -15,
"lamax": 72,
"lomax": 45,
"radius": 100
}

Output example

{
"icao24": "4070e3",
"callsign": "EXS22AP",
"registration": "G-JZHO",
"aircraftType": "B738",
"longitude": -2.447724,
"latitude": 51.38118,
"baroAltitude": 1120,
"geoAltitude": 1280,
"onGround": "false",
"velocity": "108",
"trueTrack": "340.44",
"verticalRate": "-6",
"squawk": "5310",
"category": "A3",
"snapshotTime": "1783521184",
"region": "London"
}

Tips for best results

  • Use bounding box to cut runtime: for a continental region (Europe, North America), specifying a bbox reduces queries from 52 to 8–14 centers and returns results faster.
  • Schedule every 5–10 minutes for near-real-time tracking — the data refreshes roughly every 8–12 seconds at source.
  • Filter airborne only: post-process with onGround === "false" to exclude parked aircraft.
  • Filter by callsign prefix to track a specific airline: BAW = British Airways, UAL = United, DLH = Lufthansa.
  • Use aircraftType to separate heavy jets (B77W, A388) from regional (E190, CRJ9) or light (C172) aircraft.
  • Altitude in feet: baroAltitude and geoAltitude are output in meters; multiply by 3.28084 to convert to feet.
  • region field tells you which grid center detected the aircraft — useful for geographic grouping without geocoding.
  • Custom center + radius is ideal for monitoring a specific airport's approach and departure corridor.
  • Large radius above 150nm may time out — keep radius at 100–120nm for reliability.
  • Run during peak hours (06:00–22:00 UTC) to maximize aircraft counts; overnight snapshots are thinner.

Integrations

IntegrationHow
Google SheetsUse the built-in Apify → Google Sheets integration to stream rows on each run finish.
SlackSet a webhook to send run completion alerts with aircraft count.
Zapier / MakeTrigger downstream workflows (email, CRM, database write) when a run completes.
WebhooksPOST to any URL on run success — pass defaultDatasetId to fetch the data.
SchedulerApify scheduler runs the actor every N minutes for continuous tracking.

API usage

cURL:

curl -X POST "https://api.apify.com/v2/acts/logiover~opensky-flight-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"liveStates","lamin":35,"lomin":-15,"lamax":72,"lomax":45}'

Node.js (Apify client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover~opensky-flight-scraper').call({
mode: 'liveStates',
lamin: 35, lomin: -15, lamax: 72, lomax: 45,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'aircraft');

Python:

from apify_client import ApifyClient
client = ApifyClient(token='YOUR_TOKEN')
run = client.actor('logiover~opensky-flight-scraper').call(run_input={
'mode': 'liveStates', 'lamin': 35, 'lomin': -15, 'lamax': 72, 'lomax': 45
})
items = client.dataset(run['defaultDatasetId']).iterate_items()
for aircraft in items:
print(aircraft['callsign'], aircraft['latitude'], aircraft['longitude'])

Use with AI agents (MCP)

This actor is accessible via the Apify MCP server, letting AI agents query live flight data during reasoning. Example prompt for an AI agent:

"Run the OpenSky Flight Scraper for the European bounding box (lamin=35, lomin=-15, lamax=72, lomax=45). Then tell me how many heavy (category A5) aircraft are currently airborne over Europe, and list the top 5 by altitude."

Connect via: npx @apify/mcp-server --token YOUR_TOKEN

FAQ

Does this require an API key or account?

No. The actor uses publicly accessible ADS-B data endpoints with no key, login, or registration required from you.

How many aircraft will one run return?

A full global run typically returns 1,000–6,000+ unique aircraft depending on time of day. European or North American bbox runs return 500–1,500. A single city center at 100nm returns 50–300.

How often is the data updated?

The underlying ADS-B receivers refresh every 8–12 seconds. Since this actor takes a single snapshot, schedule it on Apify every 5–10 minutes for near-real-time tracking.

Why does originCountry show null?

This actor uses a low-latency ADS-B feed that provides registration (tail number) but not country of registration as a named field. You can infer country from the registration prefix: G-=UK, D-=Germany, N=USA, F-=France, etc.

What does the category field mean?

ADS-B emitter categories: A1=light (under 15,500 lb), A2=small, A3=medium, A5=heavy (over 300,000 lb), B1=glider, C0=surface vehicle. Most commercial jets are A3 or A5.

Some fields are null — why?

Not all aircraft transmit all fields via ADS-B. Older transponders (Mode C) do not broadcast registration or aircraft type. Military aircraft often suppress many fields.

Can I get historical flight data?

No — this actor captures live snapshots only. For historical data, consider Apify's scheduling features to build your own archive by running the actor periodically.

Can I filter by airline or aircraft type?

Not in-actor — filter post-run. Use Apify's dataset filtering or export to a spreadsheet and filter on callsign prefix or aircraftType.

Will a very large radius (200nm+) work?

Radii above roughly 150nm can cause timeouts due to response size. Keep radius at 100–120nm for reliable results.

Is this scraping within the API's terms of use?

The data source is a publicly accessible, free-to-use ADS-B network. No authentication or rate-limit bypassing is performed. Review the source terms of service before using data commercially.

What is the fastest way to get just one airport's traffic?

Use centerLat + centerLon + radius: 50 to focus on the immediate airport area. For example, Heathrow: {"centerLat":51.477,"centerLon":-0.461,"radius":50}.

Can I run this at scale for multiple regions simultaneously?

Yes — create multiple Apify tasks, each with a different bbox, and trigger them in parallel. Or use one run with a large bbox and let the built-in grid handle it.

ADS-B broadcasts are public radio signals transmitted by aircraft on 1090 MHz and freely received by anyone with appropriate equipment. This actor accesses a public, unauthenticated API that aggregates community-received ADS-B data. No private data, passenger information, or proprietary feeds are accessed. Use the extracted data in accordance with the applicable terms of service of the data source and your local regulations. This tool is intended for research, analytics, and development purposes.

  • B2B Lead Scraper — Extract business leads with contact details from OpenStreetMap across any industry and country.
  • ComTrade Data Scraper — Pull import/export statistics from the UN Comtrade database for trade flow analysis.
  • Google Flights Scraper — Search and extract flight prices, routes, and availability from Google Flights.