Google Flights Scraper - Every Flight, Fares & History
Pricing
from $3.99 / 1,000 flight searches
Google Flights Scraper - Every Flight, Fares & History
Scrape Google Flights for every flight on a route and date, one row each: fare, airline, stops, layovers, aircraft, baggage and emissions. One-way, round-trip and multi-city, with recent fare history and the typical price band included. One price per search, no per-result charge.
Pricing
from $3.99 / 1,000 flight searches
Rating
0.0
(0)
Developer
ClearPath
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
From Clearpath, creators of Expedia Hotels, Booking.com Reviews and Tripadvisor Reviews. Flight prices, hotel rates and traveller feedback from the same team.
Why choose this actor?
0.84 seconds per search on average. A local search benchmark completed 50 searches in 42 seconds across six routes and three dates. Collect fares in bulk, with one exportable row per itinerary. Leave maxResults at 0 to keep all available results.
Fare history from the first search. Get recent route prices and Google's typical price range alongside the flights, when available. See how the current fare compares without waiting weeks to build your own history.
Compare prices with your bags included. Set carryOnBags and checkedBags to price fares with the baggage you need. Get aircraft, legroom, cabin class and carbon emissions where available, plus flight legs, layovers and local times.
Quick input
Start with one route and a future departure date. This example keeps all available flights:
{"origin": "LAX","destination": "JFK","departureDate": "2026-11-22","maxResults": 0}
Open the actor to choose your airports and date. Export JSON, CSV or Excel; JSON preserves the flight legs and fare history. The output contains a search summary plus one row per itinerary. Fare history and baggage details depend on what Google returns for that search.
For a round trip, add returnDate. Enable includeReturnFlights only when you also need the matching return options; each outbound expanded incurs an additional charge.
| Clearpath · Travel Data | |||
You are here | Hotel rates & reviews | Guest reviews | Traveller reviews |
Copy to your AI assistant
clearpath/google-flights-scraper on Apify returns every flight Google Flights shows for a route and date, one record per itinerary plus one `search` record carrying the price band, recent fare history and route vocabularies. Minimum input: origin, destination, departureDate (IATA codes, YYYY-MM-DD); origin/destination accept several comma-separated airports. maxResults=0 (default) keeps every flight; flightsAvailable on the search record is the true total. returnDate makes it a round trip priced at the round-trip total; the actual return flights only appear if includeReturnFlights=true, which adds one charged request per outbound, so bound it with maxResults. multiCityLegs takes extra legs as "FROM,TO,YYYY-MM-DD"; searches takes a list of routes that inherit the top-level settings; flightUrl accepts a pasted Google Flights address. carryOnBags/checkedBags re-price fares to include baggage rather than filtering; market changes which country's fares you get, not just the currency; maxStops=nonstop returns nothing on routes with no direct service. Unrecognised cabinClass, maxStops or currency are refused before the search runs. sortBy is applied to the delivered rows. Charges: $0.00099 per run start, $0.00499 per search regardless of how many flights come back (discounted to $0.00429 and $0.00399 on paid Apify plans), $0.00399 per outbound expanded for return flights; there is no per-row charge. Full input and output contract: https://api.apify.com/v2/actors/clearpath~google-flights-scraper/builds/default . Current pricing: https://apify.com/clearpath/google-flights-scraper
How to scrape Google Flights
Give the actor a route and a date. Everything else has a sensible default.
{"origin": "LAX","destination": "JFK","departureDate": "2026-11-22"}
Search several airports at once by listing them, and Google searches all of them. Each result names the airport it actually uses.
{"origin": "LAX, BUR, LGB","destination": "JFK, EWR, LGA","departureDate": "2026-11-22","maxStops": "nonstop"}
A round trip adds a return date. By default you get outbound options priced at
the round-trip total, which is how Google itself presents them. Switch on
includeReturnFlights to also collect the return flights that pair with each
outbound.
{"origin": "LAX","destination": "JFK","departureDate": "2026-11-22","returnDate": "2026-11-29","includeReturnFlights": true,"maxResults": 20}
Multi-city takes the first leg in the usual fields and the rest as
FROM,TO,YYYY-MM-DD:
{"origin": "LAX","destination": "JFK","departureDate": "2026-11-22","multiCityLegs": ["JFK,LHR,2026-11-27","LHR,LAX,2026-12-02"]}
Already have the search open in your browser? Paste the address and the route, dates, cabin, travellers and airline filters come with it:
{"flightUrl": "https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI2LTExLTIyagcIARIDTEFYcgcIARIDSkZLQAFIAXABggELCP___________wGYAQI"}
To cover many routes in one run, put them in searches. Each entry inherits
anything you set above it and can override it:
{"searches": [{"origin": "LAX","destination": "JFK","departureDate": "2026-11-22"},{"origin": "SFO","destination": "ORD","departureDate": "2026-11-24"},{"origin": "JFK","destination": "LHR","departureDate": "2026-11-26","cabinClass": "business"}],"currency": "USD","maxResults": 50}
Filters
| Parameter | Type | Default | Meaning |
|---|---|---|---|
maxStops | select | any | nonstop, one_stop, two_stops or any. Routes with no direct service return nothing under nonstop. |
airlines | list | all | Keep only these airlines, by two-letter code, or a whole alliance: ONEWORLD, SKYTEAM, STAR_ALLIANCE. |
excludeAirlines | list | none | Drop these airlines. Combines with airlines. |
connectingAirports | list | any | Only flights connecting through these airports. |
maxPrice | number | none | Hide fares above this, in your chosen currency. |
maxDurationMinutes | number | none | Hide trips longer than this. 600 is ten hours. |
departureTimeFrom, departureTimeTo | number | 0, 23 | Whole hours, local time at the departure airport. |
arrivalTimeFrom, arrivalTimeTo | number | 0, 23 | Whole hours, local time at the arrival airport. |
lessEmissions | boolean | off | Only flights Google marks as lower-emission for the route. |
carryOnBags, checkedBags | number | 0 | Re-prices every fare to include the bags. This changes the prices shown; it does not remove flights. |
sortBy | select | top | price, duration, departure_time, arrival_time or emissions. |
cabinClass | select | economy | premium_economy, business and first return fewer flights, because not every route sells them. |
currency, market, language | text | USD, us, en | market is the country you are searching from. Fares and availability genuinely differ by country. |
maxResults | number | 0 | Flights per search. 0 keeps every one. |
The actor refuses a cabin, connection limit or currency it does not recognise instead of running the search, because those would otherwise come back quietly priced or filtered as something else.
What data can you extract from Google Flights?
Each search writes one search record, then one flight record per itinerary.
The search record carries the context that applies to the whole search: the price floor and ceiling, the typical price band, recent fare history, the airlines, alliances and connection airports available on the route, and each airline's baggage and accessibility policy pages.
{"recordType": "search","origin": "LAX","destination": "JFK","departureDate": "2026-11-22","returnDate": null,"currency": "USD","market": "us","cabinClass": "economy","tripType": "one_way","travellerCount": 1,"googleFlightsUrl": "https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI2LTExLTIyagcIARIDTEFYcgcIARIDSkZLQAFIAXABggELCP___________wGYAQI&hl=en&gl=us&curr=USD","flightsAvailable": 142,"priceLow": 324,"priceHigh": 2012,"durationMinutesLow": 312,"durationMinutesHigh": 1328,"typicalPriceLow": 85,"typicalPriceHigh": 215,"priceHistory": [{"date": "2026-07-24","price": 269},{"date": "2026-07-25","price": 269}],"airlines": [{"code": "AS","name": "Alaska"},{"code": "AA","name": "American"},{"code": "AD","name": "Azul"}],"alliances": [{"code": "ONEWORLD","name": "Oneworld"}],"connectionAirports": [{"code": "ATL","city": "Atlanta"},{"code": "AUS","city": "Austin"}],"baggagePolicyUrls": [{"code": "AS","airline": "Alaska","url": "https://www.alaskaair.com/content/travel-info/baggage/overview"}],"accessibilityUrls": [{"code": "AS","airline": "Alaska","url": "https://www.alaskaair.com/content/travel-info/accessible-services"}],"flightsDelivered": 3}
priceHistory holds 62 dated points, airlines
14 entries, connectionAirports
27 and the two policy lists
5 each. They are shortened above; runs return
them in full.
Each flight record is one itinerary, with every leg broken out:
{"price": 334,"checkedBagsIncluded": 0,"carryOnBagsIncluded": 1,"airlineCode": "B6","airlineName": "JetBlue","departureAirport": "LAX","departureAirportName": "Los Angeles International Airport","departureTime": "2026-11-22T10:00:00-08:00","arrivalAirport": "JFK","arrivalAirportName": "John F. Kennedy International Airport","arrivalTime": "2026-11-22T18:28:00-05:00","durationMinutes": 328,"stops": 0,"legs": [{"airlineCode": "B6","airlineName": "JetBlue","flightNumber": "824","operatedBy": null,"departureAirport": "LAX","departureAirportName": "Los Angeles International Airport","departureTime": "2026-11-22T10:00:00-08:00","arrivalAirport": "JFK","arrivalAirportName": "John F. Kennedy International Airport","arrivalTime": "2026-11-22T18:28:00-05:00","durationMinutes": 328,"aircraft": "Airbus A320","legroom": "33 inches","cabin": "economy","cabinId": 1,"seatTypeId": 3,"emissionsGrams": 422048,"codeshares": [],"amenityCodes": {"1": true,"8": true,"11": 2}}],"layovers": [],"operatingAirlines": [],"emissionsGrams": 422000,"emissionsLowestGrams": 338000,"emissionsTypicalGrams": 386000,"emissionsVsTypicalPercent": 25,"isBestFlight": true,"bookingToken": "CjRIZ0dTcFZ6ZGZQVXNBRUV3ZlFCRy0tLS0tLS0tLWVmbWEyM0FBQUFBR3F6cXRzTld1b3dBEgVCNjgyNBoLCLyEAhACGgNVU0Q4HHC8hAI=","itineraryId": "Viqdvf","recordType": "flight","pricePerPassenger": 334.0,"origin": "LAX","destination": "JFK","departureDate": "2026-11-22","returnDate": null,"currency": "USD","market": "us","cabinClass": "economy","tripType": "one_way","travellerCount": 1,"googleFlightsUrl": "https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI2LTExLTIyagcIARIDTEFYcgcIARIDSkZLQAFIAXABggELCP___________wGYAQI&hl=en&gl=us&curr=USD","flightsAvailable": 142}
A connecting itinerary fills layovers and carries one entry in legs per
flight:
{"stops": 1,"layovers": [{"durationMinutes": 78,"airport": "PHX","airportName": "Phoenix Sky Harbor International Airport","city": "Phoenix"}]}
Notes on reading the output:
departureTimeandarrivalTimecarry the local UTC offset, so an overnight arrival is unambiguous without looking up the airport's timezone.pricecovers the whole party;pricePerPassengerdivides it.checkedBagsIncludedandcarryOnBagsIncludeddescribe the fare. They are empty when Google does not state them, which happens on searches for more than one traveller. Empty means unknown, not zero.amenityCodesandseatTypeIdare Google's own unlabelled codes. They are stable, so they are published as codes rather than under invented names.flightsAvailableis what the search found;flightsDeliveredis what this run wrote after yourmaxResults.- Nested
legs,layoversandreturnFlightssurvive JSON export. CSV flattens them, so use JSON when you need the per-leg detail.
Pricing
| Event | When charged | Price |
|---|---|---|
| Actor start | Once per run | $0.00099 |
| Flight search | Once per search that returns flights, however many come back | $0.00499 |
| Return flights | Once per outbound expanded, only with includeReturnFlights | $0.00399 |
There is no per-result charge. A search returning 300 flights costs the same as one returning 8, so a typical one-route run is well under a cent. Watching ten routes once a day is roughly $1.80 a month.
Flight search is discounted on paid Apify plans: $0.00429 on Scale and $0.00399 on Business and above. The Pricing tab shows the rate for your own plan.
A run that is refused for an invalid input charges nothing at all, because the input is checked before any search starts.
includeReturnFlights is the one option that multiplies cost: it makes one
extra request per outbound option. Pair it with maxResults to bound it.
Frequently asked questions
Does Google Flights have a public API? No. This actor collects the data for you and returns it as structured records.
How many flights come back per search? As many as the search has. Typical
city pairs return roughly 100 to 300; flightsAvailable on the search record
always tells you the true number.
Can I use it for one-way, round-trip and multi-city? Yes, all three, plus several airports per field.
Can I watch a fare over time? Yes. Schedule the actor and compare runs; the search record also carries Google's own recent fare history and typical price band, so the first run already tells you whether today's price is unusual.
Which airport codes work? Three-letter IATA codes, such as LAX or LHR.
Why did a search return nothing? Usually a filter no route satisfies, most
often nonstop on a route with no direct service. Loosen it and try again.
Do prices differ by country? Yes, genuinely. market sets the country the
search is made from, and both fares and availability follow it.
Is there a free tier? Free-plan usage is not limited at the moment.
Support
Found a problem or need a field that is missing? Open an issue on the Issues
tab, or write to max@mapa.slmail.me. Include the run ID and your input.
