Google Flights Scraper - Flight Prices, Airlines, Stops & Times avatar

Google Flights Scraper - Flight Prices, Airlines, Stops & Times

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Google Flights Scraper - Flight Prices, Airlines, Stops & Times

Google Flights Scraper - Flight Prices, Airlines, Stops & Times

Use this to get Google Flights prices for a route and date. Input: origin and destination IATA codes (e.g. JFK, LAX), departure date, optional return date, passengers, cabin. One result = one itinerary: total price, airlines, flight numbers, stops, layovers, times, CO2. $0.50 per 1,000 results.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

Giovanni Rich

Giovanni Rich

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Google Flights Scraper & API - Flight Prices and Airfare Data

Scrape Google Flights and get flight prices as clean JSON: this Google Flights API returns one-way and round-trip itineraries with the total price, airlines, flight numbers, stops, layovers, durations, local departure/arrival times with UTC offsets, aircraft, legroom and CO2 emissions. Use it as a fast, cheap flight price scraper for fare tracking, travel apps and airfare data research - no browser, no Google API key, a typical search returns 10-40 itineraries in about one second.

How to use

  1. Enter a route: origin and destination airport codes (e.g. JFK and LAX), a departure date (empty = 30 days from today) and, for a round trip, a return date.
  2. Click Start. Each search takes a few seconds.
  3. Download the flights as JSON, CSV or Excel from the dataset, or call the actor from your code through the Apify API.

Use cases

  • Fare tracking and price alerts: run it on a schedule for your routes and get notified when the price drops. priceLevel gives Google's own low / typical / high verdict.
  • Travel apps and AI agents: feed real itineraries into a booking assistant, chatbot or comparison tool.
  • Airfare market research: compare airlines, nonstop availability, connection points and price levels across routes and dates.
  • Corporate travel: price a list of trips (many routes and dates in one run) in business or economy.
  • Sustainability reporting: per-flight and per-segment CO2 estimates, plus the difference from the route's typical emissions.

Input

FieldWhat it does
origin, destinationIATA airport code (JFK), several airports comma-separated (JFK,EWR,LGA), or a Google city id (/m/02_286 = New York, all airports).
departureDateYYYY-MM-DD. Empty = 30 days from today.
returnDateYYYY-MM-DD for a round trip. Empty = one-way.
searchesMany routes/dates in one run: [{"origin":"JFK","destination":"LAX","departureDate":"YYYY-MM-DD","returnDate":"YYYY-MM-DD"}, ...]
adults, children, infantsInSeat, infantsOnLapPassengers (max 9). Prices are totals for everyone.
cabinClasseconomy, premium_economy, business, first.
maxStopsany, 0 (nonstop), 1, 2.
airlinesOnly these airlines (AA, DL, BA...) or alliances (STAR_ALLIANCE, ONEWORLD, SKYTEAM).
currencyAny 3-letter code: USD, EUR, GBP, JPY...
maxResultsItineraries per search (0 = all Google shows).
returnFlightsForTopOutboundRound trips: how many of the top outbound flights to expand into full outbound + return pairs (default 3). 0 = outbound options only.

Input example

One-way, next month (leaving departureDate out searches 30 days from today):

{
"origin": "JFK",
"destination": "LAX",
"adults": 1,
"cabinClass": "economy",
"maxStops": "any",
"currency": "USD",
"maxResults": 10
}

Round trip with a fixed date and only nonstop flights:

{
"origin": "SFO",
"destination": "ORD",
"departureDate": "2026-10-20",
"returnDate": "2026-10-23",
"maxStops": "0",
"returnFlightsForTopOutbound": 3,
"currency": "USD"
}

Output example

One row per itinerary. This is a real row from a test run (Charlotte to Tokyo Narita, one-way), lightly trimmed:

{
"searchId": "CLT-NRT 2026-12-03",
"tripType": "one_way",
"origin": "CLT",
"destination": "NRT",
"cabinClass": "economy",
"passengers": { "adults": 1, "children": 0, "infantsInSeat": 0, "infantsOnLap": 0 },
"currency": "USD",
"position": 1,
"category": "best",
"price": 1014,
"priceLevel": "typical",
"airlines": ["Air Canada"],
"airlineCodes": ["AC"],
"flightNumbers": ["AC 8746", "AC 9"],
"stops": 1,
"totalDurationMinutes": 1055,
"totalDuration": "17 hr 35 min",
"departureAirport": "CLT",
"departureAirportName": "Charlotte Douglas International Airport",
"departureDateTime": "2026-12-03T08:55:00-05:00",
"arrivalAirport": "NRT",
"arrivalAirportName": "Narita International Airport",
"arrivalDateTime": "2026-12-04T16:30:00+09:00",
"arrivalDayOffset": 1,
"layovers": [
{ "airport": "YYZ", "airportName": "Toronto Pearson International Airport", "city": "Toronto", "durationMinutes": 98, "durationText": "1 hr 38 min" }
],
"segments": [
{
"flightNumber": "AC 8746", "airline": "Air Canada", "airlineCode": "AC",
"operatedBy": "Air Canada Express - Jazz", "aircraft": "Embraer 175",
"departureAirport": "CLT", "arrivalAirport": "YYZ",
"departureDateTime": "2026-12-03T08:55:00-05:00", "arrivalDateTime": "2026-12-03T10:57:00-05:00",
"durationMinutes": 122, "legroom": "31 in", "emissionsKg": 142
},
{
"flightNumber": "AC 9", "airline": "Air Canada", "airlineCode": "AC",
"operatedBy": null, "aircraft": "Boeing 777",
"departureAirport": "YYZ", "arrivalAirport": "NRT",
"departureDateTime": "2026-12-03T12:35:00-05:00", "arrivalDateTime": "2026-12-04T16:30:00+09:00",
"durationMinutes": 835, "legroom": "31 in", "emissionsKg": 582
}
],
"emissionsKg": 724,
"typicalEmissionsKg": 817,
"emissionsDifferencePercent": -11,
"returnFlight": null,
"googleFlightsUrl": "https://www.google.com/travel/flights/booking?tfs=...",
"scrapedAt": "2026-09-24T05:14:34.715Z"
}

(Some fields shortened here; the dataset also has searchDepartureDate, searchReturnDate, departureDate, departureTime, arrivalDate, arrivalTime and airport names on every segment.)

Round trips: price is the full round-trip total and returnFlight holds the return leg with the same fields (airlines, flight numbers, segments, layovers, times). googleFlightsUrl opens the exact outbound + return pair on Google Flights' booking page. Round-trip rows also carry outboundPosition and a priceNote.

category is best for the flights Google ranks as "Best", other for the rest. priceLevel is Google's own verdict for the route and date: low, typical or high.

A RUN_SUMMARY record in the key-value store lists, per search: results, itineraries found, price level and why it stopped.

Pricing

Pay per result: $0.50 per 1,000 results (one result = one flight itinerary row).

  • 1,000 results = $0.50
  • 10,000 results = $5.00

A one-way search usually returns 10-40 itineraries, so a single route/date costs about $0.005-$0.02. The Apify free plan includes $5 of monthly credit, enough to try the actor on real routes.

Integrations

  • Apify API: start runs and fetch results over REST, or with the official JavaScript and Python clients.
  • No-code: connect to Make, Zapier, n8n and Google Sheets to push fares into spreadsheets, alerts or workflows.
  • Webhooks: get a call when a run finishes (e.g. to trigger a price-drop alert).
  • Schedules: run the same searches daily or hourly from the Apify Console.
  • MCP for AI agents: the Apify MCP server (https://mcp.apify.com) lets Claude, ChatGPT, Cursor and other agents call this Google Flights scraper as a tool.

How round trips work

Google Flights prices a round trip as a pair. First it lists outbound flights, each with the cheapest round-trip price that includes it; after you pick one, it lists the returns with the final total. This actor does the same: it lists outbound flights, then fetches the returns for the top returnFlightsForTopOutbound outbound flights (Google's "best" order) and outputs one row per complete pair. Set it to 0 if you only need the outbound list with "from" prices (1 request per search).

Speed and cost

  • One-way search: 1 request, about 1 second, 10-40 itineraries.
  • Round trip with the default of 3 expanded outbound flights: 4 requests, typically 25-40 complete round trips.
  • No browser, so it runs fine at 256 MB memory.

Reliability

  • Plain HTTP with rotating proxy sessions. Blocked or captcha responses are detected, the session is retired and the request retried on a new IP with backoff.
  • If a round-trip return lookup fails after all retries, you still get the outbound row (with returnFlight: null and a returnFlightsError), not a crashed run.
  • Inputs are checked before any request is made (bad airport codes, past dates, more than 9 passengers), with a clear error message.
  • Runs survive migrations: progress is saved and resumed.

FAQ

Is it legal to scrape Google Flights? The actor only collects publicly visible flight search results - no logins and no personal data. You are responsible for how you use the data: respect Google's terms of service and applicable laws such as GDPR. This is not legal advice; ask a lawyer if you are unsure.

How does it avoid blocks? It sends plain HTTP requests with realistic Chrome desktop headers through Apify Proxy, using a pool of rotating sessions. Captcha pages, "unusual traffic" pages, 401/403/429 responses and empty pages are detected; the session is retired and the request is retried on a new IP with backoff (6 retries by default, configurable). If you run many searches and still see blocks, switch the proxy group to RESIDENTIAL.

What are the limits? Up to 9 passengers per search, about 11 months ahead, and whatever is on Google's initial results page (typically 10-40 one-way options per search). Round trips expand up to 30 outbound flights. Multi-city trips, per-agency booking prices and baggage fees are not supported (see Limits below).

Is there an official Google Flights API? No public one - Google shut down its QPX Express flight API in 2018. This actor reads the same results the Google Flights website shows, so you can use it as a Google Flights API.

Which airports can I use? Any IATA airport code Google Flights knows. Use commas for several airports on one side (JFK,EWR,LGA or LHR,LGW,STN).

Are the prices real? They are the prices Google Flights shows for your passengers, cabin and currency at the time of the run. Fares change constantly; scrapedAt tells you when each row was captured.

Are times local? Yes. departureDateTime and arrivalDateTime are local airport times with the UTC offset (for example 2026-12-04T16:30:00+09:00), so you can compute real elapsed times and time zones.

Do I get booking links? Each row has googleFlightsUrl, which opens that itinerary on Google Flights where the airline and travel-agency booking options are listed. Booking-option prices per agency are not included.

Can I search a whole month? Put one entry per date in searches. Each search is one request (plus return lookups for round trips).

Why fewer results than on the website? Google sometimes loads extra "other flights" after the first screen. The actor returns everything that is in the initial results page (in tests: 36 JFK-LAX one-way options, 18 Madrid-Barcelona, 7 Charlotte-Tokyo).

Do I need a proxy? Apify Proxy (the default) works. If you run a lot of searches and see blocks in the log, switch the proxy group to RESIDENTIAL.

Limits

  • Multi-city (open-jaw with 3+ legs) searches are not supported yet; one-way and round trip are.
  • Per-agency booking prices (Expedia vs airline, etc.) and baggage-fee details are not extracted.
  • Google only sells about 11 months ahead.
  • At most 9 passengers per search (Google Flights' own limit).