Google Flights Scraper | Fares, Price Calendar & Alerts
Pricing
from $1.50 / 1,000 fares
Google Flights Scraper | Fares, Price Calendar & Alerts
Scrape Google Flights fares and flights: one-way, round trip, multi-city legs, flexible-date price calendar, Google's low/typical/high verdict and 60-day price history. Monitor mode returns only price drops, with webhook alerts. Plain HTTP.
Pricing
from $1.50 / 1,000 fares
Rating
0.0
(0)
Developer
Alex Morain
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
17 hours ago
Last modified
Categories
Share
What does Google Flights Scraper do?
Google Flights Scraper reads Google Flights and returns fares and flights as structured data: one-way, round trip and multi-city legs, a flexible-date price calendar, Google's own low / typical / high price verdict with the usual price range, the 60-day price history of the route and the best time to book. A monitor mode turns a scheduled run into a flight price alert: only the fares that dropped are returned and charged, and a webhook can post them to Slack or Discord.
It works as a Google Flights API alternative over plain HTTP: no browser, no account, no API key. The included datacenter proxy is enough; residential proxies only step in when Google refuses a search again and again, at no extra charge to you.
Why use Google Flights Scraper?
Two things decide whether a Google Flights scraper gives you the truth, and both are measured.
Google refuses searches without saying so. From a datacenter IP, Google answers part of the searches with a normal-looking page (HTTP 200) whose results block is an error. A scraper that does not look for it returns "no flights" for a route that has plenty. We measured it on 50 searches from Apify servers on 18 October 2026:
| Same 50 searches | Answered on the first try | After retries on fresh IPs |
|---|---|---|
| One fixed datacenter IP | 30 / 50 | 48 / 50 |
| Apify datacenter proxy, new IP per try (this Actor) | 44 / 50 | 50 / 50 |
On a 200-search price calendar run the next day: 200 / 200 priced, 1.09 page requests per search. A search that still fails after every retry comes back as a free row marked failed, never as a silent "no flights".
Google's results page shows a selection, not every flight. On JFK to LAX the page lists 29 flights, all nonstop, while the same page names 14 airlines flying the route. Turn on More results and the Actor also searches each airline of the route and merges the flights: on three test routes it went from 60 to 109 flights. On the routes we checked, the cheapest fare was already on the main page, so you only need it for longer flight lists.
What you can do with it:
- Fare monitoring and price alerts: schedule a run every morning, get only the drops, or a ping when a route falls under your target price.
- Price calendars: cheapest fare for each of the next 30, 60 or 90 departure dates, with Google's verdict per date.
- Travel apps and content: route pages, deal newsletters, "is now a good time to book" widgets built on Google's verdict and history.
- Market research: airlines on a route, nonstop availability, fares by cabin and by date, CO2 per itinerary.
Every Apify feature applies: scheduling, API access, webhooks, integrations with Make, Zapier, n8n or Google Sheets, proxy rotation and run monitoring.
What data can Google Flights Scraper extract?
The dataset has two kinds of rows. A fare row is one priced search (a route and its dates). A flight row is one flight option of that search.
| Field | Row | Description |
|---|---|---|
cheapestPrice | fare | Cheapest fare for the search, all travellers, after your filters |
priceLevel | fare | Google's verdict: low, typical or high |
typicalPriceLow / typicalPriceHigh | fare | The price range Google considers usual for this trip |
priceHistory | fare | Lowest fare of the route for this date, day by day over ~60 days |
cheapestBookingWindow | fare | When this trip is usually cheapest to book (days before departure) |
airlinesOnRoute, nonstopAvailable | fare | Airlines flying the route, nonstop or not |
previousPrice, priceChange, isPriceDrop | fare | Monitor mode: what changed since the last run |
price, airlines, flightNumbers | flight | Fare, airlines and flight numbers |
departureTime, arrivalTime, durationMinutes, stops | flight | Schedule and connections |
legs, layovers | flight | Each flight with aircraft, legroom, airports; each layover with its duration |
co2Grams, co2Label | flight | Emissions estimate and how it compares to the route |
returnFlight | flight | Round trips: the matching return flight |
bookingUrl | flight | Google Flights page of that exact itinerary, with the airlines and agencies selling it |
How to scrape Google Flights
- Open the Actor and add one line per trip in Searches:
CDG JFK 2026-12-03 2026-12-10. Codes are IATA airport codes (JFK,LHR) or city codes (NYC,PAR,LONcover every airport of the city). - Leave the dates out of a line to use Depart in N days and Trip length instead, the right choice for scheduled runs. For a single trip you can also use From, To and Departure date.
- For a price calendar, set Flexible dates to the number of extra departure dates to price.
- Set the cabin, travellers and filters you need.
- Click Start, then download the results as JSON, CSV, Excel or HTML, or read them through the API.
- For price alerts, save the input as a task, set Monitor mode to
dropsand schedule the task daily.
How much does it cost to scrape Google Flights?
Pay per result, prices for the Apify Free plan (larger plans pay less, down to $0.0015 a fare and $0.0003 a flight):
| Event | Price |
|---|---|
| Run start | $0.002 |
| Fare (one priced search, one calendar date) | $0.003 |
| Flight (one flight row) | $0.0005 |
Searches with no flights, searches Google refused, unchanged fares in monitor mode and the multi-city total row are free.
Examples: one search with its ~20 flights costs about $0.015. A 30-day price calendar with fares only costs $0.092. Watching 50 routes every morning in drops mode costs $0.002 a day plus $0.003 per alert.
Input
See the input tab for every option. The filters split in two groups. Stops, airlines, alliances, connecting airports and layover durations are applied by Google. Excluded airlines, maximum price, maximum duration and time windows are applied by the Actor to the flights Google returns, because Google ignores them on its side.
Example input for a round trip with return flights and a 14-day calendar:
{"origin": "CDG","destination": "JFK","departureDate": "2026-12-03","returnDate": "2026-12-10","flexibleDays": 13,"maxStops": "1","returnFlightsForTop": 2,"currency": "EUR"}
Output
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. A fare row and a flight row, shortened:
[{"type": "fare","tripType": "round-trip","origin": "CDG","destination": "JFK","departureDate": "2026-12-03","returnDate": "2026-12-10","currency": "USD","cheapestPrice": 545,"priceLevel": "typical","typicalPrice": 684,"typicalPriceLow": 475,"typicalPriceHigh": 930,"savingsVsTypical": 139,"cheapestBookingWindow": {"from": "2026-05-17", "to": "2026-08-15", "daysBeforeDepartureFrom": 200, "daysBeforeDepartureTo": 110},"priceHistory": [{"date": "2026-08-19", "price": 612}, {"date": "2026-08-20", "price": 598}],"flightsFound": 18,"status": "ok"},{"type": "flight","rank": 1,"price": 552,"currency": "USD","priceIncludes": "round trip, all travellers","airlines": ["AA"],"flightNumbers": ["AA 43"],"stops": 0,"durationMinutes": 500,"departureTime": "2026-12-03T11:25","arrivalTime": "2026-12-03T13:45","returnFlight": {"flightNumbers": ["AA 42"], "departureTime": "2026-12-10T18:00", "stops": 0},"bookingUrl": "https://www.google.com/travel/flights/booking?tfs=..."}]
Tips and advanced options
- Fares only is the cheap setting. Turn off Include flight details for calendars and monitoring: you get the cheapest price, the verdict and the history without paying for 20 flight rows per search.
- Round trips: Google prices a round trip on the outbound flight. The outbound rows carry the round-trip total. Set Return flights for the top N to get the actual return flights of the first N outbounds.
- Multi-city: Google serves multi-city fares only inside its own app. The Actor prices each leg as a one-way ticket and adds a free row with the sum of the cheapest legs.
- Rolling dates in monitor mode: with Depart in N days, the memory follows "N days ahead" from one run to the next, so a daily task alerts when the fare for a trip a month out drops. With fixed dates and Flexible dates, past dates are skipped and the task keeps running until the last date.
- Monitor memory: runs with the same searches share their memory automatically. Set Monitor memory name to share it between tasks or to start over.
- Webhook: the summary carries
textandcontentfields, so a Slack or Discord incoming webhook URL works without any glue. - Calling it from code (Python):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("alexmorain/google-flights-scraper").call(run_input={"searches": ["JFK LAX 2026-12-01", "SFO NRT 2026-12-05 2026-12-19"],"includeFlights": False,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["origin"], row["destination"], row["cheapestPrice"], row["priceLevel"])
FAQ, disclaimers and support
Does it need a Google account, an API key or residential proxies?
No. It reads the public Google Flights results page over HTTP through Apify's datacenter proxy. If Google keeps refusing a search, the Actor retries it through residential proxies by itself, at no extra charge to you.
Why are there fewer flights than on the Google Flights website?
Google's page shows a selection and loads the rest when you click "more flights". Turn on More results to search each airline of the route as well. Booking options with every agency's price are loaded the same way and are not in the dataset: the bookingUrl opens that page.
How far ahead can I search?
From today up to 330 days ahead, like Google Flights. Dates outside that window are rejected before the run spends anything.
Is it legal to scrape Google Flights?
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. Google Flights results contain no personal data.
Something is wrong or missing
Open an issue in the Issues tab: it gets read and answered. For programmatic access, see the API tab.