Google Flights Scraper - Prices & Times, No Login avatar

Google Flights Scraper - Prices & Times, No Login

Pricing

from $14.00 / 1,000 flight search with results

Go to Apify Store
Google Flights Scraper - Prices & Times, No Login

Google Flights Scraper - Prices & Times, No Login

Get Google Flights prices for a route and dates: airlines, flight numbers, departure and arrival times, duration, stops, layovers, CO2 and exact price in your currency. One-way or round trip, cabin, passengers, stops filter, date range. No login.

Pricing

from $14.00 / 1,000 flight search with results

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Google Flights Scraper searches Google Flights for your route and dates and returns one row per flight: airline, flight numbers, departure and arrival time, duration, stops, layovers, CO₂ and the exact price in your currency.

Add two airport codes and a date. A normal search takes a few seconds, costs one search event and needs no login, cookies or API key.

Google Flights Scraper: route and dates in, flights with exact prices out

Table of contents

What it does

The Actor opens the public Google Flights results page for one route, one departure date and your passengers, the same page you see in a browser without signing in. It reads the flight list from that page and saves each flight option as one Dataset row. Prices are the total for all passengers, in the currency you choose.

You can search one-way or round trip, choose the cabin class and the maximum number of stops, and search up to 15 departure days in one run to find the cheapest day.

Good fit

  • Compare fares and flight times for one route on one or more dates.
  • Find the cheapest departure day in a short date range.
  • Collect flight prices on a schedule to see how they change over time.

Not a fit / limits

  • No booking, no booking links and no airline-site prices: the Actor only reads what Google Flights shows on its results page.
  • No price insights (price level, price history graph) and no multi-city trips.
  • Round trip: each row is an outbound flight with the round-trip total price, as Google shows it on the first step. Return flights are not listed.
  • Searches with children or lap infants: on some routes Google does not put the flights into the page and loads them later in the browser. Such a date gets a free error row with SOURCE_INCOMPLETE. With children, Google can also show fewer flights than for adults only.
  • Prices change often and can differ from the price on the airline website.

Quick start

  1. Open the Input tab.
  2. Keep the prefilled route BKK → SIN and departureDate +30 (30 days from today), or add your own airport codes and date.
  3. Click Start.
  4. Open the Flights view of the Dataset and check airline, departure, price and currency.

Expected result: about 10–60 flight rows (prefill: up to 20) in a few seconds, best flights first, as Google orders them.

Input

Input fields

FieldPlain nameTypeRequiredDefault / prefillAllowed valuesEffect
originFrom airportstringyesprefill BKK3-letter IATA codeDeparture airport
destinationTo airportstringyesprefill SIN3-letter IATA code, not the same as originArrival airport
departureDateDeparture datestringyesprefill +30YYYY-MM-DD or +N days from today, up to about 330 days aheadFirst departure date
returnDateReturn datestringnoempty (one-way)YYYY-MM-DD or +N, not before departureDateMakes the search a round trip
additionalDepartureDaysExtra daysintegerno00–14Also searches the next N days; each day is one search
adultsAdultsintegerno11–9Passengers aged 12+
childrenChildrenintegerno00–8Passengers aged 2–11
infantsOnLapInfants on lapintegerno00–8, at most one per adultPassengers under 2 without a seat
cabinClassCabinstringnoeconomyeconomy, premium_economy, business, firstCabin to search
maxStopsStopsstringnoanyany, nonstop, 1, 2Keeps flights with at most this many stops
currencyCurrencystringnoUSD3-letter ISO code, e.g. EUR, THBCurrency of price
countryPoint of salestringnoUS2-letter country codeGoogle's point of sale; prices can differ by country
maxResultsMax flights per dateintegerno50 (prefill 20)1–300Maximum rows for each departure date
proxyConfigurationProxyobjectnoNo proxyApify proxy settingsLeave as is; see below

Passengers in total: 9 at most. The run checks the input before it sends any request. A wrong input (for example, the same airport twice or a return date before the departure date) ends the run with INVALID_INPUT and costs nothing.

Interacting settings

WhenInput AInput BEffective behavior
Date rangedepartureDateadditionalDepartureDaysSearches departureDate and the next N days, in date order
Round trip with a date rangereturnDateadditionalDepartureDaysThe return date moves with each departure date, so the trip length stays the same
Many flightsmaxResultsGoogle's listYou get at most maxResults rows per date. Google usually lists 10–60 flights for one search
ProxyproxyConfiguration—With "No proxy" the run connects directly and, only if Google refuses, moves to Apify datacenter and then residential proxy automatically. This is included in the price. You cannot choose the RESIDENTIAL group by hand (the run fails at once, free). If Google answers only through residential proxy and lists no flights for 3 dates, the run stops with REQUEST_CAP and marks the other dates as not processed

Input example

{
"origin": "BKK",
"destination": "SIN",
"departureDate": "2026-11-14",
"maxResults": 20
}

Expected behavior: one Google Flights search, one-way, 1 adult, economy, USD. Expected output: up to 20 flight rows with airline, flightNumbers, departure, arrival and price. Cost: one flight-search event.

Output

Each flight option is one row in the default Dataset. The Flights view shows the main columns as a table. The key-value store record RUN_SUMMARY has the run status and, for each date, how many flights Google listed and the cheapest price.

Output example

{
"status": "complete",
"statusReason": null,
"errorCode": null,
"route": "BKK-SIN",
"tripType": "one_way",
"departureDate": "2026-11-14",
"returnDate": null,
"cabinClass": "economy",
"adults": 1,
"rank": 1,
"isBest": true,
"airline": "Scoot",
"airlineCodes": ["TR"],
"flightNumbers": ["TR625"],
"departureAirport": "BKK",
"arrivalAirport": "SIN",
"departure": "2026-11-14T11:50",
"arrival": "2026-11-14T15:25",
"durationMin": 155,
"stops": 0,
"layovers": [],
"segments": [
{
"flightNumber": "TR625",
"airline": "Scoot",
"operatedBy": null,
"departureAirport": "BKK",
"arrivalAirport": "SIN",
"aircraft": "Boeing 787",
"legroom": "31 in"
}
],
"price": 129.05,
"currency": "USD",
"emissionsKg": 96,
"typicalEmissionsKg": 103,
"sourceUrl": "https://www.google.com/travel/flights?tfs=GhoSCjIwMjYtMTEtMTRqBRIDQktLcgUSA1NJTkABSAGYAQI&hl=en&gl=US&curr=USD",
"fetchedAt": "2026-10-15T04:36:08.068Z"
}

This example is trimmed: it shows one row from the input example above, and some fields (origin, children, airlines, airport names and times inside segments) are left out. null means Google did not show the value. It never means zero.

Output fields

FieldMeaningTypeCan be empty?Example / enum
statusRow typestringnocomplete, not_found, error
statusReasonWhy a row is not_found or errorstringyesPlain-English reason
errorCodeError type for error rowsstringyesSOURCE_BLOCKED, SOURCE_INCOMPLETE, SOURCE_UNAVAILABLE
routeOrigin and destinationstringnoBKK-SIN
tripTypeOne-way or round tripstringnoone_way, round_trip
departureDate, returnDateSearch datesstringreturnDate yes2026-11-14
cabinClass, adults, children, infantsOnLapSearch settingsstring / integernoeconomy, 1
rankPosition in Google's listintegerfor flight rows no1
isBestIn Google's "Best" groupbooleanfor flight rows notrue
airlineMain airlinestringyesScoot
airlines, airlineCodesAll airlines of the triparrayyes["TR"]
flightNumbersFlight numbers, in orderarrayyes["TR625"]
departureAirport, arrivalAirportAirportsstringyesBKK
departure, arrivalLocal date and timestringyes2026-11-14T11:50
durationMinTotal travel time in minutesintegeryes155
stopsNumber of stopsintegeryes0
layoversStop airport and wait timearrayyes[{"airport": "KUL", "durationMin": 95, …}]
segmentsEach flight leg: flight number, airline, operator, airports, times, aircraft, legroomarrayyessee example
priceTotal price for all passengersnumberyes, when Google writes "Price unavailable"129.05
currencyCurrency of pricestringyesUSD
emissionsKg, typicalEmissionsKgCO₂ of this flight and a typical one for the route, kgintegeryes96
sourceUrlThe Google Flights page of this searchstringnohttps://www.google.com/travel/flights?tfs=…
fetchedAtWhen the page was read (UTC)stringnoISO time

Rows and run status

SituationWhat you getWhat to do
Flights foundOne complete row per flight, up to maxResults per dateUse price, departure, flightNumbers
Google listed no flights for a dateOne not_found row with statusReasonCheck the airport codes, date and filters
Unknown airport codeOne not_found row: "check that both airport codes exist"Fix origin or destination
A date failed (block, Google error, flights not in the page)One free error row with errorCode. After a page without flights the run goes on with other dates; after a block, a Google error or two failed dates in a row it stops, and the other dates get free "Not processed" rowsRun again later or change the input (see Troubleshooting)
The max charge is reachedRows of paid dates stay; run status PARTIAL, CHARGE_LIMITRaise the max charge of the run

RUN_SUMMARY.status is COMPLETE, NO_RESULTS, PARTIAL, ERROR or INVALID_INPUT. A run with a failed date ends as failed, but the rows it saved stay in the Dataset.

Pricing and limits

Pricing unit

You pay per search. One search is one route and one departure date.

EventWhenFree planBronzeSilverGold and higher
flight-searchGoogle listed flights for the date. Includes every row up to maxResults$0.025$0.015$0.0145$0.014
empty-searchGoogle listed no flights for the date, or does not know an airport code (one not_found row)$0.001$0.001$0.001$0.001

Error rows and invalid input are free. Proxy and platform usage are included in the price. The price does not depend on how many rows a search returns.

If the next search does not fit into the maximum charge you set for the run, the Actor does not write it and stops with PARTIAL and CHARGE_LIMIT.

Cost examples (Free plan prices)

ScenarioInputEventsCharge
One date (prefill)BKK → SIN, +301 flight-search (17 flights in our test)$0.025
Cheapest day in two weeksadditionalDepartureDays: 1415 flight-search$0.375
Route without flights1 date1 empty-search$0.001
Wrong inputsame airport twicenone$0

Limits and speed

  • Up to 15 departure dates per run (additionalDepartureDays 0–14) and up to 300 rows per date. This is a limit, not a typical count: in our tests Google listed 10–60 flights per date.
  • In our tests a search took about 1–3 seconds; 15 dates with 260 flights took 4.3 seconds.
  • Dates can be up to about 330 days ahead, as on Google Flights.

Use cases

Buyer jobInputKey fieldsNext step
Compare fares for a triporigin, destination, departureDate, returnDateairline, departure, arrival, stops, priceExport to CSV or a spreadsheet
Find the cheapest dayadditionalDepartureDaysdepartureDate, price (or cheapestPrice in RUN_SUMMARY)Sort by price
Track a route over timeSame input on a scheduleflightNumbers, departure, price, fetchedAtCompare runs by flight number and departure time
Travel CO₂ reportsRoute and datesemissionsKg, typicalEmissionsKg, durationMinJoin with your trip list

API, export and integrations

  • Export: download the Dataset as JSON, CSV, Excel, XML or HTML from the run page, or use the Apify API.
  • API: start the Actor with the Apify API and read rows from the default Dataset (view=flights for the table columns).
  • Scheduling: create an Apify schedule with the same input to collect prices every day. Each run is a new search; the Actor does not keep state between runs.
  • Webhooks / no-code: use Apify webhooks or the Make, Zapier and n8n integrations to send new rows to your sheet or database.

Use with AI agents (MCP)

  • MCP server URL with only this Actor: https://mcp.apify.com?tools=cliqtomedia/google-flights-scraper.
  • Smallest useful input:
{ "origin": "BKK", "destination": "SIN", "departureDate": "+30" }
  • Key output fields: airline and flightNumbers (who flies), departure and arrival (local time), stops, price with currency (total for all passengers), status (complete, not_found or error).
  • One date usually finishes in a few seconds and costs one search event (see Pricing). Limits: 15 dates and 300 rows per date per run; airport codes must be 3-letter IATA codes.

Troubleshooting

A date has not_found

Symptom: one not_found row and no flights. Likely reason: Google has no flights for this route, date and filter, or an airport code is wrong. Check: open sourceUrl in a browser and read statusReason. Action: check the codes, try maxStops: "any" or another date.

A date has error with SOURCE_INCOMPLETE

Symptom: the search has children or lap infants, and the row says Google did not include flights in the page. Likely reason: on some routes Google loads these results later in the browser. Action: search for adults only, or try another date. This row is free.

A date has error with SOURCE_BLOCKED or SOURCE_UNAVAILABLE

Symptom: Google showed an unusual-traffic page or an internal error after retries. Action: run again later. Keep proxyConfiguration on "No proxy" so the Actor can move to Apify proxy by itself. Error rows are free.

The run stopped with REQUEST_CAP

Symptom: the summary says Google answered only through residential proxy and listed no flights for 3 dates. Likely reason: Google refused the direct and datacenter routes, and the route has no flights on these dates. Action: check the route and dates, then run the rest later. The rows for dates that were not processed are free.

The run stopped with CHARGE_LIMIT

Symptom: status PARTIAL, fewer dates than asked. Action: raise the maximum charge of the run or search fewer days.

The run failed at once with INVALID_INPUT

Read the run status message. It says which field to fix, for example a 2-letter airport code or a return date before the departure date. Nothing was charged.

FAQ

Do I need a Google account, login or API key?

No. The Actor reads the public Google Flights results page, without login or cookies.

Is the price the same as on the airline website?

Not always. The Actor returns the price Google Flights shows for the point of sale in country at the time in fetchedAt. Airlines and agents can show other prices, and fares change often.

Why do I get fewer flights than in my browser?

The Actor returns the flights Google puts on the first results page, up to maxResults. With children, Google can put fewer flights into the page. Booking options for each flight are not part of the output.

Is there an official Google Flights API?

No public one. This Actor gives you the same flight list as JSON through the Apify API.

Support

For bugs, questions or feature requests, open an issue in the Issues tab of this Actor. Include the run ID and the route and date that gave an unexpected result. Do not send API tokens or private data.