Airport Departures & Arrivals Board Scraper avatar

Airport Departures & Arrivals Board Scraper

Pricing

from $1.20 / 1,000 flight movement collecteds

Go to Apify Store
Airport Departures & Arrivals Board Scraper

Airport Departures & Arrivals Board Scraper

Every departure and arrival at any airport, as one clean row per flight. Live status, terminal, gate, estimated time and delay. Codeshare duplicates folded into the aircraft that actually flies, so a day at JFK is 656 real movements, not 2,861. Whole day or right now, 25 airports at once.

Pricing

from $1.20 / 1,000 flight movement collecteds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Share

Get every departure and arrival at any airport in the world as one clean row per flight — with live status, terminal, gate, estimated time and delay in minutes attached. Codeshare duplicates are folded into the flight that actually operates, so the 2,861 board entries a day at JFK publishes become the 656 real movements they represent. Built for airport dashboards, travel apps, on-time-performance analysts and operations teams who need a real movement list rather than a screenshot of a screen.

What you can do with it

  • Power a live board in your own app, website or lobby screen — every flight, every status, refreshed as often as you like.
  • Measure on-time performance for an airport, an airline or a route, day after day, using published scheduled and estimated times.
  • Watch disruption as it happens — switch on Only disrupted flights and get just the cancellations, diversions and anything running fifteen minutes or more behind.
  • Map an airport's real network — which airlines fly where, how often, and at what times of day, from 160 destinations in a single day at a large hub.
  • Feed an operations or ground-handling model with terminal and gate assignments alongside scheduled and estimated times.
  • Compare hubs by collecting several airports in one go, in both directions, on the same day.

What you get

One row per flight movement. A real record, abridged:

{
"airportIata": "JFK",
"airportName": "New York John F. Kennedy International Airport",
"airportTimeZone": "America/New_York",
"direction": "departures",
"localDate": "2026-08-16",
"airline": "JetBlue",
"airlineIata": "B6",
"flightNumber": "B6423",
"codeshares": [
{ "airlineIata": "AT", "airline": "Royal Air Maroc", "flightNumber": "AT9538" },
{ "airlineIata": "EY", "airline": "Etihad Airways", "flightNumber": "EY8341" }
],
"codeshareCount": 2,
"counterpartAirport": "LAX",
"counterpartAirportName": "Los Angeles International Airport",
"counterpartCity": "Los Angeles",
"scheduledTimeUtc": "2026-08-16T17:10:00.000Z",
"scheduledTimeLocal": "13:10",
"estimatedTimeUtc": "2026-08-16T19:30:00.000Z",
"delayMinutes": 140,
"status": "DELAYED",
"terminal": "5",
"gate": "519",
"isDiverted": false,
"statusSource": "live-status",
"collectedAt": "2026-08-16T19:14:31.932Z"
}

Input reference

FieldTypeDefaultWhat it does
airportsarray of strings["JFK"]The airports you want, as three-letter airport codes. City codes such as NYC or LON are refused, with the individual airports suggested instead. Up to 25 in one run.
directionstringdeparturesdepartures, arrivals, or both. Choosing both collects each airport twice, once in each direction.
datestringtodayThe day you want, written as 2026-08-16, in the airport's own local time. Leave empty for today at each airport.
fullDaybooleantrueOn, you get every movement from midnight to midnight at the airport. Off, you get only the flights around right now — much smaller and quicker.
includeStatusbooleantrueAttaches live status, terminal, gate, estimated time and delay to every flight that is currently published. Charged separately — see Pricing.
deduplicateCodesharesbooleantrueFolds a flight sold by several airlines under different numbers into one row for the aircraft that flies, listing the others in codeshares.
onlyDisruptedbooleanfalseKeeps only flights that are cancelled, diverted, or fifteen minutes or more behind schedule. Needs includeStatus on.
languagestringen-GBThe language airport and airline names come back in. Codes, numbers, times and statuses are the same in every language.
maxRowsinteger2000The most flights returned for each airport and direction. Maximum 10,000.
parallelAirportsinteger4How many airports are collected at the same time, 1 to 8.

Output fields

FieldTypeDescription
airportIatastringThe airport whose board this row came from.
airportName, airportCity, airportCountrystringThat airport's full name, city and country.
airportTimeZonestringThe airport's time zone, so local times can be turned into instants.
directionstringdepartures or arrivals.
localDatestringThe flight's date in the airport's own local time.
localDateIsExactbooleanFalse in the rare case where the airport's time zone is not known.
airline, airlineIatastringThe airline that actually operates the flight.
flightNumberstringThe operating flight's designator, e.g. B6423.
operatedBystring | nullThe regional partner flying it on the airline's behalf, where one is named.
isCodesharebooleanTrue only for a marketing-only row, which happens when codeshares are not being combined.
codesharesarrayThe other airlines selling this same flight, each with its own number.
codeshareCountintegerHow many of them there are.
counterpartAirportstringThe other end: the destination on a departure, the origin on an arrival.
counterpartAirportName, counterpartCity, counterpartCountrystringThat airport's full name, city and country.
scheduledTimeUtcstringScheduled time of the movement at this airport, in UTC.
scheduledTimeLocalstringThe same moment on the airport's own clock, HH:MM.
counterpartScheduledTimeLocalstring | nullThe scheduled time at the other end, on that airport's clock.
estimatedTimeUtcstring | nullThe latest time published for this movement: the estimate while it is still to go, the actual time once the source has published one. Never guessed.
delayMinutesinteger | nullThat time minus the scheduled time, in minutes. Negative when the flight is running early. null when the source publishes no such time.
delayLooksImplausibleboolean | nullTrue when the published estimate implies a delay of more than twelve hours, which usually means a stale schedule. The number is still given to you unchanged. null when there is no delay to judge.
statusstring | nullSCHEDULED, DELAYED, OUT_GATE, IN_AIR, LANDED, IN_GATE, CANCELLED or DIVERTED. null where none is published.
statusTextstring | nullThe status as words, where the source gives one.
statusSourcestring | nullWhere the status came from, so you always know whether a row is a live one.
terminal, gatestring | nullTerminal and gate at this airport, where published.
isDivertedboolean | nullTrue when the flight is going somewhere other than where it was scheduled, false when a source that publishes diversions says it is not, and null when nothing has been published about this flight either way. Most of a whole day is null, because that is the same part of the day that has no live status.
divertedToAirportstring | nullWhere it is actually going, when that is different.
flightIdstring | nullThe source's own identifier for this exact flight instance.
dataSourcestringprimary, or backup when the main list was unavailable and a shorter one was used.
languagestringThe language you asked for.
collectedAtstringWhen this row was collected.
movementKeystringA stable key for one physical flight, useful for joining runs day over day.

Pricing

You pay for what you get, with no monthly fee.

  • Flight movement collected — $1.20 per 1,000 rows ($0.0012 each). One charge per flight in your dataset.
  • Live status added — $0.020 per airport and direction. Charged once for each airport and direction where status, terminals, gates and delays were actually attached to at least one flight on the board. It is never charged per flight. It is not charged when nothing could be attached, not charged for a day that is already over (the live layer publishes nothing for one, so none is collected), and not charged at all when includeStatus is off.

Worked example. One whole day of departures at New York JFK returned 656 movements with live status attached. That is 656 × $0.0012 = $0.79, plus one live-status charge of $0.02 — $0.81 for the day.

Five airports, both directions, whole day, around 600 movements each: 6,000 rows = $7.20, plus ten live-status charges = $0.20. $7.40 for the run.

Leaving Combine codeshare duplicates off will roughly quadruple your row count, because about three quarters of what an airport publishes is the same aircraft sold under other airlines' numbers. It is on by default for that reason.

Limits & what this actor cannot do

  • A board is a snapshot. Statuses, gates and estimates change continuously, and what you collect is what was published at that moment.
  • Live status covers roughly from now forwards, not the whole day. The live layer publishes about a day and a half ahead of the current moment. Collecting a whole day therefore gives every flight its schedule but gives live status only to those still inside that window — at JFK, 371 of 656 movements on the day tested. Flights earlier in the day come back with status: null and statusSource: null rather than a guessed status. Turn fullDay off if you want the highest proportion of live rows.
  • The movement list itself carries no status and no delay. Everything operational — status, terminal, gate, estimate, delay — comes from the live layer, and every row records that in statusSource. Nothing is ever inferred from a schedule.
  • Aircraft type is not published on airport boards by any source this actor uses, so there is no aircraft column. It is not omitted by accident.
  • A day that has already ended gets no live status. The live layer publishes from now forwards only, so for a past day every row comes back with status: null and statusSource: null, no live status is collected, and no live-status charge is made.
  • A day you asked for is never swapped for another one. If the movements for the day you named cannot be collected, that board is reported as a failed board in the run summary. It is never filled in with a different day's flights.
  • About a week back and a couple of days ahead. Days outside that are moved to the nearest published day and you are told so in the log. The last day ahead is usually only partly filed.
  • Some airports genuinely publish nothing on some days. A small regional airport with no flights that day is reported as an empty board, which is an answer, not an error.
  • A board the source refuses to serve is reported as a failed board, never as an airport with no flights. The run summary counts boards read, boards genuinely empty, boards the source does not publish, and boards that failed, as four separate numbers, and a run where nothing at all could be read ends as a failed run.
  • This actor reports what is published to the public. It cannot book, hold a seat, check anyone in, or tell you why a flight is late.
  • It does not predict. There is no forecast column; every time is either a published schedule or a published estimate.
  • Very rarely, an airport publishes a flight twice under two separate filings of the same number. Both are kept, each with its own flightId, rather than one being silently dropped.
  • Speed depends on the size of the job and on how quickly the sources answer. No fixed throughput is promised.
  • The sources' 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 needed from you beyond the airports you want.

Does it need my login or password? No. This actor never asks for credentials of any kind.

Can I schedule it? Yes. Schedule it hourly for a live board, or once a day to build an on-time-performance history. movementKey is stable, so day-over-day joins are straightforward.

Are these statuses live? They are as published at the moment of collection, and they can lag the aircraft. Rows carrying a live status say so in statusSource; rows without one leave status empty rather than guessing.

Why do I get fewer rows than the number of flights shown on the airport's own screens? Because those screens list every airline selling a seat. A single aircraft to Los Angeles can appear three times under three different airlines. This actor gives you one row for the aircraft and lists the other airlines in codeshares. Switch Combine codeshare duplicates off if you want the raw list.

What happens if an airport can't be collected? It is reported as a failed board in the run summary, with the other airports still delivered. It is never reported as an airport with no flights.

Can I get only the delays and cancellations? Yes — switch on Only disrupted flights. Rows that are filtered out are never written and never charged for, so the row charge applies only to the flights you keep. The live-status charge still applies as usual, because that switch needs live status turned on.