Flightradar24 - Live Aircraft, Airport Boards & Flight History avatar

Flightradar24 - Live Aircraft, Airport Boards & Flight History

Pricing

from $1.00 / 1,000 flight records

Go to Apify Store
Flightradar24 - Live Aircraft, Airport Boards & Flight History

Flightradar24 - Live Aircraft, Airport Boards & Flight History

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.

Pricing

from $1.00 / 1,000 flight records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

4

Total users

2

Monthly active users

14 days ago

Last modified

Categories

Share

Flightradar24 Scraper: Live Flights, Airport Boards & Flight History

Flightradar24 Live Flight Tracker turns Flightradar24 into a clean flight data API. Track every aircraft inside a map area right now, pull an airport's departures or arrivals board, or look up the full history of an aircraft registration or a flight number, all returned in one unified schema so live positions, board rows and history legs sit in the same table. Paste Flightradar24 links instead of building queries by hand, add flight detail enrichment for full route and delay data, then export to JSON, CSV or Excel, or pull results straight into your app through the API.

Why This Scraper?

  • 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.
  • A refused run fails loudly. If every request is rejected, the run stops with a clear message instead of reporting a successful empty search.

Use Cases

  • 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.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
recordType"live" (also "board", "history")
id`"live
fr24Id"1a2b3c4d"
callsign / flightNumber"EXA321" / "EX321"
registration / icao24"N321EX" / "ABCDEF"
aircraftCode / aircraftModel"B738" / "Boeing 737-800"
airlineName / airlineIata / airlineIcao"Example Airways" / "EX" / "EXA"
originIata / originName / originCity / originCountry"LHR" / "Heathrow Airport" / "London" / "United Kingdom"
destinationIata / destinationName / destinationCity / destinationCountry"JFK" / "John F Kennedy International Airport" / "New York" / "United States"
latitude / longitude45.5 / -30.2
altitudeFt / groundSpeedKts / headingDeg37000 / 460 / 270
verticalSpeedFpm / onGround / isGlider / squawk / radarCode0 / false / false / "2000" / "T-EXMP1"
positionTimestamp / positionUpdatedAt1777645320 / "2026-05-01T14:22:00Z"
statusText / statusGeneric / statusType / statusLive"Estimated 17:42" / "estimated" / "arrival" / true
scheduledDeparture / estimatedDeparture / realDeparturescheduled, estimated and actual departure times
scheduledArrival / estimatedArrival / realArrival / etaAtscheduled, estimated, actual and ETA arrival times
delaySeconds / durationSeconds / divertedTo720 / null / null
originTerminal / originGate / destinationTerminal / destinationGate"5" / "A12" / "8" / null (with flight detail enrichment on)
originIcao / originLatitude / originLongitude (same for destination)"EGLL" / 51.47 / -0.46
boardAirportIata / boardMode"LHR" / "departures" (airport board records only)
trail / trailPointsrecorded position trail and its point count (with flight detail enrichment on)
queryScope / flightUrl"live-feed" (or "airport:LHR:departures", "reg:N321EX") / link to the flight's Flightradar24 page
changeType / changedFields / firstSeenAt / lastSeenAt"NEW", "UPDATED", "UNCHANGED", "REAPPEARED" or "EXPIRED", with the fields that changed (incremental mode only)
scrapedAt"2026-05-01T14:22:05Z"

Fields a given mode cannot know are present and null rather than missing, so a table of live, board and history rows never comes back ragged.

How to Use

  1. Pick a mode: live (map area), airport (departures or arrivals board), history (aircraft or flight number) or url (paste links).
  2. Fill in the fields for that mode, and add any flight number, registration, airline, route or altitude filters you need.
  3. Set Max flights to control run size and cost, then click Start.
  4. Download the dataset as JSON, CSV or Excel, or read it through the API.

Live traffic over western Europe:

{
"mode": "live",
"bounds": ["55.0,45.0,-6.0,10.0"],
"maxItems": 50
}

Heathrow departures, the whole board:

{
"mode": "airport",
"airports": ["LHR"],
"boardMode": "departures",
"maxItems": 0
}

Everything a particular aircraft has flown:

{
"mode": "history",
"historyQueries": ["G-TUKR"],
"fetchBy": "reg",
"maxItems": 0
}

Approach traffic into London only, below 10,000 ft, with full detail:

{
"mode": "live",
"bounds": ["51.7,51.2,-0.6,0.3"],
"maxAltitudeFt": 10000,
"includeOnGround": false,
"fetchDetails": true,
"maxItems": 0
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/flightradar24-live-flight-tracker").call(
run_input={"mode": "airport", "airports": ["LHR"], "boardMode": "departures", "maxItems": 50}
)
for flight in client.dataset(run["defaultDatasetId"]).iterate_items():
print(flight["flightNumber"], flight["statusText"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/flightradar24-live-flight-tracker').call({
mode: 'airport', airports: ['LHR'], boardMode: 'departures', maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

How Max flights shapes a run with several targets

One cap, Max flights, controls the whole run: live positions, board rows and history legs all count against it together. With several bounding boxes, airports or aircraft in one run, the cap is shared out evenly across the remaining targets so an early target cannot use up the whole budget and starve the rest. An airport board is walked page by page up to the airport's own declared total; aircraft history is walked until the source reports no more pages. Raise Max flights, or set it to 0, to remove the cap.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips everything already collected there, so you don't pay twice.
  • Incremental mode (incrementalMode) is for scheduled runs over the same targets. Each record is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), REAPPEARED or EXPIRED (only after a run that scanned the whole target set, and only with emitExpired). Change detection ignores position, altitude, speed, vertical speed, heading, position time and trail, because those change on every scrape by construction; a change in any other field (status, times, gate, terminal, route, aircraft, airline, squawk or receiving station) is reported as UPDATED. stateKey names or shares the stored state; leave it empty and the actor derives one automatically from your targets and filters. With incremental mode off, output is exactly as before.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
modestringlivelive, airport, history, or url.
boundsarray["55.0,45.0,-6.0,10.0"]Map area bounding boxes, each north,south,west,east in decimal degrees (live mode).
airportsarray["LHR"]Three letter IATA airport codes (airport mode).
boardModestringdeparturesdepartures, arrivals, or both for each airport above.
historyQueriesarray["G-TUKR"]Aircraft registrations or flight numbers (history mode).
fetchBystringregWhether historyQueries entries are reg (registration) or flight (flight number).
urlsarraysample Flightradar24 linkAirport board or aircraft links (url mode).
flightNumbersarray(none)Keep only these flight numbers or callsigns. Applies to every mode.
registrationsarray(none)Keep only these aircraft registrations. Applies to every mode.
airlinesarray(none)Keep only these airlines, by ICAO or IATA code. Applies to every mode.
originAirportsarray(none)Keep only flights departing from these airports. Applies to every mode.
destinationAirportsarray(none)Keep only flights arriving at these airports. Applies to every mode.
minAltitudeFtinteger(none)Keep only aircraft at or above this altitude. Rows that cannot know an altitude are kept.
maxAltitudeFtinteger(none)Keep only aircraft at or below this altitude. Rows that cannot know an altitude are kept.
includeOnGroundbooleantrueTurn off to return airborne aircraft only.
includeGlidersbooleantrueTurn off to exclude gliders.
maxItemsinteger50Stop after this many flight records across the whole run (0 = no limit).
fetchDetailsbooleanfalseLive mode only: add full route names, times, delay and the position trail per flight, billed once per enriched flight.
includeTrailbooleantrueWith flight detail on, include the recorded position trail.
resumeFromRunIdstring(none)Continue one interrupted run without re-collecting or re-charging its flights.
incrementalModebooleanfalseReturn only new and changed records on scheduled runs.
stateKeystring(none)Name or share an incremental-mode state; leave empty for an automatically derived key.
emitUnchangedbooleanfalseAlso return (and bill) unchanged flights, marked UNCHANGED.
emitExpiredbooleanfalseAlso return (and bill) flights no longer found after a complete scan, marked EXPIRED.
proxyobjectApify ProxyConnection settings.
mcpConnectorsarray(none)Optional: send a summary of each record to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which one child page per flight is created.
maxNotifyListingsinteger50Cap on items exported to each connector per run. Never changes the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"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"
}

Plan Requirement

The default proxy setting works out of the box, and the actor rotates connections automatically when one is refused. For large or frequent runs, the residential proxy group gives more headroom; pick it under Connection.

FAQ

How much does it cost?

You pay per flight record returned, with flight detail enrichment billed only when you switch it on. The Pricing tab shows the current rates. Use Max flights to cap the cost of any run.

This actor collects only publicly available flight data. You are responsible for how you use it: follow Flightradar24's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution.

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.

Why did my run fail instead of returning an empty dataset?

If the site refuses every request, the run stops with a clear message so "no flights right now" is never confused with "nothing could be read". Run it again in a few minutes. If only some targets could be read, you still get what was found.

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.

๐Ÿ”— More scrapers you might like

Pair this actor with these related scrapers from the same team:

โœˆ๏ธ Flightpoints & Roame Award Flight Scraper
Multi-source award flight availability from Flightpoints.com + Roame.travel. Search any...
๐Ÿงฉ AllTrails Hiking Scraper
Scrape AllTrails, the world's largest hiking platform: trails with difficulty, length...
๐Ÿ“‡ Google Maps Scraper
Extract business data from Google Maps at scale. Get names, addresses, phone numbers...
๐Ÿ  Rightmove
From $1/1K. Fast, reliable Rightmove.co.uk scraper for sale, rent, and sold-price...
๐Ÿงฉ Yandex SERP Scraper
Scrape Yandex web, image and video results with URLs, snippets and organic rankings for...
๐Ÿš— Turo Scraper
Collect Turo vehicles by location and trip dates or listing URLs. Get make, model, year...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support & custom scrapers

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.