# Google Flights Scraper - Free Live Fares & Price Insights (`dz_omar/google-flights-scraper`) Actor

Scrape live Google Flights fares, schedules, airlines and aircraft. One-way or round-trip, any route and currency. True round-trip totals plus price history. Free, fast, no API key.

- **URL**: https://apify.com/dz\_omar/google-flights-scraper.md
- **Developed by:** [FlowExtract API](https://apify.com/dz_omar) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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 — Free Live Fares & Price Insights

Scrape live flight prices, schedules, airlines and aircraft straight from **Google Flights** — one-way or round-trip, any route, any currency, any market. **Free to run.** No API key, no account with Google, no browser automation.

Give it a route and a date, or paste a Google Flights URL you already built. You get back one clean row per flight option, with the **true total price** and Google's own price-history context.

***

### Why this one

Most Google Flights scrapers get the round-trip price wrong. It is the single most common defect in this category, and it is not a small error:

- Some add the outbound fare and the return fare together. Google's outbound price **already is** the round-trip total, so the result is roughly **double** the real fare.
- Some expand only one outbound option, so the cheapest itinerary on the route never appears in the output at all.

This Actor returns round-trip prices the way Google prices them — as one coupled total.

| | |
|---|---|
| **Free** | No per-result charge, no rental fee. |
| **Fast** | Typical search completes in about **1–2 seconds**. |
| **Honest inputs** | Every filter in the input form is live and tested. Nothing is accepted and silently ignored. |
| **Real totals** | Round-trip prices are genuine round-trip totals, not two one-ways added up. |
| **Price context** | Typical / low / high price plus a ~60-day price history, where Google provides it. |

***

### What you get

One dataset row per flight option:

- **Price** — total for the whole itinerary, in your chosen currency
- **Route** — origin, destination, departure and arrival timestamps
- **Airlines** — marketing carrier and flight numbers
- **Stops** — count, plus a readable label
- **Duration** — total minutes and a formatted label
- **Segments** — every leg with airport codes *and* full airport names, times, duration, airline, flight number and **aircraft type**
- **Carbon emissions** — grams for this itinerary and the typical figure for the route
- **Price insights** — price level, typical price, lowest and highest seen, and the recent price history

#### Sample row (trimmed)

```json
{
  "price": 398,
  "currency": "USD",
  "priceIsTotal": true,
  "tripType": "round-trip",
  "cabinClass": "economy",
  "origin": "JFK",
  "destination": "LAX",
  "departureTime": "2026-10-16T21:50",
  "arrivalTime": "2026-10-17T01:09",
  "airlines": ["American"],
  "stops": 0,
  "stopsLabel": "Nonstop",
  "duration": "6h 19m",
  "segments": [
    {
      "departureAirport": "JFK",
      "departureAirportName": "John F. Kennedy International Airport",
      "arrivalAirport": "LAX",
      "arrivalAirportName": "Los Angeles International Airport",
      "airline": "American",
      "flightNumber": "AA300",
      "aircraft": "Airbus A321 (Sharklets)",
      "duration": "6h 19m"
    }
  ],
  "carbonEmissionsGrams": 556000,
  "priceInsights": {
    "typicalPrice": 346,
    "lowestSeenPrice": 200,
    "highestSeenPrice": 410
  }
}
```

***

### How to use it

#### Option 1 — by route

| Field | Example |
|---|---|
| Origin airport | `JFK` |
| Destination airport | `LAX` |
| Departure date | `2026-11-20` |
| Return date *(optional)* | `2026-11-27` |

Leave the return date empty for a one-way search.

#### Option 2 — paste a Google Flights URL

Build the search on Google Flights the way you normally would, press **Search**, then copy the URL from your browser's address bar into the **Google Flights URL** field. The Actor reproduces that exact search — route, dates, cabin and passengers included.

> Use the URL from the **results** page, not the Google Flights home page. A home-page URL has no destination in it yet, and the Actor will tell you so rather than returning an empty run.

#### The two options are independent

A pasted URL already carries its own cabin, passengers and filters. The Actor never layers the form's filters on top of it — that would return something you did not ask for.

Fill in **both** and you get **both**: two separate searches in one run, each up to your **Maximum results**. Every row carries a `searchSource` field (`url` or `route`) so you can tell them apart. If one of the two is faulty, the other still runs.

***

### Inputs

| Input | Notes |
|---|---|
| **Google Flights URL** | Optional. Runs as its own search, independent of the route fields. |
| **Origin / Destination** | 3-letter IATA codes. |
| **Departure / Return date** | `YYYY-MM-DD`. Return date optional; setting it makes the search a round trip. |
| **Adults** | 1–9. |
| **Children** | 0–8, aged 2–11. |
| **Cabin class** | Economy, Premium economy, Business, First. |
| **Maximum stops** | Any, Nonstop only, 1 stop or fewer, 2 stops or fewer. |
| **Maximum price** | Optional ceiling on the total price. |
| **Earliest / latest departure hour** | Optional departure window, `0`-`23`. e.g. `6` and `12` for a morning flight. |
| **Checked bags** | Price fares that include this many checked bags, so the total is honest for travellers with luggage. |
| **Currency / Market / Language** | e.g. `USD` / `US` / `en`. Fares genuinely differ by market. |
| **Maximum results** | Cap on rows stored. Google typically offers 30–40 options per route. |

Filters are applied by Google at the source, not trimmed afterwards — so a "nonstop only" search really does ask Google for nonstop fares.

***

### What this version does not do yet

Stated plainly, because an input that quietly does nothing is worse than an absent one:

- **Infant passengers** — not supported. Infant pricing is not available on the path this Actor uses, so the field is absent rather than accepted-and-ignored.
- **"Choose your return flight" URLs** — if you have already picked an outbound flight in Google Flights, that URL shows return options for that one choice. The Actor detects this and tells you, naming the flight you selected, instead of quietly running a different search. Paste the URL from the first results page instead.
- **Multi-city itineraries** — not supported yet. One-way and round-trip only.
- **"Anywhere" / Explore searches** — a destination is required.
- **Airline include/exclude filters** — not exposed yet.
- **Booking links and per-agency fares** — not included yet.

These are on the roadmap. They will appear as inputs when they actually work, and not before.

***

### Good to know

- **Dates must be in the future.** Google Flights does not price past departures; the Actor checks this before making any request and tells you so.
- **Not every route offers every cabin.** A premium-economy search on a short regional hop may legitimately return nothing. The run reports that clearly instead of failing.
- **Large parties can come back empty.** Airlines cap how many seats they will sell in a single booking, and it varies by route and date. Five passengers may work on one route and return nothing on another — that is real availability, not a fault.
- **Prices move.** Airfares change through the day. Two runs minutes apart can differ — that is the market, not the scraper.
- **Bad input does not fail the run.** Mistakes come back as a readable row explaining what to fix.

***

### Use cases

- **Fare monitoring** — track a route over time and catch drops
- **Travel agencies & OTAs** — pull live comparison fares into your own tooling
- **Market research** — compare pricing across carriers, cabins and markets
- **Revenue management** — watch competitor pricing on routes you operate
- **Data & AI** — feed real airfare data into dashboards, models or agents

***

### Support

🌐 Website [flowextractapi.com](https://flowextractapi.com) · 📧 flowextractapi@outlook.com · 💬 GitHub [FlowExtractAPI](https://github.com/FlowExtractAPI) · 💼 LinkedIn [flowextract-api](https://www.linkedin.com/in/flowextract-api/) · 🐦 X [@FlowExtractAPI](https://x.com/FlowExtractAPI) · 📱 Facebook [flowextractapi](https://www.facebook.com/flowextractapi) · 🎵 TikTok [@flowextractapi](https://www.tiktok.com/@flowextractapi)

### Legal & compliance

Collects **publicly available data only** · respects the source's rate limits and terms · **stores no personal information** · suitable for commercial use. No affiliation with or endorsement by Google Flights is implied.

*Google Flights Scraper — by FlowExtract API. Turn any website into structured data.*

# Changelog

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

# Actor input Schema

## `searchUrl` (type: `string`):

Paste a Google Flights results URL and the Actor reproduces that exact search — route, dates, cabin, passengers and its own filters included. Use the URL from the RESULTS page (after you press Search), not the home page. This runs as a SEPARATE search from the route fields below: fill in both and you get both result sets, each up to Maximum results. The filters below are never applied on top of a pasted URL.

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

3-letter IATA code of the departure airport, for example JFK.

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

3-letter IATA code of the arrival airport, for example LAX.

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

Outbound date in YYYY-MM-DD form. Must be today or later — Google Flights does not price past departures.

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

Leave empty for a one-way search. Setting it makes this a round trip, and prices become true round-trip totals rather than two one-way fares added together.

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

Number of adult passengers (1-9).

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

Number of children aged 2-11 (0-8). Infants are not supported yet and are deliberately absent rather than silently ignored.

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

Cabin to price. Not every route offers every cabin; if a cabin has no fares the run reports that plainly.

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

Filter applied by Google itself, not after the fact.

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

Only return itineraries at or below this total price, in the currency below. Applied by Google, so the result count shrinks at the source.

## `departureTimeFrom` (type: `integer`):

Only show flights departing at or after this hour, 0-23. Applied by Google at the source.

## `departureTimeTo` (type: `integer`):

Only show flights departing at or before this hour, 0-23. Combine with the field above for a departure window, e.g. 6 and 12 for a morning flight.

## `checkedBags` (type: `integer`):

Price fares that include this many checked bags. Prices rise accordingly, so this is the honest total for travellers with luggage.

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

ISO 4217 currency code for all prices, for example USD, EUR, GBP.

## `market` (type: `string`):

ISO 3166-1 alpha-2 country code for the point of sale, for example US, GB, DE. Fares genuinely differ by market.

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

Language code for airline and airport names, for example en, de, fr, es.

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

Cap on itineraries stored. Google typically returns 30-40 options for a route.

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

Optional. The Actor runs fine on direct egress; enable a proxy only if you are running at high volume.

## Actor input object example

```json
{
  "origin": "JFK",
  "destination": "LAX",
  "departureDate": "2026-11-20",
  "adults": 1,
  "children": 0,
  "cabinClass": "economy",
  "maxStops": "any",
  "checkedBags": 0,
  "currency": "USD",
  "market": "US",
  "language": "en",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped itineraries with prices, schedules, airlines, aircraft and price insights.

# 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-11-20"
};

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

# Run the Actor and wait for it to finish
run = client.actor("dz_omar/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": "LAX",
  "departureDate": "2026-11-20"
}' |
apify call dz_omar/google-flights-scraper --silent --output-dataset

```

## MCP server setup

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