Google Flights Scraper: Fares, Schedules, Stops and Round Trips
Pricing
$0.01 / 1,000 flight itineraries
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 hours ago
Last modified
Categories
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
| Field | What it does | Default |
|---|---|---|
| Routes | 1-100 routes as FROM-TO with three-letter airport or city codes, such as SFO-LAX, LON-NYC | required |
| Departure dates | Up 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 date | 14 days from today |
| Return after days | 0 for one way; 1-30 for a round trip returning that many days later | 0 (one way) |
| Adults, children, lap infants | 1-9 adults, up to 8 children, up to one lap infant per adult | 1 adult |
| Cabin class | Economy, premium economy, business or first | economy |
| Maximum stops | Any, nonstop, at most 1 or at most 2 | any |
| Currency | Any currency Google supports, such as USD, EUR, GBP, INR, JPY | USD |
| Search country | The Google market to search from, such as US, DE, GB | US |
| Maximum itineraries per search | 1-200 | 100 |
| Fare calendar (days) | 1-180 to get the cheapest fare for each day instead of itineraries (see below); 0 is off | 0 |
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.
pricecovers 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).priceisnullwhen Google shows "price unavailable" for an itinerary.typical_price_lowandtypical_price_highare Google's typical price bounds for the search, in your chosen currency, ornullwhen Google omits them.price_levelis Google's own rating of prices for the search (route and date):low,typicalorhigh, the same on every itinerary of that search, ornullwhen Google gives no rating we recognise.carry_on_bags_includedandchecked_bags_includedare the bag counts Google shows for the fare, ornullwhen Google gives no count (often on international and premium fares).- Each leg's
amenitieslists Google's labels, such asFree Wi-Fi,Wi-Fi for a fee,In-seat power & USB outlets,On-demand video,Live TVorStream media to your device;[]when Google lists none. booking_urlopens 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_tokenis Google's itinerary token, ornullif absent; links and tokens may expire.- Each leg's
operated_byis Google's explicit operating-carrier text, ornullwhen 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"}
priceis the lowest fare Google shows for that day for your whole party, ornullif Google shows none.is_cheapestmarks the cheapest day(s) in the window.source_urlopens that day's search on Google Flights.- The calendar needs airport codes (
JFK, not the city codeNYC); 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 ApifyClientclient = 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.
| Event | Price |
|---|---|
| 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.
Related actors
- Google Flights Fare Calendar: just the cheapest fare for every day, up to 180 days per route and 100 routes per run.
- Google Hotels Scraper: hotel prices, ratings and details for any city and dates.
- Google Hotels Booking-Site Prices: every booking site's price for a hotel and your dates.
Support
Report problems and feature requests on the actor's Issues tab, ideally with the run link.