# Google Flights Scraper & Price Tracker: Fares & Alerts (`automationnation/google-flights-scraper`) Actor

Scrape Google Flights for any route and date: price, airlines, flight numbers, times, stops, layovers, aircraft and CO2. Flight price tracker: schedule it with Only fare drops or a max price for fare alerts when prices fall. One-way or round trip, any cabin and currency. $0.20 per 1,000 flights.

- **URL**: https://apify.com/automationnation/google-flights-scraper.md
- **Developed by:** [Nathan Carter](https://apify.com/automationnation) (community)
- **Categories:** Travel, Developer tools, AI
- **Stats:** 4 total users, 0 monthly users, 98.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.16 / 1,000 flights

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/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 & Price Tracker: Fares & Alerts

**Google Flights Scraper is an Apify Actor that returns Google Flights results for any route and date: price, airlines, flight numbers, times, duration, stops and layovers, aircraft, legroom and CO2 emissions for each flight.** One way or round trip, any cabin, passenger count and currency, read over plain HTTP in seconds.

#### Example result

JFK → LHR on 4 November, one way, from a real run on 5 October 2026:

| Flight | Departs | Duration | Stops | Price | CO2 vs typical |
|---|---|---|---|---|---|
| Virgin Atlantic VS 26 | 08:00 | 7 hr 10 min | Nonstop | $295 | −16% |
| British Airways BA 178 | 08:05 | 6 hr 55 min | Nonstop | $295 | −1% |
| JetBlue B6 1107 | 09:30 | 7 hr 10 min | Nonstop | $295 | +36% |

Each row also includes the legs, aircraft, legroom, codeshares, layovers and a link to the Google Flights results.

#### Quick facts

- **What you get, one row per flight option:**
  - price (taxes included, all passengers; round-trip total for round trips) and currency
  - airlines and flight numbers, departure and arrival times, duration, stops and layovers
  - every leg with aircraft, legroom and codeshare flight numbers
  - CO2 per passenger and how it compares with the route's typical flight
  - whether Google ranks it among the "Top flights"
- **Any route:** airport codes (`JFK`, `LHR`) or cities (`London`, `New York`), many routes per run.
- **Options:** one way or round trip, economy to first, 1–9 adults, nonstop or 1-stop filters, any currency.
- **Price:** $0.20 per 1,000 flights (less on paid Apify plans). Apify's free $5 monthly credit covers 25,000 flights.
- **AI agents:** connect `https://mcp.apify.com?tools=automationnation/google-flights-scraper` (setup below).

### What can you do with it?

- **Fare tracking:** schedule daily runs to watch prices on routes you care about and catch drops.
- **Travel apps and AI agents:** give an assistant live flight options with times, stops and prices.
- **Market and airline research:** compare carriers, schedules, aircraft and fares across routes.
- **Corporate travel:** find the cheapest, fastest or lowest-emission option for team trips.
- **Content:** build "cheapest flights from…" pages with fresh data.
- **Find cheap flights and track airfare:** a lightweight flight API for price alerts, travel apps and deal finders.

### How to use it

1. Click **Try for free**.
2. Set **From**, **To** and the **Departure date** (add a **Return date** for a round trip), or add many lines under **More routes**, such as `JFK-LHR 2026-11-12` or `LAX-NRT 2026-12-01 2026-12-15`.
3. Choose the cabin, number of adults, stops and currency.
4. Click **Start**. Each search takes a few seconds. Download JSON, CSV or Excel, or use the API.

#### Run it on a schedule: fare-drop alerts

**Know when a fare falls:** schedule a search and turn on **Only fare drops**. Each run saves the route's flights only when its cheapest fare is lower than on the previous run, with that previous price on every row; a run with no drop saves nothing and costs almost nothing. Add **Max price** for a threshold alert such as "New York to London under $450".

1. Set the route and dates, turn on **Only fare drops** (`"onlyPriceDrops": true`) and, if you like, a **Max price**.
2. Click **Save as a new task**, then **Schedule** it daily.
3. On the task's **Integrations** tab, send the results to Slack, email or a webhook, or pick them up in n8n, Make or Zapier.

```json
{
  "origin": "JFK",
  "destination": "LHR",
  "departureDate": "2026-12-15",
  "returnDate": "2026-12-22",
  "currency": "USD",
  "onlyPriceDrops": true,
  "maxPrice": 900
}
```

Use **Monitor name** to keep separate fare histories for the same routes.

#### Input example

```json
{
  "origin": "JFK",
  "destination": "LHR",
  "departureDate": "2026-11-12",
  "returnDate": "2026-11-19",
  "routes": ["LAX-NRT 2026-12-01", "London to Barcelona 2026-11-20"],
  "cabinClass": "economy",
  "adults": 1,
  "stops": "any",
  "currency": "USD"
}
```

#### Output example

```json
{
  "route": "JFK → LHR 2026-11-12",
  "position": 1,
  "tripType": "one way",
  "price": 295,
  "currency": "USD",
  "priceNote": "One way for 1 adult, taxes and fees included",
  "isBest": true,
  "airlines": ["Virgin Atlantic"],
  "flightNumbers": ["VS 26"],
  "from": "JFK",
  "fromAirport": "John F. Kennedy International Airport",
  "to": "LHR",
  "toAirport": "Heathrow Airport",
  "departure": "2026-11-12T08:00",
  "arrival": "2026-11-12T20:10",
  "duration": "7 hr 10 min",
  "durationMinutes": 430,
  "stops": 0,
  "layovers": [],
  "legs": [
    {
      "flightNumber": "VS 26",
      "airline": "Virgin Atlantic",
      "from": "JFK",
      "to": "LHR",
      "departure": "2026-11-12T08:00",
      "arrival": "2026-11-12T20:10",
      "durationMinutes": 430,
      "aircraft": "Airbus A330-900neo",
      "legroom": "31 in",
      "operatedAlsoAs": ["AF 9656", "DL 5996", "KL 2505"]
    }
  ],
  "emissionsKg": 365,
  "typicalEmissionsKg": 432,
  "emissionsVsTypicalPercent": -16,
  "googleFlightsUrl": "https://www.google.com/travel/flights?q=Flights+to+LHR+from+JFK+on+2026-11-12+oneway&hl=en&gl=us&curr=USD",
  "scrapedAt": "2026-10-05T13:00:00.000Z"
}
```

#### Output fields

| Field | Description |
|---|---|
| `price`, `currency`, `priceNote`, `tripType` | What it costs and what that covers |
| `airlines`, `mainAirlineCode`, `flightNumbers` | Who flies it |
| `from`, `to`, `departure`, `arrival` | Airports and local times |
| `duration`, `durationMinutes`, `stops`, `layovers` | Journey time and connections |
| `legs` | Each flight: number, airline, airports, times, aircraft, legroom, codeshares |
| `emissionsKg`, `typicalEmissionsKg`, `emissionsVsTypicalPercent` | CO2 per passenger vs the route's typical flight |
| `isBest`, `position` | Google's "Top flights" flag and rank |
| `route`, `cabinClass`, `adults`, `googleFlightsUrl` | The search |

### How much does it cost?

| Flights | Free & Bronze plans | Silver | Gold and above |
|---|---|---|---|
| 1,000 | $0.20 | $0.18 | $0.16 |
| 10,000 | $2 | $1.80 | $1.60 |

A route usually returns 10–30 flights, so a search costs under a cent. Failed searches are free.

### Use it with AI agents (MCP)

**Hosted:** add `https://mcp.apify.com?tools=automationnation/google-flights-scraper` to Claude, ChatGPT, Cursor or another MCP client and sign in with Apify.

**Local (Claude Desktop or Cursor config):**

```json
{
  "mcpServers": {
    "google-flights": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server", "--tools", "automationnation/google-flights-scraper"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}
```

Then ask, for example: "Find the cheapest nonstop flight from London to New York on 20 November and compare its CO2 with the alternatives."

**fast-flights (Python):** if Google starts blocking fast-flights' own fetcher, [fast-flights-cloud](https://github.com/retracn/fast-flights-cloud) plugs this Actor into it. `get_flights(query, integration=Cloud())` returns the same `Flights` objects.

**Open WebUI:** the [Google Flights Search tool](https://github.com/retracn/open-webui-tools/blob/main/google_flights.py) runs this Actor from Open WebUI, so your models can look up live fares. Paste it under Workspace → Tools and add your Apify token in its Valves.

### Integrations and API

```bash
curl -X POST "https://api.apify.com/v2/acts/automationnation~google-flights-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"origin":"JFK","destination":"LHR","departureDate":"2026-11-12"}'
```

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("automationnation/google-flights-scraper").call(run_input={"routes": ["JFK-LHR 2026-11-12", "JFK-CDG 2026-11-12"]})
for f in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f["route"], f["price"], f["airlines"], f["duration"])
```

Schedule daily runs and send price drops to Slack, Google Sheets or a webhook through Apify's integrations.

### Switching from the Amadeus Self-Service API

Amadeus switched off its Self-Service APIs on 17 July 2026: self-service keys stopped working, and apps built on Flight Offers Search stopped getting fares. If you need flight prices for a search page, price alerts or a travel assistant, this Actor returns Google Flights' current fares through Apify's API, with no partner agreement or enterprise contract.

| Amadeus Flight Offers Search | Google Flights Scraper |
|---|---|
| `originLocationCode`, `destinationLocationCode` | `origin`, `destination` (airport codes or city names) |
| `departureDate`, `returnDate` | `departureDate`, `returnDate` |
| `adults` | `adults` |
| `travelClass` | `cabinClass` |
| `nonStop=true` | `stops: "nonstop"` |
| `currencyCode` | `currency` |
| `max` | `maxFlightsPerSearch` |
| `price.grandTotal` | `price` |
| `itineraries[].segments[]` | `legs[]` (flight number, airline, airports, times, aircraft) |

**Keep your Amadeus SDK code (Node):** [amadeus-cloud](https://github.com/retracn/amadeus-cloud) is a drop-in for the SDK's flight search. `npm install github:retracn/amadeus-cloud`, then `require('amadeus-cloud')` instead of `require('amadeus')`, and `amadeus.shopping.flightOffersSearch.get()` and `.post()` return Amadeus-shaped offers from this Actor.

Differences to know: prices are what Google Flights shows, not bookable offers, so there's no price confirmation, seat map or booking step, and children and infants aren't an input yet. The Apify free plan's $5 monthly credit covers about 25,000 flights, enough for most hobby and student projects.

### FAQ

**Are prices per person?**
Prices include taxes and fees and cover all passengers; for round trips they're the round-trip total, as on Google Flights.

**Does it show return flights for round trips?**
It returns the outbound options with their round-trip total price, the first step on Google Flights.

**Can I use city names?**
Yes: `London to New York` searches all airports Google groups under each city.

**What if I leave the date empty?**
Google picks a date (usually about two weeks out) and each row shows it in `departure`.

**Is it legal?**
It reads public Google Flights results. Use the data in line with the laws and terms that apply to you.

**Guides:** [How to scrape Google Flights in 2026](https://retracn.github.io/automationnation-actors/guides/how-to-scrape-google-flights/) · [Amadeus Self-Service API shut down](https://retracn.github.io/automationnation-actors/guides/amadeus-self-service-api-alternative/) · [Google Flights API in 2026](https://retracn.github.io/automationnation-actors/guides/google-flights-api/) · [Side-by-side comparison](https://retracn.github.io/automationnation-actors/compare/google-flights-scrapers/) · [Code examples (Python, JavaScript, MCP)](https://retracn.github.io/automationnation-actors/google-flights-scraper/)

### More from AutomationNation

- **[Google Hotels Scraper](https://apify.com/automationnation/google-hotels-scraper)**: hotel prices for your dates, ratings and photos.
- **[Google Shopping Scraper](https://apify.com/automationnation/google-shopping-scraper)**: prices, stores and reviews for any product search.
- **[Google News Scraper](https://apify.com/automationnation/google-news-scraper)**: headlines, sources and article URLs.
- **[YouTube Transcript Scraper](https://apify.com/automationnation/youtube-transcript-scraper)**: transcripts of any YouTube video.

Questions or a missing field? Open an issue on the **Issues** tab; fixes usually ship within a day.

# Changelog

This Actor's version history is a separate document: https://apify.com/automationnation/google-flights-scraper/changelog.md

# Actor input Schema

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

Airport code (JFK) or city (New York).

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

Airport code (LHR) or city (London).

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

YYYY-MM-DD. Leave empty and Google picks a date (usually about two weeks out); each row says which.

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

YYYY-MM-DD for a round trip (prices are the round-trip total); leave empty for one way.

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

Extra searches, one per line: "JFK-LHR 2026-11-12", "LAX-NRT 2026-12-01 2026-12-15" (round trip) or "London to Barcelona 2026-11-20".

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

Cabin class.

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

Passengers; prices are the total for all of them.

## `stops` (type: `string`):

Filter by number of stops.

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

Google lists about 10–30 flights per route and date.

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

Three-letter code: USD, EUR, GBP, INR…

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

Two-letter country code for Google (gl). Prices can differ by point of sale.

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

Optional. Only save flights at or under this price, in the chosen currency (round-trip total for round trips). Combine with a schedule for an alert like "JFK to London under $450".

## `onlyPriceDrops` (type: `boolean`):

For scheduled runs: save a search's flights only when its cheapest fare is lower than on the previous run, with that previous price on each row. The first run saves everything and records the fare; a run with no drop saves nothing and costs almost nothing.

## `monitorName` (type: `string`):

Optional. Keeps a separate fare history under this name, e.g. one per traveller or client watching the same routes.

## Actor input object example

```json
{
  "origin": "JFK",
  "destination": "LHR",
  "cabinClass": "economy",
  "adults": 1,
  "stops": "any",
  "maxFlightsPerSearch": 50,
  "currency": "USD",
  "country": "us",
  "onlyPriceDrops": false
}
```

# Actor output Schema

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

No description

## `allData` (type: `string`):

No description

## `summary` (type: `string`):

Per search: flights found and the cheapest price.

# 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": "LHR"
};

// Run the Actor and wait for it to finish
const run = await client.actor("automationnation/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": "LHR",
}

# Run the Actor and wait for it to finish
run = client.actor("automationnation/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 '{
  "origin": "JFK",
  "destination": "LHR"
}' |
apify call automationnation/google-flights-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automationnation/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/3DCcOweLP0KkHu5Ux/builds/zavqDjTMZvSup66Qz/openapi.json
