Award Seat Search
Scans award seat availability across five airline loyalty programs (LifeMiles, United, Singapore Airlines, Virgin Atlantic, JAL) — each with a different anti-bot stack — through a single unified provider interface. Runs automated daily scans on Cloud Run.
Airline loyalty programs don’t expose a common API for checking award seat availability. Each airline has its own booking system, authentication flow, and anti-bot protection — sometimes multiple layers. This project abstracts those differences behind a single provider interface and runs automated searches so users can scan multiple programs without learning each airline’s quirks.
Five airlines are supported, each requiring a different approach. LifeMiles uses standard OAuth2 — no browser needed. Singapore Airlines requires warming a server-side session cookie before searches work. Virgin Atlantic’s Akamai protection detects headless browsers, so the scanner opens a real Chrome instance over the Chrome DevTools Protocol — Akamai sees same-origin traffic, not bot requests. United routes searches through the live page to inherit its TLS fingerprint and active bot-detection sensors. JAL runs on Amadeus DDS with a session ID embedded in the URL and a companion cookie that must be regenerated per search.
A shared scanner framework handles authentication lifecycle, session management, and result normalization across all five providers. When a session expires mid-scan, the framework catches the error, re-acquires credentials, and retries — all transparent to the provider implementation.
Only LifeMiles runs on a production schedule since it’s the only provider that doesn’t require an interactive browser session. A Cloud Run Job scans a grid of origin/destination pairs over a 365-day window and writes results to GCS. If the entire run fails due to stale credentials or a network issue, existing data is preserved rather than overwritten with an incomplete result set.