Flightradar24 Follow Flight Stream Scraper
Pricing
from $6.20 / 1,000 position update chargeds
Flightradar24 Follow Flight Stream Scraper
Get live per-flight position updates — no competing actor streams a single flight from Flightradar24. Talks directly to Flightradar24's own gRPC/REST APIs, no login needed. Split from the mature, published flightradar24-all-in-one-api for a focused, single-purpose workflow.
What does Flightradar24 Follow Flight Stream do?
Flightradar24 Follow Flight Stream captures live position updates for one flight over a bounded time window (30 seconds by default, hard capped at 120 seconds), pushing every update it receives as its own dataset row.
This is NOT a live standby stream. It is a one-shot batch Actor: give it a flightId and a durationSeconds, it opens Flightradar24's internal gRPC live-position feed, collects whatever updates arrive during that window, then closes the connection and the run finishes — like any normal Apify batch actor. If you need continuous live tracking, run this Actor repeatedly (e.g. on a schedule); it does not keep a connection open across runs.
It talks directly to the same internal API the official Flightradar24 Android app uses (data-feed.flightradar24.com, gRPC), reverse-engineered by static decompilation and validated against real live traffic. No API key, no login.
Why use this instead of the all-in-one API?
This Actor is a narrow spin-off of Flightradar24 All-in-One API, which exposes the same gRPC feed (plus six other endpoints) as an always-on Standby REST API. Its /follow-flight route streams updates as application/x-ndjson over an open HTTP connection for up to 120 seconds per call.
Some use cases don't want to manage an open streaming HTTP connection at all — they just want "give me the position updates for this flight over the next N seconds" as a normal batch job with dataset rows, retries, and scheduling handled the Apify-platform way. That's what this Actor adapts the parent's streaming endpoint into: the same underlying gRPC call, same duration cap, but collected into a bounded batch run instead of a raw NDJSON stream.
Input
| Field | Type | Default | Description |
|---|---|---|---|
flightId | integer | optional | Numeric Flightradar24 flight id (from a live-feed or search result). Leave empty to follow a currently airborne flight picked from the live feed. |
durationSeconds | integer | 30 | Seconds to keep the stream open and collect updates. Hard capped at 120 — values above 120 are clamped down, values below 1 are clamped up |
{"flightId": 1094013202,"durationSeconds": 60}
Output
One dataset row per position update received during the window (roughly every 1–3 seconds while the flight is airborne). Each row is the raw FollowFlightResponse from the gRPC feed:
{"aircraftInfo": { "reg": "PK-PWO", "type": "A320", "fullDescription": "Airbus A320-214" },"scheduleInfo": { "flightNumber": "IP646", "scheduledDeparture": "1786921200" },"flightProgress": { "progressPct": 65, "flightStage": 3, "delayStatus": 1 },"flightInfo": {"flightId": 1094013202,"lat": -5.815,"lon": 111.413,"alt": 38000,"speed": 476,"callsign": "PAS646","onGround": false,"timestampMs": "1786924707066"}}
A run with durationSeconds: 60 typically produces somewhere around 20-40 rows for an actively-tracked airborne flight, though this varies with how often Flightradar24 pushes updates for that particular aircraft.
Known limitations
- This is a bounded batch capture, not a live standby stream. Each run opens the feed, collects updates for up to
durationSeconds(max 120s), and exits. It does not hold an open connection between runs or across multiple calls — for continuous tracking, schedule this Actor to run repeatedly (e.g. every few minutes) rather than expecting one run to track a flight indefinitely. - If the flight lands, goes out of coverage, or the id is stale, updates stop arriving early. The run still finishes normally (with fewer rows than a full window would produce, possibly zero) — it will not hang or error out just because the flight went quiet.
- An explicit
flightIdmust be a currently-live flight id (or omit it and one is picked for you). Ids come from a live-feed/search/top-flights lookup elsewhere (e.g. the parent Actor's/live-feedor/searchendpoints) — this Actor does not do flight lookup itself. - Some
aircraftInfofields (msn,acAge,acBirthDate,countryOfReg) are paywalled by Flightradar24 itself and come back empty even when their*Availablecompanion flags reporttrue— this API calls the feed anonymously, same as the free tier of the app.
Pricing
This Actor uses Pay Per Event billing, mirroring the parent Actor's per-update billing for this endpoint: you're charged $0.008 per position update pushed to the dataset (event position-update, FREE tier price — lower on paid plans), not per run. A run that collects zero updates (e.g. the flight had already landed) is not charged for updates.
FAQ
Does this require a Flightradar24 account? No. Same anonymous feed the Flightradar24 mobile app uses — no login, no API key.
Why would updates stop before durationSeconds is up?
The gRPC stream only pushes updates while Flightradar24 has fresh position data for the flight. If it lands, loses coverage, or the feed has nothing new to say, the stream simply goes quiet for the rest of the window — the run still finishes cleanly.
Is this official? No. Independent tool using Flightradar24's internal APIs, reverse-engineered from the public Android app. Use responsibly and in accordance with Flightradar24's Terms of Service.
Need a custom integration, or want the full all-in-one API (live feed, search, airport boards, etc.)? See Flightradar24 All-in-One API, or contact me at romysaputrasihanandaa@gmail.com or hire me on Fiverr.