Property & travel · Live on Apify

Google Flights Scraper for Prices and Times

Get Google Flights results for a route and dates as a table. Each row is one flight, with price, times and stops. Run it often to see how prices move.

About $25.00 for 1,000 results$0.025 per result + $0 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

routeBKK-SIN
tripTypeone_way
departureDate2026-11-14

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: BKK in From (airport code). Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

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.

Good for

  • 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 good fit

  • 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.

Who uses it

Travellers

Find the cheapest day in a short date range.

Travel managers

Compare fares and CO2 for business trips.

Travel bloggers and analysts

Track route prices over time.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Flight search with results$0.025 (from $0.014 on paid Apify plans)One route and date searched on Google Flights that listed flights. Includes every flight row up to maxResults.
Flight search without results$0.001One route and date searched on Google Flights that listed no flights. Saves one not_found row. Searches that fail are free.

Examples

  • One result: about $0.03.
  • 1,000 results: about $25.00.
  • Every day 100 results, for 30 days: about $75.00 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 200 results.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Is there an official Google Flights API?

No public one. This tool gives you the flight list as data.

Can I book flights with it?

No. It only reads the results page. There are no booking links.

Is the price the same as the airline price?

Not always. It is the price Google Flights shows at that time.

Does it show return flights?

For round trips, each row is an outbound flight with the round-trip total.

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

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

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.

Details

Step by step on Apify
  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.
Use cases
TaskInputKey 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
Tips for better results
  • Search a date range to find the cheapest day to fly.
  • Set the country and currency to match where you buy.
  • Schedule the same search to build your own price history.
Limits and good to know
  • 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

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "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"
}

Use it from code

Actor ID: cliqtomedia/google-flights-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/google-flights-scraper").call(run_input={
    "origin": "BKK",
    "destination": "SIN"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-flights-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"origin": "BKK", "destination": "SIN"}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/google-flights-scraper")
result = tool.invoke({"run_input": {"origin": "BKK", "destination": "SIN"}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (33)
FieldTypeMeaning
statusstringcomplete (a flight), not_found (Google shows no flights; one row per search) or error. Charges are per search, not per row: a date with flights is one flight-search event, a not_found row is one empty-search event, error rows are free.
statusReasonstringPlain-English reason for not_found and error rows; null for flights.
errorCodestringMachine code for error rows, e.g. SOURCE_BLOCKED, DEADLINE_REACHED; null otherwise.
routestringRoute as ORIGIN-DESTINATION, e.g. BKK-SIN.
originstringDeparture airport you searched (IATA).
destinationstringArrival airport you searched (IATA).
tripTypestringone_way or round_trip.
departureDatestringSearched departure date (YYYY-MM-DD).
returnDatestringSearched return date for round trips; null for one-way.
cabinClassstringSearched cabin class.
adultsintegerAdults in the search.
childrenintegerChildren in the search.
infantsOnLapintegerInfants on lap in the search.
rankintegerPosition in Google's list for this date, 1 = first.
isBestbooleanTrue when Google lists the flight among its "best" options.
airlinestringAirline name(s) as Google shows them, comma-separated.
airlinesarrayAirline names.
airlineCodesarrayIATA codes of the marketing carriers.
flightNumbersarrayFlight numbers of every segment, e.g. ["SQ709"].
departureAirportstringDeparture airport of this flight (IATA).
arrivalAirportstringArrival airport of this flight (IATA).
departurestringLocal departure date and time, YYYY-MM-DDTHH:MM (airport time zone).
arrivalstringLocal arrival date and time, YYYY-MM-DDTHH:MM (airport time zone).
durationMinintegerTotal travel time in minutes, layovers included.
stopsintegerNumber of stops (0 = nonstop).
layoversarrayLayovers: airport, city and duration in minutes.
segmentsarrayEach flown segment: flight number, airports, times, duration, aircraft, legroom.
pricenumberTotal price for all passengers in the given currency (round trip: total for both directions). null when Google shows no price.
currencystringCurrency of price (ISO code) as Google returned it.
emissionsKgintegerGoogle's CO2 estimate for this flight per passenger, kg.
typicalEmissionsKgintegerGoogle's typical CO2 for this route, kg.
sourceUrlstringGoogle Flights URL of this search.
fetchedAtstringWhen the row was fetched (ISO timestamp, UTC).
Input settings (14)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
From (airport code) requiredoriginstring"BKK"
To (airport code) requireddestinationstring"SIN"
Departure date requireddepartureDatestring"+30"
Return date (round trip)returnDatestring
Extra departure daysadditionalDepartureDaysinteger0
Adultsadultsinteger1
Children (2–11)childreninteger0
Infants on lapinfantsOnLapinteger0
Cabin classcabinClassstring"economy"
StopsmaxStopsstring"any"
Currencycurrencystring"USD"
Search from countrycountrystring"US"
Max flights per datemaxResultsinteger20
ProxyproxyConfigurationobject{"useApifyProxy": false}

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure