# Google Flights Search Scraper (`solidcode/google-flights-scraper`) Actor

\[💰 $0.01 / 1K] Search Google Flights for one-way, round-trip, and multi-city itineraries. Filter by price, stops, and airlines, fetch direct airline/OTA booking links, and export clean structured JSON.

- **URL**: https://apify.com/solidcode/google-flights-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 50.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google Flights Search Scraper

Extract real-time flight prices, airlines, schedules, and routes from Google Flights at scale. Search one-way, round-trip, or complex multi-city itineraries with full control over passengers, filters, currency, and locale — and get clean, structured JSON every time.

### Why This Scraper?

- **Full trip-type coverage** — One-way, round-trip, and multi-city searches with 2+ legs all in a single actor
- **Multi-airport support** — Search across several origin or destination airports at once (e.g. `CDG,ORY` or `JFK,LGA,EWR`)
- **Rich flight details** — Price, airline, flight number, aircraft type, departure and arrival times, layovers, total duration, and stop count for every leg
- **Powerful filters** — Cap maximum price, restrict to specific airlines, limit stops (nonstop only, up to 1 stop, up to 2), and hide basic economy fares
- **29 languages × 39 countries × 20 currencies** — Pull results the way your target traveller sees them
- **Price insights included** — First-page results tell you whether the current price is low, typical, or high versus the historical average, plus the lowest price available
- **Airport directory** — Every referenced airport comes back with full name, city, and country — no extra lookups needed
- **Non-technical input** — Friendly labels and dropdowns for languages, countries, currencies, and stop limits; no need to remember Google's internal codes

### Use Cases

**Travel & Fare Monitoring**
- Track prices on specific routes over time to identify the best booking windows
- Monitor competitor fares for OTA and metasearch pricing strategies
- Build fare alert systems that notify users when prices drop

**Travel Agencies & OTAs**
- Compare airline offers across multiple routes and dates in seconds
- Populate search results for travel booking sites and mobile apps
- Feed live fare data into CRM systems for personalised customer offers

**Market Research & Analytics**
- Analyse price trends between city pairs, seasons, or airlines
- Study how fares shift across currencies, booking country, or trip type
- Benchmark basic economy vs. main cabin pricing across carriers

**Corporate Travel & Expense Management**
- Audit booked fares against live market prices for policy compliance
- Surface cheaper alternatives for frequent business routes
- Build internal dashboards comparing travel spend to real-time market rates

**Product Development & Data Enrichment**
- Enrich itinerary databases with live pricing, durations, and layover details
- Power route-planning tools with accurate multi-city trip data
- Feed ML models with structured historical fare and availability signals

### Getting Started

#### Simple One-Way Search

The minimum input — origin, destination, and a date:

```json
{
    "departureAirports": "LAX",
    "arrivalAirports": "JFK",
    "outboundDate": "2026-08-15"
}
````

#### Round-Trip with Passengers

Add a return date to run a round-trip search:

```json
{
    "departureAirports": "SFO",
    "arrivalAirports": "SEA",
    "outboundDate": "2026-09-10",
    "returnDate": "2026-09-17",
    "adults": 2,
    "children": 1
}
```

#### Filtered Search

Cap price, limit stops, and restrict to specific airlines:

```json
{
    "departureAirports": "LHR",
    "arrivalAirports": "JFK,EWR",
    "outboundDate": "2026-10-05",
    "returnDate": "2026-10-19",
    "maxPrice": 800,
    "maxStops": "0",
    "airlines": "BA,AA,VS",
    "excludeBasicEconomy": true,
    "currency": "GBP",
    "country": "uk",
    "language": "en"
}
```

#### Multi-City Itinerary

Build a custom multi-leg trip by listing each leg:

```json
{
    "multiCityLegs": [
        { "departureAirports": "LAX", "arrivalAirports": "JFK", "date": "2026-07-10" },
        { "departureAirports": "JFK", "arrivalAirports": "MIA", "date": "2026-07-15" },
        { "departureAirports": "MIA", "arrivalAirports": "LAX", "date": "2026-07-22" }
    ],
    "adults": 1,
    "currency": "USD"
}
```

When `multiCityLegs` is provided, the simple route fields above are ignored.

### Input Reference

#### Route

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `departureAirports` | string | | IATA airport codes to depart from, comma-separated (e.g. `LAX` or `CDG,ORY`) |
| `arrivalAirports` | string | | IATA airport codes to arrive at, comma-separated (e.g. `JFK` or `LAX,SEA`) |
| `outboundDate` | string | | Departure date in `YYYY-MM-DD` format. Required for one-way and round-trip |
| `returnDate` | string | | Return date in `YYYY-MM-DD`. Set this for a round-trip; leave empty for one-way |
| `multiCityLegs` | array | `[]` | Multi-city itinerary legs. Each leg has `departureAirports`, `arrivalAirports`, and `date`. Overrides the simple route fields when set |

#### Passengers

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `adults` | integer | `1` | Adult passengers (age 12+). Minimum 1 |
| `children` | integer | `0` | Child passengers (ages 2–11) |
| `infants` | integer | `0` | Infant passengers (under 2) |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxPrice` | integer | | Only return flights at or below this price, in the chosen currency |
| `maxStops` | string | | `"0"` = direct only, `"1"` = up to 1 stop, `"2"` = up to 2 stops |
| `airlines` | string | | Preferred airline IATA codes, comma-separated (e.g. `UA,AA,DL`) |
| `excludeBasicEconomy` | boolean | `false` | Hide basic economy fares (no free carry-on or seat selection) |

#### Localization

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `currency` | string | `"USD"` | Currency for prices — 20 ISO 4217 codes supported (USD, EUR, GBP, CAD, AUD, JPY, CHF, INR, CNY, and more) |
| `language` | string | `"en"` | Result language — 29 options (English, Spanish, French, German, Chinese, Japanese, Arabic, Hindi, and more) |
| `country` | string | `"us"` | Country market Google searches from — 39 options. Affects available fares and airlines |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `fetchBookingOptions` | boolean | `false` | Include direct booking links with fare family and baggage details. One-way searches only. Each resolved link is billed separately |
| `maxPages` | integer | `1` | How many times to run the same search. Google returns all matches in one call, so leave at 1 unless you specifically want duplicate pages |

### Output

Each dataset item represents one page of results. Here's a trimmed example:

```json
{
    "search_parameters": {
        "tripType": "one-way",
        "legs": [
            { "departureAirports": ["LAX"], "arrivalAirports": ["JFK"], "date": "2026-08-15" }
        ],
        "passengers": { "adults": 1, "children": 0, "infants": 0 },
        "language": "en",
        "country": "us",
        "currency": "USD"
    },
    "search_metadata": {
        "total_flights_found": 25,
        "best_flights_count": 3,
        "other_flights_count": 22,
        "pages_processed": 1,
        "booking_options_count": 0
    },
    "search_timestamp": "2026-04-20T22:15:00+00:00",
    "page_number": 1,
    "best_flights": [
        {
            "price": 174,
            "airline": "B6",
            "airlineName": "JetBlue",
            "departureAirport": "LAX",
            "arrivalAirport": "JFK",
            "departureDate": "2026-08-15",
            "departureTime": "20:50",
            "arrivalDate": "2026-08-16",
            "arrivalTime": "05:25",
            "durationMinutes": 335,
            "stops": 0,
            "flightId": "OriFxc",
            "legs": [
                {
                    "airline": "B6",
                    "airlineName": "JetBlue",
                    "flightNumber": "424",
                    "aircraft": "Airbus A321",
                    "departureAirport": "LAX",
                    "arrivalAirport": "JFK",
                    "departureDate": "2026-08-15",
                    "departureTime": "20:50",
                    "arrivalDate": "2026-08-16",
                    "arrivalTime": "05:25",
                    "durationMinutes": 335
                }
            ],
            "bookingToken": "CjRIMXV1M21..."
        }
    ],
    "other_flights": [ "..." ],
    "price_insights": {
        "priceLevel": "high",
        "lowestPrice": 174,
        "typicalPrice": 139,
        "typicalPriceRange": [125, 190]
    },
    "airports": [
        { "code": "LAX", "name": "Los Angeles International Airport", "city": "Los Angeles", "country": "US" },
        { "code": "JFK", "name": "John F. Kennedy International Airport", "city": "New York", "country": "US" }
    ]
}
```

#### All Available Fields

**Top-level**

| Field | Type | Description |
|-------|------|-------------|
| `search_parameters` | object | Echo of the resolved search — trip type, routes, dates, passengers, language, country, currency |
| `search_metadata` | object | Aggregate stats — total flights found, best/other counts, pages processed, booking options count |
| `search_timestamp` | string | ISO-8601 timestamp of when this page was fetched |
| `page_number` | integer | 1-indexed page number |
| `best_flights` | object\[] | Google's top-recommended flights for this search |
| `other_flights` | object\[] | Additional flight options beyond the best picks |
| `price_insights` | object | First page only — tells you whether the current price is low, typical, or high versus history |
| `airports` | object\[] | First page only — full details for every airport referenced in the results |
| `booking_options` | object\[] | Populated only when `fetchBookingOptions=true` on a one-way search |

**Flight object**

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Total price in the chosen currency |
| `airline` | string | Primary airline IATA code |
| `airlineName` | string | Full airline name |
| `departureAirport` | string | IATA code of the origin airport |
| `arrivalAirport` | string | IATA code of the final destination |
| `departureDate` | string | `YYYY-MM-DD` |
| `departureTime` | string | 24-hour local time (`HH:MM`) |
| `arrivalDate` | string | `YYYY-MM-DD` |
| `arrivalTime` | string | 24-hour local time (`HH:MM`) |
| `durationMinutes` | number | Total trip duration in minutes (including layovers) |
| `stops` | number | Number of stops (0 = nonstop) |
| `flightId` | string | Unique identifier for this flight option |
| `legs` | object\[] | Per-segment details (airline, flight number, aircraft, times, airports) |
| `bookingToken` | string | Token you can feed back into `fetchBookingOptions` to resolve direct booking links |

**Price insights**

| Field | Type | Description |
|-------|------|-------------|
| `priceLevel` | string | `"low"`, `"typical"`, or `"high"` compared to historical fares |
| `lowestPrice` | number | Lowest price currently available |
| `typicalPrice` | number | Typical price for this route at this time of year |
| `typicalPriceRange` | number\[] | `[min, max]` typical price band |

**Airport**

| Field | Type | Description |
|-------|------|-------------|
| `code` | string | IATA code (e.g. `LAX`) |
| `name` | string | Full airport name |
| `city` | string | City name |
| `country` | string | Country code |

### Tips for Best Results

- **Use future dates within the next 12 months** — Google Flights rarely returns results for dates more than a year out
- **Match currency and country to your use case** — a search with `country="uk"` and `currency="GBP"` shows fares and airlines as a UK traveller would see them, which can differ significantly from the US view
- **Leverage multi-airport search** — `JFK,LGA,EWR` as a single origin often surfaces cheaper or more convenient options than any single airport alone
- **Start with `maxStops="0"` for premium routes** — nonstop filters cut noise on busy business routes and reveal only the most attractive fares
- **Leave `maxPages` at 1** — Google returns every matching flight in a single response; setting it higher just re-runs the same query
- **Combine `airlines` with `excludeBasicEconomy`** — perfect for corporate travel auditing or loyalty-program-aware fare monitoring

### Pricing

**$0.01 per 1,000 results** — one of the lowest prices on Apify for live flight data.

| Results | Cost |
|---------|------|
| 1,000 | $0.01 |
| 10,000 | $0.10 |
| 100,000 | $1.00 |
| 1,000,000 | $10.00 |

One page typically contains 10–60 flight options across the `best_flights` and `other_flights` arrays, so a single page is usually a complete search for a given route and date. Platform fees (compute, proxy, storage) depend on your Apify plan.

When `fetchBookingOptions=true` is enabled on a one-way search, each resolved booking link is billed separately — a typical search produces 80–120 options.

### Integrations

Export results in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Custom API integrations
- **Apify API** — Full programmatic access to runs and datasets

### Legal & Ethical Use

This actor is designed for legitimate fare monitoring, travel research, pricing analysis, and data enrichment. Users are responsible for complying with applicable laws and Google's Terms of Service. The data returned is publicly available flight pricing — do not use it for spam, resale-as-inventory, or any deceptive purpose.

# Actor input Schema

## `departureAirports` (type: `string`):

IATA airport codes to depart from, comma-separated (e.g. 'LAX' or 'CDG,ORY'). Leave empty if you're using multi-city legs below.

## `arrivalAirports` (type: `string`):

IATA airport codes to arrive at, comma-separated (e.g. 'JFK' or 'LAX,SEA'). Leave empty if you're using multi-city legs below.

## `outboundDate` (type: `string`):

Departure date in YYYY-MM-DD format (e.g. 2026-06-15). Required for one-way and round-trip searches.

## `returnDate` (type: `string`):

Return date in YYYY-MM-DD format. Set this to run a round-trip search. Leave empty for one-way.

## `multiCityLegs` (type: `array`):

For multi-city itineraries, list each leg. Each leg is an object with 'departureAirports', 'arrivalAirports' (comma-separated IATA codes), and 'date' (YYYY-MM-DD). When this is non-empty, the simple route fields above are ignored.

## `adults` (type: `integer`):

Number of adult passengers (age 12+). Minimum 1.

## `children` (type: `integer`):

Number of child passengers (ages 2–11).

## `infants` (type: `integer`):

Number of infant passengers (under 2).

## `maxPrice` (type: `integer`):

Only return flights at or below this price, in the chosen currency. Leave empty for no limit.

## `maxStops` (type: `string`):

Limit how many stops a flight can have. Leave empty for no limit.

## `airlines` (type: `string`):

Limit results to these airlines. Provide IATA airline codes, comma-separated (e.g. 'UA,AA,DL'). Leave empty to include all airlines.

## `excludeBasicEconomy` (type: `boolean`):

Hide basic economy fares (fares without free carry-on or seat selection).

## `currency` (type: `string`):

Currency used for prices (ISO 4217 code).

## `language` (type: `string`):

Language for the returned results.

## `country` (type: `string`):

Country market Google should search from — affects available fares and airlines.

## `fetchBookingOptions` (type: `boolean`):

When enabled, include direct booking links from each airline and travel agency, plus fare details and baggage info, for every flight returned. Only works for one-way searches (round-trip and multi-city will return an empty booking list). Each resolved booking link is billed separately — a typical one-way search produces 80–120 links, so costs can rise quickly.

## `maxPages` (type: `integer`):

How many times to run the same search. Google returns every matching flight in one go (typically 10–60 results), so leave this at 1 for normal use. Higher values re-run the same search and add another set of results to your dataset.

## Actor input object example

```json
{
  "multiCityLegs": [],
  "adults": 1,
  "children": 0,
  "infants": 0,
  "excludeBasicEconomy": false,
  "currency": "USD",
  "language": "en",
  "country": "us",
  "fetchBookingOptions": false,
  "maxPages": 1
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of pages with key search parameters and result counts.

## `flights` (type: `string`):

Expanded view of the best flights from each page.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "multiCityLegs": [],
    "adults": 1,
    "children": 0,
    "infants": 0,
    "excludeBasicEconomy": false,
    "currency": "USD",
    "language": "en",
    "country": "us",
    "fetchBookingOptions": false,
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/google-flights-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "multiCityLegs": [],
    "adults": 1,
    "children": 0,
    "infants": 0,
    "excludeBasicEconomy": False,
    "currency": "USD",
    "language": "en",
    "country": "us",
    "fetchBookingOptions": False,
    "maxPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/google-flights-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "multiCityLegs": [],
  "adults": 1,
  "children": 0,
  "infants": 0,
  "excludeBasicEconomy": false,
  "currency": "USD",
  "language": "en",
  "country": "us",
  "fetchBookingOptions": false,
  "maxPages": 1
}' |
apify call solidcode/google-flights-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/google-flights-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Flights Search Scraper",
        "description": "[💰 $0.01 / 1K] Search Google Flights for one-way, round-trip, and multi-city itineraries. Filter by price, stops, and airlines, fetch direct airline/OTA booking links, and export clean structured JSON.",
        "version": "1.0",
        "x-build-id": "S7EBBBWiEctuQnvZH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~google-flights-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-google-flights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~google-flights-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-google-flights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~google-flights-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-google-flights-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "departureAirports": {
                        "title": "Departure Airports",
                        "type": "string",
                        "description": "IATA airport codes to depart from, comma-separated (e.g. 'LAX' or 'CDG,ORY'). Leave empty if you're using multi-city legs below."
                    },
                    "arrivalAirports": {
                        "title": "Arrival Airports",
                        "type": "string",
                        "description": "IATA airport codes to arrive at, comma-separated (e.g. 'JFK' or 'LAX,SEA'). Leave empty if you're using multi-city legs below."
                    },
                    "outboundDate": {
                        "title": "Outbound Date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Departure date in YYYY-MM-DD format (e.g. 2026-06-15). Required for one-way and round-trip searches."
                    },
                    "returnDate": {
                        "title": "Return Date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Return date in YYYY-MM-DD format. Set this to run a round-trip search. Leave empty for one-way."
                    },
                    "multiCityLegs": {
                        "title": "Multi-City Legs",
                        "type": "array",
                        "description": "For multi-city itineraries, list each leg. Each leg is an object with 'departureAirports', 'arrivalAirports' (comma-separated IATA codes), and 'date' (YYYY-MM-DD). When this is non-empty, the simple route fields above are ignored."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Number of adult passengers (age 12+). Minimum 1.",
                        "default": 1
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of child passengers (ages 2–11).",
                        "default": 0
                    },
                    "infants": {
                        "title": "Infants",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of infant passengers (under 2).",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return flights at or below this price, in the chosen currency. Leave empty for no limit."
                    },
                    "maxStops": {
                        "title": "Maximum Stops",
                        "enum": [
                            "0",
                            "1",
                            "2"
                        ],
                        "type": "string",
                        "description": "Limit how many stops a flight can have. Leave empty for no limit."
                    },
                    "airlines": {
                        "title": "Preferred Airlines",
                        "type": "string",
                        "description": "Limit results to these airlines. Provide IATA airline codes, comma-separated (e.g. 'UA,AA,DL'). Leave empty to include all airlines."
                    },
                    "excludeBasicEconomy": {
                        "title": "Exclude Basic Economy",
                        "type": "boolean",
                        "description": "Hide basic economy fares (fares without free carry-on or seat selection).",
                        "default": false
                    },
                    "currency": {
                        "title": "Currency",
                        "enum": [
                            "USD",
                            "EUR",
                            "GBP",
                            "CAD",
                            "AUD",
                            "JPY",
                            "CHF",
                            "SEK",
                            "NOK",
                            "DKK",
                            "PLN",
                            "BRL",
                            "MXN",
                            "INR",
                            "CNY",
                            "HKD",
                            "SGD",
                            "NZD",
                            "ZAR",
                            "AED"
                        ],
                        "type": "string",
                        "description": "Currency used for prices (ISO 4217 code).",
                        "default": "USD"
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "it",
                            "pt",
                            "ru",
                            "ja",
                            "ko",
                            "zh",
                            "ar",
                            "hi",
                            "tr",
                            "pl",
                            "nl",
                            "sv",
                            "da",
                            "no",
                            "fi",
                            "cs",
                            "hu",
                            "ro",
                            "el",
                            "th",
                            "vi",
                            "id",
                            "ms",
                            "he",
                            "uk"
                        ],
                        "type": "string",
                        "description": "Language for the returned results.",
                        "default": "en"
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "us",
                            "uk",
                            "ca",
                            "au",
                            "de",
                            "fr",
                            "es",
                            "it",
                            "nl",
                            "pl",
                            "br",
                            "ru",
                            "jp",
                            "kr",
                            "cn",
                            "tw",
                            "in",
                            "sa",
                            "tr",
                            "se",
                            "dk",
                            "no",
                            "fi",
                            "cz",
                            "hu",
                            "ro",
                            "mx",
                            "ar",
                            "ch",
                            "at",
                            "be",
                            "ie",
                            "nz",
                            "sg",
                            "my",
                            "th",
                            "ph",
                            "id",
                            "vn"
                        ],
                        "type": "string",
                        "description": "Country market Google should search from — affects available fares and airlines.",
                        "default": "us"
                    },
                    "fetchBookingOptions": {
                        "title": "Fetch Booking Options",
                        "type": "boolean",
                        "description": "When enabled, include direct booking links from each airline and travel agency, plus fare details and baggage info, for every flight returned. Only works for one-way searches (round-trip and multi-city will return an empty booking list). Each resolved booking link is billed separately — a typical one-way search produces 80–120 links, so costs can rise quickly.",
                        "default": false
                    },
                    "maxPages": {
                        "title": "Maximum Pages",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "How many times to run the same search. Google returns every matching flight in one go (typically 10–60 results), so leave this at 1 for normal use. Higher values re-run the same search and add another set of results to your dataset.",
                        "default": 1
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
