FlightStats Flight Status Scraper - Delays, Gates, Tails
Pricing
from $2.72 / 1,000 results
FlightStats Flight Status Scraper - Delays, Gates, Tails
Track live flight status on FlightStats by flight number or route: delay minutes, gate, terminal, aircraft and tail number. Export to CSV, Excel, JSON or XML.
Pricing
from $2.72 / 1,000 results
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share

βοΈ FlightStats Flight Status Scraper
π Export live flight status from FlightStats in seconds. One flight page or a whole route board, 50 columns per flight, 5 rows in 7.8 seconds and roughly 120 flights a minute on a single run.
FlightStats by Cirium publishes a free flight tracker: type a flight number, get its status, its delay in minutes, the terminal and gate it leaves from, the belt the bags land on, the aircraft type and the tail number. This Actor reads that same public page and turns it into a flat table you can open in Excel.
Give it a flight designator such as BA112, an airport pair such as JFK-LHR, or a FlightStats URL you already have. A route returns the whole departure board for that day: 23 operating flights on JFK to LHR, 22 on ATL to MCO, measured 2026-09-08. Every row carries both the naive local time at the airport and a real UTC instant, so a mixed-timezone export still sorts correctly.
Coverage. The public tracker publishes roughly 3 days back and 2 days forward. Day minus 4 answers "out of date range" and day plus 3 returns an empty board. Older status sits behind Cirium's paid product and is not available here, so this Actor does not pretend to offer a flight history archive.
| Who it is for | What they get |
|---|---|
| π Freight forwarders and ground handlers | Gate, terminal, baggage belt and live delay minutes for every inbound flight |
| π§³ Travel agencies and OTAs | Status for a customer's booked flight number, including the operating carrier behind a codeshare |
| π Aviation analysts | Departure and arrival boards for a route with aircraft type and tail number on every leg |
| π€ Automation builders | A clean JSON feed to drive alerts in Make, Zapier or n8n without touching a paid aviation API |
| π’ Corporate travel desks | One table of every flight your travellers are on today, with delay minutes ready to sort |
π What the FlightStats Flight Status Scraper does
- Reads the public FlightStats flight tracker page and lifts the flight record straight out of the page state, so nothing depends on fragile CSS selectors.
- Accepts three kinds of source at once: flight designators (
BA112,AA 100,B6 615), airport pairs (JFK-LHR,LAX to SFO) and FlightStats URLs. - Sweeps a route board across four time windows so one route request covers the whole day rather than a six hour slice.
- Drops codeshare duplicates by default: JFK to LHR lists 120 ticketed flight numbers for the same 23 aircraft, and you almost never want all 120.
- Returns scheduled and actual times twice, once as airport local time and once as a UTC instant, plus the IANA time zone of both airports.
- Carries delay minutes at departure and at arrival, terminal, gate, baggage claim, aircraft type, aircraft code and tail number.
- Keeps the codeshare list on the row, so you can see that BA 112 also sells as AA 6925, AS 5250, AY 5512, EI 8812 and IB 3540.
- Filters by status, by minimum delay, and by date inside the published window.
- Rotates its exit IP every 100 requests, because the load balancer in front of the site answers HTTP 403 after roughly 182 requests from one address.
- Rounds robin across every source you give it, so a cap of 50 rows spreads over all your flights and routes instead of being eaten by the first busy board.
π¬ Full Demo (π§ Coming soon)
A short walkthrough video is on the way. Until then the sample records below are real rows from a real run.
π Output
Every row is one ticketed flight number on one calendar day.
| Field | Type | What it holds |
|---|---|---|
flightNumber | string | Airline code and number as printed on a boarding pass, for example BA 112 |
flightCode | string | The same designator with no space, for example BA112 |
sourceUrl | string | The FlightStats page this row was read from |
airlineName | string | Marketing airline name |
airlineCode | string | Two or three character IATA airline code |
flightDate | string | Scheduled departure date at the origin airport, YYYY-MM-DD |
flightStatus | string | Scheduled, Departed, Arrived, Cancelled or Diverted |
statusDetail | string | The site's own wording, for example On time or Delayed by 45m |
originAirportCode | string | IATA code of the departure airport |
originAirportName | string | Full airport name |
originCity | string | City the departure airport serves |
originCountry | string | Two letter country code |
destinationAirportCode | string | IATA code of the arrival airport |
destinationAirportName | string | Full airport name |
destinationCity | string | City the arrival airport serves |
destinationCountry | string | Two letter country code |
scheduledDeparture | string | Scheduled departure in airport local time, ISO 8601 |
scheduledDepartureUtc | string | The same instant in UTC |
actualDeparture | string | Actual departure once off the gate, estimate before that |
actualDepartureUtc | string | The same instant in UTC |
departureTimeType | string | Actual or Estimated, so you know which one you are reading |
departureDelayMinutes | integer | Minutes late off the gate, 0 when on time |
scheduledArrival | string | Scheduled arrival in airport local time |
scheduledArrivalUtc | string | The same instant in UTC |
actualArrival | string | Actual arrival once landed, estimate before that |
actualArrivalUtc | string | The same instant in UTC |
arrivalTimeType | string | Actual or Estimated |
arrivalDelayMinutes | integer | Minutes late on arrival, 0 when on time |
flightDuration | string | Block time as the site prints it, for example 7h 10m |
originTerminal | string | Departure terminal |
originGate | string | Departure gate |
destinationTerminal | string | Arrival terminal |
destinationGate | string | Arrival gate |
baggageClaim | string | Baggage belt at the arrival airport |
aircraftType | string | Aircraft description, for example Boeing 777-300ER |
aircraftCode | string | IATA equipment code, for example 77W |
tailNumber | string | Registration of the aircraft flying the leg |
operatedBy | string | The flight that actually flies the metal |
isCodeshare | string | Yes when this number is sold on someone else's aircraft |
diverted | string | Yes or No |
divertedAirportCode | string | Where a diverted flight actually went |
cancelled | string | Yes or No |
finalStatus | string | On Time or Delayed, set once the flight has landed |
flightPhase | string | Climbing, Cruising, Descending or Landed while airborne |
originTimeZone | string | IANA zone of the departure airport |
destinationTimeZone | string | IANA zone of the arrival airport |
flightId | integer | The site's own identifier for this leg on this day |
codeshares | array | Every other airline and number selling the same seat |
scrapedAt | string | ISO timestamp of the read |
error | string | Only on an error row, null on a data row |
Three real records from a run:
[{"flightNumber": "BA 112","flightCode": "BA112","sourceUrl": "https://www.flightstats.com/v2/flight-tracker/BA/112?year=2026&month=9&date=8","airlineName": "British Airways","airlineCode": "BA","flightDate": "2026-09-08","flightStatus": "Scheduled","statusDetail": "On time","originAirportCode": "JFK","originAirportName": "New York John F. Kennedy International Airport","originCity": "New York","originCountry": "US","destinationAirportCode": "LHR","destinationAirportName": "London Heathrow Airport","destinationCity": "London","destinationCountry": "GB","scheduledDeparture": "2026-09-08T18:30:00","scheduledDepartureUtc": "2026-09-08T22:30:00.000Z","actualDeparture": "Not Disclosed","actualDepartureUtc": "Not Disclosed","departureTimeType": "Estimated","departureDelayMinutes": 0,"scheduledArrival": "2026-09-09T06:40:00","scheduledArrivalUtc": "2026-09-09T05:40:00.000Z","actualArrival": "Not Disclosed","actualArrivalUtc": "Not Disclosed","arrivalTimeType": "Estimated","arrivalDelayMinutes": 0,"flightDuration": "7h 10m","originTerminal": "8","originGate": "Not Disclosed","destinationTerminal": "5","destinationGate": "Not Disclosed","baggageClaim": "Not Disclosed","aircraftType": "Boeing 777-300ER","aircraftCode": "77W","tailNumber": "G-STBK","operatedBy": "British Airways 112","isCodeshare": "No","diverted": "No","divertedAirportCode": "N/A","cancelled": "No","finalStatus": "N/A","flightPhase": "N/A","originTimeZone": "America/New_York","destinationTimeZone": "Europe/London","flightId": 1407025436,"codeshares": [{ "airlineName": "American Airlines", "airlineCode": "AA", "flightNumber": "6925" },{ "airlineName": "Alaska Airlines", "airlineCode": "AS", "flightNumber": "5250" },{ "airlineName": "Finnair", "airlineCode": "AY", "flightNumber": "5512" },{ "airlineName": "Aer Lingus", "airlineCode": "EI", "flightNumber": "8812" },{ "airlineName": "Iberia", "airlineCode": "IB", "flightNumber": "3540" }],"scrapedAt": "2026-09-08T15:39:28.912Z","error": null},{"flightNumber": "DL 1562","flightCode": "DL1562","sourceUrl": "https://www.flightstats.com/v2/flight-tracker/DL/1562?year=2026&month=9&date=8&flightId=1406836587","airlineName": "Delta Air Lines","airlineCode": "DL","flightDate": "2026-09-07","flightStatus": "Arrived","statusDetail": "On time","originAirportCode": "ATL","originAirportName": "Atlanta Hartsfield-Jackson International Airport","originCity": "Atlanta","originCountry": "US","destinationAirportCode": "MCO","destinationAirportName": "Orlando International Airport","destinationCity": "Orlando","destinationCountry": "US","scheduledDeparture": "2026-09-07T23:59:00","scheduledDepartureUtc": "2026-09-08T03:59:00.000Z","actualDeparture": "2026-09-07T23:43:00","actualDepartureUtc": "2026-09-08T03:43:00.000Z","departureTimeType": "Actual","departureDelayMinutes": 0,"scheduledArrival": "2026-09-08T01:33:00","scheduledArrivalUtc": "2026-09-08T05:33:00.000Z","actualArrival": "2026-09-08T01:00:00","actualArrivalUtc": "2026-09-08T05:00:00.000Z","arrivalTimeType": "Actual","arrivalDelayMinutes": 0,"flightDuration": "1h 17m","originTerminal": "S","originGate": "T8","destinationTerminal": "B","destinationGate": "86","baggageClaim": "31","aircraftType": "Airbus A321 (sharklets)","aircraftCode": "32B","tailNumber": "N370DN","operatedBy": "Delta Air Lines 1562","isCodeshare": "No","diverted": "No","divertedAirportCode": "N/A","cancelled": "No","finalStatus": "On Time","flightPhase": "Landed","originTimeZone": "America/New_York","destinationTimeZone": "America/New_York","flightId": 1406836587,"codeshares": [{ "airlineName": "Aeromexico", "airlineCode": "AM", "flightNumber": "3604" },{ "airlineName": "Korean Air", "airlineCode": "KE", "flightNumber": "3127" },{ "airlineName": "LATAM Airlines", "airlineCode": "LA", "flightNumber": "6514" },{ "airlineName": "SAS", "airlineCode": "SK", "flightNumber": "3118" },{ "airlineName": "Virgin Atlantic", "airlineCode": "VS", "flightNumber": "5159" }],"scrapedAt": "2026-09-08T15:39:29.169Z","error": null},{"flightNumber": "BA 178","flightCode": "BA178","sourceUrl": "https://www.flightstats.com/v2/flight-tracker/BA/178?year=2026&month=9&date=8&flightId=1407025585","airlineName": "British Airways","airlineCode": "BA","flightDate": "2026-09-08","flightStatus": "Departed","statusDetail": "On time","originAirportCode": "JFK","originAirportName": "New York John F. Kennedy International Airport","originCity": "New York","originCountry": "US","destinationAirportCode": "LHR","destinationAirportName": "London Heathrow Airport","destinationCity": "London","destinationCountry": "GB","scheduledDeparture": "2026-09-08T07:50:00","scheduledDepartureUtc": "2026-09-08T11:50:00.000Z","actualDeparture": "2026-09-08T07:44:00","actualDepartureUtc": "2026-09-08T11:44:00.000Z","departureTimeType": "Actual","departureDelayMinutes": 0,"scheduledArrival": "2026-09-08T19:45:00","scheduledArrivalUtc": "2026-09-08T18:45:00.000Z","actualArrival": "2026-09-08T19:21:00","actualArrivalUtc": "2026-09-08T18:21:00.000Z","arrivalTimeType": "Estimated","arrivalDelayMinutes": 0,"flightDuration": "6h 55m","originTerminal": "8","originGate": "Not Disclosed","destinationTerminal": "5","destinationGate": "Not Disclosed","baggageClaim": "Not Disclosed","aircraftType": "Boeing 777-200 / 200ER","aircraftCode": "772","tailNumber": "G-VIID","operatedBy": "British Airways 178","isCodeshare": "No","diverted": "No","divertedAirportCode": "N/A","cancelled": "No","finalStatus": "N/A","flightPhase": "Cruising","originTimeZone": "America/New_York","destinationTimeZone": "Europe/London","flightId": 1407025585,"codeshares": [{ "airlineName": "American Airlines", "airlineCode": "AA", "flightNumber": "6939" },{ "airlineName": "Alaska Airlines", "airlineCode": "AS", "flightNumber": "5262" },{ "airlineName": "Finnair", "airlineCode": "AY", "flightNumber": "5478" },{ "airlineName": "Aer Lingus", "airlineCode": "EI", "flightNumber": "8878" },{ "airlineName": "Iberia", "airlineCode": "IB", "flightNumber": "3564" }],"scrapedAt": "2026-09-08T15:39:29.900Z","error": null}]
Not Disclosed means the airport or airline did not publish that value; Heathrow, for instance, publishes terminals but almost never arrival gates. N/A means the field does not apply yet, such as a final on-time verdict on a flight that has not landed.
β¨ Why choose this Actor
- Reads the page state, not the pixels. The flight record comes out of the data the page ships with itself, so a redesign of the layout does not silently empty your rows.
- Both clock faces. Local airport time and a real UTC instant on every timestamp, plus the IANA zone, so a spreadsheet of flights across five countries sorts correctly.
- Codeshares handled properly. One flag tells you whether a number is sold on someone else's metal, and the whole codeshare family stays on the row.
- A route is one input. You do not need to know which flight numbers fly JFK to LHR; ask for the pair and get the board.
- Honest about the window. 3 days back, 2 days forward. No promise of an archive that the free site does not have.
- Survives the rate rule. The exit IP rotates before the site's 403 threshold instead of after it.
- No account, no key. Everything it reads is served to a logged-out visitor.
π How it compares to alternatives
| Approach | Flight number lookup | Whole route board | Gate, terminal, belt | Tail number | Historical archive | Account needed |
|---|---|---|---|---|---|---|
| This Actor | β | β 4 window sweep | β | β | β 3 days back only | β |
| Cirium's own paid API | β | β | β | β | β | β paid contract |
| Copying the site by hand | β | π’ one page at a time | β | β | β | β |
| ADS-B trackers (OpenSky, ADSB.lol) | π€ by registration | β | β | β | π€ limited | β |
| Airline websites one by one | β | β | β | π€ sometimes | β | π€ sometimes |
| A generic browser scraper | β | π€ fragile selectors | π€ | π€ | β | β |
π How to use
- Create a free Apify account. Sign up here and you start with $5 of free platform credit, enough to try this Actor properly.
- Open the Actor and paste what you want to track: a flight number such as
BA112, an airport pair such asJFK-LHR, or a FlightStats URL. - Pick a date inside the published window, or leave it empty for today.
- Set Max Items to the number of flights you want back.
- Click Start, wait a few seconds, then download CSV, Excel, JSON or XML from the Storage tab.
πΌ Business use cases
π Ground handling and cargo recovery
Feed tomorrow's inbound flight numbers in every morning and get the terminal, gate and belt for each one, with the delay in minutes attached. Crews get rostered against reality instead of against the published schedule.
π§³ Proactive customer service for travel sellers
Run the booked flight numbers of every traveller departing today, filter to a minimum delay of 15 minutes, and you have the exact list of customers to email before they call you.
π Route and fleet analysis
Pull a route board for a few days and you have every operator on the pair, the aircraft type each one uses and the tail numbers in rotation, which is the raw material for a capacity or competitor study.
π’ Duty of care for corporate travel
Cross the day's route boards with your traveller manifest and you know instantly which of your people are on a flight that is airborne, delayed, cancelled or diverted.
π Automating FlightStats Flight Status Scraper
Schedule it in Apify to run every hour on the flight numbers you care about and pipe the dataset into Slack, a Google Sheet or your own webhook. Because the output is flat, arrivalDelayMinutes alone is enough to drive an alert rule, and flightStatus plus flightPhase tells you whether an aircraft is still climbing, cruising, descending or already on the ground. Apify's API returns the dataset as JSON, CSV or Excel from a single URL, so any tool that can read an HTTP endpoint can consume it.
π Beyond business use cases
Track the family flight home and get a text when it pushes back. Follow a specific tail number across the week to see which routes it flies. Build a small board for the airport you live near. Settle a bet about whether a route is really always late by pulling three days of arrival delay minutes and taking the average. Teach a class about time zones with a table where the same flight has two departure clocks.
π€ Ask an AI assistant about this scraper
Paste this into ChatGPT, Claude or any assistant to get help building on top of it:
I am using the ParseForge FlightStats Flight Status Scraper on Apify(https://apify.com/parseforge). It returns one row per ticketed flight numberper day with these fields: flightNumber, flightCode, sourceUrl, airlineName,airlineCode, flightDate, flightStatus, statusDetail, originAirportCode,originAirportName, originCity, originCountry, destinationAirportCode,destinationAirportName, destinationCity, destinationCountry,scheduledDeparture, scheduledDepartureUtc, actualDeparture, actualDepartureUtc,departureTimeType, departureDelayMinutes, scheduledArrival,scheduledArrivalUtc, actualArrival, actualArrivalUtc, arrivalTimeType,arrivalDelayMinutes, flightDuration, originTerminal, originGate,destinationTerminal, destinationGate, baggageClaim, aircraftType, aircraftCode,tailNumber, operatedBy, isCodeshare, diverted, divertedAirportCode, cancelled,finalStatus, flightPhase, originTimeZone, destinationTimeZone, flightId,codeshares, scrapedAt, error.Local timestamps have no offset and belong to the airport time zone in thematching time zone column; the Utc columns are real instants. Coverage is about3 days back and 2 days forward. Help me build ...
β Frequently Asked Questions
β How far back can I go?
About 3 days. Measured 2026-09-08, the tracker reports "out of date range" at 4 days back, and the route board returns nothing 3 days ahead. Anything older is part of Cirium's paid historical product and this Actor will not invent it.
β Do I need a FlightStats or Cirium account?
No. Everything this Actor reads is what a logged-out visitor sees. The departures and arrivals board and the historical flight status feature both redirect to a login, so they are deliberately out of scope.
β What is the difference between asking for a flight number and asking for a route?
A flight number returns exactly one row for that day. A route returns the whole departure board for the airport pair: 23 operating flights on JFK to LHR and 22 on ATL to MCO on 2026-09-08.
β Why did I get 120 rows from one route instead of 23?
Because you turned codeshares on. FlightStats lists every ticketed number, so one aircraft can appear six times under six different airlines. The default keeps only the carrier that actually flies it.
β What is operatedBy for?
It names the flight that actually flies the aircraft. On an operating flight it repeats that flight's own designator; on a codeshare it points at the metal, for example Virgin Atlantic 4 on a row sold as Air France 6753.
β Why is a row's flightDate a day earlier than the date I asked for?
A route board window can reach across midnight, so a board pulled for the 8th can include a flight that departs at 23:59 on the 7th. The flightDate column always reflects the real scheduled departure date at the origin airport.
β Why is the arrival gate Not Disclosed?
Not every airport publishes one. Heathrow gives terminals and baggage belts but almost never an arrival gate, while Atlanta and Orlando publish gate, terminal and belt. Not Disclosed means the source withheld it, never that the Actor failed to read it.
β Are the times local or UTC?
Both. Every timestamp comes twice: a naive local time at the airport and a matching UTC instant in the column ending in Utc. The originTimeZone and destinationTimeZone columns give the IANA zone so you can convert either way.
β What does departureTimeType mean?
It tells you whether the "actual" column is a real observed time or still an estimate. Before pushback the site shows an estimate, after pushback it shows the actual.
β How fast is it and what is the ceiling?
A five row run over one flight and two routes took 7.8 seconds and 13 requests. One request returns one flight, so throughput sits near 120 flights a minute. The hard ceiling is the size of the boards you ask for, not a page limit.
β Why do I sometimes get fewer rows than Max Items?
Because a flight number with no published status for that date returns nothing, filters drop rows, and duplicates are removed. Widen the date, drop the status filter, or add another route.
β Does it deduplicate?
Yes, on flight code plus date plus origin plus destination, so the same flight arriving through both a URL and a route board is written once.
β Do I need a proxy?
It is on by default and you should leave it on. The load balancer in front of the site returns a bare HTTP 403 after roughly 182 requests from a single address, so the Actor rotates its exit IP every 100 requests.
β Can I get the live position of the aircraft?
No. The tracker does carry position points once a flight is airborne, but they are empty before departure and disappear again after landing, so a column for them would be blank on most rows. Use flightPhase for a reliable in-flight signal.
β Is this the Cirium API?
No, and it is not a substitute for it. This reads the free public web tracker. If you need contracted coverage, guaranteed history or an SLA, buy the Cirium product directly.
π Integrate with any app
Every run writes an Apify dataset you can pull as JSON, CSV, Excel or XML from one API URL, so Make, Zapier, n8n, Google Sheets, Power BI, Airtable and your own code can all read it without any extra glue. Webhooks fire when a run finishes, which is enough to push a delay alert straight into Slack or an on-call queue.
π Recommended Actors
- FlightAware Public Tracker Scraper for a second opinion on a flight from a different public source.
- Flightradar24 Live Flights Scraper when you want live positions rather than schedule and gate data.
- OpenSky Network Live Flight Scraper for raw ADS-B state vectors by registration.
- ADSB.lol Live Flights Scraper for an open community feed of airborne aircraft.
π‘ Pro Tip: Browse the whole ParseForge collection at https://apify.com/parseforge for more travel and aviation data Actors that plug into the same workflow.
π Need Help? Open our contact form
Not affiliated with, endorsed by or connected to FlightStats or Cirium. This Actor collects only publicly available data from pages that FlightStats serves to any logged-out visitor, and it does not access the Cirium API or any account-protected feature.