Google Flights Scraper: Fares, Schedules, Stops and Round Trips avatar

Google Flights Scraper: Fares, Schedules, Stops and Round Trips

Pricing

$0.01 / 1,000 flight itineraries

Go to Apify Store
Google Flights Scraper: Fares, Schedules, Stops and Round Trips

Google Flights Scraper: Fares, Schedules, Stops and Round Trips

Google Flights scraper, no browser: prices for your route, dates, passengers and cabin, with times, duration, stops, layovers, each leg's flight number and aircraft, and CO2. One way or round trip, many dates per run for cheapest-day searches. Trial: 0.01 USD per 1,000 itineraries until 30 Nov 2026.

Pricing

$0.01 / 1,000 flight itineraries

Rating

0.0

(0)

Developer

Cozybit

Cozybit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

Google Flights Scraper: prices, schedules and connections for any route and date

Get flight options and prices from Google Flights as clean records, without a browser and without a Google account. For each route and date you get the itineraries Google shows before "View more flights":

  • Price for your whole party and trip (one way or round trip), in the currency you choose.
  • Schedule: departure and arrival times, total duration, number of stops and each layover with its airport and length.
  • Flights: every leg with airline, flight number, aircraft, legroom, times and on-board amenities (Wi-Fi, power, entertainment).
  • Bags and price level: carry-on and checked bags included in the fare, and whether Google rates prices for the search as low, typical or high.
  • Emissions: CO2 estimate for the itinerary and the typical value for the route.
  • Whether Google ranks the itinerary among its "best" options.
  • Optional fare calendar: the cheapest fare for every day over up to 180 days, one record per day.

Typical uses: fare monitoring for routes you sell or fly, finding the cheapest date in a range, route and schedule research, travel-deal sites.

Prices include all platform costs: you pay per itinerary returned and nothing for proxies or compute.

Input

FieldWhat it doesDefault
Routes1-100 routes as FROM-TO with three-letter airport or city codes, such as SFO-LAX, LON-NYCrequired
Departure datesUp to 30 dates (YYYY-MM-DD, or a time from the run date such as 3 weeks; up to 330 days ahead); each route is searched for each date14 days from today
Return after days0 for one way; 1-30 for a round trip returning that many days later0 (one way)
Adults, children, lap infants1-9 adults, up to 8 children, up to one lap infant per adult1 adult
Cabin classEconomy, premium economy, business or firsteconomy
Maximum stopsAny, nonstop, at most 1 or at most 2any
CurrencyAny currency Google supports, such as USD, EUR, GBP, INR, JPYUSD
Search countryThe Google market to search from, such as US, DE, GBUS
Maximum itineraries per search1-200100
Fare calendar (days)1-180 to get the cheapest fare for each day instead of itineraries (see below); 0 is off0

Example: cheapest day to fly London to New York in business class, four Fridays, prices in pounds:

{
"routes": ["LON-NYC"],
"departureDates": ["2027-01-08", "2027-01-15", "2027-01-22", "2027-01-29"],
"cabinClass": "business",
"currency": "GBP",
"country": "GB"
}

Example: round trip Berlin-Lisbon for a week, two adults:

{ "routes": ["BER-LIS"], "departureDates": ["2027-04-02"], "returnAfterDays": 7, "adults": 2, "currency": "EUR", "country": "DE" }

Output

One record per itinerary. Example (round trip, one stop):

{
"route": "BER-LIS", "origin": "BER", "destination": "LIS",
"departure_date": "2026-11-29", "return_date": "2026-12-06", "trip_type": "round_trip",
"position": 2, "is_best": true, "status": "ok", "error": null,
"price": 209, "currency": "EUR", "typical_price_low": 180, "typical_price_high": 280, "price_level": "typical",
"carry_on_bags_included": 1, "checked_bags_included": 0,
"passengers": { "adults": 1, "children": 0, "infants_on_lap": 0 }, "cabin_class": "economy",
"airline_codes": ["KL"], "airlines": ["KLM"],
"departure_airport": "BER", "arrival_airport": "LIS",
"departure_time": "2026-11-29T06:00", "arrival_time": "2026-11-29T10:30", "duration_minutes": 330,
"stops": 1,
"layovers": [{ "airport": "AMS", "airport_name": "Amsterdam Airport Schiphol", "city": "Amsterdam", "minutes": 65 }],
"legs": [
{ "airline_code": "KL", "airline": "KLM", "flight_number": "1770", "operated_by": null, "from": "BER", "from_name": "Berlin Brandenburg Airport",
"to": "AMS", "to_name": "Amsterdam Airport Schiphol", "departure_time": "2026-11-29T06:00", "arrival_time": "2026-11-29T07:25",
"duration_minutes": 85, "aircraft": "Airbus A321neo", "legroom": "29 in", "amenities": ["In-seat USB outlet"] },
{ "airline_code": "KL", "airline": "KLM", "flight_number": "1579", "operated_by": null, "from": "AMS", "from_name": "Amsterdam Airport Schiphol",
"to": "LIS", "to_name": "Humberto Delgado Airport", "departure_time": "2026-11-29T08:30", "arrival_time": "2026-11-29T10:30",
"duration_minutes": 180, "aircraft": "Airbus A321neo", "legroom": "29 in", "amenities": ["Wi-Fi for a fee", "In-seat USB outlet"] }
],
"co2_grams": 172000, "typical_co2_grams": 217000,
"source_url": "https://www.google.com/travel/flights/search?tfs=...&hl=en&gl=de&curr=EUR",
"booking_url": "https://www.google.com/travel/flights/search?tfs=...&hl=en&gl=de&curr=EUR",
"booking_token": "Google-provided itinerary token...",
"scraped_at": "2026-10-30T18:08:57.882Z"
}
  • Times are local to each airport, as on Google Flights.
  • price covers all passengers. For round trips it is the round-trip total, and the record describes the outbound flights (as on Google Flights before you pick a return).
  • price is null when Google shows "price unavailable" for an itinerary.
  • typical_price_low and typical_price_high are Google's typical price bounds for the search, in your chosen currency, or null when Google omits them.
  • price_level is Google's own rating of prices for the search (route and date): low, typical or high, the same on every itinerary of that search, or null when Google gives no rating we recognise.
  • carry_on_bags_included and checked_bags_included are the bag counts Google shows for the fare, or null when Google gives no count (often on international and premium fares).
  • Each leg's amenities lists Google's labels, such as Free Wi-Fi, Wi-Fi for a fee, In-seat power & USB outlets, On-demand video, Live TV or Stream media to your device; [] when Google lists none.
  • booking_url opens the selected one-way itinerary's Google Flights booking page. For round trips it is the search URL, since the record does not select a return flight. Missing booking details also use the search URL. booking_token is Google's itinerary token, or null if absent; links and tokens may expire.
  • Each leg's operated_by is Google's explicit operating-carrier text, or null when absent. It is not a list of codeshare airlines.
  • Records keep the same field names in format v1; any future change will be announced here first.

Fare calendar

Set Fare calendar (days) to get Google's date grid as data: the cheapest fare for every departure day, starting at your earliest departure date, for up to 180 days per route. Round trips use "Return after days" as a fixed trip length. One record per day:

{
"record_type": "calendar_day", "route": "JFK-CDG", "origin": "JFK", "destination": "CDG",
"departure_date": "2026-11-08", "return_date": null, "trip_type": "one_way",
"price": 316, "currency": "USD", "is_cheapest": true,
"passengers": { "adults": 1, "children": 0, "infants_on_lap": 0 }, "cabin_class": "economy",
"source_url": "https://www.google.com/travel/flights/search?tfs=...&hl=en&gl=us&curr=USD",
"status": "ok", "error": null, "scraped_at": "2026-11-01T23:04:45.633Z"
}
  • price is the lowest fare Google shows for that day for your whole party, or null if Google shows none. is_cheapest marks the cheapest day(s) in the window. source_url opens that day's search on Google Flights.
  • The calendar needs airport codes (JFK, not the city code NYC); a city code gives an error record for that route.
  • Itinerary records carry record_type: "flight". The dataset has a "Fare calendar" view.

status: "no_data" means Google listed no flights for that route and date. status: "error" means the search failed after all retries; error says why. You never pay for no_data or error records. A run summary (RUN_SUMMARY) is saved in the run's key-value store.

Use it from code

Get your API token in Apify Console under Settings > API & Integrations. Each example runs the actor, waits for it to finish and prints the itineraries.

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("cozybit/google-flights-scraper").call(run_input={
"routes": ["JFK-CDG"],
"departureDates": ["2027-03-12"],
"returnAfterDays": 7,
})
for flight in client.dataset(run["defaultDatasetId"]).iterate_items():
print(flight["airlines"], flight["departure_time"], flight["stops"], flight["price"])

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('cozybit/google-flights-scraper').call({
routes: ['JFK-CDG'],
departureDates: ['2027-03-12'],
returnAfterDays: 7,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const flight of items) console.log(flight.airlines, flight.departure_time, flight.stops, flight.price);

HTTP API, one request that runs the actor and returns the records as JSON (for runs up to 5 minutes; use the clients above for longer ones):

curl -X POST "https://api.apify.com/v2/acts/cozybit~google-flights-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer <YOUR_API_TOKEN>" -H "Content-Type: application/json" \
-d '{"routes": ["JFK-CDG"], "departureDates": ["2027-03-12"], "returnAfterDays": 7}'

To watch fares over time, save the input as a task in Apify Console and add a schedule; relative dates such as "departureDates": ["3 weeks"] keep each run looking the same distance ahead.

Pricing

Trial price until 30 November 2026: 0.01 USD per 1,000 flights (the lowest price Apify allows). From 1 December 2026 this scraper costs 0.75 USD per 1,000 flights. Apify notifies all users before a price change.

You pay per itinerary returned; platform usage (compute and proxies) is included.

EventPrice
Flight (one itinerary with its price)0.75 USD per 1,000 (0.00075 USD each)

Worked examples (a search typically returns about 17 itineraries, see Limits):

  • One route on one date, about 17 itineraries: about 0.013 USD.
  • One route on 30 dates to find the cheapest day, about 500 itineraries: about 0.38 USD.

The fare calendar is free during the trial: calendar days are not charged until its own price is announced here.

To cap spending, set a maximum cost per run in the run options, or lower "Maximum itineraries per search"; the actor stops cleanly when the cap is reached.

Free Apify plan

On the free Apify plan a run returns at most 40 itineraries (or 40 calendar days). When the limit is reached the run finishes successfully with the status message "Free Apify plan limit reached"; everything collected so far is in the dataset. Any paid Apify plan removes the limit.

Reliability

In 48 test runs on the Apify platform (15 routes, 5 countries and currencies, dates 3-180 days ahead, one-way and round trips), 45 of 48 searches returned itineraries (1,123 in total) and Google limited no IP. The other 3 got a temporary Google error page; the actor retries such pages through a new IP, up to four attempts. The median run took 5 seconds. Fare calendar prices matched another scraper's calendar on all 30 days of a side-by-side test.

How it stays reliable: the actor reads the data Google embeds in its result page instead of driving a browser, sends a few paced requests per IP and switches to a new IP when Google limits one. Each search is checked against your date and currency, so a page where Google ignored your request becomes a clear error instead of wrong prices. If Google changes its page format, the run fails with a message naming the changed part rather than returning an empty or wrong dataset.

Limits

  • Round trips return the outbound options with round-trip prices; the matching return flights (a second step on Google Flights) are not included.
  • Only the list before "View more flights" is returned, not Google's full list: a median of 17 itineraries per search in our tests, range 7-68. Raising the per-search cap does not fetch the extra flights.
  • Children and lap infants (experimental) are sent to Google, but Google's response does not confirm the party, so check family prices.
  • Fare calendar: up to 180 days per route, airport codes only. 31 of 32 route calendars succeeded in our tests; Google sometimes answers a calendar request with an error, and the actor retries it through new IPs (up to four attempts).
  • Multi-city trips are not supported in this version.
  • Prices are what Google shows at the time of the run and change often.
  • Google Flights has no official public API; when Google changes its site the actor may fail until it is updated.

Support

Report problems and feature requests on the actor's Issues tab, ideally with the run link.