Google Flights Scraper avatar

Google Flights Scraper

Pricing

$0.20 / 1,000 itineraries

Go to Apify Store
Google Flights Scraper

Google Flights Scraper

Flight itineraries with prices, airlines, times, stops, aircraft and CO2 for any route and date, from the Google Flights results page. One-way and round trips, any cabin, up to nine travellers, your currency and market, price insights and a link per itinerary. No browser, no login.

Pricing

$0.20 / 1,000 itineraries

Rating

0.0

(0)

Developer

Steady Scrape

Steady Scrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Flight itineraries for any route and date, straight from the Google Flights results page: price, airlines, flight numbers, departure and arrival times, duration, stops and layovers, aircraft, legroom and CO2, plus Google's price insights (lowest fare, typical range, whether prices are high or low right now, and the 60-day price history). One-way and round trips, any cabin, up to nine travellers, in your currency and for your market. Every search comes back as rows, and when Google has nothing the row says why (no_flights, invalid, blocked) instead of an empty dataset. You pay only for itineraries.

No browser, no login, no API key: it reads the page Google serves, paces itself the way Google tolerates, and rotates IPs before Google's wall shows up.

What you get

One row per itinerary, in Google's order (its "top departing flights" first, marked isBest):

  • The fare: price, the total for all travellers in currency, exactly as Google shows it for market; rank and isBest.
  • The flights: airlines / airlineNames, stops, durationMinutes, departure and arrival (local times, YYYY-MM-DDTHH:MM), segments (one per flight: airline, flight number, airports with names, local times, duration, aircraft, legroom, CO2 kg) and layovers (airport, city, minutes).
  • Round trips: by default each row is an outbound with the lowest round-trip total, and its url opens the return options for it on Google Flights. With includeReturnFlights on, the best outbounds are expanded into one row per outbound + return pair (returnSegments, returnDeparture, returnArrival, returnStops, returnDurationMinutes), with the exact total and a link that has both flights chosen.
  • Emissions: emissions.co2Kg, the typical value for the route and the difference in percent.
  • Price insights: priceInsights (lowest fare found, usual fare, typical range, level high / typical / low) on every row, and priceHistory (lowest fare per day over the past two months) on the first row of each search.
  • What was asked: searchIndex, tripType, origin / originName, destination / destinationName, departureDate, returnDate, passengers, cabin, maxStops, currency, market, language, url, scrapedAt.
  • status and reason: ok, no_flights (Google lists none for that route and date), invalid (a date in the past or a code Google does not know), or blocked (every IP route was refused; unpaid).

Input

fieldwhat it does
origin, destinationAirport codes (JFK) or metro codes (NYC, LON).
departureDatesOne search per date. A flexible range is several dates.
returnDate or stayNightsMakes round trips: back on one date, or N nights after each departure.
urlsSearches copied from Google Flights (links with tfs=), searched as they are.
adults, children, infantsInSeat, infantsOnLapUp to nine seated travellers.
cabineconomy, premium_economy, business, first.
maxStopsany, nonstop, one, two: Google's own filter.
currency, market, languagePrices in this currency for this point of sale (us, de, br), names in this language.
includeReturnFlights, maxOutboundsToExpandFetch the return options of the first N outbounds (one extra page each).
maxItinerariesPerSearchKeep only the first N; 0 keeps all Google shows (usually 20–35).
residentialFallbackRetry through residential proxies when Google refuses the datacenter IPs. Default on.
{
"origin": "JFK",
"destination": "LAX",
"departureDates": ["2026-11-10", "2026-11-11", "2026-11-12"],
"stayNights": 7,
"adults": 2,
"cabin": "economy",
"maxStops": "nonstop",
"currency": "USD",
"market": "us"
}

Output example

{
"searchIndex": 1,
"status": "ok",
"reason": null,
"tripType": "round_trip",
"origin": "JFK",
"originName": "John F. Kennedy International Airport",
"destination": "LAX",
"destinationName": "Los Angeles International Airport",
"departureDate": "2026-11-10",
"returnDate": "2026-11-17",
"passengers": { "adults": 2, "children": 0, "infantsInSeat": 0, "infantsOnLap": 0 },
"cabin": "economy",
"maxStops": "nonstop",
"currency": "USD",
"market": "us",
"language": "en",
"rank": 1,
"isBest": true,
"price": 1066,
"airlines": ["AA"],
"airlineNames": ["American"],
"stops": 0,
"durationMinutes": 371,
"departure": "2026-11-10T06:00",
"arrival": "2026-11-10T09:11",
"segments": [
{ "airline": "AA", "airlineName": "American", "flightNumber": "171", "from": "JFK", "fromName": "John F. Kennedy International Airport", "to": "LAX", "toName": "Los Angeles International Airport", "departure": "2026-11-10T06:00", "arrival": "2026-11-10T09:11", "durationMinutes": 371, "aircraft": "Airbus A321neo", "legroom": "31 in", "co2Kg": 324 }
],
"layovers": [],
"returnStops": null,
"returnDurationMinutes": null,
"returnDeparture": null,
"returnArrival": null,
"returnSegments": null,
"returnLayovers": null,
"emissions": { "co2Kg": 324, "typicalCo2Kg": 361, "differencePercent": -10 },
"priceInsights": { "lowestPrice": 864, "usualPrice": 704, "typicalLow": 410, "typicalHigh": 820, "level": "high" },
"priceHistory": [{ "date": "2026-09-10", "price": 348 }],
"url": "https://www.google.com/travel/flights/search?tfs=…&hl=en&gl=us&curr=USD",
"scrapedAt": "2026-09-18T12:00:00.000Z"
}

Prices: what to expect

  • price is the total for every traveller in the search, as Google shows it. Two adults pay twice a one-adult search, give or take fare classes.
  • Google prices by point of sale. A fare seen from Germany is not the fare seen from the US, even in the same currency: set market to the country you would buy from, or the numbers will not match your own browser.
  • Round trips show the lowest total per outbound until the return options are fetched; the pair rows carry the exact total.
  • Prices change by the hour. scrapedAt says when the row was read, and priceHistory how the lowest fare moved.

Use cases

  • Fare monitoring: schedule a run per route and date set; alert when price or priceInsights.lowestPrice drops.
  • Flexible dates: list the dates you could fly and compare the lowest fare of each search.
  • Route and airline analysis: which carriers fly a route, with how many stops, at what times and what CO2.
  • Travel apps and content: feed live fares and itineraries into a site, a spreadsheet or an agent, with a deep link per itinerary.

Limits and honesty

  • A search returns what Google shows on its first screen (typically 20–35 itineraries: its picks plus "other flights"). Use the stops filter, the cabin and the dates to narrow.
  • The page's "more flights", the price graph and the date grid are not reachable without a Google session. A flexible range is one search per date here.
  • Multi-city trips are not supported yet (paste a link and the first leg's options come back).
  • Google's data is Google's: airline names and airport names come in the language you choose.

Pricing

Pay per event: one itinerary event per row with status ok. Rows with any other status are free, and so is every request that gave nothing. Set a spending limit on the run and the Actor stops at it.

The Actor reads publicly available fare listings that Google Flights shows to anyone, without logging in. It stores no personal data. Use the data in line with Google's terms and your local law; scheduled fare monitoring for your own routes is what it is built for.