Home › Guides › Google Flights scraper
Google Flights scraper: every itinerary, Google's own price insight, and a tracker that reports only what changed
Google Flights shows a short list and hides the rest behind “View more flights”. The Google Flights Scraper & Price Tracker returns every flight Google Flights has for a route and dates, hidden ones included, with price, airlines, flight numbers, times, stops and layovers, CO₂, aircraft, legroom, codeshares and “operated by” — plus Google's own price level, typical price range and price history (61–62 days for most searches). No Google account, no API key, no browser: one request to Google per search.
Who it is for
- Travel agencies and tour operators — schedule monitor mode on the routes you sell and act on
CHEAPERrows and on the route row'slowestPriceChangeand price level. - Deal newsletters and travel content — cheapest-days mode for “cheapest day to fly” pages;
priceVsTypicalRangeand the typical range for “is this a good price” copy. - Corporate travel and sustainability reporting — CO₂ per itinerary next to Google's typical figure for the route, with the operating airline and aircraft.
- Airline and route analysis — the whole list, including the connections Google hides, with codeshares, operating carriers, aircraft and legroom.
- Price-history research — about two months (61–62 days) of Google's price history for most searches, from the very first run.
Three modes
| Mode | What you get | Typical use |
|---|---|---|
search (default) | Every flight for each route and dates, one row per itinerary, plus one route row per search with the lowest price, Google's price level, typical range and price history | Fare research, competitor schedules, emissions reporting |
monitor | Only the flights that changed since the previous run of the same search: NEW, CHEAPER, PRICIER, GONE (and PRICE_ADDED / PRICE_REMOVED); CHEAPER and PRICIER rows carry the previous price and the change | Price tracking on a schedule |
cheapest-days | One row per departure day with the lowest fare, the cheapest flight, Google's price level and a flag on the cheapest day | “Cheapest day to fly” content, flexible-date planning |
What you get
Every row has a type: flight, route, day or status.
- Flight rows —
price(for all adults together) andpriceUnavailable;airlines,flightNumbers,itineraryKey(a stable ID: every flight number with its departure time),operatedBy,codeshares,aircraft,minLegroomInches; departure and arrival airports and local times, duration,stopsandlayovers;emissionsKgnext totypicalEmissionsKgandemissionsVsTypicalPercent; Google's own ranking (isBest,rank); per-legsegments; andgoogleFlightsUrl. - Route rows (one per search) —
lowestPrice,cheapestFlight,priceLevel(low / typical / high),priceVsTypicalRange(below / within / above),typicalPricewith its low and high,priceHistorywithpriceHistoryDays, and the coverage countsflightsFoundandhiddenFlightsCount. - Day rows (cheapest-days mode) — departure and return date, lowest price, cheapest flight,
isCheapestDay, Google's price level and typical range.
A trimmed route row from a platform run on 2026-09-30 (FRA-BKK, 10 November 2026, economy, 1 adult, USD). Google had 177 flights for this search and hid 165 of them behind “View more flights”:
{
"type": "route",
"route": "FRA-BKK",
"lowestPrice": 489,
"priceLevel": "typical",
"priceVsTypicalRange": "within",
"typicalPriceLow": 395,
"typicalPriceHigh": 560,
"priceHistoryDays": 61,
"flightsFound": 177,
"hiddenFlightsCount": 165
}
Example inputs
The quick start — one route, 30 days from today, 20 flights. In a platform run it returned 20 flight rows and one route row in about 4 seconds; Google had found 92 flights and hidden 80 of them.
{
"routes": ["IST-LHR"],
"departureDate": "+30",
"maxFlightsPerSearch": 20
}
The cheapest day to fly in a two-week window starting 20 days from today, for one-week round trips:
{
"mode": "cheapest-days",
"routes": ["IST-LHR"],
"departureDate": "+20",
"scanDays": 14,
"returnDate": "+7"
}
Routes are two 3-letter airport codes (LHR, not the city code LON). A route line can carry its own dates, such as JFK-LAX 2026-11-05 2026-11-12 for a round trip. Filters cover cabin class, adults (1–9), stops, airlines, currency and the searcher's market.
How the price tracker works
In monitor mode, each search's flights are stored with their itineraryKey in the key-value store google-flights-monitor-<monitorName> of your Apify account. The next run compares every flight with the price last reported for it:
- A price counts as changed from
minPriceChangePercenton (1% by default). Smaller moves add up until they pass it; set it to 0 to see every move. - The first run is the baseline: every flight is stored, and up to
maxFlightsPerSearchof them are delivered asNEW. A flight that is no longer listed comes once asGONE. - Monitor mode needs a fixed date (
YYYY-MM-DD). With+30, every daily run would search a different day and list everything as new. - A monitor run in which nothing changed charges no
flight,route-checkordate-priceevent (unless you turnincludeUnchangedon). Each search still leaves its free route row with the lowest price, the price level and the history.
Prices move often, mostly by small amounts. On the platform, 43 of 314 monitored flights changed price within 31 minutes: 38 by less than 1%, and 5 by 1% or more (up to −14.7%). At the default threshold, monitor mode would have reported only those 5.
Measured data quality
From the Apify platform runs of 2026-09-30 (build 0.1.1): 2,834 flight rows, 35 route rows and 47 day rows from 23 runs.
- Filled on every flight row (2,834 of 2,834): airlines, flight numbers,
itineraryKey, departure and arrival times, duration, stops and the Google Flights link; layovers on all 2,499 flights with stops. - Price on 2,496 of 2,834 flight rows (88%). The others are listed by Google without a price, mostly among the hidden flights; they carry
priceUnavailable: trueandprice: null, never 0. - CO₂ and aircraft on 2,832 of 2,834; legroom on 2,741 of 2,762 economy rows.
- Uniqueness: no flight appeared twice in any run (for example 1,157 of 1,157 unique
itineraryKeyvalues in a 10-route run). - Against Google's own page: 10
googleFlightsUrllinks were opened. The booking and round-trip pages contained every flight number and the date of their row; on 3 search pages, all 41 flights matched the rows in flight numbers, times, duration, stops, CO₂ and price. - Price history: 61 or 62 days for 31 of 35 searches. Google sent none for a Turkish domestic route, a business-class round trip and a search with airline and nonstop filters.
Limits worth knowing
- One-way and round trips only — multi-city trips are not supported.
- No list of ticket sellers in the data — Google protects that request. A one-way flight's
googleFlightsUrlopens Google's booking page, which lists them. - Prices are for all adults together, not per person. A round-trip price is Google's “From … round trip total” for that outbound flight; the link opens the matching returns.
- The price insight can be empty. A search with airline and stop filters came back without one;
priceLeveland the typical range are then empty too. - Airline filters include codeshares. Google's filter also returns flights sold under those airline codes but flown by partners;
airlinesshows who flies the plane andcodesharesthe numbers it is sold under. - Times are local airport times without a time zone.
- Caps: up to 300 flights per search, 60 days per cheapest-days scan, dates up to 365 days ahead.
- Fares change often. Prices come from airlines and travel sites through Google; keep
scrapedAtwith the data.
“Google” and “Google Flights” are trademarks of Google LLC. This Actor is not affiliated with or endorsed by Google.
How it is billed
Pay per event: flight for every flight row delivered (in monitor mode, every change row), route-check once per search that delivered at least one flight row, and date-price for every cheapest-days row that has a price. Status rows for searches that were empty, failed or duplicated are free. If the Pricing tab lists an Actor start event, it is charged once per run. Current prices are on the Actor's Pricing tab on Apify.
Price tracking works the same way in retail: the Google Shopping scraper guide covers Google's typical price range and store price history for products. To run any scraper from your own code or on a schedule, see calling foXLabs scrapers through the API.
Frequently asked questions
What are the hidden flights in Google Flights?
Google Flights shows a short list and hides the rest behind “View more flights”: dearer or slower combinations. The scraper asks for the whole list in the same single request. The route row says how many flights Google hides (hiddenFlightsCount) and whether they are included (hiddenFlightsIncluded).
How does the price tracker decide what changed?
In monitor mode each search's flights are stored with their itineraryKey in a key-value store in your Apify account. The next run compares prices with the price last reported for each flight and delivers only NEW, CHEAPER, PRICIER and GONE flights. A price counts as changed from minPriceChangePercent on (1% by default); smaller moves add up until they pass it. Monitor mode needs a fixed departure date, so that it compares the same flights from run to run.
Are Google Flights prices per person?
No. Prices are for all adults together, as Google Flights shows them. A round-trip price is Google's “From … round trip total” for that outbound flight: the lowest total with a matching return.
Do I need a Google account, an API key or a proxy?
No account and no API key. A proxy is not needed either: with the default setting the Actor asks Google directly and switches to Apify residential proxy by itself if Google rate-limits it.
Can I get the list of websites that sell the ticket?
Not in the data, because Google protects that request. The googleFlightsUrl of a one-way flight opens Google's booking page for exactly those flights, and that page lists the sellers.
Start small: run the quick-start input, check the route row's price level and history, then schedule monitor mode with fixed dates on the routes you care about. More scrapers for travel data: travel data on foXLabs.