Flight Tracker — Live Aircraft Data for AI Agents
Pricing
from $1.50 / 1,000 results
Flight Tracker — Live Aircraft Data for AI Agents
Real-time flight tracking tool for AI agents & LLMs. Look up live aircraft position, altitude, speed, heading & on-ground status by flight/callsign, region or airport — plus airport departures/arrivals. MCP-callable real-time grounding for travel assistants & RAG.
Flight Tracker — Live Aircraft Position, Altitude & Speed for AI Agents
A real-time flight tracker and aircraft status API built for AI agents, LLMs and RAG pipelines. This flight tracker lets you track flights and pull live aircraft position, altitude, speed, heading and on-ground status by flight number / callsign, region or airport — live telemetry that no language model knows from its training data. No login, no coding: enter a flight and read a clean, structured answer back.
Export flight data to JSON, CSV, Excel, or API — or call the actor directly as an MCP / tool-call grounding source from any agent.
✈️ Built for AI travel assistants, chatbots, agents, aviation dashboards, logistics & OSINT teams — anyone who needs real-time flight tracking instead of stale training data. "Where is flight DLH717 right now? How high, how fast, which direction?" — this actor answers with live telemetry an LLM can't produce on its own.
🔎 Why scrape flight data?
Flight data is live, high-value and perishable. An aircraft's position, altitude and speed change every few seconds, so a snapshot from five minutes ago is already wrong. Large language models have a fixed knowledge cutoff and zero access to the current sky — ask any chatbot where a flight is right now and it will hallucinate. The only way to answer correctly is to call a real-time flight tracking source at request time.
Collecting this data by hand is impractical. Public flight-radar websites throttle automation, hide data behind maps and JavaScript, and were never designed to feed an agent. This flight tracker turns the community-driven OpenSky Network air-traffic feed into a clean, token-efficient JSON record — one object per aircraft — that drops straight into an LLM context window, a tool response, a dashboard or a spreadsheet.
Because every record is small and structured, it is ideal grounding for retrieval-augmented generation and agentic workflows: a flight number goes in, live telemetry comes out, and your agent answers with facts instead of guesses.
Common reasons people scrape and track flight data:
- ✈️ Ground an AI travel assistant so it can report a flight's live position and status
- 🤖 Give an LLM agent a real-time tool it can call for current aircraft telemetry
- 🗺️ Power a live map or operations dashboard with aircraft positions by region
- 📦 Monitor cargo / logistics flights and estimate where freight is in the air
- 📊 Sample live air traffic over a continent for research and analytics
- 🛩️ Watch a specific callsign (e.g. a corporate or special-interest aircraft) while it flies
- 🛫 Pull recent airport departures and arrivals for an airport-activity feed
✨ What this flight tracker does
Give the actor a flight, a region or an airport, and it returns live, structured aircraft data from the OpenSky Network:
- ✅ Flight / callsign lookup — pass one or more flight numbers (
DLH717,BA123,UAL456) and get the matching airborne aircraft. Airline IATA numbers such asLH717are auto-mapped to their ICAO callsign (DLH717) for you. - ✅ Regional live traffic — return every aircraft currently flying over Europe, North America, South America, Asia, Oceania, Africa, the Middle East, or a Worldwide mixed sample.
- ✅ Airport departures & arrivals — list recent departures or arrivals for 45+ major airports by ICAO code (requires free OpenSky credentials).
- ✅ Live position — latitude / longitude in WGS-84.
- ✅ Altitude — both barometric and geometric altitude in metres.
- ✅ Speed — ground speed in m/s and km/h.
- ✅ Heading — true track in degrees, plus vertical rate (climb / descent).
- ✅ On-ground status, transponder squawk, country of registration and unique ICAO24 address.
- ✅ Position freshness — a dedicated
timePositiontimestamp (when the coordinates were last updated) and the position source (ADS-B, MLAT, ASTERIX or FLARM) so you know how good the fix is. - ✅ De-duplicated output — each aircraft appears once per snapshot (verified 0 duplicates across a 500-aircraft run).
- ✅ Standby / MCP mode — run it as a warm HTTP API that answers each request instantly, with no cold start — perfect for agent tool-calls.
- ✅ Export anywhere — JSON, CSV, Excel, HTML, XML, or straight from the Apify API.
Everything above is what the actor actually captures — no promises it can't keep.
🎯 Use cases
- AI travel assistants — answer "where is my flight?" with live position, altitude and speed instead of a cutoff-era guess.
- LLM agents & copilots — register the actor as an MCP tool so Claude, ChatGPT or a custom agent can fetch real-time aircraft telemetry on demand.
- RAG & chatbots — inject live flight data into the context window for grounded, current answers.
- Aviation & ops dashboards — stream live aircraft positions by region onto a map or control panel.
- Logistics & cargo tracking — follow freighter callsigns and estimate in-air progress.
- Journalism & OSINT — monitor a specific aircraft or watch traffic over a region of interest.
- Research & analytics — sample air-traffic density, routes and aircraft mix by continent (a single worldwide snapshot spanned 31 countries in testing).
- Travel & delay tools — combine live position with airport arrival feeds to reason about flights.
📥 Input
Configure everything from the visual input form or pass a JSON input via the API. Every field is optional — with no input the actor returns a live worldwide snapshot.
| Field | Type | Description |
|---|---|---|
flights | array | Flight numbers or callsigns to locate, e.g. ["DLH717", "BA123"]. IATA (LH717) is auto-mapped to the ICAO callsign (DLH717). Leave empty for region / snapshot mode. |
region | select | When flights is empty: all live aircraft in a region — worldwide, europe, north-america, south-america, asia, oceania, africa, middle-east, or none. |
airports | array | ICAO codes to list departures/arrivals for, chosen from 45+ major airports (e.g. EDDF, KJFK, EGLL). Requires OpenSky credentials. |
airportsCustom | array | Extra airports by ICAO code (e.g. KSEA, OMAA), merged with the ones selected above. |
airportDirection | select | arrival or departure for the airports above (last ~2 hours). |
openSkyClientId | string | Optional free OpenSky OAuth2 client ID — unlocks airport flights and a higher rate limit. |
openSkyClientSecret | string | OpenSky OAuth2 client secret (paired with the client ID). |
maxItems | integer | Maximum aircraft / flights to return. 0 = no limit. Default 100. |
proxyConfiguration | object | Apify Proxy settings. On by default — required so OpenSky requests stay fast and reliable. |
Example 1 — Locate specific flights
{"flights": ["DLH717", "BA123"],"proxyConfiguration": { "useApifyProxy": true }}
Example 2 — All live aircraft over Europe
{"flights": [],"region": "europe","maxItems": 500,"proxyConfiguration": { "useApifyProxy": true }}
Example 3 — Arrivals at Frankfurt (with free OpenSky credentials)
{"airports": ["EDDF"],"airportDirection": "arrival","openSkyClientId": "your-client-id","openSkyClientSecret": "your-client-secret"}
📤 Output
Each result is one clean JSON record per aircraft — small enough to feed straight into an LLM. Live-position records (flight and region modes) look like this — a real record from a recent worldwide run:
{"callsign": "UAL70","icao24": "aa9321","matchedQuery": null,"originCountry": "United States","latitude": 44.5102,"longitude": -66.7877,"baroAltitudeM": 10058.4,"geoAltitudeM": 10142.22,"velocityMs": 234.6,"velocityKmh": 845,"headingDeg": 58.54,"verticalRateMs": 0,"onGround": false,"squawk": "7107","timePosition": "2026-11-02T00:12:08.000Z","lastContact": "2026-11-02T00:12:08.000Z","positionSource": "ADS-B","departureAirport": null,"arrivalAirport": null,"firstSeen": null,"lastSeen": null,"source": "live-position","scrapedAt": "2026-11-02T00:12:14.397Z"}
In airport mode, the position fields are null and the departure/arrival fields are filled instead:
{"callsign": "DLH441","icao24": "3c6675","departureAirport": "EDDF","arrivalAirport": "KIAD","firstSeen": "2026-11-02T12:05:11.000Z","lastSeen": "2026-11-02T13:58:40.000Z","source": "airport-departure","scrapedAt": "2026-11-02T14:00:02.000Z"}
Output field reference
| Field | Description |
|---|---|
callsign | Aircraft callsign (e.g. DLH717). Populated for ~99% of airborne aircraft. |
icao24 | Unique ICAO 24-bit transponder address — always present; the natural de-duplication key. |
matchedQuery | The flight/callsign query this record matched (flight mode only; null in region/airport mode). |
originCountry | Country inferred from the ICAO24 address. |
latitude / longitude | Live position in WGS-84 decimal degrees. |
baroAltitudeM / geoAltitudeM | Barometric and geometric altitude in metres. |
velocityMs / velocityKmh | Ground speed in m/s and km/h. |
headingDeg | True track / heading in degrees (north = 0°). |
verticalRateMs | Climb (positive) / descent (negative) rate in m/s. |
onGround | true if the aircraft is on the ground. |
squawk | Transponder squawk code. |
timePosition | Timestamp of the last position (coordinate) update. |
lastContact | Timestamp of the last update of any kind. |
positionSource | Origin of the position fix: ADS-B, MLAT, ASTERIX or FLARM. |
departureAirport / arrivalAirport | Estimated airports — airport mode only. |
firstSeen / lastSeen | First/last seen times — airport mode only. |
source | live-position or airport-arrival / airport-departure. |
scrapedAt | When the record was extracted (ISO 8601). |
Some fields are populated only when available. In a recent 500-aircraft worldwide run, icao24, originCountry, velocity*, heading, onGround, positionSource, lastContact and scrapedAt were 100% filled and latitude/longitude/timePosition 99.6%. The altitude and verticalRateMs fields filled for ~88% of records — they are null for aircraft that are on the ground (no altitude to report), and squawk filled for ~61% because not every transponder broadcasts a squawk code. The airport-mode fields (departureAirport, arrivalAirport, firstSeen, lastSeen) are null for live-position records, and the live-position fields are null in airport mode — by design.
🔁 Pagination & scale
The OpenSky states/all endpoint is a bulk, single-call snapshot — one request returns every aircraft currently airborne in the chosen region (or the whole world), often hundreds to thousands of records at once, so there is no page-by-page crawl to wait on. The actor requests the snapshot, de-duplicates by aircraft, and returns the set. In flight mode it pulls the worldwide snapshot and filters it down to your callsigns; in airport mode it loops over each airport you selected.
Use maxItems to cap the result set (default 100, set 0 for everything). A worldwide snapshot can contain several thousand live aircraft, so raise maxItems when you want the full regional picture and lower it when you only need a small, token-light sample for an agent. In a recent verification run, a single worldwide call returned 500 unique aircraft in about 2 minutes with zero duplicates. Records are de-duplicated per snapshot by icao24 + source, so you never get the same aircraft twice in one run.
⚙️ How to use
- Open the actor on the Apify Console and fill in the input form (or leave it empty for a worldwide snapshot).
- Click Start and watch records stream into Storage → Dataset.
- Export the results as JSON, CSV, Excel, HTML or XML, or fetch them from the Apify API.
- Schedule the actor (e.g. every minute) to keep a live feed fresh.
- Automate it: trigger runs and pull results via Make, Zapier, n8n, Google Sheets, a webhook, or the Apify API clients for JavaScript and Python.
- Use it as an AI tool: every Apify actor is callable over MCP at
mcp.apify.com, so you can register this flight tracker as a tool in Claude Desktop, VS Code, LangChain (ApifyActorsTool), LlamaIndex, CrewAI, the Vercel AI SDK or any MCP client — or run it in Standby mode as a warm HTTP endpoint for instant tool-call responses.
💡 Tips
- Flights only appear while airborne. If a lookup returns nothing, the aircraft hasn't taken off yet or has already landed — that's expected, not an error.
- Enter IATA flight numbers (
LH717,AA100) directly; the actor maps them to ICAO callsigns automatically, but you can also pass the raw ICAO callsign (DLH717) if you have it. - For a continent-wide feed, leave
flightsempty, pick aregion, and raisemaxItems— a region snapshot can hold thousands of aircraft. - Add free OpenSky OAuth2 credentials to unlock airport departures/arrivals and a higher rate limit — get them at opensky-network.org under Account → API Client.
- Check
positionSourceandtimePositionwhen precision matters: anADS-Bfix with a very recenttimePositionis the most reliable (every record in the latest worldwide run was ADS-B). - Keep the Apify Proxy on (the default) — OpenSky times out the shared platform IP, so a datacenter proxy keeps lookups fast and reliable.
❓ FAQ
Is scraping flight data legal? This actor uses the public OpenSky Network API, a community-driven, research-friendly air-traffic data source. Respect OpenSky's terms and rate limits and use the data lawfully. For heavier usage, add free OpenSky OAuth2 credentials.
Do I need an API key or login? No login is needed for the core modes — flight lookup and regional live traffic work anonymously. Only airport departures/arrivals require free OpenSky OAuth2 credentials, which also raise your rate limit.
How many flights can it return and how fast?
A single snapshot can include hundreds to thousands of live aircraft, returned in one bulk call. A recent worldwide run returned 500 unique aircraft in ~2 minutes. Use maxItems to cap the result size.
Why is my flight not found? Aircraft only appear in the live feed while they are airborne. A flight that hasn't departed, or has already landed, won't be in the snapshot — try a region or airport mode to see what's currently in the air.
How fresh is the data?
Real-time. Positions are updated every few seconds by the OpenSky Network. The timePosition field tells you exactly when each aircraft's coordinates were last refreshed, and lastContact when it was last heard from at all.
Do I need proxies? Yes — keep the Apify Proxy on (it's the default). OpenSky times out Apify's shared IP, so requests are routed through a datacenter proxy that is rotated automatically on throttling.
Can I filter by region or airport? Yes. Pick a region for continent-wide live traffic, or list airports by ICAO code for departures/arrivals. You can also target specific flights/callsigns.
Why are altitude or squawk sometimes empty?
This is normal, data-dependent behaviour: aircraft on the ground report no altitude or vertical rate, and not every transponder broadcasts a squawk code. The core position and speed fields are near-100% filled.
Can an AI agent call this directly?
Yes — it's designed as a tool-call / MCP grounding source. Register it over mcp.apify.com, or run it in Standby mode as a warm HTTP API for instant responses with no cold start.
What export formats are supported? JSON, CSV, Excel, HTML and XML, plus direct access via the Apify API and the JavaScript / Python clients.
🔗 Related scrapers
Building live-tracking, grounding or enrichment pipelines? Pair this flight tracker with:
- Vessel Tracker — Live Ship Position & AIS Data — the maritime counterpart: real-time ship positions for agents and dashboards.
- Wikidata Resolver — resolve airlines, airports, cities and entities to structured facts.
- SEC EDGAR Scraper — company filings and financial data for research and due diligence.
- GLEIF LEI Lookup — Legal Entity Identifier data for operators and corporate owners.
- Sanctions Screening — screen people, companies and vessels against global sanctions lists.
- Genius Scraper — song, artist and lyrics metadata from Genius.
Ready to track flights in real time? Click Start to run the Flight Tracker and pull live aircraft position, altitude and speed as clean JSON — or wire it into your AI agent over MCP. ✈️