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
3
Bookmarked
680
Total users
286
Monthly active users
6 hours ago
Last modified
Categories
Share
Google Flights Scraper
Search one-way, round-trip, and multi-city flights in Google Flights. The Actor returns normalized prices, schedules, stops, airlines, layovers, emissions, flexible-date prices, destinations, and optional booking choices. It also keeps Google's original result data with the records.
Use it to compare fares across dates or cabins, monitor a route, find cheap destinations for a flexible month, or collect booking links for a chosen flight.
Choose a flight search
| Goal | Input to use |
|---|---|
| Search one route or a batch of independent routes | Add one object per route to searches. A returnDate makes that route a round trip. |
| Search several departure or arrival airports together | Use an array or a comma-separated list in origin or destination. |
| Import a Google Flights search | Set flightUrl to a supported airport-search URL. |
| Build one ordered journey with several legs | Set tripType to multi-city and put the legs in travel order. |
| Compare nearby travel dates | Set includeCalendarPrices and choose the Calendar mode that matches the date question. |
| Find destinations for a flexible month and stay length | Set exploreOrigin and use an empty searches array for an Explore-only run. |
| Get provider prices and booking forms | Set includeBookingDetails and use maxBookingDetails to limit lookups. |
| Limit the number of returned flights | Set maxResults for each route or complete journey. |
All routes in one run share the same passenger, cabin, currency, country, language, airline, stop, price, duration, and local-time settings.
You can also import an airport search with flightUrl. Use country and
language to select the market and result language. Use maxResults and
maxBookingDetails to limit flight output and booking lookups.
Search flights
Paste one of these inputs into the Actor, select Run, and open the default Dataset. Replace the sample dates with current or future travel dates.
One-way search
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"}]}
Round-trip search
A returnDate makes the route a round trip. The result contains both legs.
{"searches": [{"origin": "SFO","destination": "JFK","departureDate": "2026-10-15","returnDate": "2026-10-22"}]}
Search several airports
Each route endpoint accepts one airport code, a comma-separated list, or an
array. The Actor searches all codes together. Flight rows identify the actual
airports used by the itinerary. Calendar rows and requestContext keep the
requested airport groups. City names and Google place IDs are not supported.
{"searches": [{"origin": ["JFK", "EWR"],"destination": "LHR,LGW","departureDate": "2026-10-15"}],"country": "GB","language": "en-GB","currency": "GBP","maxResults": 20}
Import a Google Flights URL
Use an HTTPS airport-search URL from google.com or www.google.com. The Actor
accepts supported tfs links for one-way, round-trip, and multi-city searches,
including airport groups. It also accepts the exact q text form shown below.
For a return query, append returning YYYY-MM-DD to the query text. The Actor
reads the search settings from the URL without opening that URL.
{"flightUrl": "https://www.google.com/travel/flights?q=Flights+from+JFK+to+LHR+on+2026-10-15&curr=GBP&hl=en-GB&gl=GB","maxResults": 20,"includeBookingDetails": true,"maxBookingDetails": 5}
The URL replaces searches and tripType. It supplies cabin, passengers, currency,
country, and language when those values are present. For API input, omit these
fields to use the URL values. Explicit non-null values override the URL settings.
This includes the preset values submitted by the input form. Passenger fields
cannot be null; omit them from the JSON input to use the URL passenger counts.
Limits and flight filters still apply. A blank or null URL is unset.
City/place IDs, selected-flight links, and filters encoded in the URL are not supported. Use an unfiltered airport-search URL and set filters in the Actor input. An invalid or unsupported URL stops the run with an input error.
Batch of routes
Add up to 20 routes. Each route uses its own returnDate, so one batch can mix
one-way and round-trip routes. An invalid route is skipped with a warning and
the other routes still run.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"},{"origin": "SFO","destination": "SEA","departureDate": "2026-10-16","returnDate": "2026-10-20"},{"origin": "LAX","destination": "LAS","departureDate": "2026-10-18"}]}
Multi-city search
Set tripType to multi-city. The list is one ordered journey with up to 20
legs. Each result contains every leg and one total price.
{"tripType": "multi-city","searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"},{"origin": "LAX","destination": "LAS","departureDate": "2026-10-18"}]}
Set cabin class, passengers, and currency
Prices cover all passengers and use the selected currency. This example requests business class for two adults, one child, and one infant on a lap, priced in euros.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"}],"cabinClass": "business","adults": 2,"children": 1,"infantsOnLap": 1,"currency": "EUR"}
country defaults to US; language defaults to en-US. They apply to flight,
calendar, destination, and booking results. Country values use two letters;
UK is normalized to GB. The country setting does not change the proxy country.
Filter and sort flights
Stops, price, duration, and airlines
airlines accepts carrier codes and the alliance names ONEWORLD,
STAR_ALLIANCE, and SKYTEAM. For round trips and multi-city journeys, the
stop, duration, and airline limits apply to every leg. The price limit applies
to the complete itinerary.
{"searches": [{"origin": "SFO","destination": "JFK","departureDate": "2026-10-15","returnDate": "2026-10-22"}],"maxStops": "1","maxPrice": 600,"maxDuration": 480,"airlines": ["AA", "ONEWORLD"]}
Local departure and arrival times
Give each bound as a whole hour or as HH:MM. A whole-hour latest time includes
the complete hour, so 18 includes departures through 18:59. When the
earliest time is later than the latest time, the range crosses midnight: 22
through 6 means 22:00–23:59 or 00:00–06:59. Times use the local clock
of each airport.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"}],"departureTimeEarliest": "06:30","departureTimeLatest": "12","arrivalTimeEarliest": "8","arrivalTimeLatest": "14:00"}
This overnight example keeps departures from 22:00 through 06:59:
{"searches": [{"origin": "SFO","destination": "JFK","departureDate": "2026-10-15"}],"departureTimeEarliest": "22","departureTimeLatest": "6"}
Sort order and more results
best keeps Google's order. cheapest sorts quoted fares from low to high and
puts schedules without a quoted fare last. fastest uses the complete itinerary
duration. showAllResults asks Google for more flight choices before the filters
run, which helps narrow filters return enough rows.
maxResults limits flight rows after filtering and sorting, before booking
lookups. The limit applies separately to each route, or once to a complete
multi-city journey. A round-trip row counts as one complete journey. Calendar
and destination records do not count. Omit the setting or use null to keep all
returned flight rows.
Use maxBookingDetails to limit booking lookups within the retained flight
rows. See Add booking choices.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"}],"sortBy": "fastest","showAllResults": true,"maxResults": 10}
Compare travel dates
Set includeCalendarPrices and choose the mode that matches the date question.
Calendar prices use the same stop, price, duration, airline, passenger, cabin,
and time settings as the route.
Airport groups also apply to Calendar. maxResults does not reduce the
calendar date window. Calendar prices stay on the first retained flight of
each route.
| Mode | Date window | Default size |
|---|---|---|
graph | A forward series of departure dates that starts on the requested date. | 61 dates |
grid | A window centered on the requested departure date. | 7 dates |
picker | A forward series of departure and return pairs that keep the supplied stay length. | 61 pairs |
calendarDays sets the number of dates or pairs. The Actor truncates decimals,
limits the value to 1 through 90, and makes a Grid window odd.
Graph, for a forward view of one-way prices:
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"}],"includeCalendarPrices": true,"calendarMode": "graph","calendarDays": 14}
Grid, for a few days on each side of the requested date:
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"}],"includeCalendarPrices": true,"calendarMode": "grid","calendarDays": 7}
Picker, for round trips with a fixed stay length. It needs a returnDate.
Without one, the Actor warns and keeps the flight rows.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15","returnDate": "2026-10-18"}],"includeCalendarPrices": true,"calendarMode": "picker","calendarDays": 5}
Find destinations
Set exploreOrigin to find priced destinations for a flexible month and stay
length. tripDuration accepts weekend for 1–4 days, 1-week for 6–9 days,
and 2-weeks for 13–16 days. exploreMonth accepts next-6-months or a
calendar month name. Use an empty searches list for an Explore-only run.
{"searches": [],"exploreOrigin": "SFO","tripDuration": "weekend","exploreMonth": "november","adults": 2}
When searches also contains routes, the Actor runs both and saves the
destination rows first. maxResults limits only the flight rows.
maxBookingDetails does not apply to Explore. Neither setting limits the
number of destination rows:
{"exploreOrigin": "SFO","tripDuration": "1-week","exploreMonth": "next-6-months","searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"}],"maxResults": 1}
Add booking choices
Set includeBookingDetails to request provider prices, booking forms, and
baggage-policy links for flights with a booking token. Use maxResults to
limit the flight rows, then maxBookingDetails to limit booking lookups within
those rows.
The booking limit applies separately to each route, or once to a complete
multi-city journey. A round trip uses one limit for the complete journey.
Failed lookups count towards the limit. Zero disables lookups; omission or
null allows a lookup for every retained flight with a booking token. Flights
outside the booking limit stay in the output with bookingDetails: null.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15","returnDate": "2026-10-18"}],"maxStops": "0","airlines": ["UA"],"includeBookingDetails": true,"maxResults": 10,"maxBookingDetails": 3}
Connection settings
Apify Proxy is enabled by default and no proxy group is selected. Keep Apify Proxy enabled. Without it, most searches return no results.
{"searches": [{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15"}],"proxyConfiguration": {"useApifyProxy": true}}
Input
| Field | Type | Default | Description |
|---|---|---|---|
flightUrl | string | Import a supported HTTPS Google Flights airport search; replaces searches and tripType; explicit travel settings override URL values | |
searches | object[] | Up to 20 routes with origin, destination, departureDate, and optional returnDate; endpoints accept one code, a comma-separated list, or an array; omission uses a sample SFO to LAX route, while [] requests no route work | |
tripType | string | one-way, round-trip, or multi-city; independent routes are inferred from their dates, while multi-city treats the list as one ordered journey | |
exploreOrigin | string | Three-letter IATA airport code for a destination search | |
tripDuration | string | 1-week | weekend means 1–4 days, 1-week means 6–9 days, and 2-weeks means 13–16 days |
exploreMonth | string | next-6-months | next-6-months, january, february, march, april, may, june, july, august, september, october, november, or december |
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 on an adult's lap, from 0 to 9 |
infantsInSeat | integer | 0 | Infants in their own seat, from 0 to 9 |
currency | string | USD | Three-letter price currency; values are trimmed and changed to uppercase, malformed values use USD, and currency also applies to Explore-only runs |
country | string | US | Two-letter country code for search settings; trimmed and uppercased; UK becomes GB; does not change the proxy country |
language | string | en-US | Result language, such as sv or en-GB; valid tags are normalized |
maxStops | string | 0 for nonstop, 1 for up to one stop, or 2 for up to two stops | |
maxPrice | number | Positive whole-number maximum for the total itinerary price in the selected currency | |
maxDuration | number | Positive whole-number maximum for each flight leg, in minutes | |
airlines | string[] | Airline codes or alliance names; values are trimmed and changed to uppercase | |
departureTimeEarliest | string | Earliest local departure as an hour or HH:MM | |
departureTimeLatest | string | Latest local departure as an hour or HH:MM | |
arrivalTimeEarliest | string | Earliest local arrival as an hour or HH:MM | |
arrivalTimeLatest | string | Latest local arrival as an hour or HH:MM | |
sortBy | string | best | best, cheapest, fastest, departure-time, or arrival-time |
showAllResults | boolean | false | Request more flight choices before filters are applied |
maxResults | integer | Positive flight-row limit for each route or complete journey, applied after filtering and sorting; omission or null keeps all rows | |
maxBookingDetails | integer | Booking lookup limit for each route or complete journey; zero disables lookups; omission or null keeps all eligible lookups | |
includeCalendarPrices | boolean | false | Add flexible-date prices to the first flight, or write a Calendar record when no flight matches |
calendarMode | string | graph | graph for a forward one-way window, grid for a centered window, or picker for departure and return pairs |
calendarDays | number | Number of dates or date pairs; the Actor truncates and limits it to 1 through 90, and makes a Grid window odd | |
includeBookingDetails | boolean | false | Add provider choices, booking forms, and baggage-policy links when a flight has a booking token |
proxyConfiguration | object | {"useApifyProxy":true} | Connection settings passed to Apify; the default selects no proxy group |
Input behavior
- Routes use three-letter IATA codes or groups of those codes, and real
YYYY-MM-DDdates. Codes are trimmed, changed to uppercase, and deduplicated. - Submitting
{}runs a sample SFO to LAX search for the first day of the next month. Submitting{"searches": []}withoutexploreOriginrequests no work and finishes without output. - Each independent route is a round trip when it has a
returnDateand one-way otherwise. An explicittripTypeofone-wayorround-tripdoes not override the dates. - Independent routes beyond the first 20 are dropped with a warning. A multi-city journey is one unit: one invalid leg, or more than 20 legs, skips the whole journey. Multi-city legs ignore
returnDate. - Invalid optional search settings warn and use safe defaults. Invalid URLs and active result or booking limits stop the run. Passenger counts outside their ranges are rejected by the input form.
maxPriceandmaxDurationmust be positive whole numbers. Decimal, zero, and negative values are ignored with a warning.- Blank or non-string
airlinesentries are ignored with a warning. Alliance names areONEWORLD,STAR_ALLIANCE, andSKYTEAM. - The Actor accepts equal origin and destination codes and does not apply a combined passenger limit or compare lap infants with adults. Google can return no inventory for these combinations.
- The Actor requests prices in the selected currency and does not convert them. The amount or currency offered at checkout can differ by provider.
- For round trips and multi-city trips, stop, duration, airline, departure-time, and arrival-time filters apply to every leg. Price and fastest sorting use the complete itinerary. Departure and arrival sorting use the alternatives for the final leg.
- Flight time filters use exact minutes. Calendar time bounds use whole hours, so a boundary can include more prices from that hour.
- Search, Explore, Calendar, and booking settings are accepted when their operation is not active and are then ignored. Unknown top-level fields are ignored.
- In
proxyConfiguration, emptyapifyProxyGroupsorproxyUrlslists are treated as unset. Anullvalue turns the proxy off.
Other canonical three-letter currency codes are also accepted. Google decides whether it can return a price in the requested currency.
The next valid example covers every input field. It runs both Explore and a round-trip route.
Output
Each Dataset item is one of four records. Flight rows contain outbound.
Destination rows contain destinationId. Standalone Calendar rows have
recordType: "calendar". Records that hold only Google's original result data
have recordType: "google-response". When an input contains Explore and route work, Explore results are saved before flight results. Independent routes follow input order.
The Actor output schema gives links to the Dataset and key-value store. It does not check the fields inside Dataset items. Use the field references below, and allow optional or additional fields when Google changes its results.
The examples in this section are real Dataset items from runs of this Actor on
2026-09-03. Prices and schedules change. Booking tokens and form values are
shortened, and googleResponses is omitted.
Flight example
This record came from a successful live run of the one-way search above with
includeCalendarPrices and a 14-day Graph window, so calendarPrices is
filled. Without Calendar the field is null.
{"origin": "SFO","destination": "LAX","departureDate": "2026-10-15","returnDate": null,"tripType": "one-way","cabinClass": "economy","price": 41,"currency": "USD","pricePerPassenger": null,"totalDuration": 97,"stops": 0,"airlines": ["Frontier"],"airlineCodes": ["F9"],"outbound": {"duration": 97,"stops": 0,"segments": [{"airline": "Frontier","airlineCode": "F9","flightNumber": "F93308","aircraft": "Airbus A320neo","departureAirport": "SFO","arrivalAirport": "LAX","departureTime": "2026-10-15T08:58:00-07:00","arrivalTime": "2026-10-15T10:35:00-07:00","duration": 97,"layover": null}]},"return": null,"co2Emissions": 59725,"co2EmissionsLabel": null,"bookingToken": "CjRIZHdQSTBRMDQy…","fareClass": null,"bookingDetails": null,"calendarPrices": [{"date": "2026-10-15","price": 41},{"date": "2026-10-16","price": 41},{"date": "2026-10-17","price": 41},{"date": "2026-10-18","price": 84},{"date": "2026-10-19","price": 41},{"date": "2026-10-20","price": 19},{"date": "2026-10-21","price": 19},{"date": "2026-10-22","price": 59},{"date": "2026-10-23","price": 41},{"date": "2026-10-24","price": 19},{"date": "2026-10-25","price": 84},{"date": "2026-10-26","price": 41},{"date": "2026-10-27","price": 19},{"date": "2026-10-28","price": 41}]}
Durations and layovers are in minutes. co2Emissions is in grams. Departure
and arrival timestamps use the local airport time with the exact UTC offset for
that flight date. price is null when Google returns a schedule without a
quoted fare. The Actor keeps Google's bookingToken unchanged.
The reserved fields pricePerPassenger, co2EmissionsLabel, and fareClass
are currently always null.
Google can show the same flight more than once. Flight rows keep the first
row for each booking token, in Google's order. Without a token, the Actor uses
the fare, currency, flight numbers, airports, and times to find repeated rows.
Distinct tokens or distinct fares remain separate rows. googleResponses keeps
all repeated values.
Round-trip example
Round-trip and multi-city results also contain legs. outbound is the first
leg. return is the second leg for round trips and null otherwise.
totalDuration and stops summarize all legs. This record came from the
round-trip search above.
Multi-city example
This record came from the two-leg multi-city search above. origin is the
first departure airport and destination is the last arrival airport.
Flight field reference
| Object | Field types |
|---|---|
| Flight strings | origin, destination, departureDate, tripType, cabinClass, and currency: string; returnDate, co2EmissionsLabel, bookingToken, and fareClass: string or null |
| Flight numbers | totalDuration and stops: number; price, pricePerPassenger, and co2Emissions: number or null |
| Flight arrays | airlines and airlineCodes: string[]; optional legs: Leg[]; calendarPrices: Calendar price[] or null; optional googleResponses: Response[] |
| Flight objects | outbound: Leg; return: Leg or null; bookingDetails: object or null |
| Leg | duration and stops: number; segments: Segment[] |
| Segment | airline, airlineCode, flightNumber, departureAirport, arrivalAirport, departureTime, and arrivalTime: string; aircraft: string or null; duration: number; layover: Layover or null |
| Layover | airport: string; duration: number |
| Calendar price | date: string; optional returnDate: string; price: number |
Calendar prices
calendarPrices is added to the first retained flight of each route, including when maxResults limits the flight rows. Calendar prices are in date order. Picker results with the same departure date use return-date order. The array is [] when the check completed without matching prices. It is null when Calendar was not requested or could not be checked.
A Grid window of 7 days centered on 2026-10-15:
[{"date": "2026-10-12","price": 41},{"date": "2026-10-13","price": 19},{"date": "2026-10-14","price": 19},{"date": "2026-10-15","price": 41},{"date": "2026-10-16","price": 41},{"date": "2026-10-17","price": 41},{"date": "2026-10-18","price": 84}]
Five Picker pairs with a three-night stay:
[{"date": "2026-10-15","returnDate": "2026-10-18","price": 237},{"date": "2026-10-16","returnDate": "2026-10-19","price": 204},{"date": "2026-10-17","returnDate": "2026-10-20","price": 187},{"date": "2026-10-18","returnDate": "2026-10-21","price": 237},{"date": "2026-10-19","returnDate": "2026-10-22","price": 187}]
When Calendar work completes but no flight row is available, the Actor writes a
standalone Calendar record instead. This one came from a run with maxPrice: 5,
so no flight and no calendar date matched:
{"recordType": "calendar","origin": "SFO","destination": "LAX","departureDate": "2026-10-15","returnDate": null,"tripType": "one-way","cabinClass": "economy","adults": 1,"children": 0,"infantsOnLap": 0,"infantsInSeat": 0,"calendarMode": "graph","calendarDays": 7,"currency": "USD","calendarPrices": []}
| Field | JSON type |
|---|---|
recordType | string; always "calendar" |
origin, destination, departureDate, tripType, cabinClass, calendarMode, currency | string |
returnDate | string or null |
adults, children, infantsOnLap, infantsInSeat, calendarDays | number |
calendarPrices | Calendar price[] |
googleResponses | optional Response[] |
Booking details
When a booking lookup returns data, the Actor adds it to bookingDetails.
This example came from a live booking search. The run returned five booking
options for this flight; two are shown, and the long form value is shortened.
| Object | Field types |
|---|---|
bookingDetails | baggageAllowance: object or null; fareRules: string[]; bookingLinks: Booking link[]; bookingOptions: Booking option[]; baggagePolicies: Baggage policy[]; googleFlightsUrl: string or null |
baggageAllowance | carryOn and checked: string or null |
| Booking link | airline and url: string |
| Booking option | providerCode, displayUrl: string or null; provider, currency: string; isAirlineDirect: boolean or null; flightNumbers: string[]; price: number or null; bookingForm: object or null |
bookingForm | action: string; fields: object whose values are strings. Submit all supplied fields to the action together. |
| Baggage policy | airlineCode, airline, and url: string |
displayUrl is the provider text shown by Google and may not be a navigable
link. Use bookingForm to reach the provider. bookingDetails stays null
when details were not requested, the flight has no booking token, the booking
limit prevents a lookup, or booking data is unavailable. bookingOptions,
fareRules, bookingLinks, and baggagePolicies can be empty.
Explore destinations
Each destination is one Dataset row. These two rows came from the Explore-only
search above, with weekend stays in November.
[{"destinationId": "/m/030qb3t","city": "Los Angeles","country": "United States","airport": "LAX","departureDate": "2026-11-05","returnDate": "2026-11-09","price": 65,"cheapestPrice": null,"currency": "USD","airline": "Frontier","airlineCode": "F9","stops": 0,"duration": 92},{"destinationId": "/m/071vr","city": "San Diego","country": "United States","airport": "SAN","departureDate": "2026-11-07","returnDate": "2026-11-09","price": 78,"cheapestPrice": null,"currency": "USD","airline": "Frontier","airlineCode": "F9","stops": 1,"duration": 101}]
| Field | JSON type |
|---|---|
destinationId, city, country, airport, currency | string |
departureDate, returnDate, airline, airlineCode | string or null |
price, cheapestPrice, stops, duration | number or null |
googleResponses | optional Response[] |
price is the itinerary quote. cheapestPrice is an optional comparison value
and can be higher or lower. Results with an itinerary quote come before
comparison-only results, and each group is sorted by its own price. At least one
price field has a value. Airline, stops, and duration can be null. A region
result can have an empty airport. airlineCode can be "multi" when an
itinerary uses more than one airline.
Google response fields
The Actor keeps Google's original result data in googleResponses. The first
matching row of each operation carries the array. Booking data stays with its
flight, so the usual number of Dataset rows does not change. If no row can carry
the data, including when every result is filtered out, the Actor writes one
recordType: "google-response" record.
rawResponse is Google's original data, unchanged. It keeps the original order,
repeated values, null values, and fields that the Actor does not use.
requestContext contains only public route identifiers such as origin,
destination, dates, journey stage, or Calendar variant. It never contains
booking tokens.
This record came from a run whose only route returned no itineraries.
rawResponse is shortened, and responseBlocks, method, and transport are
left out.
| Object | Field types |
|---|---|
| Response record | recordType: string, always "google-response"; googleResponses: Response[] |
| Response identity | operation: search, journey, booking, calendar, or explore; method and transport: internal string labels; status: number; contentType: string or null |
| Response body | optional rawResponse: string; optional rawResponseKey: string; optional rawResponseKeys: string[]; optional rawResponseBytes: number; responseBlocks: JSON array[] or null |
normalization | object with status: normalized or unavailable; an unavailable value also has reason: no-response-blocks, decoder-rejected, or decoder-error |
requestContext | optional object. origin, destination, departureDate, tripType, calendarMode, tripDuration, exploreMonth, and itinerarySignature are optional strings. returnDate is an optional string or null. stage, requestIndex, and variant are optional numbers. |
The Actor keeps at most 1 MB of rawResponse text inline across the Dataset.
Later values are stored exactly in the run's default key-value store under
GOOGLE_RESPONSE_ keys, so a value smaller than 1 MB can still be externalized
after the 1 MB limit is used. One value uses rawResponseKey. A value too large
for one key-value store record is split on UTF-8 boundaries and uses the ordered
rawResponseKeys array. Join split values in array order. rawResponseBytes
is the UTF-8 byte count, and each key includes the SHA-256 digest of the
complete value. An externalized value omits inline rawResponse and sets
responseBlocks to null. The key-value store also holds control records such
as INPUT.
Limits and failure handling
- The Actor processes at most 20 independent routes or 20 multi-city legs. It skips invalid independent entries and keeps valid siblings. A multi-city list is one unit, so one invalid leg skips that journey.
- The Actor skips routes with past departures. It also skips an independent route if its return date is before departure. Each skip has a warning that names the route. An explicit no-op or a batch with only skipped routes can finish with an empty Dataset.
- An invalid
flightUrl, including invalid date combinations, stops the run with an input error. InvalidmaxResultsormaxBookingDetailsvalues also stop the run when route searches are active. - Round-trip and multi-city output contains one complete set of earlier legs plus alternatives for the final leg. It does not contain every possible leg combination.
- If a centered Grid window starts in the past, the Calendar lookup fails with a warning. Available flight rows are kept.
showAllResults, Calendar enrichment, and booking details can increase run time. Booking lookups apply only to retained flights with a booking token, up tomaxBookingDetailsfor each route or complete journey.maxResultslimits retained flight rows after Search completes. It does not reduce the initial Search work or the Calendar window. Overnight Calendar ranges can also take longer, especially Picker with both departure and arrival ranges crossing midnight.- A failed route does not remove results already saved. If another Search or Explore operation completes, the run succeeds with a warning. An operation can complete with no matching results. If any Search or Explore operation fails and none completes, the run fails.
- Calendar, booking, and cleanup failures warn and keep the available flight rows. A completed Search or Explore operation can succeed with only a
google-responserecord when the Actor cannot produce normal results. - If a multi-city or round-trip journey fails after Google returns data, the Actor saves that data in a
google-responserecord before it reports the failure. Saving this data does not make the failed journey successful. - Dataset and key-value store write failures stop the run.
- Google can omit prices or optional details and can change its result fields. Allow for
null, missing, and additional fields.