| Status | Count |
|---|---|
| Scheduled | 184 |
| Completed | 6 |
| Underway | 4 |
| Delayed | 1 |
| Operator | Today | Future | Total | Date Range |
|---|---|---|---|---|
| AIDA Cruises | 0 | 12 | 12 | 2026-08-10 to 2026-12-28 |
| Brittany Ferries | 12 | 2630 | 2642 | 2026-08-09 to 2027-05-06 |
| Celebrity Cruises | 0 | 7 | 7 | 2026-08-15 to 2026-10-18 |
| Cunard | 1 | 29 | 30 | 2026-08-09 to 2026-12-28 |
| DENHOLM PORT SERVICES LTD | 1 | 0 | 1 | 2026-08-09 to 2026-08-09 |
| DFDS Seaways | 2 | 540 | 542 | 2026-08-09 to 2027-05-06 |
| Disney Cruise Line | 0 | 9 | 9 | 2026-08-10 to 2026-09-14 |
| Explora Journeys | 0 | 2 | 2 | 2026-08-17 to 2026-09-09 |
| Fred. Olsen Cruise Lines | 0 | 134 | 134 | 2026-08-10 to 2028-01-05 |
| Isle of Man Steam Packet Company | 16 | 1481 | 1497 | 2026-08-09 to 2027-05-06 |
| MSC Cruises | 0 | 22 | 22 | 2026-08-20 to 2026-12-24 |
| Norwegian Cruise Line | 1 | 6 | 7 | 2026-08-09 to 2026-11-20 |
| Oceania Cruises | 0 | 4 | 4 | 2026-08-15 to 2026-10-31 |
| P&O Cruises | 0 | 65 | 65 | 2026-08-14 to 2026-12-29 |
| Princess Cruises | 0 | 11 | 11 | 2026-08-14 to 2026-11-05 |
| Red Funnel | 64 | 19583 | 19647 | 2026-08-09 to 2027-05-06 |
| Regent Seven Seas Cruises | 0 | 2 | 2 | 2026-08-12 to 2026-09-01 |
| Royal Caribbean International | 0 | 9 | 9 | 2026-08-16 to 2026-10-16 |
| Silversea Cruises | 0 | 3 | 3 | 2026-08-27 to 2026-10-13 |
| Stena Line | 4 | 1042 | 1046 | 2026-08-09 to 2027-05-06 |
| TUI Cruises | 0 | 5 | 5 | 2026-08-20 to 2026-11-03 |
| Wightlink | 94 | 11712 | 11806 | 2026-08-09 to 2026-12-20 |
| Airport | Status | Today | Future | Total | Date Range | Last Scrape | Last Result | Duration | Errors (24h) |
|---|---|---|---|---|---|---|---|---|---|
| ABZ | OK | 34 | 191 | 225 | 2026-08-09 to 2026-11-29 | 2026-08-09 20:08 | 23 found, 0 new, 23 updated | 0.3s | 0/137 |
| ACE | Issue | 0 | 4 | 4 | 2026-08-13 to 2026-10-13 | Never | — | — | 0/0 |
| ALC | OK | 279 | 9042 | 9321 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:12 | 528 found, 0 new, 273 updated | 0.7s | 0/136 |
| AMS | Issue | 0 | 1 | 1 | 2026-08-18 to 2026-08-18 | Never | — | — | 0/0 |
| ATH | Issue | 0 | 1 | 1 | 2026-08-10 to 2026-08-10 | Never | — | — | 0/0 |
| AYT | Issue | 0 | 1 | 1 | 2026-08-31 to 2026-08-31 | Never | — | — | 0/0 |
| BER | Issue | 0 | 1 | 1 | 2026-08-10 to 2026-08-10 | Never | — | — | 0/0 |
| BHX | Issue | 160 | 3867 | 4027 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:16 | 40 found, 0 new, 40 updated | 14.7s | 66/81 |
| BRS | OK | 213 | 2555 | 2768 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:19 | 136 found, 0 new, 136 updated | 16.0s | 0/137 |
| CDG | Issue | 0 | 1 | 1 | 2026-09-03 to 2026-09-03 | Never | — | — | 0/0 |
| CWL | OK | 16 | 354 | 370 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:16 | 97 found, 0 new, 16 updated | 0.4s | 0/137 |
| DLM | Issue | 0 | 1 | 1 | 2026-09-08 to 2026-09-08 | Never | — | — | 0/0 |
| EDI | OK | 217 | 5264 | 5481 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:18 | 221 found, 0 new, 221 updated | 0.7s | 0/137 |
| EMA | OK | 59 | 2843 | 2902 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:15 | 3755 found, 0 new, 104 updated | 5.8s | 0/139 |
| FAO | Issue | 0 | 1 | 1 | 2027-06-19 to 2027-06-19 | Never | — | — | 0/0 |
| GLA | Issue | 118 | 874 | 992 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:15 | 76 found, 2 new, 74 updated | 14.3s | 24/137 |
| GVA | Issue | 0 | 1 | 1 | 2026-08-10 to 2026-08-10 | Never | — | — | 0/0 |
| JAX | Issue | 0 | 1 | 1 | 2026-09-06 to 2026-09-06 | Never | — | — | 0/0 |
| JFK | Issue | 0 | 1 | 1 | 2026-09-07 to 2026-09-07 | Never | — | — | 0/0 |
| LBA | OK | 88 | 1822 | 1910 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:11 | 186 found, 0 new, 71 updated | 11.7s | 0/138 |
| LCY | OK | 77 | 46 | 123 | 2026-08-09 to 2026-08-13 | 2026-08-09 20:13 | 26 found, 3 new, 23 updated | 0.2s | 0/131 |
| LGW | OK | 375 | 1384 | 1759 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:09 | 41 found, 5 new, 36 updated | 0.4s | 0/137 |
| LHR | OK | 692 | 4080 | 4772 | 2026-08-09 to 2026-10-22 | 2026-08-09 20:16 | 4723 found, 0 new, 1223 updated | 5.8s | 0/136 |
| LPL | OK | 82 | 2588 | 2670 | 2026-08-09 to 2027-06-09 | 2026-08-09 20:10 | 54 found, 0 new, 54 updated | 0.4s | 0/137 |
| LTN | OK | 189 | 2549 | 2738 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:15 | 95 found, 1 new, 94 updated | 0.6s | 0/136 |
| MAN | OK | 370 | 16159 | 16529 | 2026-08-09 to 2027-03-22 | 2026-08-09 20:15 | 12187 found, 0 new, 674 updated | 26.2s | 0/138 |
| MCO | Issue | 0 | 2 | 2 | 2026-08-13 to 2026-09-07 | Never | — | — | 0/0 |
| NCL | Issue | 100 | 1311 | 1411 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:13 | 0 found, 0 new, 0 updated | 8.9s | 1/137 |
| SOU | OK | 33 | 10 | 43 | 2026-08-09 to 2026-08-13 | 2026-08-09 20:18 | 17 found, 0 new, 17 updated | 0.2s | 0/138 |
| STN | OK | 324 | 26186 | 26510 | 2026-08-09 to 2026-11-30 | 2026-08-09 20:08 | 10000 found, 0 new, 591 updated | 17.2s | 0/137 |
| TRF | Issue | 0 | 1 | 1 | 2026-09-11 to 2026-09-11 | Never | — | — | 0/0 |
| Airline Code | Total Recorded | Future | Primary Source |
|---|---|---|---|
| RYR | 64767 | 60308 | Airport scraper + AeroDataBox |
| BA | 6652 | 2826 | British Airways API |
| EZY | 6644 | 2705 | easyJet schedule scraper |
| EXS | 6278 | 3953 | Jet2 schedule scraper |
| RUK | 5786 | 5384 | Airport scraper + AeroDataBox |
| TOM | 2493 | 1462 | Airport scraper + AeroDataBox |
| EIN | 1224 | 618 | Airport scraper + AeroDataBox |
| LOG | 900 | 397 | Airport scraper + AeroDataBox |
| KLM | 837 | 435 | Airport scraper + AeroDataBox |
| EJU | 781 | 349 | Airport scraper + AeroDataBox |
| VIR | 683 | 389 | Airport scraper + AeroDataBox |
| VY | 582 | 196 | Airport scraper + AeroDataBox |
| QTR | 482 | 186 | Airport scraper + AeroDataBox |
| PGT | 481 | 372 | Airport scraper + AeroDataBox |
| SAS | 464 | 244 | Airport scraper + AeroDataBox |
| XQ | 459 | 316 | Airport scraper + AeroDataBox |
| IBE | 409 | 111 | Airport scraper + AeroDataBox |
| AA | 404 | 162 | Airport scraper + AeroDataBox |
| W9 | 375 | 52 | Airport scraper + AeroDataBox |
| THY | 365 | 230 | Airport scraper + AeroDataBox |
| EW | 363 | 182 | Airport scraper + AeroDataBox |
| AFR | 348 | 205 | Airport scraper + AeroDataBox |
| LX | 342 | 185 | Airport scraper + AeroDataBox |
| DLH | 336 | 169 | Airport scraper + AeroDataBox |
| UA | 333 | 149 | Airport scraper + AeroDataBox |
| UAE | 331 | 202 | Airport scraper + AeroDataBox |
| D8 | 236 | 68 | Airport scraper + AeroDataBox |
| WZZ | 209 | 42 | Airport scraper + AeroDataBox |
| W4 | 199 | 34 | Airport scraper + AeroDataBox |
| VL | 197 | 138 | Airport scraper + AeroDataBox |
| System | Airports | Method | Max horizon | Why that limit |
|---|---|---|---|---|
| MAG GraphQL API | MAN (36d), STN (37d), EMA (90d) | GraphQL (allArrivals) | 36–90 days | Manchester Airport Group exposes a private GraphQL API that returns the full published schedule — up to 90 days for EMA, 36–37 days for MAN/STN. This is the richest airport data source in the system. Direct httpx (no browser needed) |
| Cardiff / Heathrow REST API | CWL (7d), LHR (7d) | REST API (JSON) | 7 days | Both airports expose a structured JSON REST API. Cardiff returns ~7 days; Heathrow returns 7 days via parallel date-range requests. The APIs are publicly accessible but undocumented. Direct httpx (no browser needed) |
| Leeds Bradford (Next.js) | LBA (3d) | Next.js RSC payload scrape | 3 days | LBA's site is a Next.js app that embeds flight data in server-side rendered page payloads. Scraping the RSC JSON gives ~3 days of data — more than the Hangar ADM airports but less than REST APIs. Direct httpx (no browser needed) |
| Edinburgh REST API | EDI (2d) | REST API (JSON) | 2 days | Edinburgh Airport exposes a direct JSON API for flight data, limited to approximately 48 hours of flights. The API is publicly accessible without authentication. Direct httpx (no browser needed) |
| Hangar ADM (direct httpx) | LPL (2d), SOU (2d), ABZ (2d) | Hangar ADM live flights API | 2 days | These airports use the Hangar ADM flight information system, which architecturally stores only ~48 hours of data. All date/range parameters are silently ignored by the backend — the 2-day limit is a hard system constraint, not a UI filter. Direct httpx (no browser needed — no Cloudflare) |
| Hangar ADM (Playwright — Cloudflare) | GLA (2d) | Hangar ADM via Playwright browser | 2 days | Same Hangar ADM system as LPL/SOU/ABZ with the same 48-hour data limit, but Glasgow Airport sits behind Cloudflare WAF which blocks direct httpx requests. A full headless Chromium session via Playwright is required to intercept the XHR response. Playwright (Cloudflare bypass required) |
| Luton HTML scrape | LTN (2d) | HTML page scrape | 2 days | London Luton's arrivals page renders flight data directly in HTML. The page only shows ~48 hours of flights and there is no accessible JSON API endpoint. Direct httpx (no browser needed) |
| Umbraco / Playwright (Cloudflare) | NCL (2d) | Umbraco CMS API via Playwright browser | 2 days | Newcastle uses an Umbraco CMS-backed flight API with a ~48-hour data window. Like Glasgow, it is protected by Cloudflare and requires Playwright to access. Playwright (Cloudflare bypass required) |
| Playwright HTML (Cloudflare) | BRS (2d), BHX (1d) | HTML scrape via Playwright browser | 1–2 days | Bristol and Birmingham render flight data dynamically in JavaScript-heavy pages protected by Cloudflare. Playwright loads the full page in a headless browser to extract the data. Both expose only 1–2 days. Playwright (Cloudflare bypass required) |
| Gatwick (Demandware API) | LGW (2d) | Demandware/Salesforce Commerce REST API | 2 days | Gatwick uses a Demandware (Salesforce Commerce Cloud) backend for its flight display. The API only returns same-day and next-day flights — a 1-day effective horizon. Direct httpx (no browser needed) |
| Source | Type | Airlines Covered | Schedule | Horizon | Cost |
|---|---|---|---|---|---|
| Ryanair schedule API | Airline timetable | FR, RK (Ryanair only) | Daily at 04:00 UTC | 3 months ahead | Free |
| AeroDataBox FlightByNumber RapidAPI — on-demand |
On-demand flight lookup 1 credit per search miss |
All airlines EZY, LS, TOM, BA, KL, EI, LM, etc. |
Triggered automatically when a flight search finds no DB record for a current or future date | Any future date | 1 credit/lookup 600/month free tier — 1h cooldown on misses |
| Wizz Air timetable API | Route discovery No auth required |
W6 (Wizz Air only) Route map + flight dates |
Daily at 04:30 UTC | Route coverage only | Free |
| Loganair VARS scraper | Schedule scrape Videcom VARS system |
LM (Loganair only) | Disabled | — | VARS schedule report decommissioned by Loganair |
| KLM / Air France Open Data | Official airline API developer.airfranceklm.com |
KL, AF + codeshares DL, KQ, etc. |
Daily at 05:30 UTC | 5 days ahead | Free |
|
British Airways API
No API key |
Official airline API developer.iairgroup.com |
BA, BAW + codeshares AA, IB, etc. |
Daily at 06:00 UTC | 5 days ahead | Free |
| AirLabs aggregator | Schedule aggregator airlabs.co |
All airlines EZY, LS, TOM, etc. |
Every 8h (3x daily) | ~10h lookahead | 1,000 req/month Free tier |
| FlightRadar24 | ADS-B position tracking | All (booked flights only) | Every 30 seconds Area 300km + global fallback |
Live positions + enrichment | Free |
| adsb.lol | ADS-B fallback tracking | All (booked flights only) | Every 30 seconds Area query fallback |
Live positions | Free |
| OpenSky Network | ADS-B legacy tracking | All (booked flights only) | Every 2-5 min (adaptive) Backup only |
Live positions + arrival | Free |
| Steam Packet timetable + live status | Maritime schedule + status | Douglas ↔ Heysham/Liverpool/Belfast | Incremental every 4h Full sync daily + PDF horizon sync |
Season timetable horizon | Free |
| Brittany Ferries | Maritime schedule API | Portsmouth ↔ Ouistreham | Every 4h + daily full sync | Configured maritime horizon | Free |
| Wightlink | Maritime schedule API/scrape | Portsmouth/Fishbourne, Portsmouth/Ryde, Lymington/Yarmouth | Every 4h + daily full sync | Configured maritime horizon | Free |
| Red Funnel Dolli API | Maritime schedule API | Southampton ↔ East Cowes/West Cowes | Every 4h + daily full sync | Configured maritime horizon | Free |
| Southampton Cruise Schedule | Cruise call schedule scrape | Southampton cruise terminals | Every 4h + daily full sync | Configured maritime horizon | Free |
| MyShipTracking / AISHub | Maritime live vessel positions | Booked sailings | Every 2 min status refresh + position updates | Live positions | Free tiers / no-signup fallback |
| Feature | Behaviour |
|---|---|
| Deduplication key | airport + flight_number + date — all sources share one record per flight |
| Status merge | Terminal states (landed, cancelled, diverted) protected from regression by schedule sources |
| Codeshare dedup | Cross-references codeshare numbers to prevent duplicate records for same physical flight |
| Origin preference | Keeps the richer (longer) origin name across sources |
| Time updates | Scheduled arrival always updated; estimated/actual only updated when non-null |
| Position Tracking (Booked Flights) | |
| Pipeline |
3-layer fallback: 1. FR24 area query (300km) with enrichment (aircraft type, registration, gate, terminal) 2. adsb.lol area fallback (300km) — unmatched flights 3. FR24 per-flight global lookup — catches long-distance arrivals |
| Polling interval | Every 30 seconds for active booked flights |
| Enrichment fields | Aircraft type, registration (tail number), departure gate, arrival terminal — from FlightRadar24. Applied on first match, persisted in DB. |
| Booking tracking | Bookings support JM3 reference-level storage for idempotent POST/DELETE calls. Active booking references are exposed via /api/flights/lookup and /api/flights/active-bookings. |
| Live map | /map shows all booked flights for a date with ring-only status colors, multi-booking count badges, booking-reference tooltips, and optional landed-flight filtering via hide_landed=1. |
| Tracking window | Active from -1h before scheduled arrival through +6h after (adjustable). Filtered by departure heuristic (estimated flight duration + 30 min) |
| Airport | Time | Error |
|---|---|---|
| BHX | 2026-08-09 19:53 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 19:21 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 19:10 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 19:00 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 18:50 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 18:38 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 18:27 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 18:16 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 18:05 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 17:43 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 17:32 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 17:21 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 16:58 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 16:02 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| GLA | 2026-08-09 15:29 | RuntimeError: GLA: page loaded but RetrieveFlights XHR never fired (likely Cloudflare interstitial or JS render failure) |
| BHX | 2026-08-09 15:28 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| GLA | 2026-08-09 15:18 | RuntimeError: GLA: page loaded but RetrieveFlights XHR never fired (likely Cloudflare interstitial or JS render failure) |
| BHX | 2026-08-09 14:56 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 14:24 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |
| BHX | 2026-08-09 14:03 | CaptchaEncounteredError: Cloudflare challenge detected on BHX arrivals page |