Google Flights Scraper - Prices, Fares & Schedules avatar

Google Flights Scraper - Prices, Fares & Schedules

Pricing

Pay per usage

Go to Apify Store
Google Flights Scraper - Prices, Fares & Schedules

Google Flights Scraper - Prices, Fares & Schedules

Scrape live Google Flights fares from a pasted link or the form, with every filter, by city, country or airport. Get booking options with seller links, fare names and bag fees, return flights, the price graph and Google Explore's cheapest destinations. True round-trip totals.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

FlowExtract API

FlowExtract API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Google Flights Scraper — Live Fares, Prices & Schedules

Scrape live flight prices, schedules, airlines and aircraft from Google Flights — one way, round trip or multi-city, any route, any currency, any market. No API key and no Google account.

You get one row per flight option, with the true total price, every segment, CO2, the exact filters Google applied, and a link that opens that flight in Google Flights. On request, each flight also gets what Google shows when you click it: booking options (every airline fare and travel agency, with fare names, bag fees and seller links) and, for round trips, its return flights. You can also get Google's price graph (the cheapest fare per day) and Google Explore (the cheapest places to go from an airport).

There are two ways to search, and you can use both in one run:

  • Option A — paste Google Flights links. Set up a search on Google Flights, copy the link, paste it. The Actor replays it exactly, filters and all.
  • Option B — build the search in the form. Type places by name (Paris, United Kingdom) or code (JFK), pick dates and travellers, and use the same filters as Google's filter bar.

Quick start

Paste a link — the simplest and most exact way (use your own link from Google Flights' results page):

{
"searchUrls": ["https://www.google.com/travel/flights/search?tfs=…your link…"]
}

Build a round trip by city name:

{
"tripType": "round_trip",
"origin": ["New York"],
"destination": ["Paris"],
"departureDate": "2027-06-10",
"returnDate": "2027-06-17",
"adults": 2
}

Add filters — nonstop only, SkyTeam airlines, leaving in the morning, the cheapest list sorted by price:

{
"tripType": "round_trip",
"origin": ["JFK"],
"destination": ["CDG"],
"departureDate": "2027-06-10",
"returnDate": "2027-06-17",
"maxStops": "nonstop",
"alliances": ["SKYTEAM"],
"outboundDepartureTime": "6-12",
"resultsView": "cheapest",
"sortBy": "price"
}

Booking options, return flights and the price graph for the same search:

{
"tripType": "round_trip",
"origin": ["JFK"],
"destination": ["LAX"],
"departureDate": "2027-06-10",
"returnDate": "2027-06-17",
"bookingOptionsTop": 3,
"returnFlightsTop": 3,
"priceGraphDays": 60
}

Explore — the cheapest weekend trips from New York in November:

{
"tripType": "explore",
"origin": ["New York"],
"exploreTripLength": "weekend",
"exploreMonth": "november"
}

Every field is optional except what a search needs: a link, or a route (origin, destination and a departure date — plus a return date for round trips, or the flights list for multi-city; for Explore, just the origin).


How it works

Build the search on Google Flights, press Search, and copy the link from the address bar of the results page.

  • A link decides everything about its own search: route, dates, travellers, cabin, every filter in it, the tab it was copied from (Best or Cheapest), its sort order, and its currency, market and language. It is sent to Google byte for byte, so even filters this form does not have (checked bags, for example) apply.
  • The form's settings never change a link. They only fill in what a link does not carry — for example a link copied before choosing a tab uses the form's Best/Cheapest setting.
  • Many links, one run: each link is a separate search, capped at maxResults on its own.
  • Also accepted: a Google Explore link (google.com/travel/explore?tfs=…) gives one row per destination, and a round-trip page where you already chose the outbound gives that outbound's return flights, exactly as Google lists them (segmentsForLeg is 2 on those rows).
  • Refused links: the Google Flights home page (no destination yet), a link whose dates are in the past, and a booking page (every flight already chosen — there is no list left to return; use booking options instead). Each is refused with the reason.

Option B — the form

Pick the trip type first; it decides which fields are used.

Trip typeFill inTimes
round_triporigin, destination, departureDate, returnDateoutbound and return time boxes
one_wayorigin, destination, departureDateoutbound time boxes
multi_citymultiCityFlights — 2 to 5 flights, each with origin, destination, datetime boxes inside each flight
exploreorigin; optionally destination as a region (Europe); flexible dates (exploreTripLength, exploreMonth) or both dates—

Fields that don't belong to the chosen trip type are ignored, and the run log says so.

If you give both, every link and the form run as separate searches in the same run. Every row says which one it came from (searchSource: url or route; searchLabel: link 2, route form). One faulty link never stops the others.

Best or Cheapest

Google shows two tabs, and they are different lists:

Best (default)Cheapest
WhatGoogle's recommended flightsGoogle's full cheapest list, including separate-ticket and mixed-airline combinations
Typical size50–300 flightsabout 200 flights (Google stops at 300)
Speed1–2 seconds10–40 seconds (needs a real browser)
Costtinyabout $0.01–0.02 of platform usage per search

Input reference

In the same order as the form.

KeyTypeWhat it is
searchUrlslist of stringsGoogle Flights results-page links, or Google Explore links. Each one is its own search. Only google.com/travel/flights…?tfs=… and google.com/travel/explore?tfs=… links are accepted.

🧭 Trip type, 📍 route and dates

KeyTypeExampleRules
tripTypestringround_tripround_trip, one_way, multi_city or explore.
originlist["New York"]Airport code (JFK), city (Paris) or country (Algeria), one per entry. Up to 10, all searched together.
destinationlist["Paris", "LHR"]Same as origin. For explore: empty for anywhere, or a region, country or city to explore within (Europe).
departureDatestring2027-06-10YYYY-MM-DD, today or later. For explore: optional, together with returnDate for one exact trip.
returnDatestring2027-06-17Round trip (and explore with exact dates); on or after the departure date.

Every row records what each name matched (originSearched, destinationSearched), so a typed name can always be checked.

🕐 Times — round trip and one way

Google's Times filter: when each flight may leave and land. Each box takes two whole hours as a range: 6-12 means leaving from 06:00 until 12:00 (11:59 is in, 12:00 is out). 0-24 or empty means any time. A range can't cross midnight — Google's can't either.

KeyUsed for
outboundDepartureTimethe first flight (one way and round trip) — when it may leave
outboundArrivalTimethe first flight — when it may land
returnDepartureTimethe flight home (round trip only) — when it may leave
returnArrivalTimethe flight home — when it may land

🗺️ Multi-city flights

multiCityFlights is a list of 2 to 5 flights, in the order you take them:

Key in each flightExampleRules
origin, destination["London"]Codes, cities or countries; up to 10 each.
date2027-06-14On or after the previous flight's date.
departureTime, arrivalTime"18-24"Optional time windows for this flight, same format as above.
{
"tripType": "multi_city",
"multiCityFlights": [
{ "origin": ["London"], "destination": ["Paris"], "date": "2027-06-10", "departureTime": "6-12" },
{ "origin": ["Paris"], "destination": ["Tokyo"], "date": "2027-06-14" },
{ "origin": ["Tokyo"], "destination": ["London"], "date": "2027-06-24", "arrivalTime": "12-24" }
]
}

🌍 Explore — flexible dates

Google Explore's "Flexible dates" menu, used when tripType is explore and both dates are empty.

KeyValuesDefaultWhat it does
exploreTripLengthweekend, one_week, two_weeksone_weekTrip length: a weekend is 1–4 days, a week 6–9, two weeks 13–16 (measured on Google's answers).
exploreMonthnext_6_months, january … decembernext_6_monthsWhen to travel.

Each destination comes with the dates Google found cheapest. Explore uses Google Explore's own filters: stops, airlines, bags, price and duration.

👥 Travellers and cabin

KeyRangeNotes
adults1–9At least one adult.
children0–8Aged 2–11.
infantsInSeat0–8Under 2, own seat.
infantsOnLap0–8Under 2, on an adult's lap.
cabinClass—economy, premium_economy, business, first.

At most 9 travellers in total, at least as many adults as lap infants, and at most 2 infants per adult.

🎛️ Filters — in the order of Google's filter bar

They apply to the form search and to every flight of the trip. Leave a box empty for Google's default. Links keep their own filters.

Google's filterKeyFormatWhat it does
StopsmaxStopsany, nonstop, 1-stop, 2-stopsMost stops allowed.
Airlinesallianceslist: ONEWORLD, SKYTEAM, STAR_ALLIANCEOnly flights sold by members of these alliances.
airlinesOnlylist of airline names as Google lists them — Air France, British Airways — or codes (AF, BA)Only flights sold by these airlines. Combines with alliances.
airlinesExcludeairline names or codes, as aboveEvery airline except these. Use this or the two above, not both.
BagscarryOnBagswhole numberCarry-on bags for the whole party; at most one per traveller with a seat. Adds the bag fees to prices.
PricemaxPricewhole numberHighest total price, in the run's currency.
EmissionslessEmissionsOnlytrue / falseOnly flights with CO2 below the route's typical figure.
Connecting airportsminLayoverHourshours, half-hour steps: 1.5Shortest layover allowed (0.5–48).
maxLayoverHourshours, half-hour stepsLongest layover allowed (0.5–48).
connectOnlyVialist of 3-letter airport codes — the letters Google shows in brackets, e.g. Amsterdam (AMS): DUB, AMS, ISTConnections only through these airports.
neverConnectVialist of 3-letter airport codesConnections anywhere except these. Use this or connectOnlyVia, not both.
DurationmaxDurationHourswhole hours, 1–72Longest total journey per flight, layovers included.
(not in the bar)excludeBasicEconomytrue / falsePrices every flight at its cheapest fare that is not basic economy. Flights stay; the price moves up (New York → Los Angeles: Delta $239 → $304, Alaska $204 → $259). Google supports it in the search but doesn't show it in its filter bar.

Nonstop flights are always kept by the layover and connecting-airport filters — they have no connection.

Airline names: Google's Airlines menu shows names, not codes, so type them the way it lists them. The Actor matches each one against the airlines Google lists for your route ("Air France" → AF, shown in appliedFilters.airlines.matchedNames). A name that isn't on the route, or matches several airlines ("Air"), is reported in filterWarnings. If none of the airlines you asked for is on the route, the search isn't sent: the row says no flight can match, rather than quietly searching every airline.

📋 Which flights to return

KeyValuesDefault
resultsViewbest, cheapestbest
sortBytop_flights, price, departure_time, arrival_time, duration, emissionstop_flights
maxResults1–500, per search200

Sorting is done by Google, so sortBy: "price" with maxResults: 10 gives the 10 cheapest.

🧾 Extra details — optional

What Google Flights shows when you click a flight or open its price graph. All are off at 0, and counted per search from the top of the list.

KeyValuesDefaultWhat you get
bookingOptionsTop0–50 flights0Google's booking options for the first N flights: every airline fare tier and travel agency, with fare name, basic-economy flag, price, checked-bag fees, legroom and the seller link.
returnFlightsTop0–50 outbound flights0Round trips: Google's return flights for the first N outbounds, each priced as the whole round trip.
returnFlightsPerOutbound1–10010How many return flights to keep per outbound.
priceGraphDays0–330 days0Google's price graph: the lowest fare for each departure date from your departure date on, one row per day. Round trips keep their trip length. One way and round trip.

Measured on the platform: booking options for 3 flights in 6–23 seconds, return flights for 3 outbounds in 4 seconds, a 90-day price graph in 7 seconds, an Explore search in 8–12 seconds. Each adds well under a cent of platform usage.

How they work, and one limit to know: booking options, the price graph and Explore are requests Google answers on some connections and rejects on others. The Actor retries each one on up to 10 fresh residential IPs. If none answers, the flights are still delivered and the row says so (bookingOptionsError, or a price_graph_failed row).

🌍 Currency, market and language

KeyValuesDefault
currency143 currency codes (USD, EUR, DZD, TND…)USD
market186 country codes — fares differ by marketUS
language72 languages — airport and airline names come back in iten-US

Every value in these lists was tested against Google Flights: Google silently swaps an unknown currency for the market's own, so an unverified code could label prices wrongly.


Output reference

One row per flight option (rowType: "flight"). The price graph adds calendar_day rows and Explore gives destination rows, in the same dataset; the Console has a view for each. A search that finds nothing, or input that can't be used, produces one status row instead (see below).

Flight rows

FieldMeaning
priceTotal price for the whole itinerary and all travellers, in currency. Round trips are Google's coupled round-trip total. null when Google shows "price unavailable".
priceAvailablefalse when price is null.
currencyCurrency of price.
tripTyperound-trip, one-way or multi-city.
cabinClass, passengersWhat was searched.
origin, destinationFirst and last airport of the first flight.
departureTime, arrivalTimeLocal times, YYYY-MM-DDTHH:MM.
airlines, carrierCodeAirlines operating the first flight.
stops, stopsLabelNumber of stops and a label (Nonstop, 1 stop).
durationMinutes, durationWhole journey of the first flight, layovers included.
segmentsEvery plane of the first flight: airports (code and name), times, duration, airline, flight number, aircraft.
tripLegsEvery flight of the trip, with what each typed place matched.
carbonEmissionsGrams, typicalCarbonEmissionsGramsCO2 of this option and Google's typical figure for the route.
priceInsightspriceLevel, currentPrice, typicalPrice, lowestSeenPrice, highestSeenPrice, priceHistory — when Google provides them, otherwise null.
appliedFiltersThe filters Google was asked to apply, read back from the search itself: maxStops, maxPrice, lessEmissionsOnly, maxDurationHours, carryOnBags, checkedBags (links only), layoverHours, connectingAirports, airlines (with matchedNames for airline names), times (one entry per flight).
filterWarningsMessages about the filters, for example an airport or airline code that doesn't exist on this route. Empty when all is well.
searchSource, searchLabelWhich search the row came from (url / route; link 1, route form).
resultsView, sortedBy, indexWhich Google list, its order, and the row's position in it.
source_urlThe Google Flights search the row came from.
googleFlightsUrlThis flight opened in Google Flights: its booking page when it completes the trip (one way, or the last flight), otherwise Google's page for choosing the next flight with this one chosen — for a round trip, its return flights.
segmentsForLegWhich flight of the trip segments describe: 1 normally, 2 for a pasted link whose outbound was already chosen.
bookingOptionsWith bookingOptionsTop: list of {seller, sellerCode, isAirline, fareName, fareCode, cabin, isBasicEconomy, price, flightNumbers, bookingSite, bookingUrl, checkedBags, legroom}. Google's panel can mix cabins (a business search also lists the premium-economy fare), so each option says its cabin. price is null for sellers Google lists without one. bookingUrl is Google's own link (google.com/travel/clk/f?u=…); opening it lands on the seller's site with the fare filled in. checkedBags is {first, second}, each {included, fee} as Google lists it for that fare.
cheapestBookingOptionThe lowest-priced entry of bookingOptions in the cabin you searched.
bookingOptionsForRound trips: the return flight the options were fetched for (Google's cheapest return for this outbound) and its round-trip price.
bookingOptionsErrorWhy this flight has no booking options, when it doesn't.
returnFlightsWith returnFlightsTop: Google's return flights for this outbound — {price, departureTime, arrivalTime, airlines, stops, durationMinutes, flightNumbers, segments, googleFlightsUrl}. price is the whole round trip.
returnFlightsFound, returnFlightsErrorHow many returns Google listed; why there are none, when there are none.

Round trips and multi-city trips are listed the way Google lists them: one row per option for the first flight, priced for the whole trip. segments describe the first flight; tripLegs lists them all.

Price-graph rows (rowType: "calendar_day")

origin, destination, tripType, departureDate, returnDate (round trips), tripLengthDays, price (lowest fare that day), currency, isCheapest (lowest in the graph), appliedFilters, and googleFlightsUrl — the same search on that date.

Explore rows (rowType: "destination")

index, origin, city, country, airport (the airport the priced trip flies to: Google prices Miami through Fort Lauderdale when that is cheaper), latitude, longitude, departureDate, returnDate, tripLengthDays, price (round trip), airlines, airlineCode, stops, durationMinutes, hotelPricePerNight (the hotel price Google shows on the same card), and googleFlightsUrl — a Google Flights search for that trip, which you can paste back into searchUrls to get every flight.

Status rows

statusMeaningWhat to do
input_errorThe input can't be searched as given — the message says why and the hint says how to fix it. Nothing was sent to Google for that search.Fix the named field.
no_resultsGoogle has no fares for this search. With filters on, the message names them: usually the filters removed everything.Relax a filter, change the date or cabin.
search_failedGoogle's service failed repeatedly for this search.Run again in a few minutes.
price_graph_failedThe flights are complete, but no connection got the price graph answered.Run again.

A run never fails because of one bad search: other links and the form still run.

Sample flight row (shortened)

{
"price": 1016,
"currency": "USD",
"priceIsTotal": true,
"tripType": "round-trip",
"cabinClass": "economy",
"origin": "EWR",
"destination": "CDG",
"departureTime": "2027-06-10T17:00",
"arrivalTime": "2027-06-11T06:10",
"airlines": ["Air France"],
"stops": 0,
"stopsLabel": "Nonstop",
"duration": "7h 10m",
"segments": [
{
"departureAirport": "EWR",
"arrivalAirport": "CDG",
"airline": "Air France",
"flightNumber": "AF71",
"aircraft": "Airbus A350",
"duration": "7h 10m"
}
],
"carbonEmissionsGrams": 333000,
"typicalCarbonEmissionsGrams": 428000,
"appliedFilters": {
"maxStops": "1-stop",
"airlines": { "alliances": ["SKYTEAM"], "onlyAirlines": null, "neverAirlines": null },
"times": null
},
"filterWarnings": [],
"searchSource": "route",
"searchLabel": "route form"
}

Sample booking option (one entry of bookingOptions)

{
"seller": "Delta",
"sellerCode": "DL",
"isAirline": true,
"fareName": "Delta Main Basic",
"fareCode": "DELTA MAIN BASIC",
"cabin": "economy",
"isBasicEconomy": true,
"price": 239,
"flightNumbers": ["DL713"],
"bookingSite": "www.delta.com/...",
"bookingUrl": "https://www.google.com/travel/clk/f?u=…",
"checkedBags": { "first": { "included": false, "fee": 45 }, "second": { "included": false, "fee": 55 } },
"legroom": ["31 in"]
}

Google's rules worth knowing

These are how Google Flights itself behaves. The Actor follows them and tells you when they bite.

  • Airline filters work on who sells a flight, not who flies it. Allowing BA also returns American Airlines flights that BA sells. Excluding an airline only removes flights no other airline sells, so excluding Virgin Atlantic may change nothing, because Delta and Air France sell the same flights.
  • The bag filter changes prices, not the list. It adds each airline's bag fee into the price (a £27 Ryanair fare becomes £75 with a carry-on), and only where Google knows the fee.
  • Which airports and airlines make sense depends on the route. Google's menus only offer the ones on that route. A code that isn't there is accepted silently and matches nothing, so the Actor warns in the log and in filterWarnings. An airline code Google doesn't know at all makes it reject the whole search; the Actor reports that as an input_error naming the code.
  • Duration and layover ranges depend on the route. New York → Boston can be filtered to 2 hours; Chicago → London has nothing under 8. A limit below the shortest flight returns a no_results row naming the filter.
  • Lowercase codes are ignored by Google, so the Actor upper-cases every code for you, and matches airline names regardless of case.
  • Impossible searches aren't refused by Google — it quietly answers a different one (10 travellers are priced as one adult; a 6th multi-city flight is dropped). The Actor checks these limits first and refuses with a reason instead of returning a wrong price.
  • Searches with infants, some searches with children, and multi-city trips are priced by Google inside a browser, so they take 15–40 seconds.
  • Prices move through the day. Two runs minutes apart can differ; that is the market.
  • Google's Cheapest tab can price a flight a few dollars below its own booking panel. Measured: JetBlue 1023 at $238 on the Cheapest tab, $249 on the Best tab, in the booking panel and in the price graph. Each row reports the list it came from; bookingOptions report the booking panel.
  • Booking options, the price graph and Explore are answered only on some connections. The Actor retries on fresh residential IPs (measured: German IPs are answered about 3 times as often as US ones, with identical prices — the market comes from market, not the IP).
  • Explore prices the cheapest airport of a city. Miami's cheapest trip may land at Fort Lauderdale; airport says which.

What this version does not do

  • Booking options for multi-city trips need every flight chosen: paste Google's page for the last flight, and set bookingOptionsTop.
  • The price graph covers one way and round trip, not multi-city. Google's two-dimensional date grid is not included.
  • Checked bags are not in the form, because Google's Bags filter only has carry-on. A pasted link that carries checked bags is still replayed as-is.

Use cases

  • Flight price monitoring — schedule a run daily and catch price drops on your routes
  • Travel agencies and OTAs — live comparison fares for your own tools
  • Airfare research — compare carriers, alliances, cabins, markets and currencies
  • Revenue management — watch competitor pricing on the routes you operate
  • Deal sites and newsletters — the cheapest fares on a route, including self-transfer combinations, and Explore's cheapest destinations from any airport
  • Fare comparison — every airline fare tier and travel agency for a flight, with bag fees and the link to book
  • Data and AI — clean, filter-labelled flight data for dashboards, models and agents

FAQ

How many flights does one search return? Best: roughly 50–300. Cheapest: about 200. Google stops at 300 per list; maxResults (default 200, up to 500) caps what is stored.

Is the round-trip price the real total? Yes. Google prices a round trip as one total, and that is what each row carries. Adding an outbound fare to a return fare — a common mistake — roughly doubles the real price.

Do I need a Google account or an API key? No.

Can I search by city or country? Yes. Paris, Algiers or United Kingdom work anywhere an airport code does, up to 10 places per side.

Can I use every Google Flights filter? Yes: in the form (stops, airlines and alliances, carry-on bags, price, times, emissions, layovers, connecting airports, duration), or by pasting a link that carries any filter at all.

Can I get booking links? Yes. Set bookingOptionsTop: each of the first N flights gets Google's booking options, with a bookingUrl per seller that opens the airline's or agency's site with the fare filled in. Every flight row also has googleFlightsUrl, which opens that flight on Google Flights.

Can I find the cheapest day to fly, or the cheapest place to go? Yes. priceGraphDays gives the lowest fare for each day; tripType: "explore" gives Google Explore's cheapest destinations from your airport.

How do I know a filter was applied? Every row has appliedFilters, read back from the search that produced it, and filterWarnings if something about a filter didn't fit the route.

How fast is it? About 1–2 seconds per plain search; 10–40 seconds for the Cheapest list and for searches Google prices in a browser. Extra details add a few seconds each (see the Extra details section).

Is scraping Google Flights legal? This Actor collects publicly available flight information and stores no personal data. You are responsible for how you use the data.


Support

🌐 Website flowextractapi.com · 📧 flowextractapi@outlook.com · 💬 GitHub FlowExtractAPI · 💼 LinkedIn flowextract-api · 🐦 X @FlowExtractAPI · 📱 Facebook flowextractapi · 🎵 TikTok @flowextractapi

Collects publicly available data only · respects the source's rate limits and terms · stores no personal information · suitable for commercial use. No affiliation with or endorsement by Google Flights is implied.

Google Flights Scraper — by FlowExtract API. Turn any website into structured data.