Google Flights Scraper - Every Flight, Fares & History avatar

Google Flights Scraper - Every Flight, Fares & History

Pricing

from $3.99 / 1,000 flight searches

Go to Apify Store
Google Flights Scraper - Every Flight, Fares & History

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

ClearPath

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Share

Flight searches. 0.84 seconds average per search. Fare history. Prices including bags.

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.

Search your route with the Google Flights actor

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
 Google Flights
You are here
 Expedia
Hotel rates & reviews
 Booking.com
Guest reviews
 Tripadvisor
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

ParameterTypeDefaultMeaning
maxStopsselectanynonstop, one_stop, two_stops or any. Routes with no direct service return nothing under nonstop.
airlineslistallKeep only these airlines, by two-letter code, or a whole alliance: ONEWORLD, SKYTEAM, STAR_ALLIANCE.
excludeAirlineslistnoneDrop these airlines. Combines with airlines.
connectingAirportslistanyOnly flights connecting through these airports.
maxPricenumbernoneHide fares above this, in your chosen currency.
maxDurationMinutesnumbernoneHide trips longer than this. 600 is ten hours.
departureTimeFrom, departureTimeTonumber0, 23Whole hours, local time at the departure airport.
arrivalTimeFrom, arrivalTimeTonumber0, 23Whole hours, local time at the arrival airport.
lessEmissionsbooleanoffOnly flights Google marks as lower-emission for the route.
carryOnBags, checkedBagsnumber0Re-prices every fare to include the bags. This changes the prices shown; it does not remove flights.
sortByselecttopprice, duration, departure_time, arrival_time or emissions.
cabinClassselecteconomypremium_economy, business and first return fewer flights, because not every route sells them.
currency, market, languagetextUSD, us, enmarket is the country you are searching from. Fares and availability genuinely differ by country.
maxResultsnumber0Flights 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:

  • departureTime and arrivalTime carry the local UTC offset, so an overnight arrival is unambiguous without looking up the airport's timezone.
  • price covers the whole party; pricePerPassenger divides it.
  • checkedBagsIncluded and carryOnBagsIncluded describe 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.
  • amenityCodes and seatTypeId are Google's own unlabelled codes. They are stable, so they are published as codes rather than under invented names.
  • flightsAvailable is what the search found; flightsDelivered is what this run wrote after your maxResults.
  • Nested legs, layovers and returnFlights survive JSON export. CSV flattens them, so use JSON when you need the per-leg detail.

Pricing

EventWhen chargedPrice
Actor startOnce per run$0.00099
Flight searchOnce per search that returns flights, however many come back$0.00499
Return flightsOnce 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.