Google Flights Scraper - Most Comprehensive
Pricing
from $0.05 / 1,000 flights
Google Flights Scraper - Most Comprehensive
๐ฅ ~$0.05/1K flights ๐ฅ Search one-way, round-trip, and multi-city flights, compare flexible dates and destinations, and add optional booking choices.
Pricing
from $0.05 / 1,000 flights
Rating
0.0
(0)
Developer
Kai
Maintained by CommunityActor stats
2
Bookmarked
318
Total users
145
Monthly active users
6 days ago
Last modified
Categories
Share
Google Flights Scraper
Search one-way, round-trip, and multi-city flights. The Actor returns structured prices, schedules, stops, airlines, layovers, emissions, flexible-date prices, and optional booking choices. It also preserves the original Google response beside the normalized fields.
What you can do
- Search one route or a batch of routes
- Build ordered multi-city itineraries
- Filter by stops, price, duration, airline, alliance, and time
- Search economy, premium economy, business, or first class
- Include adults, children, and infants
- Request prices in a supported currency
- Compare nearby dates or fixed-length round trips
- Find destinations for a flexible month and trip length
- Add booking choices and baggage-policy links
Before you run
- Prices and price filters use the selected
currency, which defaults toUSD. Canonical three-letter codes are trimmed, uppercased, and preserved. Malformed values warn and useUSD. Prices are requested in that currency rather than converted locally; the amount or currency offered at checkout can still differ by provider. - Route airports use three-letter IATA codes for origin and destination. The
Actor does not reject identical origin and destination codes; the flight service may
simply return no inventory.
airlinesaccepts caller-supplied strings, with carrier codes andONEWORLD,STAR_ALLIANCE, andSKYTEAMas typical values. - Dates use real
YYYY-MM-DDcalendar dates. Invalid independent routes are skipped without discarding valid siblings. Routes with past departures, or returns before departure, are also skipped. adultsis individually bounded from 1 to 9, and each other passenger field from 0 to 9. There is no combined passenger-total or lap-infant/adult input gate; the values are passed to the flight service and may produce no inventory.- Each independent route is treated as round-trip when it has a return date and
one-way when it does not, so both can share one batch. At most 20 routes are
processed. Multi-city entries form one coupled ordered journey; an invalid or
oversized leg list is skipped as a whole.
returnDateis ignored on multi-city legs. showAllResultsreturns more flight choices and may increase runtime.- Round-trip and multi-city results do not list every possible leg combination. The Actor returns one complete set of earlier legs plus available alternatives for the final leg.
- Booking details can significantly increase runtime, especially with
showAllResults. - Calendar prices use the same route filters as flight results. Flight time
filters use exact minutes, while Calendar time bounds use whole hours. An
HH:MMboundary can therefore include additional prices from that hour. - Overnight Calendar ranges can take longer, especially in Picker mode when both departure and arrival ranges cross midnight.
calendarDaysis normalized at runtime: fractional values are truncated, values are clamped to 1โ90, and Grid windows are adjusted to an odd size.- Search, Explore, Calendar, and booking settings are accepted even when their matching operation is absent. Inactive settings are ignored. Invalid active optional settings warn and use safe defaults instead of rejecting the run.
- Unknown input fields are accepted for forward compatibility and ignored by the current runtime.
- Submitting
{}runs a sample SFO to LAX search for the first day of the next month. - Submitting
{ "searches": [] }requests no work and completes without opening output storage.
Quick start
Paste one of these inputs into the Actor, select Run, then open the run's Dataset to view or export the results. Replace the sample dates with current or future dates.
One-way
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-09-17"}]}
Round-trip
{"searches": [{"origin": "SFO","destination": "NRT","departureDate": "2026-10-01","returnDate": "2026-10-15"}]}
You can add more entries to searches to run a batch. Each entry independently
uses its own returnDate to select one-way or round-trip behavior.
Multi-city
For multi-city trips, searches is one ordered journey.
{"tripType": "multi-city","searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-09-15"},{"origin": "LAX","destination": "LAS","departureDate": "2026-09-18"},{"origin": "LAS","destination": "SFO","departureDate": "2026-09-21"}]}
Filters and booking choices
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-09-15"}],"maxStops": "0","currency": "EUR","maxPrice": 200,"maxDuration": 180,"airlines": ["UA", "AA"],"departureTimeEarliest": "08:00","departureTimeLatest": "18:00","sortBy": "cheapest","showAllResults": true,"includeBookingDetails": true}
Flexible dates
Graph checks a forward one-way window starting on the requested date and returns the available prices. It defaults to 61 days.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-09-01"}],"includeCalendarPrices": true,"calendarMode": "graph","calendarDays": 30}
Grid checks a window centered on the requested date and returns the available prices. It defaults to 7 days. If the centered window reaches into the past, Calendar enrichment warns and the Actor keeps any flight results.
Picker is intended for round trips. It requests a forward series of departure and return date pairs using the supplied stay length and passes through the returned pairs. Without a usable return date, Calendar enrichment warns and the Actor keeps any flight results. Picker defaults to 61 date pairs.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-09-01","returnDate": "2026-09-08"}],"includeCalendarPrices": true,"calendarMode": "picker"}
Flexible destinations
Set exploreOrigin and use searches: [] to run only a destination search. If
searches also contains routes, the Actor runs both.
{"searches": [],"exploreOrigin": "SFO","tripDuration": "1-week","exploreMonth": "next-6-months","adults": 2,"children": 1}
Input
Routes and dates
| Field | Type | Default | Description |
|---|---|---|---|
searches | array | conditional | Up to 20 routes containing three-letter IATA origin and destination codes, departureDate, and optional returnDate; omitted input uses the sample route, while an explicit [] is a no-op unless Explore is set |
tripType | string | inferred | one-way, round-trip, or multi-city; independent routes resolve from return-date presence, while the multi-city option makes the list one coupled journey and ignores per-leg returnDate |
exploreOrigin | string | Three-letter IATA airport code for a flexible destination search | |
tripDuration | string | 1-week | weekend for 1โ4 days, 1-week for 6โ9 days, or 2-weeks for 13โ16 days; used when exploreOrigin is present and otherwise ignored |
exploreMonth | string | next-6-months | next-6-months, january, february, march, april, may, june, july, august, september, october, november, or december; used when exploreOrigin is present and otherwise ignored |
Independent routes with returnDate run as round trips; routes without it run
as one-way searches. Invalid independent entries warn and are skipped. A
multi-city list is atomic and remains in supplied order.
Passengers
| Field | Type | Default | Description |
|---|---|---|---|
cabinClass | string | economy | economy, premium-economy, business, or first |
adults | integer | 1 | Adults, from 1 to 9 |
children | integer | 0 | Children, from 0 to 9 |
infantsOnLap | integer | 0 | Infants traveling on an adult's lap, from 0 to 9; no cross-field comparison to adults |
infantsInSeat | integer | 0 | Infants traveling in their own seat |
Filters
Route filters and sorting are applied when route work runs. With an Explore-only
input they are accepted and ignored; currency also applies to Explore-only runs.
| Field | Type | Default | Description |
|---|---|---|---|
maxStops | string | any | 0 for nonstop, 1 for up to one stop, or 2 for up to two stops |
currency | string | USD | Currency used for Search, Calendar, Explore, booking prices, and maxPrice |
maxPrice | positive integer | Maximum total price in the selected currency | |
maxDuration | positive integer | Maximum duration per leg, in minutes | |
airlines | string[] | Caller-supplied carrier or alliance strings; values are trimmed and uppercased, and invalid entries are ignored with a warning | |
departureTimeEarliest | string | Earliest departure as a real local hour or HH:MM value | |
departureTimeLatest | string | Latest departure as a real local hour or HH:MM value | |
arrivalTimeEarliest | string | Earliest arrival as a real local hour or HH:MM value | |
arrivalTimeLatest | string | Latest arrival as a real local hour or HH:MM value | |
sortBy | string | best | best, cheapest, fastest, departure-time, or arrival-time |
The list above covers the commonly available choices. Other canonical three-letter codes are still passed through unchanged; Google decides whether it can quote in them.
A latest time given as a whole hour includes that entire hour. For example,
18 includes departures through 18:59. When the earliest time is later than
the matching latest time, the range crosses local midnight: 22 through 6
means 22:00โ23:59 or 00:00โ06:59. Time filters use each leg's local
departure or arrival clock.
best keeps the recommended order. cheapest places quoted fares from lowest
to highest, followed by schedules without a quoted fare. fastest uses total
itinerary duration.
For round trips and multi-city trips, maxStops, maxDuration, and time limits
apply to every leg. Each leg must include a matching airline. maxPrice,
cheapest, and fastest use the complete itinerary. Departure and arrival
sorting use the varying final-leg alternatives.
Optional details
| Field | Type | Default | Description |
|---|---|---|---|
showAllResults | boolean | false | Return more available flight choices before applying filters; ignored when no route work runs |
includeCalendarPrices | boolean | false | Attempt flexible-date enrichment when route work runs; failures warn and preserve flight rows; ignored when no route work runs |
calendarMode | string | graph | graph, grid, or picker; used only when includeCalendarPrices is true and otherwise ignored |
calendarDays | number | mode-specific | Requested dates or Picker pairs; runtime truncates and clamps to 1โ90 and normalizes Grid to an odd window; used only when Calendar is enabled |
includeBookingDetails | boolean | false | Attempt booking choices for eligible flight rows; failures warn and preserve flight rows; ignored when no eligible row exists |
proxyConfiguration | object | { "useApifyProxy": true } | Connection settings passed through to Apify; no proxy group is selected by default, and empty proxy-group or URL lists are treated as unset |
Output
The normalized portion of this Dataset record came from a successful live run
using the one-way input above. The googleResponses source metadata described
below is omitted here for readability. Prices and availability change.
{"origin": "SFO","destination": "LAX","departureDate": "2026-09-17","returnDate": null,"tripType": "one-way","cabinClass": "economy","price": 23,"currency": "USD","pricePerPassenger": null,"totalDuration": 96,"stops": 0,"airlines": ["Frontier"],"airlineCodes": ["F9"],"outbound": {"duration": 96,"stops": 0,"segments": [{"airline": "Frontier","airlineCode": "F9","flightNumber": "F92858","aircraft": "Airbus A320neo","departureAirport": "SFO","arrivalAirport": "LAX","departureTime": "2026-09-17T12:07:00-07:00","arrivalTime": "2026-09-17T13:43:00-07:00","duration": 96,"layover": null}]},"return": null,"co2Emissions": 59599,"co2EmissionsLabel": null,"bookingToken": "CjRI...","fareClass": null,"bookingDetails": null,"calendarPrices": null}
Round-trip and multi-city results also contain legs. outbound is always the
first leg. return is the second leg for round trips and remains null for
multi-city trips. totalDuration and stops summarize all legs, while the
corresponding filters apply to each leg.
Durations and layovers use minutes. co2Emissions uses grams. Departure and
arrival timestamps use local airport times and include the exact UTC offset for
that flight date. price is null when a schedule is available without a
quoted fare. The reserved fields pricePerPassenger, co2EmissionsLabel, and
fareClass are currently always null.
bookingToken is the source-provided Google Flights booking handoff token and
is preserved unchanged in each flight record when available.
When searches and exploreOrigin are supplied together, their results share
one Dataset. Flight records contain outbound, destination records contain
destinationId, and standalone Calendar records have
recordType: "calendar".
Explore results are saved before flight results when both are requested. Batch routes follow input order.
Original Google responses
Every successful 2xx Google response whose body was read is retained. The first
compatible normalized record contains a googleResponses array; a booking
response stays with its own flight. This keeps the usual number of Dataset rows
unchanged. If no normalized row remains to carry the source data, including
when every normalized result is filtered out, the Actor writes one
recordType: "google-response" manifest containing the ordered response list.
Each response includes its operation, method, transport, HTTP status, content
type, byte count, normalization status, bounded requestContext, exact
rawResponse text, and best-effort responseBlocks. Request context contains
only public route or operation identifiers, such as origin, destination, date,
journey stage, or Calendar variant; request payloads and booking tokens are not
copied into it. The raw text is authoritative: positional order, duplicates,
null values, and unfamiliar fields remain untouched even when the normalized
view filters, merges, or sorts known fields. An unfamiliar readable response is
returned once and is not treated as a reason to repeat the request.
The run keeps at most 1 MB of source-response text inline across all Dataset
items. Remaining bodies are stored exactly in the run's default key-value
store, so a body smaller than 1 MB can still be externalized after the inline
budget is used. A single stored body uses rawResponseKey. Bodies too large
for one safe key-value-store request are split on UTF-8 boundaries and use the
ordered rawResponseKeys array. Fetch and concatenate those values in array
order to reconstruct the exact text. rawResponseBytes gives the reconstructed
UTF-8 byte count, and the SHA-256 digest embedded in each key identifies the
complete body. For externalized responses, rawResponse and duplicate parsed
blocks are omitted from the Dataset item.
Calendar prices
When requested, calendarPrices is added to the first flight result for each
route. Each item contains date and price. Picker items also contain
returnDate. Calendar prices respect the stops, price, duration, airline,
passenger, cabin, and time options supplied with the route.
Calendar prices are returned in date order. Picker entries with the same departure date are ordered by return date.
calendarPrices is an empty array when the Calendar check completes without
matching prices. It remains null when Calendar prices were not requested or
could not be checked.
If no matching flight is returned but the Calendar request completes, the Actor
returns a separate recordType: "calendar" record. It contains the route,
passenger settings, mode, resolved calendarDays, currency, and
calendarPrices.
Booking details
When bookingDetails is not null, it preserves the stable compatibility
fields baggageAllowance (carryOn and checked), fareRules, and
bookingLinks (airline and url). These fields remain present alongside the
richer booking data below.
bookingDetails.bookingOptions can contain:
- Provider name, provider code, and whether booking is airline-direct, when known
- Flight numbers, price, and currency
- Display URL text when available; it may not be a navigable link
- A
bookingFormwith anactionandfields
Submit a booking form using its action and all supplied fields together.
baggagePolicies contains airline policy links. bookingOptions can be empty
when no provider choices are available. A result keeps bookingDetails as
null when booking details were not requested or were unavailable.
googleFlightsUrl is included inside booking details and can be null.
Flexible destination results
Destination results contain destinationId, city, country, airport,
departureDate, returnDate, price, cheapestPrice, currency, airline,
airlineCode, stops, and duration.
Use price as the quoted result price. cheapestPrice is an optional comparison
value and may be higher or lower. Results with an itinerary quote are listed
before comparison-only results. departureDate and returnDate are always
present. Either price field can be null, but every result contains at least one
price value. airline, airlineCode, stops, and duration can be null.
Region results can have an empty airport, and airlineCode can be "multi"
for itineraries with more than one airline.
Failed and partial runs
An explicit no-op or a batch containing only skipped routes can succeed with an empty Dataset. A readable Google response with no normalized matches is kept in the source-response manifest described above. When Calendar prices were requested and checked successfully, a standalone Calendar record can still be returned without a matching flight.
For batch inputs, successful routes remain in the Dataset when another route cannot be acquired, and the run succeeds with a warning that identifies the affected route. If every requested Search and Explore operation exhausts its network attempts without receiving a readable response, the run fails. A readable but unfamiliar success remains a successful source record. Calendar, booking, and cleanup failures warn and retain available rows. If a journey receives source responses before a later terminal failure, those responses are saved in a manifest before the acquisition remains failed. Dataset, key-value storage, and charging failures remain fatal.