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

Extract public Google Flights prices, schedules, airlines, stops, and booking links for route/date fare monitoring.

- **URL**: https://apify.com/fetch\_cat/google-flights-scraper.md
- **Developed by:** [Hanna Nosova](https://apify.com/fetch_cat) (community)
- **Categories:** Travel
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 flight result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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 Scraper

Extract public Google Flights fare options, airline names, schedules, durations, stops, prices, and booking-page links for route and date searches.

### What does Google Flights Scraper do?

Google Flights Scraper turns a public Google Flights route search into structured dataset rows.

It accepts an origin, destination, departure date, currency, cabin class, passenger count, and result limit.

It builds a Google Flights route search and saves available flight option rows with price and schedule details.

Use it to monitor fares, compare routes, collect travel market data, or feed flight options into dashboards and workflows.

### Who is it for?

Travel agencies use it to check public fare availability for common customer routes.

Deal newsletter teams use it to collect candidate flight prices for editorial review.

Corporate travel teams use it to benchmark route costs before policy or budget planning.

Fare-monitoring tools use it to record snapshots over time.

Data analysts use it to compare routes, travel dates, airlines, and stop patterns.

Developers use it when they need structured Google Flights rows without manually copying browser results.

### Why use this scraper?

- ✈️ Search by airport code or city.
- 💵 Capture numeric prices plus the original price text.
- 🕒 Save departure time, arrival time, duration, and stops.
- 🧳 Include query metadata on every row for clean exports.
- 🌍 Choose currency for international comparisons.
- 🧩 Export to JSON, CSV, Excel, XML, API, webhook, or integrations.
- 🛡️ Uses Apify Residential Proxy by default for the supported Google Flights path.

### What Google Flights data can you extract?

| Field | Description |
| --- | --- |
| `queryOrigin` | Origin entered for the search. |
| `queryDestination` | Destination entered for the search. |
| `queryDepartureDate` | Departure date in YYYY-MM-DD format. |
| `queryReturnDate` | Optional return date from the input. |
| `tripType` | One-way or round-trip input mode. |
| `cabinClass` | Requested cabin class. |
| `adults`, `children`, `infantsInSeat`, `infantsOnLap` | Passenger counts used for the search. |
| `currency` | Requested currency code. |
| `resultRank` | Rank in the saved result list. |
| `legType` | `outbound` for one-way or `itinerary` for combined round-trip offers. |
| `airline` / `airlineCode` | Primary airline name and code for the flight option. |
| `isBest` | Whether Google marked the offer as a best flight. |
| `fareBrand` | Best-effort fare tier such as Economy, Economy+, or Economy Flex when present. |
| `flightSummary` | Normalized summary built from airline, times, duration, stops, and price. |
| `departureTime` / `arrivalTime` | Departure and arrival time. |
| `departureDate` / `arrivalDate` | Flight dates for the option. |
| `duration` / `durationMinutes` | Human-readable and numeric duration. |
| `stops` / `stopsCount` | Stop count or nonstop label. |
| `price` / `priceText` | Numeric price and formatted price text. |
| `carryOnIncluded` / `checkedBagsIncluded` | Amenity flags when available for the fare. |
| `segments` | Detailed flight segments with flight number, airports, airline, aircraft, and segment times. |
| `bookingLink` | Google Flights page URL for the completed search. |
| `scrapedAt` | ISO timestamp for the scrape. |

### How much does it cost to scrape Google Flights?

This actor uses pay-per-event pricing.

There is a small run start event.

Each saved flight result is charged as a result event.

The exact price is shown on the Apify actor page before you run it.

Keep the first run small, for example 5 to 10 results, while you confirm the route/date/currency settings.

### How to use Google Flights Scraper

1. Open the actor on Apify.

2. Enter an origin airport or city.

3. Enter a destination airport or city.

4. Choose a departure date.

5. Optionally add a return date.

6. Choose the cabin class, currency, passengers, sort order, and optional stop/basic-economy filters.

7. Keep `maxResults` low for the first test.

8. Keep the default Residential Proxy settings unless you have a specific region or proxy policy requirement.

9. Start the actor.

10. Download the dataset or consume it through the Apify API.

### Input example

```json
{
  "origin": "JFK",
  "destination": "LAX",
  "departureDate": "2026-08-10",
  "tripType": "one-way",
  "currency": "USD",
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
````

### Output example

```json
{
  "queryOrigin": "JFK",
  "queryDestination": "LAX",
  "queryDepartureDate": "2026-08-10",
  "tripType": "one-way",
  "cabinClass": "economy",
  "adults": 1,
  "currency": "USD",
  "resultRank": 1,
  "legType": "outbound",
  "airline": "JetBlue",
  "flightSummary": "JetBlue | 5 hr 48 min | JFK–LAX | Nonstop | $286 | 6:00 AM | – | 8:59 AM",
  "departureTime": "6:00 AM",
  "arrivalTime": "8:59 AM",
  "duration": "5 hr 48 min",
  "stops": "Nonstop",
  "price": 286,
  "priceText": "$286",
  "bookingLink": "https://www.google.com/travel/flights/search?...",
  "scrapedAt": "2026-06-27T17:02:08.244Z"
}
```

### Route input tips

Airport codes are the most reliable input format.

Use `JFK`, `LAX`, `SFO`, `ORD`, `MIA`, `LHR`, `CDG`, or another airport code when possible.

City names can work, but Google may choose a nearby airport or a city-level destination.

If precision matters, prefer IATA airport codes.

### Date and currency tips

Use dates in `YYYY-MM-DD` format.

Choose a future date with normal public availability.

Use common currency codes such as `USD`, `EUR`, or `GBP`.

Prices can change frequently, so treat every run as a snapshot.

### Proxy and reliability tips

Google properties may rate-limit automated traffic.

Use the default Apify Residential Proxy settings for the supported and QA-validated path.

If you see a consent, CAPTCHA, or unusual-traffic page, keep Residential Proxy enabled, try a different proxy country, and lower the result count.

Avoid large bursts of route/date searches.

For recurring monitoring, schedule smaller runs rather than one large run.

### Integrations

Send results to Google Sheets for manual fare review.

Push dataset rows into a BI warehouse for route trend dashboards.

Trigger a webhook when prices are collected.

Use Apify integrations to connect the dataset to Make, Zapier, Slack, or custom applications.

Combine output with your own route list to build internal fare-monitoring reports.

### API usage

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/google-flights-scraper').call({
  origin: 'JFK',
  destination: 'LAX',
  departureDate: '2026-08-10',
  currency: 'USD',
  maxResults: 10
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('fetch_cat/google-flights-scraper').call(run_input={
    'origin': 'JFK',
    'destination': 'LAX',
    'departureDate': '2026-08-10',
    'currency': 'USD',
    'maxResults': 10,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~google-flights-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"origin":"JFK","destination":"LAX","departureDate":"2026-08-10","currency":"USD","maxResults":10}'
```

### MCP usage

You can use this actor through Apify MCP from Claude Desktop, Claude Code, or other MCP-compatible clients.

Configure the Apify MCP server with a tools URL that includes this actor.

Example MCP URL:

```text
https://mcp.apify.com/?tools=fetch_cat/google-flights-scraper
```

Claude CLI setup example:

```bash
claude mcp add apify-google-flights "https://mcp.apify.com/?tools=fetch_cat/google-flights-scraper"
```

Claude Desktop JSON config example:

```json
{
  "mcpServers": {
    "apify-google-flights": {
      "url": "https://mcp.apify.com/?tools=fetch_cat/google-flights-scraper"
    }
  }
}
```

Example prompts:

- "Run Google Flights Scraper for JFK to LAX next August and summarize the cheapest options."
- "Collect flight prices for SFO to NRT and export the dataset rows."
- "Compare nonstop and one-stop options for my route search."

### Common workflows

Fare snapshot workflow:

1. Prepare a route and date.
2. Run the actor with a low result limit.
3. Export the dataset to CSV.
4. Store the snapshot with a timestamp.
5. Repeat on a schedule.

Travel content workflow:

1. Search a route relevant to your article.
2. Review available airlines and prices.
3. Use the dataset as research input.
4. Re-run before publishing because fares change quickly.

### Limitations

Google Flights can change its interface without notice.

Some fields are only saved when Google Flights provides them for the selected route/date result.

Prices and availability are public snapshots, not booking guarantees.

Google may show different availability by location, currency, language, device, or time.

Very high-volume runs may require proxy settings and conservative scheduling.

### Responsible use and legality

This actor extracts public information from Google Flights route searches.

You are responsible for using the data in a lawful way and respecting applicable terms, privacy rules, and platform restrictions.

Do not use scraped data for misleading pricing claims.

Always verify fares with the booking provider before purchase or publication.

### Troubleshooting

#### Why did I get no results?

The route/date may have no available flights, Google may have returned an unexpected response, or the run may have been rate-limited.

Try a common airport-code route such as JFK to LAX, lower `maxResults`, and keep the default Residential Proxy enabled.

#### Why are some fields null?

Google does not always provide every detail for every fare option.

When a detail cannot be parsed reliably, the actor leaves that field null and keeps the full `flightSummary` for review.

#### Why do prices differ from my browser?

Google Flights can vary by location, currency, language, time, and personalization context.

Treat each dataset as a snapshot from the actor run environment.

### FAQ

#### Can I scrape round-trip Google Flights?

Yes. When you provide a return date, the actor saves outbound leg options and return leg options as separate rows with `legType` set to `outbound` or `return`. Verify outputs with a small test before using them at scale.

#### Can I choose business class?

Yes. Use the `cabinClass` input and choose `business`, `first`, `premium_economy`, or `economy`.

#### Can I run many routes at once?

The first version is designed for one route/date per run. For many routes, schedule multiple small runs or call the actor from your own queue.

#### Is this an official Google API?

No. This is an Apify actor that extracts public Google Flights page results. It is not affiliated with Google.

#### Can I track prices over time?

Yes. Schedule recurring runs and compare exported datasets by `queryOrigin`, `queryDestination`, `queryDepartureDate`, and `scrapedAt`.

### Related scrapers

Related actors in the same catalog may help with travel, search, and app-market research:

- [Google Search Results Scraper](https://apify.com/fetch_cat/google-search-results-scraper)
- [Google Autocomplete Scraper](https://apify.com/fetch_cat/google-autocomplete-scraper)
- [Google Play Apps Scraper](https://apify.com/fetch_cat/google-play-apps-scraper)
- [Google Play Reviews Scraper](https://apify.com/fetch_cat/google-play-reviews-scraper)
- [Airbnb Listings Scraper](https://apify.com/fetch_cat/airbnb-listings-scraper)

### Support

If a run fails, open the run log and check for consent, CAPTCHA, no-results, or layout-change messages.

When reporting an issue, include the route, dates, input JSON, run ID, and a short description of what you expected.

### Changelog

Initial version focuses on route/date Google Flights result extraction with normalized price and schedule fields.

# Actor input Schema

## `origin` (type: `string`):

Airport code or city to fly from. Airport codes are the most reliable, for example JFK, LAX, SFO, or London.

## `destination` (type: `string`):

Airport code or city to fly to. Airport codes are recommended for precise results.

## `departureDate` (type: `string`):

Departure date in YYYY-MM-DD format.

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

Optional return date in YYYY-MM-DD format. Leave empty for one-way searches.

## `tripType` (type: `string`):

Choose one-way or round-trip. If returnDate is provided, round-trip is used automatically.

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

Number of adult passengers.

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

Number of child passengers.

## `infantsInSeat` (type: `integer`):

Number of infant passengers with their own seat.

## `infantsOnLap` (type: `integer`):

Number of infant passengers on lap.

## `cabinClass` (type: `string`):

Preferred seating class.

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

Currency code to request in Google Flights, for example USD, EUR, or GBP.

## `maxResults` (type: `integer`):

Maximum number of flight option rows to save. Keep low for first tests.

## `maxRunSeconds` (type: `integer`):

Advanced safety limit (60–270 seconds). The Actor saves each fare as it goes and stores remaining rows in PENDING\_ITEMS when the deadline is reached.

## `resumeItems` (type: `array`):

Advanced: paste the PENDING\_ITEMS value from a deadline-limited run to save only its remaining fare rows.

## `sortBy` (type: `string`):

Client-side sorting applied after Google returns its best and other flight sections.

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

Filter parsed offers by maximum stop count. Filtering is client-side to avoid Google's empty-result protobuf edge case.

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

Exclude lowest-tier fares only when Google's payload also indicates no included checked bag. This avoids dropping normal economy on international routes.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. Residential proxy is the supported default path for reliable Google Flights results; use a US residential proxy unless you have a specific region requirement.

## Actor input object example

```json
{
  "origin": "JFK",
  "destination": "LAX",
  "departureDate": "2026-08-10",
  "tripType": "one-way",
  "adults": 1,
  "children": 0,
  "infantsInSeat": 0,
  "infantsOnLap": 0,
  "cabinClass": "economy",
  "currency": "USD",
  "maxResults": 10,
  "maxRunSeconds": 270,
  "resumeItems": [],
  "sortBy": "best",
  "maxStops": "any",
  "excludeBasicEconomy": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `datasetUrl` (type: `string`):

No description

# 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 = {
    "origin": "JFK",
    "destination": "LAX",
    "departureDate": "2026-08-10",
    "returnDate": "",
    "tripType": "one-way",
    "cabinClass": "economy",
    "currency": "USD",
    "sortBy": "best",
    "maxStops": "any"
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetch_cat/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 = {
    "origin": "JFK",
    "destination": "LAX",
    "departureDate": "2026-08-10",
    "returnDate": "",
    "tripType": "one-way",
    "cabinClass": "economy",
    "currency": "USD",
    "sortBy": "best",
    "maxStops": "any",
}

# Run the Actor and wait for it to finish
run = client.actor("fetch_cat/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 '{
  "origin": "JFK",
  "destination": "LAX",
  "departureDate": "2026-08-10",
  "returnDate": "",
  "tripType": "one-way",
  "cabinClass": "economy",
  "currency": "USD",
  "sortBy": "best",
  "maxStops": "any"
}' |
apify call fetch_cat/google-flights-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Flights Scraper",
        "description": "Extract public Google Flights prices, schedules, airlines, stops, and booking links for route/date fare monitoring.",
        "version": "0.1",
        "x-build-id": "n4IgFiKBLOh3Kn6Nc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fetch_cat~google-flights-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fetch_cat-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/fetch_cat~google-flights-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fetch_cat-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/fetch_cat~google-flights-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fetch_cat-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",
                "required": [
                    "origin",
                    "destination",
                    "departureDate"
                ],
                "properties": {
                    "origin": {
                        "title": "Origin airport or city",
                        "type": "string",
                        "description": "Airport code or city to fly from. Airport codes are the most reliable, for example JFK, LAX, SFO, or London."
                    },
                    "destination": {
                        "title": "Destination airport or city",
                        "type": "string",
                        "description": "Airport code or city to fly to. Airport codes are recommended for precise results."
                    },
                    "departureDate": {
                        "title": "Departure date",
                        "type": "string",
                        "description": "Departure date in YYYY-MM-DD format."
                    },
                    "returnDate": {
                        "title": "Return date",
                        "type": "string",
                        "description": "Optional return date in YYYY-MM-DD format. Leave empty for one-way searches."
                    },
                    "tripType": {
                        "title": "Trip type",
                        "enum": [
                            "one-way",
                            "round-trip"
                        ],
                        "type": "string",
                        "description": "Choose one-way or round-trip. If returnDate is provided, round-trip is used automatically.",
                        "default": "one-way"
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of adult passengers.",
                        "default": 1
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of child passengers.",
                        "default": 0
                    },
                    "infantsInSeat": {
                        "title": "Infants in seat",
                        "minimum": 0,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of infant passengers with their own seat.",
                        "default": 0
                    },
                    "infantsOnLap": {
                        "title": "Infants on lap",
                        "minimum": 0,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of infant passengers on lap.",
                        "default": 0
                    },
                    "cabinClass": {
                        "title": "Cabin class",
                        "enum": [
                            "economy",
                            "premium_economy",
                            "business",
                            "first"
                        ],
                        "type": "string",
                        "description": "Preferred seating class.",
                        "default": "economy"
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "Currency code to request in Google Flights, for example USD, EUR, or GBP.",
                        "default": "USD"
                    },
                    "maxResults": {
                        "title": "Maximum flight results",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of flight option rows to save. Keep low for first tests.",
                        "default": 10
                    },
                    "maxRunSeconds": {
                        "title": "Maximum run time (seconds)",
                        "minimum": 60,
                        "maximum": 270,
                        "type": "integer",
                        "description": "Advanced safety limit (60–270 seconds). The Actor saves each fare as it goes and stores remaining rows in PENDING_ITEMS when the deadline is reached.",
                        "default": 270
                    },
                    "resumeItems": {
                        "title": "Resume checkpoint",
                        "type": "array",
                        "description": "Advanced: paste the PENDING_ITEMS value from a deadline-limited run to save only its remaining fare rows.",
                        "default": []
                    },
                    "sortBy": {
                        "title": "Sort results by",
                        "enum": [
                            "best",
                            "price",
                            "duration",
                            "departure",
                            "arrival"
                        ],
                        "type": "string",
                        "description": "Client-side sorting applied after Google returns its best and other flight sections.",
                        "default": "best"
                    },
                    "maxStops": {
                        "title": "Maximum stops",
                        "enum": [
                            "any",
                            "nonstop",
                            "1",
                            "2"
                        ],
                        "type": "string",
                        "description": "Filter parsed offers by maximum stop count. Filtering is client-side to avoid Google's empty-result protobuf edge case.",
                        "default": "any"
                    },
                    "excludeBasicEconomy": {
                        "title": "Exclude likely basic economy",
                        "type": "boolean",
                        "description": "Exclude lowest-tier fares only when Google's payload also indicates no included checked bag. This avoids dropping normal economy on international routes.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy settings. Residential proxy is the supported default path for reliable Google Flights results; use a US residential proxy unless you have a specific region requirement.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
