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

Extract flight search results from Google Flights: airlines, prices, stops, duration, departure/arrival times. One-way & round-trip. All cabin classes. No API key needed.

- **URL**: https://apify.com/automation-lab/google-flights-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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.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 Scraper

**Extract flight search results from Google Flights** — airlines, prices, stops, duration, departure and arrival times. No API key needed. Works with one-way and round-trip searches, all cabin classes, and any currency.

Try it free with $5 in Apify credits. No credit card required to start.

---

### What does Google Flights Scraper do?

Google Flights Scraper retrieves live flight search results from [Google Flights](https://www.google.com/travel/flights). Enter your origin, destination, and travel dates to get a complete list of available flights, including prices, airline names, departure/arrival times, number of stops, total duration, and CO2 emission estimates.

The actor uses a headless Chromium browser to load the real Google Flights page and extract structured data — the same results you'd see when searching manually. It handles the Google consent flow automatically and returns clean, structured JSON.

**Key capabilities:**
- ✈️ One-way and round-trip searches
- 💺 All cabin classes: Economy, Premium Economy, Business, First
- 💰 Any currency (USD, EUR, GBP, JPY, and more)
- 🌍 Multi-language support (en, de, fr, es, and more)
- 📊 Up to 200 flight results per search
- 🌱 Carbon emission data when available
- 🏷️ Labels: Best, Cheapest, Fastest flights flagged

---

### Who is Google Flights Scraper for?

**✈️ Travel agencies and booking platforms**
- Monitor competitor pricing across routes
- Build fare alert systems with scheduled runs
- Aggregate flight data across multiple origin/destination pairs

**📊 Data analysts and researchers**
- Track airfare trends over time with scheduled scraping
- Analyze airline pricing strategies and route competition
- Build datasets for machine learning and price prediction models

**🏢 Corporate travel managers**
- Compare prices for employee travel on frequently used routes
- Monitor pricing changes on specific routes for budget planning
- Export data to spreadsheets for expense reporting

**🧑‍💻 Developers and product teams**
- Power price comparison tools without a paid flights API
- Build travel apps that need real-time pricing data
- Prototype flight booking features using real Google Flights data

---

### Why use Google Flights Scraper?

- **✅ No API key required** — Google Flights has no public API; this scraper gives you the data directly
- **📦 Structured JSON output** — ready to export to CSV, Excel, Google Sheets, or databases
- **🔄 Schedulable** — set up cron-based monitoring to track fare changes over time
- **💵 Pay-per-result pricing** — only pay for flights you actually extract
- **🔌 5,000+ integrations** — connect to Google Sheets, Zapier, Make, webhooks, and more via Apify platform

---

### What data can you extract?

| Field | Description | Example |
|-------|-------------|---------|
| `airline` | Primary operating airline | "JetBlue" |
| `airlines` | All airlines (codeshares) | ["JetBlue"] |
| `price` | Price in searched currency | 317 |
| `currency` | Currency code | "USD" |
| `stops` | Number of stops (0 = nonstop) | 0 |
| `duration` | Formatted duration string | "6 hr 30 min" |
| `durationMinutes` | Duration in minutes | 390 |
| `departureTime` | Departure time (24h) | "21:59" |
| `arrivalTime` | Arrival time (24h, +1 for next day) | "01:29 +1" |
| `departureAirport` | Origin IATA code | "JFK" |
| `arrivalAirport` | Destination IATA code | "LAX" |
| `origin` | Search origin | "JFK" |
| `destination` | Search destination | "LAX" |
| `departureDate` | Travel date | "2026-06-01" |
| `returnDate` | Return date (round-trip) | "2026-06-10" |
| `cabinClass` | Searched cabin class | "economy" |
| `isBestFlight` | Google's "Best" label | false |
| `label` | Google label (Best/Cheapest/Fastest) | "Best" |
| `carbonEmissionKg` | CO2 estimate in kilograms | 407 |
| `carbonEmissionPercent` | CO2 vs. typical (%) | 10 |
| `url` | Google Flights search URL | "https://..." |

---

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

Google Flights Scraper uses **Pay-Per-Event (PPE) pricing** — you only pay for flight results you extract. There are no monthly subscription fees.

| Plan | Price per flight result |
|------|------------------------|
| Free ($5 credit) | $0.00023 |
| Starter ($29/mo) | $0.0002 |
| Scale ($199/mo) | $0.000156 |
| Business ($999/mo) | $0.00012 |

**Real-world cost examples:**
- 50 flights from JFK to LAX: **~$0.01**
- 200 flights across 5 routes: **~$0.04**
- Daily monitoring of 3 routes for a month: **~$1.80/month**

💡 **Free plan**: Your $5 starting credit covers approximately **21,700 flight results** at the free tier price.

---

### How to scrape Google Flights

1. Go to the [Google Flights Scraper](https://apify.com/automation-lab/google-flights-scraper) page on Apify Store
2. Click **Try for free**
3. Enter your **Origin** airport code (e.g. `JFK`) and **Destination** (e.g. `LAX`)
4. Set your **Departure date** in `YYYY-MM-DD` format (e.g. `2026-06-01`)
5. Optionally set **Return date** for round-trip, **Cabin class**, and **Max results**
6. Click **Start** and wait 30–60 seconds for results
7. Download results as **JSON**, **CSV**, or **Excel**

**Input examples:**

One-way economy search:
```json
{
    "origin": "JFK",
    "destination": "LAX",
    "departureDate": "2026-06-01",
    "cabinClass": "economy",
    "maxResults": 50
}
````

Round-trip business class search:

```json
{
    "origin": "LHR",
    "destination": "JFK",
    "departureDate": "2026-07-15",
    "returnDate": "2026-07-25",
    "cabinClass": "business",
    "currency": "GBP",
    "maxResults": 20
}
```

Multi-passenger search:

```json
{
    "origin": "ORD",
    "destination": "MIA",
    "departureDate": "2026-12-20",
    "adults": 2,
    "children": 1,
    "cabinClass": "economy",
    "maxResults": 30
}
```

***

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `origin` | string | ✅ | — | Origin airport code (e.g. `JFK`) or city name |
| `destination` | string | ✅ | — | Destination airport code (e.g. `LAX`) or city name |
| `departureDate` | string | ✅ | — | Departure date in `YYYY-MM-DD` format |
| `returnDate` | string | ❌ | — | Return date for round-trip (leave blank for one-way) |
| `adults` | integer | ❌ | 1 | Number of adult passengers (1–9) |
| `children` | integer | ❌ | 0 | Number of child passengers ages 2–11 |
| `cabinClass` | string | ❌ | `economy` | Cabin class: `economy`, `premium_economy`, `business`, `first` |
| `maxResults` | integer | ❌ | 50 | Maximum flight results to return (1–200) |
| `currency` | string | ❌ | `USD` | Currency code for prices (e.g. `EUR`, `GBP`, `JPY`) |
| `language` | string | ❌ | `en` | Google language code (e.g. `de`, `fr`, `es`) |
| `proxyConfiguration` | object | ❌ | SHADER | Proxy settings |

**💡 Tip**: Use IATA airport codes (3 letters like `JFK`, `LHR`, `DXB`) for the most reliable results. City names also work but may be ambiguous for cities with multiple airports.

***

### Output examples

```json
{
    "origin": "JFK",
    "destination": "LAX",
    "departureDate": "2026-06-01",
    "returnDate": null,
    "cabinClass": "economy",
    "adults": 1,
    "airline": "JetBlue",
    "airlines": ["JetBlue"],
    "flightNumber": null,
    "price": 317,
    "currency": "USD",
    "stops": 0,
    "stopDetails": [],
    "durationMinutes": 390,
    "duration": "6 hr 30 min",
    "departureTime": "21:59",
    "arrivalTime": "01:29 +1",
    "departureAirport": "JFK",
    "arrivalAirport": "LAX",
    "isBestFlight": false,
    "label": null,
    "carbonEmissionKg": 407,
    "carbonEmissionPercent": 10,
    "url": "https://www.google.com/travel/flights?q=flights+from+JFK+to+LAX+on+2026-06-01&hl=en&curr=USD"
}
```

**Round-trip result:**

```json
{
    "origin": "ORD",
    "destination": "MIA",
    "departureDate": "2026-07-04",
    "returnDate": "2026-07-10",
    "airline": "American",
    "price": 360,
    "currency": "USD",
    "stops": 0,
    "duration": "3 hr 16 min",
    "durationMinutes": 196,
    "departureTime": "07:04",
    "arrivalTime": "11:20",
    "departureAirport": "ORD",
    "arrivalAirport": "MIA",
    "isBestFlight": false,
    "label": "Best"
}
```

***

### Tips for best results

- **Use IATA codes**: `JFK` is more reliable than `New York`. Find codes at [IATA.org](https://www.iata.org/en/publications/directories/code-search/)
- **Start small**: Test with `maxResults: 10` before running larger searches
- **Date format**: Always use `YYYY-MM-DD` (e.g. `2026-06-01`, not `June 1` or `06/01/2026`)
- **Far-future dates**: Google Flights typically shows results up to ~330 days in advance
- **Monitoring**: Use Apify's scheduler to run this daily and track price changes on specific routes
- **Combine with webhooks**: Set up webhooks to receive data automatically when a run finishes

***

### Integrations

**Google Flights Scraper → Google Sheets**
Use the Apify Google Sheets integration to automatically append new flight prices to a tracking spreadsheet. Great for monitoring prices over time on a route before buying.

**Google Flights Scraper → Slack/Discord**
Set up a webhook to post price alerts when fares drop below your target. Combine with Apify's scheduler to check prices daily.

**Google Flights Scraper → Make (formerly Integromat)**
Build a scenario that runs the scraper and filters for flights under $X, then sends results to an email or saves to Airtable.

**Scheduled fare monitoring**
Use Apify's built-in scheduler to check prices on your routes every morning. Compare today's `price` values against yesterday's to detect price drops automatically.

**Multi-route batch scraping**
Use the Apify API to fire off parallel runs for multiple routes simultaneously. Useful for travel agencies monitoring many city pairs at once.

***

### Using the Apify API

Run Google Flights Scraper programmatically using the Apify API:

**Node.js:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('automation-lab/google-flights-scraper').call({
    origin: 'JFK',
    destination: 'LAX',
    departureDate: '2026-06-01',
    maxResults: 50,
});

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

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_API_TOKEN')

run = client.actor('automation-lab/google-flights-scraper').call(run_input={
    'origin': 'JFK',
    'destination': 'LAX',
    'departureDate': '2026-06-01',
    'maxResults': 50,
})

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['airline'], item['price'], item['departureTime'])
```

**cURL:**

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~google-flights-scraper/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "origin": "JFK",
    "destination": "LAX",
    "departureDate": "2026-06-01",
    "maxResults": 50
  }'
```

Get your API token from [Apify Console → Settings → Integrations](https://console.apify.com/settings/integrations).

***

### Use with AI agents via MCP

Google Flights Scraper is available as a tool for AI assistants that support the [Model Context Protocol (MCP)](https://docs.apify.com/platform/integrations/mcp).

Add the Apify MCP server to your AI client — this gives you access to all Apify actors, including this one:

#### Setup for Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com"
        }
    }
}
```

Your AI assistant will use OAuth to authenticate with your Apify account on first use.

#### Example prompts

Once connected, try asking your AI assistant:

- "Use automation-lab/google-flights-scraper to find the cheapest flights from Chicago to Miami departing July 4th and returning July 10th"
- "Search Google Flights for business class options from London to New York next month and show me the top 5 cheapest options"
- "Monitor JFK to LAX prices for the next 30 days by scraping Google Flights weekly using automation-lab/google-flights-scraper"

Learn more in the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

***

### Is it legal to scrape Google Flights?

Google Flights displays publicly available flight data aggregated from airlines and booking systems. This data is accessible to anyone visiting google.com/travel/flights without logging in.

**Key points:**

- ✅ Only public flight search data is collected — no personal data, no user accounts
- ✅ This actor is designed for personal, research, and business intelligence use cases
- ✅ Apify operates in compliance with GDPR and implements responsible scraping practices
- ⚠️ Always review Google's [Terms of Service](https://policies.google.com/terms) before large-scale commercial use
- ⚠️ Use reasonable rate limits — don't scrape thousands of routes per minute

This actor is intended for legitimate use cases such as travel research, price monitoring, and data analysis. It is not designed to create automated booking systems or to circumvent paid flight search APIs.

***

### FAQ

**How many flight results can I get per search?**
Google Flights typically shows 20–60 flight options per search. Set `maxResults` up to 200, though you may get fewer results if Google doesn't show that many for your route/date combination.

**How much does it cost to monitor prices on one route daily for a month?**
At $0.0002 per flight result (Starter plan), monitoring one route returning 20 flights per day costs $0.004/day, or approximately $0.12/month. Very affordable for regular fare monitoring.

**Why are some prices showing as null?**
This happens when Google Flights shows a "from" price range instead of a specific price, or when the actor couldn't parse the currency format. Try the same search in USD (`currency: "USD"`) for the most reliable price extraction.

**Why am I getting no results?**
Common causes: (1) The date is too far in the future (more than ~330 days). (2) The route has limited service. (3) The airport code may be incorrect — double-check IATA codes. Try a simple JFK→LAX search first to verify the actor works for your setup.

**How does this compare to the Google Flights API?**
Google doesn't offer a public Flights API. Third-party flight APIs (Amadeus, Skyscanner, etc.) require API keys, have rate limits, and charge per request — often more expensive than this scraper for ad-hoc use. This actor gives you real Google Flights data directly.

**What proxy type does this use?**
By default, the actor uses SHADER datacenter proxies. Google Flights works well with datacenter proxies for most regions. If you're getting blocks or empty results, try switching to residential proxies in the proxy configuration.

***

### Other travel scrapers

Looking for more travel data? Check out other tools from [automation-lab](https://apify.com/automation-lab):

- [Airbnb Listing Scraper](https://apify.com/automation-lab/airbnb-listing) — Extract Airbnb listings with prices, ratings, and host info
- [Airbnb Reviews Scraper](https://apify.com/automation-lab/airbnb-reviews) — Collect guest reviews from Airbnb properties
- [Booking.com Scraper](https://apify.com/automation-lab/booking-scraper) — Scrape hotel listings and prices from Booking.com
- [TripAdvisor Reviews Scraper](https://apify.com/automation-lab/tripadvisor-reviews-scraper) — Extract reviews from TripAdvisor

# Actor input Schema

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

Enter the departure airport code (e.g. JFK) or city name (e.g. New York). IATA codes are most reliable.

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

Enter the arrival airport code (e.g. LAX) or city name (e.g. Los Angeles). IATA codes are most reliable.

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

Departure date in YYYY-MM-DD format (e.g. 2026-05-15).

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

Return date in YYYY-MM-DD format for round-trip searches. Leave empty for one-way flights.

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

Number of adult passengers (age 12+).

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

Number of child passengers (ages 2–11).

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

Select the desired cabin class for the search.

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

Maximum number of flight results to return. Lower values are faster and cheaper.

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

Currency code for prices (e.g. USD, EUR, GBP). Defaults to USD.

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

Google language code for results (e.g. en, de, fr). Defaults to en.

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

Configure proxy settings. By default no proxy is used (direct connection works for Google Flights in most regions). If you're getting blocks, enable Apify proxy.

## Actor input object example

```json
{
  "origin": "JFK",
  "destination": "LAX",
  "departureDate": "2026-06-01",
  "adults": 1,
  "children": 0,
  "cabinClass": "economy",
  "maxResults": 10,
  "currency": "USD",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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-06-01",
    "adults": 1,
    "children": 0,
    "cabinClass": "economy",
    "maxResults": 10,
    "currency": "USD",
    "language": "en",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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-06-01",
    "adults": 1,
    "children": 0,
    "cabinClass": "economy",
    "maxResults": 10,
    "currency": "USD",
    "language": "en",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/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-06-01",
  "adults": 1,
  "children": 0,
  "cabinClass": "economy",
  "maxResults": 10,
  "currency": "USD",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call automation-lab/google-flights-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Flights Scraper",
        "description": "Extract flight search results from Google Flights: airlines, prices, stops, duration, departure/arrival times. One-way & round-trip. All cabin classes. No API key needed.",
        "version": "0.1",
        "x-build-id": "0XTIuDFNaYMIvwuei"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~google-flights-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-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/automation-lab~google-flights-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-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/automation-lab~google-flights-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-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 / city",
                        "type": "string",
                        "description": "Enter the departure airport code (e.g. JFK) or city name (e.g. New York). IATA codes are most reliable."
                    },
                    "destination": {
                        "title": "Destination airport / city",
                        "type": "string",
                        "description": "Enter the arrival airport code (e.g. LAX) or city name (e.g. Los Angeles). IATA codes are most reliable."
                    },
                    "departureDate": {
                        "title": "Departure date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Departure date in YYYY-MM-DD format (e.g. 2026-05-15)."
                    },
                    "returnDate": {
                        "title": "Return date (leave blank for one-way)",
                        "pattern": "^(\\d{4}-\\d{2}-\\d{2})?$",
                        "type": "string",
                        "description": "Return date in YYYY-MM-DD format for round-trip searches. Leave empty for one-way flights."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 9,
                        "type": "integer",
                        "description": "Number of adult passengers (age 12+).",
                        "default": 1
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "maximum": 8,
                        "type": "integer",
                        "description": "Number of child passengers (ages 2–11).",
                        "default": 0
                    },
                    "cabinClass": {
                        "title": "Cabin class",
                        "enum": [
                            "economy",
                            "premium_economy",
                            "business",
                            "first"
                        ],
                        "type": "string",
                        "description": "Select the desired cabin class for the search.",
                        "default": "economy"
                    },
                    "maxResults": {
                        "title": "Max results per search",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of flight results to return. Lower values are faster and cheaper.",
                        "default": 50
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "Currency code for prices (e.g. USD, EUR, GBP). Defaults to USD.",
                        "default": "USD"
                    },
                    "language": {
                        "title": "Language (hl parameter)",
                        "type": "string",
                        "description": "Google language code for results (e.g. en, de, fr). Defaults to en.",
                        "default": "en"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Configure proxy settings. By default no proxy is used (direct connection works for Google Flights in most regions). If you're getting blocks, enable Apify proxy.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
