Changi Airport (SIN) Flight Scraper – Arrivals & Departures
Pricing
from $1.00 / 1,000 flight rows
Changi Airport (SIN) Flight Scraper – Arrivals & Departures
One row per flight at Singapore Changi Airport (SIN): flight number, airline, origin or destination airport, terminal, gate, baggage belt, scheduled, estimated and actual times, and live status such as Boarding, Delayed or Landed. Filter by arrivals, departures, date and Terminal 1-4.
Pulls live arrival and departure flight data for Singapore Changi Airport (SIN) straight from Changi's own flight-status API — the same one powering changiairport.com. You get one dataset row per flight, with flight number, airline, origin or destination airport, terminal, gate, baggage belt, scheduled/estimated/actual times and live status, in structured JSON, CSV, or Excel, without touching a browser. Run it once, on a schedule, or hook it into your own app via the Apify API.
What can I use this for?
- Flight tracking dashboards — build a live arrivals/departures board for a travel app or internal tool.
- Passenger meeting & logistics — check gate, belt, and delay status for pickups or ground transport planning.
- Travel & OTA data feeds — enrich itineraries with real-time SIN flight status.
- Research & analytics — study route frequency, delay patterns, or terminal load over time.
Runs on Apify, so you get scheduling, an API for every result, and monitoring/alerting for free — no server or proxy setup needed.
How do I run it?
- Open the Actor's Input tab.
- Pick a direction: arrivals, departures, or both.
- Optionally set a scheduled date, terminal, and whether to fetch backwards in time from that date.
- Optionally cap the number of results with max items.
- Click Start and download results from the Output tab once the run finishes.
What input does it take?
| Field | Type | Description |
|---|---|---|
direction | select | dep (departures only, default), arr (arrivals only), or both |
scheduledDate | date | Flight schedule date, YYYY-MM-DD. Defaults to today in Singapore time (Asia/Singapore). |
terminal | select | Filter by terminal: all (default), 1, 2, 3, or 4 |
prev | boolean | Page backwards in time instead of forwards, newest flight first. Default false. |
maxItems | integer | Cap on rows per direction. Default 100; raise it for more, or pass null for every flight the source returns. |
proxyConfiguration | proxy | Apify Proxy config. A fresh proxy session is used per request to avoid rate limiting. Defaults to Apify Proxy enabled. |
Example input:
{"direction": "both","scheduledDate": "2026-08-02","terminal": "1","prev": false,"maxItems": 100}
What does each row contain?
One dataset row is one flight entry. Example (trimmed):
{"flight_number": "MF852","direction": "DEP","airline": "MF","airline_details": { "code": "MF", "name": "Xiamen Airlines", "transfer_counters": "C,D" },"airport": "XMN","airport_details": { "code": "XMN", "name": "Xiamen", "country_code": "CN", "lat": "24.54400063", "lng": "118.1279984" },"terminal": "1","check_in_row": "3","display_gate": "D32","aircraft_type": "B738","scheduled_date": "2026-09-27","scheduled_time": "15:15","estimated_timestamp": "2026-09-27 15:15","offblock_timestamp": "2026-09-27 15:36","flight_status": "Gate Closed","slave_flights": ["GA9735", "MU4900"]}
You can download results as JSON, CSV, Excel, or XML from the Output tab, or pull them programmatically via the Apify API.
Main fields
| Field | Description |
|---|---|
flight_number | Flight code, e.g. SQ963 |
direction | ARR or DEP |
airline / airline_details | IATA airline code, plus name (English, Simplified and Traditional Chinese), logo URL, transfer counters and transit flag |
airport / airport_details | The other end of the route — origin for arrivals, destination for departures — with IATA code, name, country code and latitude/longitude |
terminal | Changi terminal, 1–4 |
display_gate / current_gate / previous_gate | Gate: boarding gate for departures, arrival gate for arrivals, with the previous one if it moved |
display_belt | Baggage belt (arrivals) |
check_in_row / display_checkinrowctr | Check-in row and counter range (departures) |
drop_off_door / pick_up_door / nearest_carpark | Kerbside door numbers and the nearest car park for that flight |
scheduled_date / scheduled_time | Scheduled date and local time |
estimated_timestamp / actual_timestamp / display_timestamp | Estimated, actual, and the timestamp the airport currently displays |
offblock_timestamp / firstbag_timestamp / lastbag_timestamp | Push-back time, and first/last bag on the belt |
flight_status / status_mapping | Current status, plus the airport's own display strings (English and Chinese) and text colour |
aircraft_type | ICAO aircraft type code, e.g. B738 |
origin_dep_* | For arrivals: the departure country, date, time and terminal at the origin airport |
via / via_airport_details | Intermediate stop, when the flight is not direct |
slave_flights / master_flight_number | Codeshare flight numbers sold on the same physical flight, and the operating flight number |
last_updated_timestamp | When Changi last updated this entry |
What do the less obvious fields mean?
- Codeshare (
slave_flights) — one physical aircraft is often sold under several flight numbers. The row you get is the operating flight (master_flight_number), andslave_flightslists the marketing flight numbers riding on it, e.g.MF852also sold asGA9735andMU4900. Deduplicate onmaster_flight_numberif you want one row per aircraft movement. display_timestampvsscheduled_time—scheduled_timeis the timetabled time and never moves;display_timestampis what the airport's board currently shows, which follows delays and re-times.status_mapping— the airport's own presentation of the status:listing_status_enis the short string for a board (it can include a time, e.g.Landed 15:24),details_status_enthe one for a flight-detail page,status_text_colorthe colour Changi paints it, andshow_gatewhether a gate should be displayed yet.*_zhvariants are the Chinese equivalents.nature,flight_type,technical_flight_status1,technical_flight_status2— single-letter and short internal codes from Changi's system (values such asJ,M,ES,GCappear), passed through unchanged. The source does not publish what they mean, so useflight_statusorstatus_mappingfor anything you display.
Which airlines, airports and statuses show up?
The Actor does not filter by airline — it returns whatever Changi publishes for the date, direction and terminal you ask for. Sample runs across all four terminals returned flights from carriers including:
| Region | Airlines seen |
|---|---|
| Singapore & Southeast Asia | Singapore Airlines, Scoot, Malaysia Airlines, AirAsia, Batik Air, Garuda Indonesia, TransNusa, Thai Airways, Myanmar National Airlines |
| Greater China & East Asia | Cathay Pacific, EVA Air, China Eastern Airlines, Air China, Xiamen Airlines, Hainan Airlines, Sichuan Airlines, Spring Airlines |
| Middle East & South Asia | Emirates, Qatar Airways, Biman Bangladesh Airlines |
| Europe & Africa | KLM Royal Dutch Airlines, Ethiopian Airlines |
Routes in the same sample covered Kuala Lumpur, Jakarta, Bangkok (Suvarnabhumi), Hong Kong, Taipei, Shanghai, Beijing (Daxing), Ho Chi Minh City, Phnom Penh, Penang, Melbourne, Brisbane, Amsterdam, Doha, Dhaka and Yangon, among others.
Statuses observed in flight_status include Scheduled, Confirmed, Gate Open, Boarding, Last Call, Gate Closing, Gate Closed, Departed, Landed, Delayed, Re-timed and New Gate. Flights far in the future have no status yet, so flight_status is null for them.
How much does a run cost?
The Actor is billed per flight row it pushes (see the Pricing tab), so cost scales with how many flights you ask for, not with how long the run takes. maxItems is the cap: it applies per direction, so direction: "both" with maxItems: 100 returns at most 200 rows. Leaving maxItems at its default of 100 keeps a run predictable; set it to null only when you genuinely want the whole day.
It is a plain API-based scraper with no browser rendering, so platform compute is small — a few hundred flights typically finish in well under a minute.
Tips
- Use
maxItemsto limit runs when you only need the next handful of flights. - Combine
terminalwithdirectionto build a focused board for one terminal. - Schedule the Actor (Apify's built-in Schedules) to keep a dataset continuously refreshed.
FAQ
Do I need an account or an API key? Only an Apify account. There is no Changi or airline API key to obtain, and no login — the Actor talks to the public endpoint the airport's own website uses.
Does it cover all of Changi? Yes, Terminals 1, 2, 3 and 4, arrivals and departures. Leave terminal on all for every terminal, or pick one. The source exposes Terminals 1-4 only.
Can I get flights for a future date? Yes. Set scheduledDate and the Actor returns the published schedule for it; dates weeks ahead work, though future flights have no live status, gate or belt yet — only the timetable.
Can I get historical flights? Barely. Changi's API only keeps a few recent days, and a scheduledDate older than that quietly returns the earliest data it still has rather than failing — always check scheduled_date on the rows you get back. For a history, schedule the Actor and accumulate the dataset yourself.
How do I get the flights that just left or landed? Set prev: true. Paging then walks backwards from the date and time, newest flight first, instead of forwards into the rest of the day.
Can I schedule it or call it from my own code? Yes — like any Actor it has an HTTP API, a CLI, schedules and integrations (Make, Zapier, n8n, webhooks, Google Sheets, ...).
What happens if the source rate-limits the run? An HTTP 429 is retried up to five times with exponential backoff, each retry through a fresh proxy session, which is why Apify Proxy is on by default. If Changi returns a partially broken page, the usable flights are kept and pushed, and the dropped ones are counted in the run log rather than failing the run.
Are codeshare flights included? They are not separate rows. Each row is one physical movement under the operating flight number, with the codeshare numbers listed in slave_flights.
Disclaimer: This Actor reads publicly accessible flight data exposed by Changi Airport's own website. Flight information can change without notice — always verify time-critical details (gate, delay, cancellation) directly with the airline or airport before travelling. Found a bug or have a feature request? Use the Actor's Issues tab.
Travel & booking toolkit
Part of the Travel & booking toolkit — search and pricing data across accommodation, transport, and travel-planning sites worldwide:
- Booking.com API Scraper — Scrape Booking.com properties, live prices and full room-rate tables.
- Agoda API Scraper — Agoda search results, pricing and property details via GraphQL.
- Airbnb API Scraper — Airbnb listings, details, and reviews via GraphQL API.
- Hostelworld API Scraper — Hostelworld hostels & properties with full listing + property detail.
- FlixBus API Scraper — FlixBus trips between cities — times, stations, duration, prices.
- eSIMDB Travel eSIM Scraper — Travel eSIM data plans from esimdb.com by country/region.
Did you find this useful?
⭐ Rate this actor on Apify! Your feedback helps other users find it and helps us keep improving it.