Google Flights Scraper - Most Comprehensive avatar

Google Flights Scraper - Most Comprehensive

Pricing

from $0.05 / 1,000 flights

Go to Apify Store
Google Flights Scraper - Most Comprehensive

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

Kai

Maintained by Community

Actor stats

2

Bookmarked

318

Total users

145

Monthly active users

6 days ago

Last modified

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 to USD. Canonical three-letter codes are trimmed, uppercased, and preserved. Malformed values warn and use USD. 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. airlines accepts caller-supplied strings, with carrier codes and ONEWORLD, STAR_ALLIANCE, and SKYTEAM as typical values.
  • Dates use real YYYY-MM-DD calendar dates. Invalid independent routes are skipped without discarding valid siblings. Routes with past departures, or returns before departure, are also skipped.
  • adults is 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. returnDate is ignored on multi-city legs.
  • showAllResults returns 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:MM boundary 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.
  • calendarDays is 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

FieldTypeDefaultDescription
searchesarrayconditionalUp 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
tripTypestringinferredone-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
exploreOriginstringThree-letter IATA airport code for a flexible destination search
tripDurationstring1-weekweekend 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
exploreMonthstringnext-6-monthsnext-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

FieldTypeDefaultDescription
cabinClassstringeconomyeconomy, premium-economy, business, or first
adultsinteger1Adults, from 1 to 9
childreninteger0Children, from 0 to 9
infantsOnLapinteger0Infants traveling on an adult's lap, from 0 to 9; no cross-field comparison to adults
infantsInSeatinteger0Infants 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.

FieldTypeDefaultDescription
maxStopsstringany0 for nonstop, 1 for up to one stop, or 2 for up to two stops
currencystringUSDCurrency used for Search, Calendar, Explore, booking prices, and maxPrice
maxPricepositive integerMaximum total price in the selected currency
maxDurationpositive integerMaximum duration per leg, in minutes
airlinesstring[]Caller-supplied carrier or alliance strings; values are trimmed and uppercased, and invalid entries are ignored with a warning
departureTimeEarlieststringEarliest departure as a real local hour or HH:MM value
departureTimeLateststringLatest departure as a real local hour or HH:MM value
arrivalTimeEarlieststringEarliest arrival as a real local hour or HH:MM value
arrivalTimeLateststringLatest arrival as a real local hour or HH:MM value
sortBystringbestbest, 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

FieldTypeDefaultDescription
showAllResultsbooleanfalseReturn more available flight choices before applying filters; ignored when no route work runs
includeCalendarPricesbooleanfalseAttempt flexible-date enrichment when route work runs; failures warn and preserve flight rows; ignored when no route work runs
calendarModestringgraphgraph, grid, or picker; used only when includeCalendarPrices is true and otherwise ignored
calendarDaysnumbermode-specificRequested dates or Picker pairs; runtime truncates and clamps to 1โ€“90 and normalizes Grid to an odd window; used only when Calendar is enabled
includeBookingDetailsbooleanfalseAttempt booking choices for eligible flight rows; failures warn and preserve flight rows; ignored when no eligible row exists
proxyConfigurationobject{ "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 bookingForm with an action and fields

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.