# Google Flights Scraper · $1/1K Flights · Prices & Schedules (`featherscrape/google-flights-scraper`) Actor

Scrape Google Flights for any route and dates: prices, airlines, flight numbers, departure and arrival times, stops, layovers, aircraft and CO2 emissions. One-way or round trip, any cabin and number of adults. Fast, no browser, $1 per 1,000 flights returned.

- **URL**: https://apify.com/featherscrape/google-flights-scraper.md
- **Developed by:** [Feather Scrape](https://apify.com/featherscrape) (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 $0.70 / 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

Get **flight prices and schedules from Google Flights** for any route and dates: price, airlines, **flight numbers**, departure and arrival times, duration, **stops and layovers**, every leg with its aircraft and legroom, and **CO2 emissions**. One-way or round trip, any cabin class, any number of adults.

- ✈️ **Several routes per run**: `Paris to New York`, `CDG-JFK`, `London > Tokyo`
- ✅ **Real search options**: round trip, economy / premium economy / business / first, 1–9 adults, max stops
- 📈 **Built for price tracking**: schedule it daily on your routes and build your own fare history or alerts
- 🌱 **CO2 emissions** per flight and the typical value for the route
- ⚡ **Fast and cheap**: plain HTTP requests, no headless browser
- 🧾 Pay only for the flights you get

### Use cases

- **Fare monitoring & alerts**: track prices on your routes and get notified when they drop
- **Travel apps and deal sites**: show flight options and prices next to your content
- **Corporate travel & market research**: compare airlines, schedules and prices by route and date
- **Sustainability reporting**: estimate the CO2 of planned trips

### Output

One item per flight, Google's "best flights" first:

```json
{
    "route": "Paris to New York",
    "isBest": true,
    "tripType": "one-way",
    "price": 468,
    "currency": "EUR",
    "airlines": ["JetBlue"],
    "flightNumbers": ["B6 1408"],
    "departureAirport": "CDG",
    "departureTime": "2026-11-12T11:20",
    "arrivalAirport": "JFK",
    "arrivalTime": "2026-11-12T14:05",
    "durationMinutes": 525,
    "stops": 0,
    "layovers": [],
    "legs": [{"flightNumber": "B6 1408", "airline": "JetBlue", "departureAirport": "CDG", "arrivalAirport": "JFK", "aircraft": "Airbus A321neo", "legroom": "32 inches", "durationMinutes": 525}],
    "co2EmissionsKg": 557,
    "typicalCo2EmissionsKg": 370,
    "departureDate": "2026-11-12",
    "travelClass": "economy",
    "adults": 1
}
```

Times are the **local times** of each airport. `price` is the **total for all passengers** (and for the round trip when a return date is set).

### How to use it

1. Add one or more **routes** (cities or airport codes).
2. Set the **departure date** (or leave it empty to search flights departing in 30 days), and a **return date** for a round trip.
3. Choose the **cabin class**, **adults**, **max stops** and **currency**.
4. Run, then export as JSON, CSV or Excel, or use the API. Schedule it to track prices over time.

#### Input example

```json
{
    "routes": ["Paris to New York", "LHR-JFK"],
    "departureDate": "2026-11-12",
    "returnDate": "2026-11-19",
    "adults": 2,
    "travelClass": "economy",
    "maxStops": "1",
    "currency": "EUR"
}
```

### FAQ

**For round trips, do I get the return flights?** You get the outbound options with the **round-trip price**, as Google shows them first.

**Why do some routes return few flights?** Google only lists the flights it has fares for on that date; small airports may have few options.

**Is it legal?** The Actor only collects publicly available data. You are responsible for using it in line with applicable laws and Google's terms.

### Support

Found a bug or need a field? Open an issue on the Issues tab or email **FeatherScrape@protonmail.com**. Issues are answered within 48 hours.

# Actor input Schema

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

One route per line, with city or airport names or codes: "Paris to New York", "CDG-JFK", "London > Tokyo".

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

Outbound date (YYYY-MM-DD). Leave empty to search flights departing in 30 days.

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

Optional. Leave empty for a one-way trip. With a return date, prices are for the round trip and flights are the outbound options.

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

Number of adult passengers. Prices are the total for all passengers.

## `travelClass` (type: `string`):

Cabin class.

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

Keep only flights with at most this number of stops.

## `maxResultsPerRoute` (type: `integer`):

Maximum number of flights to return for each route (Google usually shows 15–30).

## `onlyWithPrice` (type: `boolean`):

Skip flights for which Google shows no price.

## `maxResultsTotal` (type: `integer`):

Optional cap on the total number of flights across all routes, to control your spending.

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

ISO 4217 currency code for prices (USD, EUR, GBP…).

## `countryCode` (type: `string`):

Two-letter country code of the Google version to use (us, gb, fr…).

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

Proxy used to reach Google. The default Apify Proxy works in most cases.

## Actor input object example

```json
{
  "routes": [
    "Paris to New York"
  ],
  "adults": 1,
  "travelClass": "economy",
  "maxStops": "any",
  "maxResultsPerRoute": 50,
  "onlyWithPrice": true,
  "currency": "USD",
  "countryCode": "us",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Flights with price, airlines, flight numbers, schedule, stops, layovers, legs and CO2 emissions.

# 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": [
        "Paris to New York"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("featherscrape/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": ["Paris to New York"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("featherscrape/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": [
    "Paris to New York"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call featherscrape/google-flights-scraper --silent --output-dataset

```

## MCP server setup

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