01 // how it works
You give us a slack window. We translate that into search URLs across multiple flight aggregators, scrape them in parallel, normalize the results into a single schema, and rank by deal score.
the pipeline
- You submit a search — origin (IATA), optional destination, date window (this week / 60d / etc).
- We check the cache. Identical searches within 6h return instantly from our database.
- We scrape Google Flights first using Firecrawl with a structured JSON extraction schema.
- If Google blocks or returns empty, we fall back to Skyscanner — same schema, different URL.
- If both fail and you set a destination, we hit Duffel's test-mode API for real airline inventory at sandbox prices (clearly tagged so you don't book by mistake).
- Results are normalized into a single shape (origin → dest, date, price in cents, airline, stops, source) and a relative deal score is computed against the result set.
- We cache the search for 6h and render the deal grid.
deal score
Within any result set we normalize price linearly: the cheapest deal scores 1.0, the most expensive scores 0.0. This is intentionally simple — we want relative ranking inside a search, not a global "good deal" oracle.
what we don't do (yet)
- Book the flight for you — we always link out to the airline / OTA.
- Track your card. We never see payment data.
- Multi-stop loop optimization (in v1.1).
- AI dossiers on every deal (Phase 3 — coming).
▎ noteLive scrapes take 10–25 seconds. If you see "cache hit" you got an instant return; if "live scrape" you waited the full pipeline.