# Google Flights Scraper - All Flights, Prices & Price Calendar (`alaathr/google-flights-scraper`) Actor

Every Google Flights flight for any route and date: price, airlines, flight numbers, times, stops, layovers, aircraft and CO2, plus Google's low/typical/high price insight. One-way or round trip, any cabin, flexible dates and a price calendar of the cheapest days. Pay per search.

- **URL**: https://apify.com/alaathr/google-flights-scraper.md
- **Developed by:** [Alaa Tahir](https://apify.com/alaathr) (community)
- **Categories:** Travel, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 flight searches

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Google Flights Scraper - All Flights, Prices & Price Calendar

Get **every flight Google Flights has for any route and date**: often more than 100 per search, not just the first page. Each flight comes with its **price, airlines, flight numbers, local times, duration, stops, layovers, aircraft, legroom and CO2**, plus **Google's price insight** (low, typical or high, with the usual price range).

Switch to **price calendar** mode to get the **lowest price of every departure day** over up to 11 months, for one-way trips or round trips of several lengths.

You **pay per search**, whatever the number of flights it returns.

### What you get

| Group | Fields |
| --- | --- |
| Price | Total price for all passengers, currency, Google's price level (low, typical, high) and usual price range |
| Flight | Airlines, flight numbers, departure and arrival airports and local times, total duration, number of stops |
| Layovers | Airport, city, duration, overnight, long layover, change of airport |
| Segments | Each flight of the trip: airline, operator, aircraft, legroom, times, duration, codeshare numbers |
| CO2 | Estimated emissions per passenger, typical emissions for the route, difference in % |
| Extras | Return flights of a round trip (optional), 60-day price history (optional), link to the search on Google Flights |
| Price calendar | Lowest price per departure day (and return day), with the cheapest days flagged |

### Use cases

- **Fare monitoring and alerts**: schedule daily runs on your routes and react when Google says prices are low.
- **Travel apps and AI agents**: live flight options with prices and details, in JSON, through the API or the Apify MCP server.
- **Flexible dates**: the price calendar shows the cheapest days to fly in one run.
- **Market and airline research**: who flies a route, at what price, with how many stops, on which aircraft.
- **Corporate travel and budgets**: price typical trips in advance and track how fares move.

### How to use it

1. Enter one or more **routes** such as `JFK-LHR` or `CDG-NRT`. City codes work too (`NYC-LON`, `PAR-TYO`), and several airports can be combined: `JFK,EWR-LHR,LGW`.
2. Set the **departure date** (`2026-12-01`, or `+30` for 30 days from today) and, for a round trip, the **return date**.
3. Optionally choose the **cabin**, **passengers**, **stops**, **airlines**, a **maximum price** and the **sort order**.
4. For flexible dates, set a **last departure date** to search every day in between, or pick the **price calendar** mode.
5. Click **Start**, then download the results as JSON, CSV or Excel, or read them through the API.

### Input examples

Every flight from New York to London on one day, in business class, nonstop:

```json
{
  "routes": ["JFK-LHR"],
  "departureDate": "2026-12-01",
  "cabinClass": "business",
  "maxStops": "0",
  "sortBy": "price"
}
```

A round trip for two adults, with the return flights of the 3 best outbound flights:

```json
{
  "routes": ["CDG-NRT"],
  "departureDate": "2026-12-01",
  "returnDate": "2026-12-15",
  "adults": 2,
  "returnFlightsFor": 3,
  "currency": "EUR"
}
```

The cheapest days for a 7 to 10-day trip over the next 4 months:

```json
{
  "mode": "calendar",
  "routes": ["NYC-LON"],
  "departureDate": "+1",
  "returnDate": "+8",
  "maxTripDays": 10,
  "lastDepartureDate": "+120"
}
```

### Output example

One item per flight (the segments are shortened here):

```json
{
  "route": "CDG-NRT",
  "departureDate": "2026-12-01",
  "returnDate": null,
  "tripType": "one_way",
  "cabinClass": "economy",
  "passengers": 1,
  "rank": 1,
  "isBest": true,
  "price": 592,
  "currency": "USD",
  "priceLevel": "typical",
  "typicalPriceLow": 410,
  "typicalPriceHigh": 820,
  "airlines": ["LOT"],
  "flightNumbers": ["LO 336", "LO 79"],
  "departureAirport": "CDG",
  "departureTime": "2026-12-01T19:40",
  "arrivalAirport": "NRT",
  "arrivalTime": "2026-12-02T19:40",
  "durationMinutes": 960,
  "duration": "16h",
  "stops": 1,
  "layovers": [
    { "airport": "WAW", "city": "Warsaw", "durationMinutes": 50, "overnight": false, "longLayover": false, "changeOfAirport": false }
  ],
  "co2Kg": 620,
  "typicalCo2Kg": 663,
  "co2DifferencePercent": -6,
  "segments": [
    { "flightNumber": "LO 336", "airline": "LOT", "aircraft": "Boeing 737MAX 8 Passenger", "departureTime": "2026-12-01T19:40", "arrivalAirport": "WAW", "arrivalTime": "2026-12-01T22:00", "legroom": "29 in" }
  ],
  "searchUrl": "https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI2LTEyLTAxagcIARIDQ0RHcgcIARIDTlJUQAFIAZgBAg&hl=en&curr=USD",
  "scrapedAt": "2026-10-18T22:15:00Z"
}
```

In price calendar mode, one item per day:

```json
{
  "route": "CDG-NRT",
  "departureDate": "2026-11-19",
  "returnDate": null,
  "tripLengthDays": null,
  "price": 494,
  "currency": "USD",
  "isCheapest": true,
  "searchUrl": "https://www.google.com/travel/flights/search?tfs=..."
}
```

Times are local to each airport. Prices are the total for all passengers and, for a round trip, for the whole trip, as on Google Flights.

### Pricing

**$2.50 per 1,000 searches** (pay per event): one search is one route and one departure date, with **every flight Google returns** for it (often more than 100) and the price insight. Getting the return flights of one outbound flight counts as one more search. Price calendar mode costs **$0.20 per 1,000 days**. Searches that fail or find no flight come back with an `error` field and are **not charged**.

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

| Run | Cost |
| --- | --- |
| One route and date, all flights | $0.0025 |
| One route, every departure day of a month (30 searches) | $0.075 |
| 100 routes checked every day for a month (3,000 searches) | $7.50 |
| Price calendar of one route over 4 months (120 days) | $0.024 |

Apify's free plan includes $5 of usage every month: enough for about 2,000 searches a month without paying anything. Set a maximum cost per run in the run options for a hard cap.

### Use it from code or from an AI agent

- **API:** start a run and fetch the dataset with the Apify API or the Python and JavaScript clients.
- **Schedules:** run it every day with relative dates such as `+30` to track the same trips over time.
- **AI agents:** the Actor is available as a tool through the Apify MCP server, so assistants such as Claude can search flights directly.

### More tools from this developer

| Tool | What it returns | Price |
| --- | --- | --- |
| [AliExpress Search Scraper](https://apify.com/alaathr/aliexpress-search-products) | AliExpress products for any keyword or URL: price, discount, units sold, rating, delivery | $3.00 / 1,000 products |
| [Google Ads Transparency Scraper](https://apify.com/alaathr/google-ads-transparency-scraper) | Every Google ad of an advertiser or website: format, dates shown, image, texts and link | $1.00 / 1,000 ads |
| [Google Hotels Scraper](https://apify.com/alaathr/google-hotels-prices) | Hotel prices for your dates in any city, with stars, ratings, address and links | $3.00 / 1,000 hotels |
| [Google Trends Scraper](https://apify.com/alaathr/google-trends-reliable) | Interest over time, by region and related queries for your own keyword list | $2.50 / 1,000 search terms |
| [Google Trends Trending Now Scraper](https://apify.com/alaathr/google-trends-trending-now) | Every trending search of a country or US state, with volume, timing, category and news | $0.80 / 1,000 trends |
| [Walmart Scraper](https://apify.com/alaathr/walmart-scraper) | Walmart search results: price, was price, rating, seller, stock, delivery and badges | $1.50 / 1,000 products |

### FAQ

**Why are some prices empty?** Google Flights lists some flights as "Price unavailable" (the airline does not sell them through Google). They are kept with `price: null`; set a maximum price to drop them.

**How are round trips priced?** As on Google Flights: each outbound flight shows the cheapest price of the whole round trip. Set "Return flights for the first N outbound flights" to also get the return options of the best outbound flights, each with the exact price of the combination.

**What do the price levels mean?** Google compares today's lowest price with what this trip usually costs: `low` is below the usual range, `high` above it, `typical` inside it.

**Which airports and cities work?** Any airport with an IATA code, the city codes NYC, LON, PAR, TYO, CHI, WAS, MIL, ROM, SAO, SEL, OSA, BJS, MOW, STO, RIO, BUE, JKT, YTO and YMQ, and lists of airports separated by commas.

**Is this an official Google product?** No. This Actor is not affiliated with or endorsed by Google. It reads the same public flight data that google.com/travel/flights shows to any visitor and collects no personal data. It does not book flights.

# Actor input Schema

## `mode` (type: `string`):

Flights: every flight of each route and date, with prices and details (one search per route and day). Price calendar: the lowest price of every departure day over a date range, to find the cheapest days.

## `routes` (type: `array`):

One route per line as ORIGIN-DESTINATION with airport codes, for example JFK-LHR or CDG-NRT. City codes work too (NYC, LON, PAR, TYO...), and several airports can be listed with commas: JFK,EWR-LHR,LGW.

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

YYYY-MM-DD, or a number of days from today such as +30 (handy for scheduled runs).

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

Leave empty for one-way flights. YYYY-MM-DD, or days from today such as +37. With several departure days, the same trip length is kept for each.

## `lastDepartureDate` (type: `string`):

Flights mode: search every departure day from the departure date to this one (up to 90 days, one search per day). Price calendar: end of the range (default: 60 days after the departure date, up to about 11 months ahead).

## `maxTripDays` (type: `integer`):

Price calendar of a round trip: also price longer trips, from the trip length given by the return date up to this many days (at most 14 more). Leave empty for a single trip length.

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

Cabin to search.

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

Passengers aged 12 or more. Prices are the total for all passengers, as on Google Flights.

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

Passengers aged 2 to 11.

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

Infants under 2 with their own seat.

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

Infants under 2 on an adult's lap (one per adult).

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

Maximum number of stops.

## `airlines` (type: `array`):

Keep only flights of these airlines: 2-character codes such as AF, BA or DL, or alliances ONEWORLD, SKYTEAM, STAR_ALLIANCE. Leave empty for all airlines.

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

Keep only flights (or calendar days) at or below this total price, in the chosen currency. 0 means no limit.

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

Order of the flights, as in Google Flights. Each flight keeps its position as rank.

## `allFlights` (type: `boolean`):

Get every flight Google Flights has for each search (often more than 100), not only the 10 to 25 it shows first. Same price per search either way.

## `maxFlightsPerSearch` (type: `integer`):

Keep at most this many flights per search, after filters and sorting. 0 means all.

## `returnFlightsFor` (type: `integer`):

Round trips: Google Flights prices outbound flights for the whole trip, then shows the return flights once you pick one. Set N to also get the return flights (with the total price of each combination) for the first N outbound flights. Each counts as one more search. 0 means outbound flights only.

## `includePriceHistory` (type: `boolean`):

Add Google's price history of the last 60 days or so (lowest price per day) to the first flight of each search.

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

Currency of the prices: USD, EUR, GBP, CAD, AUD, INR, MAD...

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

Country Google Flights sells from (2-letter code such as US, GB, FR). Prices and offers can differ by country.

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

Language of airport and airline names: en, fr, de, es...

## `maxConcurrency` (type: `integer`):

Searches run at the same time. Raise it for big runs; lower it if many searches fail.

## `maxRetries` (type: `integer`):

How many times a refused search is retried with a new session before it is reported as failed (not charged).

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

Apify Proxy spreads searches over many IP addresses. The default datacenter proxy works for most runs.

## Actor input object example

```json
{
  "mode": "flights",
  "routes": [
    "JFK-LHR"
  ],
  "departureDate": "+30",
  "cabinClass": "economy",
  "adults": 1,
  "children": 0,
  "infantsInSeat": 0,
  "infantsOnLap": 0,
  "maxStops": "any",
  "maxPrice": 0,
  "sortBy": "best",
  "allFlights": true,
  "maxFlightsPerSearch": 0,
  "returnFlightsFor": 0,
  "includePriceHistory": false,
  "currency": "USD",
  "country": "US",
  "language": "en",
  "maxConcurrency": 3,
  "maxRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "routes": [
        "JFK-LHR"
    ],
    "departureDate": "+30",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alaathr/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 = {
    "routes": ["JFK-LHR"],
    "departureDate": "+30",
    "proxyConfiguration": { "useApifyProxy": True },
}

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

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

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

```

## CLI example

```bash
echo '{
  "routes": [
    "JFK-LHR"
  ],
  "departureDate": "+30",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call alaathr/google-flights-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alaathr/google-flights-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/jtkNAWhcEnptCZHJM/builds/UUSRLznDS6XMM0SUn/openapi.json
