Google Flights Scraper API - Date Range & Price Drop Monitor avatar

Google Flights Scraper API - Date Range & Price Drop Monitor

Pricing

from $1.90 / 1,000 flight returneds

Go to Apify Store
Google Flights Scraper API - Date Range & Price Drop Monitor

Google Flights Scraper API - Date Range & Price Drop Monitor

For fare alerts and airfare dashboards: Google Flights prices for one route across up to 31 departure dates in one run, every flight with price, airline, times, stops and CO2. 5-7 dates took 6.8-9.8 s (2026-09-24). Monitor returns only new flights and price changes. Unreadable dates are free.

Pricing

from $1.90 / 1,000 flight returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Google Flights Scraper - Date Range & Price Drop Monitor

Get Google Flights prices and flights for a route across a range of departure dates in one run, as clean JSON: every flight Google Flights lists, with price, airline, flight numbers, local departure and arrival time, duration, stops, layovers, aircraft, legroom and CO2. Turn on Monitor and scheduled runs return only new flights and price changes (with the previous price), so a fare alert, travel deal site or pricing dashboard does not re-download and pay for the same flights every hour.

  • Date range in one run. Search every departure date from departureDate to departureDateTo (up to 31 dates). For round trips the length of stay is kept: departing a day later returns a day later.
  • Price drop monitor. onlyChanges returns flights that are new or whose price moved since the last run of the same search, with previousPrice, priceChange and priceChangePercent. Moves under 1% (exchange-rate noise) are not returned unless they add up.
  • What Google Flights shows, nothing guessed. Prices are the totals Google Flights shows for all travelers, in the currency you choose; the row carries the currency Google actually answered in.
  • No charge when Google Flights cannot be read. Dates that could not be read come back as free rows that say why. A run where no date could be read is not charged at all.
  • Fast. One departure date is one Google Flights page: production runs on 2026-09-24 took 2.9-4.3 s for one date and 6.8-9.8 s for 5-7 dates, at 256 MB.

Unofficial. Reads the public Google Flights results page (google.com/travel/flights), the same page a person sees without logging in. No login, no cookies, no API key.

What you get

One row per flight per departure date. Example (production run, 2026-09-24, ORD to MIA on 2026-10-15; the second run of the same search, so the change columns are filled):

{
"status": "ok",
"changeType": "unchanged",
"departureDate": "2026-10-15",
"returnDate": null,
"origin": "ORD",
"destination": "MIA",
"price": 139,
"currency": "USD",
"priceScope": "one-way",
"travelers": 1,
"previousPrice": 139,
"priceChange": 0,
"priceChangePercent": 0,
"previousCheckedAt": "2026-09-24T09:37:40.028Z",
"priceRankOnDate": 1,
"cheapestPriceOnDate": 139,
"isCheapestOnDate": true,
"flightsFoundOnDate": 13,
"airlines": ["Frontier"],
"flightNumbers": ["F9 3241", "F9 2676"],
"departureLocal": "2026-10-15T12:26",
"arrivalLocal": "2026-10-15T21:59",
"durationMinutes": 513,
"stops": 1,
"layovers": [{ "airport": "DFW", "airportName": "Dallas Fort Worth International Airport", "city": "Dallas", "minutes": 176 }],
"legs": [
{ "flightNumber": "F9 3241", "airlineCode": "F9", "airline": "Frontier", "departureAirport": "ORD", "arrivalAirport": "DFW",
"departureLocal": "2026-10-15T12:26", "arrivalLocal": "2026-10-15T15:09", "durationMinutes": 163, "aircraft": "Airbus A321neo", "legroom": "28 in" },
{ "flightNumber": "F9 2676", "airlineCode": "F9", "airline": "Frontier", "departureAirport": "DFW", "arrivalAirport": "MIA",
"departureLocal": "2026-10-15T18:05", "arrivalLocal": "2026-10-15T21:59", "durationMinutes": 174, "aircraft": "Airbus A320neo", "legroom": "28 in" }
],
"co2Kg": 225,
"typicalCo2Kg": 206,
"googleSection": "other",
"cabinClass": "economy",
"googleFlightsUrl": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjYtMTAtMTVqBRIDT1JEcgUSA01JQUABSAGYAQI&hl=en&gl=us&curr=USD",
"watchName": null,
"checkedAt": "2026-09-24T09:54:49.960Z"
}

Checked against the Google Flights page in a browser right after the run: 5 of 5 flights had the same departure and arrival time, airline, price and CO2 on screen (12:26 PM – 9:59 PM Frontier ... 225 kg CO2e +9% emissions ... $139). The same check on a round trip in EUR: 5 of 5 (€495 round trip).

ColumnMeaning
statusok for a flight row. Other values are free rows that say why nothing was returned (below).
changeTypefirst-check (first run of this search), new (not seen by this watch on this date before), price-down, price-up or unchanged (also used for a flight seen before but never returned)
departureDate, returnDateThe searched dates. returnDate is null for one way
origin, destinationAirports of this flight (with several airports per side, the one this flight uses)
price, currencyTotal price for all travelers as Google Flights shows it, and the currency Google answered in
priceScopeone-way, or round-trip-total (Google Flights shows outbound flights with the round-trip total before a return flight is picked; return flights are not listed)
travelersNumber of travelers the price is for
previousPrice, priceChange, priceChangePercent, previousCheckedAtThe price at which this watch last returned this flight on this date, the difference, and when that was. Null on a first check, a new flight, or a flight this watch has seen but never returned
priceRankOnDate, cheapestPriceOnDate, isCheapestOnDate, flightsFoundOnDateWhere this flight stands among all flights Google Flights listed for that date
airlines, flightNumbersAirline names and flight numbers of all segments
departureLocal, arrivalLocalLocal date and time at the departure and arrival airport (no time zone, as shown on Google Flights)
durationMinutes, stops, layoversTotal travel time, number of stops, and each layover's airport, city and minutes
legsEach flight segment: flight number, airline, airports, times, duration, aircraft, legroom
co2Kg, typicalCo2KgEstimated CO2 of this flight and the typical CO2 for the route, as Google Flights shows them
googleSectiontop (Google's "Top flights") or other
cabinClassThe searched cabin class
googleFlightsUrlThe same search on Google Flights
note, searchFree rows only: why nothing (or not everything) was returned, and the search in words
watchName, checkedAtThe watch name you gave, and the time of the check

Free rows (not charged)

statusWhen
no-flightsGoogle Flights shows no flights for this route on this date (or none at or under maxPrice)
no-changeMonitor on: no new flight and no price move on this date since the last run
more-not-returnedMore flights than maxFlightsPerDate; says how many were left out (not charged)
bad-inputThe input could not be used, or Google Flights did not accept it (unknown airport code, a date in the past or more than about 330 days ahead)
unreadableGoogle Flights could not be read for this date, even after asking again from other IP addresses
blockedGoogle showed a check page. This Actor does not solve or bypass check pages; it stops and does not search the remaining dates
budget-reachedThe run hit the maximum total charge you set. Rows not returned are not remembered, so the next monitor run returns them

Input

FieldTypeDefaultDescription
originstring-IATA airport code(s) to fly from: JFK, or several searched together: JFK, EWR, LGA. Leave both From and To empty to run the example route JFK to LAX
destinationstring-IATA airport code(s) to fly to: LAX, or LAX, BUR, SNA
departureDatestring+30First departure date: YYYY-MM-DD, or +N for N days from today (UTC) so a schedule never runs out of dates
departureDateTostring-Last departure date (YYYY-MM-DD or +N): every date in between is searched (up to 31)
returnDatestring-Makes it a round trip (YYYY-MM-DD or +N); with a date range the length of stay is kept
adultsinteger 1-91Adults
childreninteger 0-80Children (2-11). At most 9 travelers. Infants are not supported (Google Flights returns incomplete results for searches with infants)
cabinClasseconomy, premium-economy, business, firsteconomyCabin class
maxStopsany, nonstop, 1, 2anyGoogle Flights' Stops filter
airlineslist of 2-character codes-Only these airlines, for example DL, B6, UA
currencystringUSDOne of the currencies Google Flights offers (USD, EUR, GBP, JPY, CAD, AUD, INR ...)
maxPricenumber (1 or more)-Only flights at or under this total price
maxFlightsPerDateinteger 1-10020At most this many flights per date, in the order below
sortBycheapest, google, departure, durationcheapestWhich flights come first
onlyChangesbooleanfalseMonitor: return only new flights and price changes since the last run of the same search
minPriceChangePercentnumber 0-501Monitor: smallest price move to report, in percent of the last returned price
watchNamestring-Runs with the same search and watch name share what they have seen; give two schedules different names
resetMonitoringStatebooleanfalseForget what this watch remembered, so the run is a first check again

Examples

Cheapest flights for every departure date in a week:

{ "origin": "JFK", "destination": "LAX", "departureDate": "2026-11-12", "departureDateTo": "2026-11-18", "maxFlightsPerDate": 5 }

Hourly price-drop alert for a round trip (schedule this; each run returns only what changed):

{ "origin": "SFO", "destination": "NRT, HND", "departureDate": "+60", "departureDateTo": "+66", "returnDate": "+70", "onlyChanges": true, "watchName": "tokyo-trip" }

Business class for two, in euros, nonstop only:

{ "origin": "LHR", "destination": "JFK", "departureDate": "2026-12-03", "returnDate": "2026-12-10", "adults": 2, "cabinClass": "business", "maxStops": "nonstop", "currency": "EUR" }

How monitoring works

The Actor remembers, per search and watchName, which flights it has seen on each departure date and the price at which it last returned each one (in a named key-value store in your account). On the next run it compares: a flight it never saw on that date (or that was above maxPrice last time and is now under it) is new; a flight whose price moved by at least minPriceChangePercent from the price it was last returned at is price-down or price-up. Flights it saw but never returned (beyond maxFlightsPerDate on the first run) and flights above maxPrice do not change the remembered price, so you are never sold the same price twice. With onlyChanges on, only new and moved flights are returned and charged; a date with nothing to report comes back as one free no-change row. The run start fee is still charged on a run with no changes (it pays for the check): an hourly watch with no changes costs 720 start fees a month. With a +N date range, each day one new departure date enters the window and its flights are returned once as first-check. Google Flights sometimes lists a flight in one search and not in the next; such a flight is reported as new once and compared by price after that. Two runs of the same search and watch name at the same moment can overwrite each other's memory, so do not overlap schedules of one watch.

Pricing

Pay per event: a small start fee per run that read at least one flight, plus a fee per flight row returned. Free rows are never charged. A run where no date could be read, or where Google Flights showed no flights, charges nothing. If your maximum total charge for a run has no room for the start fee plus one flight, the run requests nothing and charges nothing.

Limits

  • Prices change all the time; a row is what Google Flights showed at checkedAt. The final price is on the airline or agency site.
  • Infants are not supported: with infants, Google Flights lists only some flights or none (for example 0 of 36, or 4 of 13), so such searches are refused with a free bad-input row.
  • Round trips list outbound flights with the round-trip total; return flights are not listed.
  • One route per run (several airports per side are fine). Up to 31 departure dates per run.
  • Google may show a check page to automated traffic; the Actor does not bypass it and returns a free blocked row instead.

Support

Found a route where the output differs from Google Flights? Open an issue on the Issues tab with the run ID and it will be looked at.