Google Flights Scraper: Fares, Airlines & Times avatar

Google Flights Scraper: Fares, Airlines & Times

Pricing

from $2.00 / 1,000 flight searches

Go to Apify Store
Google Flights Scraper: Fares, Airlines & Times

Google Flights Scraper: Fares, Airlines & Times

Search Google Flights and get one row per flight option: fare, airlines, flight numbers, times, airports, stops, layovers, aircraft, legroom and CO2. One-way or round trip, economy/business/first, 1-9 adults, any currency. $2.00 per 1,000 searches.

Pricing

from $2.00 / 1,000 flight searches

Rating

0.0

(0)

Developer

subimpact

subimpact

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Search Google Flights and get every flight option on the results page as a clean row: fare, airline, flight numbers, departure and arrival times, airports, stops, layover airports with layover length, aircraft, legroom and CO2 emissions.

One-way or round trip, economy, business or first, 1 to 9 adults, any currency. Plain HTTPS requests, no browser, no Google API key, no cookies.

What you get

One row per flight option, exactly as Google shows it:

  • fare in the currency you ask for, plus a formatted price such as $44
  • marketing airline names and one flight number per leg (TR451, or VJ936 + VJ820 for a connection)
  • local departure and arrival time (2026-12-01T11:15), and how many days later it lands
  • departure and arrival airport code and name
  • total journey time in minutes, including layovers
  • stops, and for each connection the airport, the layover length and whether it is an overnight stop
  • aircraft type and legroom where Google publishes them
  • Google's per-passenger CO2 estimate in kg and the percentage difference from typical emissions for the route
  • which section the option came from: Google's Top flights (its best-fare picks) or the rest of the list
  • the exact google.com/travel/flights URL the row was parsed from, so any row can be re-checked by hand

Pricing

$2.00 per 1,000 searches. Every flight option on the results page is included in that one search charge.

  • A search that returns at least one flight costs $0.002, whether the page lists 2 options or 60.
  • A search that returns no flights costs nothing, and failed searches cost nothing.
  • maxSearches (default 25) caps what a single run can spend: 25 searches is at most $0.05.
  • You also pay the usual Apify platform usage for the run. At the default settings a run uses about 0.5 GB of memory for well under a minute.

Input

The simplest run is one search. This is exactly the input the form shows:

{
"searches": [
{
"from": "KUL",
"to": "SIN",
"date": "2026-12-01",
"returnDate": null,
"adults": 1,
"cabin": "economy"
}
]
}

from and to take a 3-letter airport or city code (KUL, SIN) or a free-text city name (Kuala Lumpur, Singapore). date and returnDate are YYYY-MM-DD; leave returnDate empty or null for a one-way search. Dates must be today or later and at most 330 days ahead, which is as far out as Google sells fares.

Several searches in one run:

{
"searches": [
{ "from": "KUL", "to": "SIN", "date": "2026-12-01", "adults": 1, "cabin": "economy" },
{ "from": "SIN", "to": "HND", "date": "2026-12-01", "returnDate": "2026-12-08", "adults": 2, "cabin": "business" }
],
"currency": "USD",
"nonstopOnly": false,
"maxFlightsPerSearch": 50
}

Instead of searches you can fill the shortcut fields from, to, departureDate, returnDate, adults and cabin. They are only used when searches is empty. With no input at all the actor runs the default search: Kuala Lumpur to Singapore, about 30 days from today, one way, economy, one adult.

FieldTypeDefaultNotes
searchesarray of objectsnone (see prefill)One object per search: from, to, date, returnDate, adults, cabin
from / tostringnone (see prefill)Shortcut. Airport or city code, or a city name
departureDatestringnoneShortcut. YYYY-MM-DD
returnDatestringemptyShortcut. Empty means one way
adultsinteger11 to 9. The fare Google shows is the total for all adults
cabinselecteconomyeconomy, business, first
currencystringUSD3-letter code: USD, EUR, MYR, SGD, JPY
languagestringenGoogle interface language (hl)
countrystringusGoogle market (gl)
nonstopOnlybooleanfalseOnly nonstop flights
maxFlightsPerSearchinteger501 to 300 options taken from each results page, cheapest first
maxSearchesinteger251 to 200. Cost ceiling for the run
maxConcurrencyinteger31 to 10 searches in parallel
proxyConfigurationobject{"useApifyProxy": false}Off by default: Google Flights answers direct requests from Apify containers

Output

One dataset row per flight option. Real rows from a run on 2026-10-25 (KUL to SIN, 2026-12-01, one way, economy, 1 adult), trimmed to the interesting fields:

{
"searchFrom": "KUL",
"searchTo": "SIN",
"searchDate": "2026-12-01",
"searchReturnDate": null,
"tripType": "one-way",
"cabin": "economy",
"adults": 1,
"currency": "USD",
"price": 44,
"priceText": "$44",
"isBestFlight": true,
"airlines": ["Scoot"],
"flightNumbers": ["TR451"],
"departureAirport": { "code": "KUL", "name": "Kuala Lumpur International Airport" },
"arrivalAirport": { "code": "SIN", "name": "Singapore Changi Airport" },
"departureTime": "2026-12-01T11:15",
"arrivalTime": "2026-12-01T12:35",
"arrivalDayOffset": 0,
"durationMinutes": 80,
"stops": 0,
"layovers": [],
"aircraft": ["Boeing 787"],
"legroom": "31 inches",
"co2EmissionsKg": 49,
"emissionsVsTypicalPct": -4,
"parseStrategy": "structured"
}

A connecting option from the same crawl shape (KUL to HND, 2026-12-01, one way):

{
"price": 180,
"airlines": ["Vietjet"],
"flightNumbers": ["VJ936", "VJ820"],
"departureTime": "2026-12-01T11:30",
"arrivalTime": "2026-12-02T01:00",
"arrivalDayOffset": 1,
"durationMinutes": 750,
"stops": 1,
"layovers": [
{
"airportCode": "SGN",
"airportName": "Tan Son Nhat International Airport",
"durationMinutes": 295,
"overnight": false
}
],
"aircraft": ["Airbus A321"],
"legroom": "28 inches",
"co2EmissionsKg": 430,
"emissionsVsTypicalPct": 4
}

layovers[].overnight is true when the next leg leaves on a later calendar day or the stop lasts 8 hours or more. price is null when Google shows only a partner link for that option and no fare; the row is still delivered, and the search is still charged once because other rows did have fares.

The run summary is written to the key-value store as RUN_SUMMARY: one entry per search with the URL, options found, rows delivered, whether it was charged, and the reason for any search that returned nothing. A search that returns no flights also saves its page as debug-<n>.html (capped at 1 MB) so the empty result can be checked.

How this compares

Apify Store flight scrapers, Free-plan list prices checked 25 October 2026:

ActorFree-plan priceUsers (30 days)
johnvc/Google-Flights-Data-Scraper-Flight-and-Price-Search$0.03 per page processed + $0.02 per booking option (about $30 per 1,000 pages)394
lergassy/google-flights-scraper$0.20 per 1,000 flights306
kaix/google-flights-scraper$0.06 per 1,000 dataset items274
memo23/google-flights-scraper$0.005 start + $2.00 per 1,000 items168
this actor$2.00 per 1,000 searches, all options includednew

Being straight about the arithmetic: per-flight pricing scales with how many options a page has. On the KUL to SIN page above (36 options) our flat $0.002 per search is about $0.06 per 1,000 flights, which is cheaper than the per-flight listings for that shape of search. On a thin page (two options) the same search still costs $0.002, and a per-flight rival is cheaper. What you get for the flat price is every option Google rendered, with the structured parts that raw HTML scraping tends to lose: layover airports and layover minutes, aircraft, legroom, the CO2 estimate and its difference from typical.

Competitor platform usage is not included in those prices; see each listing.

Limits

  • Premium economy is not supported. Google's search box accepts "business class" and "first class" and returns the matching cabin, but any query containing "premium economy" makes it fall back to an empty search form. Rather than silently return economy fares, the actor refuses cabin: "premium-economy" with an explanation.
  • Only Google's first results page is parsed. That page carries roughly 20 to 60 options; maxFlightsPerSearch caps how many rows you get from it.
  • Round trips return outbound options priced as the round-trip total, which is what Google shows. Return-leg selection needs a follow-up request per outbound option with Google's own selection token, and this actor does not do that.
  • adults is the only passenger control. Google's search box also takes children and infants, but the price rules for them vary by fare and were not verified, so they are not offered.
  • Prices are the numbers Google renders, in the currency you asked for. Google does the conversion; nothing here is an interbank rate.
  • Google changes this page from time to time. If the layout moves, the actor does not guess: the row is not charged, the search is reported as an error in RUN_SUMMARY, and its HTML is saved for inspection.
  • Requests go direct by default, which is what was measured to work from Apify containers. If you enable Apify Proxy and the proxy cannot be created, the search fails loudly instead of falling back to a direct request.

Responsible use

This actor reads Google Flights' public search results, the same pages a browser gets, and follows robots.txt for /travel/flights (Google disallows /search, /s/ and /booking, which this actor never touches). Keep runs reasonable: use maxSearches and maxConcurrency to avoid hammering Google, do not resell raw page dumps, and do not use the data to break a carrier's terms of sale. Fares change constantly, so treat any row as a snapshot with the scrapedAt timestamp and confirm on the airline's own site before buying.