Flight Status Tracker avatar

Flight Status Tracker

Pricing

from $3.00 / 1,000 flight status checkeds

Go to Apify Store
Flight Status Tracker

Flight Status Tracker

Live status for any flight number or tail number: delay in minutes, gate, terminal, aircraft, and scheduled versus actual times. Every row also carries how that flight number has really performed over its recent operations. Up to 100 flights per run, no account needed.

Pricing

from $3.00 / 1,000 flight status checkeds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Share

Give it a flight number and get back everything a traveller, an ops desk or a claims team actually needs to know: whether the flight is running, where it is, how late it is in minutes, which gate and terminal it is using at both ends, what aircraft is operating it, and the scheduled, estimated and actual times for pushback, take-off, landing and arrival at the stand. Every row also carries the punctuality record of that same flight number over its recent operations — roughly the last ten to thirty times it flew, each with its own delay — so you get today's status and the flight's real track record in one table. Up to 100 flights per run, aircraft registrations accepted as well as flight numbers, and no account or login of any kind.

What you can do with it

  • Tell customers the truth before they ask. Feed the flight numbers on tomorrow's bookings into a run and get status, gate, terminal and delay minutes for all of them in one table.
  • Support delay and cancellation claims with the two numbers a claim turns on: the scheduled arrival and the actual arrival, with the row stating plainly whether the arrival was measured or still only estimated.
  • Judge a flight before you book it. punctuality.onTimePct, the average delay and the worst delay across the flight number's recent operations tell you whether the 07:20 is reliably the 07:20.
  • Watch a flight to the gate. Switch on Keep watching and the run publishes a fresh row every time the estimated time, the gate, the terminal or the outcome changes — and stops by itself the moment the flight arrives, is cancelled or is diverted.
  • Track a specific aircraft by registration, including where it has been and what it flew as.
  • Reconstruct a past day. Set a date and get that day's operation of the flight number, with the times it actually achieved.
  • Feed a dashboard or an alerting rule with arrivalDelayMinutes, isCancelled, isDiverted and the gate fields, all in one flat row per check.

What you get

One row per flight check. A real row, abridged (UA1, collected while it was over the Pacific):

{
"requestedFlight": "UA1",
"flightIdentifier": "UAL1",
"identifierType": "flight-number",
"identifierTranslated": true,
"marketingFlight": "UA1",
"airlineName": "United Air Lines Inc.",
"airlineCode": "UA",
"flightNumber": "1",
"flightStatus": "airborne",
"isAirborne": true,
"isCancelled": false,
"isDiverted": false,
"originIata": "SFO",
"originAirport": "San Francisco Int'l",
"originCity": "San Francisco",
"originCountry": "United States",
"originTerminal": "I",
"originGate": "G5",
"originTimeZone": "America/Los_Angeles",
"destinationIata": "SIN",
"destinationCity": "Singapore",
"destinationTerminal": "2",
"destinationGate": "E11",
"scheduledDeparture": "2026-08-16T05:50:00.000Z",
"scheduledDepartureLocal": "2026-08-15T22:50:00-07:00",
"actualDeparture": "2026-08-16T06:02:00.000Z",
"actualTakeoff": "2026-08-16T06:25:00.000Z",
"departureDelayMinutes": 12,
"departureDelayBasis": "actual",
"scheduledArrival": "2026-08-16T22:15:00.000Z",
"scheduledArrivalLocal": "2026-08-17T06:15:00+08:00",
"estimatedArrival": "2026-08-16T22:28:00.000Z",
"actualArrival": null,
"arrivalDelayMinutes": 13,
"arrivalDelayBasis": "estimated",
"routeAverageArrivalDelayMinutes": 12,
"aircraftType": "B789",
"aircraftTypeName": "Boeing 787-9 Dreamliner (twin-jet)",
"registration": null,
"registrationWithheld": true,
"latitude": 8.3567,
"longitude": 128.1903,
"positionObservedAt": "2026-08-16T19:02:49.000Z",
"altitudeFeet": 40000,
"groundspeedKnots": 526,
"distanceRemainingMiles": 1508,
"previousFlightOfSameAircraft": "UAL28-1786598143-fa-843p:0",
"punctuality": {
"legsTotal": 13,
"legsMeasured": 10,
"onTimeCount": 6,
"lateCount": 4,
"onTimePct": 60,
"avgArrivalDelayMin": 11.8,
"maxArrivalDelayMin": 44,
"minArrivalDelayMin": -7,
"cancelledCount": 0,
"divertedCount": 0,
"onTimeThresholdMin": 15
},
"recentFlights": [
{
"date": "2026-08-14",
"originIata": "SFO",
"destinationIata": "SIN",
"aircraftType": "B789",
"scheduledDeparture": "2026-08-15T05:50:00.000Z",
"actualDeparture": "2026-08-15T06:00:00.000Z",
"scheduledArrival": "2026-08-15T22:15:00.000Z",
"actualArrival": "2026-08-15T22:07:00.000Z",
"departureDelayMinutes": 10,
"arrivalDelayMinutes": -8,
"delayBasis": "actual",
"cancelled": false,
"diverted": false
}
],
"recentFlightsCount": 13,
"recordType": "current",
"observationNumber": 1,
"collectedAt": "2026-08-16T19:03:13.697Z"
}

An aircraft registration comes back the same way: ask for D-ABYT and you get DLH402, Frankfurt to Newark, a Boeing 747-8, 36,000 ft, 38 minutes late off the gate, 81.3% on time over its last 16 measured operations.

Write a registration the way registrations are written, with the hyphen it has: B-6521, RA-89001, D-ABYT. Most of the world's tail numbers are one or two letters and then digits, which is also exactly what a flight number looks like — B6521 reads first as JetBlue flight 521, B-6521 is the Airbus in China and nothing else. Registrations whose mark is not an airline at all — HL7612, JA8089, N154QS — are understood either way. Whenever an identifier is genuinely both, the row says so in identifierType, identifierAmbiguous and identifierNote instead of quietly answering the other question.

Input reference

FieldTypeDefaultWhat it does
flightsarray["UA1"]The flights to check. Use the number on a ticket — UA1, BA117, LH402, EK202 — or an aircraft registration such as N154QS, D-ABYT or B-6521. Spaces, dots and hyphens are fine, and case does not matter. Write a registration with its hyphen where it has one: B-6521 is an aircraft, while B6521 reads first as JetBlue flight 521. Up to 100 per run.
datestringemptyLeave empty for the operation running now or next. Set YYYY-MM-DD to get that day's operation instead.
marketstringUSThe regional edition asked for when a flight is checked. Every check in a run asks for the same one, including the follow-up checks made while trackUntilLanded is on. It is a preference the source is free to ignore: the wording of a free-text delay notice is the only thing it could change, and most of it is published in English whatever is asked for. It never changes a time, a number, a code or an airport — every time is given twice, once in UTC and once on the clock at the airport it happens at.
includeHistorybooleantrueAttaches recentFlights and punctuality: the flight number's recent operations with their own delays, plus the on-time percentage, the average delay and the best and worst arrival across them. It arrives together with the status, so it does not slow the run down.
maxHistoryLegsinteger25How many recent operations to list per row, newest first. Between roughly 8 and 30 are published depending on how often the flight runs. The on-time figures are computed over all of them whatever this is set to — punctuality.legsTotal says how many.
onTimeThresholdMinutesinteger15How many minutes past the scheduled arrival still counts as on time in punctuality.onTimePct. 15 is the industry standard.
includeTrackbooleanfalseAdds positions: the points the flight has been observed at, in order, with time, latitude, longitude, altitude and speed. Makes each row much larger.
maxTrackPointsinteger500Ceiling on how many observed positions are attached. When a flight has been seen more times than this, the most recent points are kept — the ones that end where the aircraft actually is — and the row says so in positionsTruncated and positionsObservedTotal. A long-haul flight routinely runs past the default of 500.
includeRoutebooleanfalseAdds the route the crew filed, the planned cruising altitude and speed, the planned flight time and the planned fuel burn, where they are published.
trackUntilLandedbooleanfalseKeep checking and publish a new row whenever something a traveller would act on changes — estimated time, gate, terminal, departure, landing, cancellation, diversion. A change of position alone never produces a row. Ignored when date is set.
refreshIntervalSecinteger120How long to wait between checks while watching a flight. Minimum 30, maximum 900.
maxTrackingMinutesinteger120Stop watching a flight after this long even if it has not landed. Watching also stops on its own the moment the flight arrives, is cancelled or is diverted.
maxUpdatesPerFlightinteger30Ceiling on how many update rows one watched flight can produce.
maxRecordAgeDaysinteger30If the newest thing published for a flight is older than this, the run reports that there is no current record rather than returning a stale one. Raise it when looking up flights that have not operated recently.
maxRowsinteger1000Hard ceiling on rows for the whole run, update rows included.

Output fields

FieldTypeWhat it is
requestedFlightstringExactly what you asked for, so you can join the result back to your own list.
flightIdentifierstringThe identifier the flight is published under, which is often not the one on the ticket.
marketingFlight, airlineName, airlineCode, airlineCodeIcao, flightNumberstringWho operates it and under which numbers.
identifierTypestringflight-number or aircraft-registration — for the identifier that answered, not for the one typed.
identifierTranslatedbooleantrue when the identifier that answered is not the one typed, which is the normal case for a ticketed number: UA1 is published as UAL1.
identifierAmbiguous, identifierNoteboolean / stringSome identifiers are two things at once. B6521 is both JetBlue flight 521 and the Chinese aircraft registration B-6521; RA1234 and YV3016 are the same story in Russia and Venezuela. When that happens the row says so and identifierNote says in words which reading answered. Writing a registration the way registrations are written — B-6521, with the hyphen — asks for the aircraft and nothing else.
flightStatusstringscheduled, airborne, arrived, cancelled, diverted. scheduled is used for a flight that has not moved yet.
isAirborne, hasLanded, isCancelled, isDivertedbooleanThe same thing as plain flags, for filtering.
scheduledDeparture, estimatedDeparture, actualDeparturestringOff the stand, in UTC. Each also has a …Local twin on the departure airport's clock.
scheduledTakeoff, estimatedTakeoff, actualTakeoffstringOff the runway — a different moment from leaving the stand, and kept separate.
scheduledLanding, estimatedLanding, actualLandingstringOn the runway.
scheduledArrival, estimatedArrival, actualArrivalstringOn to the stand, in UTC, each with a …Local twin on the arrival airport's clock.
departureDelayMinutes, arrivalDelayMinutesnumberMinutes against schedule. Negative means early.
departureDelayBasis, arrivalDelayBasisstringactual or estimated — whether the delay was measured or is still a forecast. Never mixed.
routeAverageDepartureDelayMinutes, routeAverageArrivalDelayMinutesnumberWhat this route typically runs, for context.
originIata, originIcao, originAirport, originCity, originCountry, originCountryCode, originTerminal, originGate, originTimeZone, originLatitude, originLongitudestring / numberThe departure airport. destination… is the identical set for the arrival airport.
originDelayNotes, destinationDelayNotesarrayAny delay notice in force at that airport, as type, averageDelayMinutes, trend and reason — for example 38 minutes on inbound flights due to low clouds.
originRunway, destinationRunway, taxiOutMinutes, taxiInMinutesstring / numberWhere published.
aircraftType, aircraftTypeName, aircraftManufacturer, aircraftModel, aircraftEngineCountstring / numberThe aircraft operating the flight.
registration, registrationWithheldstring / booleanThe tail number. Many operators withhold it; when they do, registration is empty and registrationWithheld is true, so an empty field is never mistaken for missing data.
latitude, longitude, positionObservedAt, altitudeFeet, groundspeedKnots, groundspeedKmh, headingDegreesnumber / stringWhere the aircraft was last seen, and when. For a flight that has already landed this is where it landed.
distanceFlownMiles, distanceRemainingMiles, distanceRemainingKm, distanceTotalMilesnumberHow far along it is.
previousFlightOfSameAircraftstringThe leg this aircraft flew immediately before — how a delay travels through a day.
codeshareFlight, codeshareMarketingFlight, codeshareAirlinestringAnother number the same seat is sold under, when there is one.
punctualityobjectonTimePct, avgArrivalDelayMin, maxArrivalDelayMin, minArrivalDelayMin, onTimeCount, lateCount, cancelledCount, divertedCount, legsTotal, legsMeasured, onTimeThresholdMin. Every rate is empty rather than 0 when nothing could be measured.
recentFlights, recentFlightsCountarray / numberThe flight number's most recent operations, newest first, each with its own date, route, aircraft, times and delay — at most maxHistoryLegs of them. punctuality is computed over every operation the source published for that flight number, which can be more than are listed here; punctuality.legsTotal and legsMeasured state how many it actually used.
plannedRoute, plannedCruiseAltitudeFeet, plannedSpeedKnots, plannedFlightTimeMinutes, plannedFuelBurnGallonsstring / numberOnly when the planned route is switched on.
positions, positionCount, positionsObservedTotal, positionsTruncatedarray / number / booleanOnly when the flight path is switched on. positionCount is how many points the row carries and positionsObservedTotal how many the source published; when they differ, positionsTruncated is true and the points kept are the newest, so the path always ends where latitude/longitude say the aircraft is.
recordType, recordDatestringcurrent for the operation running now, selected-date for a chosen day.
observationNumber, isStatusUpdate, previousStatusnumber / boolean / stringWhich check this row came from while watching, and what changed.
collectedAt, observedAtstringWhen the row was produced, and when the source last saw the flight.

Pricing

Pay per event. You pay for what the run produces, not for how long it takes.

What you pay forPrice
Flight status checked — one row published$3.00 per 1,000 rows
Punctuality history added — a row that carries the flight number's recent operations and their on-time figures$1.20 per 1,000 rows

Worked example. You check 500 flights with the punctuality record left on. That is 500 rows at $3.00 per 1,000 = $1.50, plus 500 punctuality records at $1.20 per 1,000 = $0.60. $2.10 for the run.

Watching a flight is the same price as checking it: each published update is one more row at $3.00 per 1,000, and the punctuality record is charged once per flight, not once per update. A flight with no earlier operations published is never charged the second event, because nothing was added.

A flight the source does not recognise, and a flight it has no current record for, produce no row and cost nothing.

Limits & what this actor cannot do

  • Statuses and positions are a snapshot at the moment of collection and can lag the aircraft. A position on a row that has already landed is where the flight was last seen, not where it is now.
  • This actor reports what the source publishes to the public. It cannot book, change, cancel or check in for a flight, and it is not an official airline notification.
  • An estimated time is not an achieved time. Every delay says which it is, and an estimate is never presented as a measurement. Use arrivalDelayBasis before acting on arrivalDelayMinutes.
  • Predicted times are not available and are always empty. No scheduled or estimated value is ever substituted for one.
  • Many operators withhold the aircraft registration. Those rows carry registrationWithheld: true rather than an invented tail number.
  • The recent record of a flight number is not a full history. It reaches roughly ten days back and a couple of days forward, and it is what the source chooses to publish rather than a complete archive. A date outside it is reported as not published, and the run tells you which dates are available.
  • A flight number that has not operated recently has no current record. Rather than return a stale entry that looks current, the run says there is no current record; raise maxRecordAgeDays if you want older entries.
  • The number on your ticket is not always the number the flight is published under. The run translates the common ones automatically and reports both, but an unusual airline code may come back as not recognised. identifierType always describes the identifier that answered, not the one that was typed.
  • Some identifiers are two things at once. B6521 is both a JetBlue flight number and a Chinese aircraft registration; typed without its hyphen the flight number is checked first and the row says so rather than presenting one as the other. Hyphenate a registration to ask for the aircraft.
  • The region is a preference, not a guarantee. It is asked for on every check in the run, and the source is free to answer in English anyway. It never changes a time, a number, a code or an airport.
  • A check the source refuses to complete is reported as a failed check, never as "no flight found". The run summary counts statuses collected, flights with no current record, flights not recognised and failed checks as four separate numbers, and a run in which every check failed ends as a failed run.
  • Cancelled and diverted flights carry less detail — there may be no arrival time, no gate and no position, and those fields are left empty rather than filled in.
  • Speed depends on the size of the job and on how quickly the source answers. No fixed throughput is promised.
  • The source's terms govern automated access. You are responsible for using the data lawfully and in line with those terms.

FAQ

Do I need an account on the source site? No. Nothing is signed into and nothing is signed up for.

Does it need my login or password? No. There is no credential of any kind to supply — put in a flight number and press start.

Can I schedule it? Yes. A common setup is a run every few minutes over the flights you care about, with Keep watching off, so each run gives you one fresh row per flight.

Is this an official airline status? No. It is the publicly published status, which is what airport boards and travel apps show, but it is not a notification from the airline and it is not a guarantee.

Why did my flight come back as "not recognised"? Either the number does not exist, or it is an unusual code the run could not translate. Try the number the operating airline uses — for a codeshare, that is the airline actually flying the aircraft rather than the one that sold you the ticket.

I asked for a tail number and got a flight from another airline. Why? That was possible in an earlier version and is not any more. Write the registration with its hyphen — B-6521, not B6521 — and only that aircraft is looked up. Without the hyphen the identifier is ambiguous, the ticketed reading is checked first, and the row states which reading answered.

Why is onTimePct empty on some flights? Because nothing could be measured. A flight whose recent operations are all still in the future, or a private aircraft with no published arrival times, has no on-time percentage — and reporting 0% for it would be a made-up statistic.

Why does punctuality not match the operations listed in recentFlights? Because punctuality is computed over every operation the source published for that flight number, while recentFlights lists at most maxHistoryLegs of them, newest first. punctuality.legsTotal and legsMeasured state exactly how many operations the figures came from. Raise maxHistoryLegs to list them all.

What counts as "on time"? Arriving no more than 15 minutes after schedule, which is the industry convention. Change onTimeThresholdMinutes if your contract uses a different one.