Google Flights Search Scraper avatar

Google Flights Search Scraper

Pricing

from $3.00 / 1,000 flight founds

Go to Apify Store
Google Flights Search Scraper

Google Flights Search Scraper

Get the full Google Flights fare table for any route and date: fare, airline, flight number, aircraft, times, stops, layovers and carbon. One-way or return, any cabin, up to nine travellers, in the market you sell into. A search the source refuses is reported as failed, never as "no flights".

Pricing

from $3.00 / 1,000 flight founds

Rating

0.0

(0)

Developer

Hamza

Hamza

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Give it a route and a date and it hands back the whole fare table Google Flights shows for that search — every flight, with its fare, airlines, flight numbers, aircraft, departure and arrival times, stop count, layover airports and layover lengths, cabin, legroom and carbon figure. One-way or return, any cabin, up to nine travellers, priced for the market you sell into. Search one route on one day, or dozens of routes across dozens of dates in a single run. No account and no login are needed — just run it.

What you can do with it

  • Track a route's price — run it daily on the routes you care about and keep a clean history of the cheapest fare, the airline holding it and the flight behind it.
  • Watch competitors — see who is flying a route, at what times, on what aircraft, and where their fares sit against yours.
  • Fill a travel site or app — a ready-made fare table per route and date, with airlines, times, stops and layovers already separated into columns.
  • Plan a trip programme — compare thirty departure days at once and see how the fare moves through the month.
  • Study a market — the same route in the United States, the United Kingdom, Germany or India, each priced the way travellers there see it.
  • Report on emissions — every flight carries its own carbon figure, the typical figure for that route, and how far above or below typical it sits.

What you get

One row per flight. Abridged real example:

{
"searchId": "JFK-LAX-2026-09-15",
"source": "google-flights",
"market": "US",
"collectedAt": "2026-09-01T09:14:22.187Z",
"origin": "JFK",
"destination": "LAX",
"departureDate": "2026-09-15",
"returnDate": null,
"tripType": "one_way",
"cabinClass": "economy",
"passengers": { "adults": 1, "children": 0, "infantsInSeat": 0, "infantsOnLap": 0 },
"price": 169,
"priceExact": 168.4,
"isPriceExact": false,
"currency": "USD",
"currencyFromSource": true,
"priceCovers": "one_way",
"isCheapestInSearch": true,
"rank": 1,
"listing": "best",
"itineraryId": "F0bbN",
"departureAirport": "JFK",
"departureAirportName": "John F. Kennedy International Airport",
"arrivalAirport": "LAX",
"arrivalAirportName": "Los Angeles International Airport",
"departureLocal": "2026-09-15T08:00",
"arrivalLocal": "2026-09-15T10:59",
"totalDurationMin": 359,
"stops": 0,
"airlineCodes": ["DL"],
"airlineNames": ["Delta"],
"flightNumbers": ["DL713"],
"aircraftTypes": ["Boeing 767"],
"layoverAirports": [],
"layoverDurationsMin": [],
"legroom": "31 in",
"co2eKg": 241,
"routeTypicalCo2eKg": 337,
"co2ePercentVsTypical": -28,
"legs": [
{
"from": "JFK",
"to": "LAX",
"airlineCode": "DL",
"airlineName": "Delta",
"flightNumber": "DL713",
"aircraft": "Boeing 767",
"cabin": "economy",
"legroom": "31 in",
"departureLocal": "2026-09-15T08:00",
"arrivalLocal": "2026-09-15T10:59",
"durationMin": 359,
"co2eKg": 241.3
}
]
}

Alongside the table, each run writes a summary that separates flights collected, searches that returned flights, searches that genuinely had none, and searches that could not be completed. Those three are never mixed together.

Input reference

FieldTypeDefaultWhat it does
originslist of text["JFK"]Where the trip starts. Three-letter airport codes (JFK, LHR) or city codes covering every airport in a city (NYC, LON, PAR).
destinationslist of text["LAX"]Where the trip ends, in the same format. Every departure point is searched against every arrival point.
departureDateslist of text["+30"]Outbound dates. An exact day (2026-09-15) or a number of days ahead (+30), which keeps a scheduled run looking the same distance into the future every time.
tripLengthDaysnumberemptyEmpty means one-way. A number of nights turns the search into a return trip: leaving on the 15th with 7 nights comes back on the 22nd.
cabinClasstexteconomyeconomy, premium_economy, business or first.
stopstextanyany, nonstop, one_stop_or_fewer or two_stops_or_fewer.
adultsnumber1Adults (12+). Nine travellers in total at most.
childrennumber0Children aged 2–11.
infantsInSeatnumber0Infants in their own seat. See the limits below before using it.
infantsOnLapnumber0Infants on an adult's lap; one adult each. See the limits below before using it.
markettextUSThe country you are selling into. Fares and availability differ by market.
currencytextUSDThe currency to ask for. Every row also states the currency that actually came back.
maxResultsPerSearchnumber100How many flights to keep per route and date, cheapest first.
maxSearchesnumber100Safety cap on the total number of route-and-date combinations in one run.
cheapestOnlytrue/falsefalseKeep only the cheapest flight of each search — one row per route and date.
maxPricenumberemptyDrop flights above this fare, in the currency that comes back.
maxJourneyMinutesnumberemptyAsk for flights no longer than this, layovers included.
includeAirlineslist of textemptyKeep only flights on these airlines (BA, AA, LH).
parallelSearchesnumber4How many searches to run at the same time, 1 to 6.

Output fields

FieldWhat it is
searchIdThe route and date this row answers, e.g. JFK-LAX-2026-09-15.
origin, destinationWhat you asked for (an airport or a city code).
departureDate, returnDateThe dates searched. returnDate is empty for one-way.
tripTypeone_way or round_trip.
cabinClass, passengersThe cabin and traveller mix the fare applies to.
priceThe fare as the source lists it, in whole units.
priceExactThe fare to the cent where the source publishes it, otherwise empty.
isPriceExactWhether the listed fare is the exact one.
currencyThe currency the fare actually came back in — read this, not the one you asked for.
currencyFromSourceTrue when the source stated the currency itself.
priceCoversone_way, or round_trip_total when the fare covers the whole return trip.
isCheapestInSearchTrue when this fare is the lowest found for that route and date.
rankPosition within the search, cheapest first.
listingbest when the source picked this flight out, other for the rest of the list.
itineraryIdThe source's own identifier for this flight combination.
departureAirport, arrivalAirportThe actual airports flown, with their full names.
departureLocal, arrivalLocalLocal clock times at each airport.
totalDurationMinDoor-to-door journey length in minutes.
stopsNumber of stops.
airlineCodes, airlineNamesThe airlines on the itinerary.
flightNumbersEvery flight number, in order.
aircraftTypesAircraft flown.
layoverAirports, layoverDurationsMinWhere the flight stops and for how long.
legroomLegroom on the first flight, as published.
co2eKgCarbon for this flight.
routeTypicalCo2eKgCarbon for a typical flight on this route — a figure about the route, not about this flight, and the same on every row of a search.
co2ePercentVsTypicalHow this flight compares with that typical figure, in whole percent. -28 means 28% cleaner than typical; a positive number means dirtier. Published by the source, not calculated here.
legsEach flight in the itinerary: airports, airline, flight number, aircraft, cabin, legroom, times, length and carbon.
bookingTokenThe source's own reference for this itinerary.
market, collectedAt, sourceWhich market the fare was collected for, and when.

Pricing

You pay for what you get, in two parts:

  • $0.003 per flight added to your results — $3.00 per 1,000 flights.
  • $0.015 per route and date searched, charged once each search is complete. A route that genuinely has no flights on the day you searched is still a completed search and is charged. A search that could not be completed is not charged.

Worked example. Ten routes across seven dates is 70 searches — $1.05. If those routes return about 25 flights each, that is roughly 1,750 flights — $5.25. Total for the run: about $6.30.

Tracking prices instead? Turn on cheapestOnly and the same 70 searches produce 70 rows: $1.05 for the searches plus $0.21 for the rows, about $1.26.

Limits & what this actor cannot do

  • Fares are a snapshot. Airline pricing changes continuously; a fare seen now may be gone minutes later.
  • It cannot book, hold or reserve anything. It reports what the source publishes and cannot guarantee a fare is still available.
  • The fare is the one shown for the search you asked for. Taxes, carrier fees and baggage rules vary by airline and fare type, and extras appear only where the source publishes them.
  • The listed fare is rounded up to a whole unit (169 where the true fare is 168.40). Where the exact figure is published it is given in priceExact.
  • Fares and availability differ by market and currency. Results reflect the market you choose, and each row carries the currency that actually came back — which is not always the one you asked for, and is never assumed.
  • Dates run to 330 days ahead. A date in the past or beyond that window is reported as out of range rather than searched, because the source answers such a date with a normal-looking page that has no fares on it.
  • Routes and schedules are seasonal. A real route with nothing flying on the dates you searched is reported as having no flights, not as an error.
  • A search the source refuses to complete is reported as a failed search, never as "no flights found". Failed searches are listed individually in the run summary, and a run where nothing could be completed ends as a failed run rather than as an empty success.
  • Return trips list the outbound flights, and the fare on each row is the full return fare, marked as round_trip_total.
  • Trips with three or more separate legs are not supported. Search them as separate one-way legs instead.
  • Searches that include an infant come back with no flights, whatever the route — the source does not publish results for them. The run warns you rather than leaving you to read an empty result as "nothing flies this route".
  • The airline and maximum-fare filters are applied to the flights that come back, not to the search itself, so they narrow your results rather than making the search cheaper.
  • The route's carbon figure (routeTypicalCo2eKg) describes the route, not the individual flight; it is the same on every row of a search by design, and it is a typical flight, not the cleanest one. Plenty of flights come in below it — that is what co2ePercentVsTypical being negative means, and it is normal rather than a sign of a bad figure.
  • There is no "lowest carbon on this route" column, because the source does not publish one. Comparing a flight against the cleanest option on its route can only be done across the flights the run actually collected.
  • The source publishes a limited number of flights for any one search, so a very broad search returns what it makes available rather than an unlimited list. Vary the dates to widen coverage.
  • Speed depends on the size of the job and on the source's own response times; no fixed rate is promised.
  • The source's terms govern automated access. You are responsible for using the data lawfully and in line with those terms.

FAQ

Do I need an account on Google Flights? No. Nothing is signed in and nothing is stored on your behalf.

Does it need my login or password? No. There is no credential of any kind to supply.

Can I schedule it? Yes. Schedule it like any other Actor. Writing dates as +30 rather than as a fixed day keeps a daily run looking the same distance ahead every morning, which is what you want for price tracking.

Are these fares bookable? They are the fares published for that search at the moment it was collected. Airline pricing moves constantly, and nothing here holds a seat, so treat a fare as an observation rather than a guarantee.

A search came back with no flights — is that a mistake? No. Routes are seasonal, and some airport pairs simply have nothing flying on a given day. That is reported as a completed search with no flights, and it is kept strictly separate from a search that could not be completed — you will never be shown a refusal dressed up as "no flights found".

Can I cover a whole month? Yes. Put up to sixty dates in departureDates (or a range such as +1, +2, +3 …) and each one becomes its own search, subject to maxSearches.

Why do the same route and date give different fares in different markets? Because they genuinely differ. Airlines file different fares by point of sale, so pick the market you sell into and compare within it rather than converting between markets.