Flightradar24 at a glance
Flightradar24 is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes type, callsign, flight, registration and aircraft code, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.30 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Web data
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.30 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 33 options
- Run success
- 100.0% of completed public runs in the last 30 days
Live aircraft positions by map area (callsign, lat/lng, altitude, speed, vertical speed, heading, squawk, registration, aircraft type, route, airline), airport departure and arrival boards, and aircraft or flight number history with times, delays and status, in one unified schema.
What Flightradar24 can do
- Three views, one schema. Live positions, airport boards and aircraft or flight history all come back with the same field set, so you can join them without writing a mapper.
- Four ways in. Search a map area, pull an airport board, look up a registration or flight number, or paste Flightradar24 links and let the actor resolve them.
- One filter set for every mode. Flight number, registration, airline, origin, destination and altitude filters apply identically to live, board, history and pasted-link results.
- Optional flight detail enrichment. Turn on full airport names, terminal and gate, scheduled, estimated and real times, delay and the recorded position trail for live aircraft, billed only when you use it.
- Built for recurring monitoring. Incremental mode returns only new and changed flights on scheduled runs, ignoring position, altitude, speed and heading noise so a moving aircraft is not reported as changed on those alone.
- Resume without double paying. Point a new run at a previous run or dataset id and already collected flights are skipped rather than re-charged.
Choose what to collect
These inputs let you configure Flightradar24 - Live Aircraft, Airport Boards & Flight History. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Live positions: every aircraft currently inside one or more map areas. Airport board: an airport's departures or arrivals. Aircraft or flight history: past and scheduled legs for a registration or a flight number. Paste links: flightradar24.com/data/... URLs. |
boundsarray | One or more bounding boxes, each written as north,south,west,east in decimal degrees. Examples: 55.0,45.0,-6.0,10.0 (western Europe), 49.0,24.0,-125.0,-66.0 (continental USA), 51.7,51.2,-0.6,0.3 (Greater London). Leave empty to use western Europe. |
presetstring | Optional ready-made map area for Live mode. It replaces the untouched default map area; any area you changed or added in the boxes above is kept as well. Leave empty to use only the boxes you list. |
bboxesarray | Alias of Map areas: bounding boxes written as north,south,west,east. These boxes replace the untouched default map area; any area you changed or added in Map areas is kept as well. |
airportsarray | One or more three letter IATA airport codes, for example LHR, JFK, SIN, DXB. Each airport is walked for the board type selected below. |
boardModestring | Which side of the board to return for every airport above. Choosing Both walks departures and arrivals as two separate scopes. |
historyQueriesarray | One or more aircraft registrations (for example G-TUKR, N12345) or flight numbers (for example BA117, TOM8HB), matching the lookup type selected below. |
Show 26 more inputs
| Input | What it controls |
|---|---|
fetchBystring | Whether the entries above are aircraft registrations (tail numbers) or flight numbers. |
urlsarray | Paste airport board or aircraft links, for example https://www.flightradar24.com/data/airports/lhr/departures or https://www.flightradar24.com/data/aircraft/g-tukr or https://www.flightradar24.com/data/flights/ba117 . Add ?page=N to an airport board link to start at page N. Multiple links are supported. |
flightNumbersarray | Keep only flights whose flight number or callsign is in this list, for example BA117, TOM8HB. Leave empty to keep every flight. |
registrationsarray | Keep only these aircraft registrations (tail numbers), for example G-TUKR. Leave empty to keep every aircraft. |
airlinesarray | Keep only flights operated by these airlines, given as ICAO codes (BAW, TUI, DLH) or IATA codes (BA, X3, LH). Leave empty to keep every airline. |
originAirportsarray | Keep only flights departing from these airports, given as IATA or ICAO codes. Leave empty to keep every origin. |
destinationAirportsarray | Keep only flights arriving at these airports, given as IATA or ICAO codes. Leave empty to keep every destination. |
minAltitudeFtinteger | Keep only aircraft at or above this altitude in feet. Applies to rows that report an altitude (live positions); board and history rows are unaffected. Leave empty for no minimum. |
maxAltitudeFtinteger | Keep only aircraft at or below this altitude in feet. Useful for watching approach and departure traffic. Leave empty for no maximum. |
includeOnGroundboolean | On by default. Turn off to return airborne aircraft only, which also stops ground traffic being requested at all in live mode. |
includeGlidersboolean | On by default. Turn off to exclude gliders, which also stops them being requested at all in live mode. |
onlyAirlineIatasarray | Keep only flights whose flight number starts with one of these two-character airline codes, for example BA or LH. Applies in every mode. Leave empty for all airlines. |
maxItemsinteger | Maximum number of flight records to return across the whole run, counting live positions, board rows and history legs together. Use 0 for unlimited. |
sortBystring | Optional. Orders the dataset by this field; rows without a value come last. Sorting holds rows until the run ends. |
sortOrderstring | Ascending or descending, used only with Sort results by. |
fetchDetailsboolean | Off by default, and only used in live mode. When on, every live aircraft is also looked up individually to add full airport names, cities and countries, terminal and gate, scheduled, estimated and real departure and arrival times, delay, flight duration and the recorded position trail. Each enriched flight is charged a small surcharge on top of the per flight charge. If the lookups start failing, enrichment is switched off automatically for the rest of the run and nothing extra is charged. Turn on to look up each live aircraft's full flight detail. This costs one extra request per aircraft and is billed as a small surcharge per enriched flight. |
includeTrailboolean | On by default, and only used when flight detail enrichment above is on. Adds the recorded track (latitude, longitude, altitude, speed, heading and timestamp per point) to each enriched flight. Turn off for smaller records when you only need the current position. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large crawl without returning or charging for flights already collected there. Use this after an interrupted run. For recurring monitoring of the same targets, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for recurring monitoring. The first run returns everything as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED flights. Important: change detection deliberately ignores position, altitude, speed, vertical speed and heading, because a flying aircraft reports new values every few seconds and every row would otherwise be UPDATED on every run. Those values are still returned in full on every row; what triggers UPDATED is a real event such as a status, gate, terminal, delay, time, route, aircraft or airline change. State is kept separately for each target and filter setup; use State key to name or deliberately share a campaign. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the targets and filters, so two different setups never mix state. |
emitUnchangedboolean | Off by default. Turn on to also return flights that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return flights that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned its targets, never when Max flights capped it, when Resume was used, or when nothing was scanned. This returns, and bills, extra synthetic rows. |
ignoreFieldsForChangesarray | Optional. Field names (top level, for example gate or delaySeconds) that must not turn a flight into UPDATED. They are added to the built-in ignored telemetry (position, altitude, speed, heading). Ignored fields are still returned in full on every row; only change detection skips them. Changing this list does not reset saved state. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page per item export; other connectors get a best effort write or digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
recordTypeTypecallsignCallsignflightNumberFlightregistrationRegistrationaircraftCodeAircraft codeaircraftModelAircraftairlineNameAirlineairlineIataAirline IATAairlineIcaoAirline ICAOoriginIataFromoriginNameFrom airportoriginCityFrom cityShow 33 more fields
destinationIataTodestinationNameTo airportdestinationCityTo citystatusTextStatusstatusLiveLivestatusTypeStatus typedivertedToDiverted tolatitudeLatitudelongitudeLongitudealtitudeFtAltitude (ft)groundSpeedKtsSpeed (kts)verticalSpeedFpmVertical speed (fpm)headingDegHeadingsquawkSquawkonGroundOn groundpositionUpdatedAtPosition at (date)scheduledDepartureScheduled dep (date)estimatedDepartureEstimated dep (date)realDepartureActual dep (date)scheduledArrivalScheduled arr (date)estimatedArrivalEstimated arr (date)realArrivalActual arr (date)etaAtETA (date)delaySecondsDelay (s)boardAirportIataBoard airportboardModeBoardtrailPointsTrail pointsflightUrlFlight page (link)changeTypeChange type (incremental mode) (text)changedFieldsChanged fields (incremental mode) (array)firstSeenAtFirst seen (incremental mode) (date)lastSeenAtLast seen (incremental mode) (date)idRecord IDExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"id": "live|1a2b3c4d",
"recordType": "live",
"fr24Id": "1a2b3c4d",
"callsign": "EXA321",
"flightNumber": "EX321",
"registration": "N321EX",
"icao24": "ABCDEF",
"squawk": "2000",
"radarCode": "T-EXMP1",
"aircraftCode": "B738",
"aircraftModel": "Boeing 737-800",
"airlineName": "Example Airways",
"airlineIata": "EX",
"airlineIcao": "EXA",
"originIata": "LHR",
"originIcao": "EGLL",
"originName": "Heathrow Airport",
"originCity": "London",
"originCountry": "United Kingdom",
"originLatitude": 51.47,
"originLongitude": -0.46,
"originTerminal": "5",
"originGate": "A12",
"destinationIata": "JFK",
"destinationIcao": "KJFK",
"destinationName": "John F Kennedy International Airport",
"destinationCity": "New York",
"destinationCountry": "United States",
"destinationLatitude": 40.64,
"destinationLongitude": -73.78,
"destinationTerminal": "8",
"destinationGate": null,
"latitude": 45.5,
"longitude": -30.2,
"altitudeFt": 37000,
"groundSpeedKts": 460,
"verticalSpeedFpm": 0,
"headingDeg": 270,
"onGround": false,
"isGlider": false,
"positionTimestamp": 1777645320,
"positionUpdatedAt": "2026-05-01T14:22:00Z",
"statusText": "Estimated 17:42",
"statusLive": true,
"statusGeneric": "estimated",
"statusType": "arrival",
"divertedTo": null,
"scheduledDeparture": "2026-05-01T09:00:00Z",
"scheduledArrival": "2026-05-01T17:30:00Z",
"estimatedDeparture": "2026-05-01T09:15:00Z",
"estimatedArrival": "2026-05-01T17:42:00Z",
"realDeparture": "2026-05-01T09:18:00Z",
"realArrival": null,
"etaAt": "2026-05-01T17:42:00Z",
"delaySeconds": 720,
"durationSeconds": null,
"boardAirportIata": null,
"boardMode": null,
"queryScope": "live-feed",
"trail": [
{
"latitude": 45.5,
"longitude": -30.2,
"altitudeFt": 37000,
"groundSpeedKts": 460,
"headingDeg": 270,
"timestamp": 1777645320,
"recordedAt": "2026-05-01T14:22:00Z"
},
{
"latitude": 45.6,
"longitude": -29.9,
"altitudeFt": 37000,
"groundSpeedKts": 458,
"headingDeg": 270,
"timestamp": 1777645260,
"recordedAt": "2026-05-01T14:21:00Z"
}
],
"trailPoints": 2,
"flightUrl": "https://www.flightradar24.com/EXA321/1a2b3c4d",
"scrapedAt": "2026-05-01T14:22:05Z"
}Ways to use this data
- Flight tracking apps and dashboards: feed live positions and airport boards into your own map, alerting tool or status page.
- Delay and disruption monitoring: watch a flight number or a whole airport board on a schedule and get only the status, gate and time changes.
- Aviation research and analytics: build historical datasets of routes, aircraft and delays for a registration, an airline or an airport.
- Travel and logistics coordination: track a specific aircraft or flight number across its full history of past and scheduled legs.
- Media and spotting communities: pull live traffic over a region or an airport's board for reporting and content.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Flightradar24 return?
The documented output for Flightradar24 includes type, callsign, flight, registration, aircraft code, aircraft, airline and airline iata. Availability of each field depends on the source page and the selected mode.
How much does Flightradar24 cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.30 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed flights on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated records, and unchanged ones are not billed.
Why does coverage of a given aircraft vary?
Flightradar24's own coverage depends on receiver reach in that area, and some military and private aircraft are not broadcast at all. A gap in coverage is a source limitation, not a failed run.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
