Use Google Flights Fare & Itinerary Filter Scraper with Python
Search Google Flights for one-way or round-trip fares across any cabin class, then narrow results by stops, total duration, airline, and price range, with an optional price-alert flag.
1. Choose the data you need
Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.
2. Prepare a source-based input
This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.
{
"adults": 1,
"airlines": [],
"arrivalTimeRange": "any",
"cabinClass": "economy",
"children": 0,
"country": "US",
"currency": "USD",
"departureTimeRange": "any",
"destinationAirport": "LHR",
"excludeAirlines": [],
"includePriceInsights": false,
"infants": 0,
"infantsInSeat": 0,
"language": "en",
"lessEmissions": false,
"maxResults": 1,
"maxStops": "any",
"mode": "search",
"originAirport": "JFK",
"outboundDate": "2026-12-10",
"priceGraphDays": 1,
"returnOptionsPerOutbound": 5,
"returnOptionsTop": 0,
"sortBy": "top"
}
Download input.example.json and save your reviewed copy as input.json.
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | required | Search flights, or collect the cheapest fare for each date around your departure date. |
originAirport | string | optional | Three-letter IATA airport or city code, e.g. JFK, LHR, NYC. One code per search; use `searches` for alternate airports. |
destinationAirport | string | optional | Three-letter IATA airport or city code, e.g. LHR, HND, LON. One code per search; use `searches` for alternate airports. |
outboundDate | string | optional | Departure date in YYYY-MM-DD format. Leave empty to use 30 days from today (UTC); the chosen date is logged. |
returnDate | string | optional | Return date in YYYY-MM-DD format. Leave empty for a one-way search. |
adults | integer | optional | Travellers aged 12 and over (1-9). |
children | integer | optional | Travellers aged 2-11 (0-8). |
infants | integer | optional | Infants under 2 travelling on an adult lap (0-8). Cannot exceed the number of adults. |
infantsInSeat | integer | optional | Infants under 2 travelling in their own seat (0-8). |
cabinClass | string | optional | Cabin to search. |
currency | string | optional | Currency for every price. |
language | string | optional | Language Google Flights uses for airport and airline names. |
country | string | optional | Country whose fares and availability Google should show. |
maxStops | string | optional | Largest number of stops allowed on any leg. |
airlines | array | optional | Two-letter IATA airline codes to keep, e.g. ["BA","AA"]. Flights marketed by or codesharing with these airlines are kept. Empty means all airlines. |
excludeAirlines | array | optional | Two-letter IATA airline codes to remove, e.g. ["FR"]. |
minPrice | integer | optional | Drop fares below this price, in the chosen currency. |
maxPrice | integer | optional | Drop fares above this price, in the chosen currency. |
maxDurationMinutes | integer | optional | Drop itineraries longer than this, including layovers. |
departureTimeRange | string | optional | Only departures in this local-time window. |
arrivalTimeRange | string | optional | Only arrivals in this local-time window. |
lessEmissions | boolean | optional | Keep itineraries Google marks as producing less CO2 than typical for the route. |
sortBy | string | optional | How to order the returned flights. |
maxResults | integer | optional | Maximum number of flight or calendar rows to return; in calendar mode it also caps the number of days. |
returnOptionsTop | integer | optional | For round trips, fetch return flights for this many top outbound options. 0 turns this off. |
returnOptionsPerOutbound | integer | optional | How many return flights to attach to each selected outbound. |
includePriceInsights | boolean | optional | Add Google's current, typical and historical price range when available. |
priceGraphDays | integer | optional | Number of calendar days to return in price-calendar mode (1-61), starting on the departure date; also capped by maxResults. |
priceAlertThreshold | number | optional | When set, add a priceBelowThreshold flag to every fare in the chosen currency. |
searches | array | optional | Optional list of searches to run in one go. Each item needs originAirport, destinationAirport, outboundDate and an optional returnDate. Up to 20. |
3. Start an Actor run
Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.
Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.
import json
import os
import urllib.request
# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
actor_input = json.load(stream)
token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
"https://api.apify.com/v2/acts/8lx7PfBaJQLrtPwBv/runs?timeout=120&maxTotalChargeUsd=0.50",
data=json.dumps(actor_input).encode("utf-8"),
headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.
4. Inspect the actual results
Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.
Flight itinerary records with fares, airlines, schedules, layovers, aircraft, emissions and booking links, plus price-calendar day records.
Questions before you run
Which inputs are required?
The published required fields are mode
What does this guide verify?
The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.
What if the run request times out?
Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.
Generated from source build JMe14jW0FAs170tz8 and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.