Google Flights API: Prices, Itineraries & Date Grid avatar

Google Flights API: Prices, Itineraries & Date Grid

Pricing

from $1.00 / 1,000 flight itineraries

Go to Apify Store
Google Flights API: Prices, Itineraries & Date Grid

Google Flights API: Prices, Itineraries & Date Grid

Google Flights prices API: one-way and round-trip itineraries with airlines, stops, times, emissions and prices in any currency, plus a cheapest-price-per-day grid. Pay per flight.

Pricing

from $1.00 / 1,000 flight itineraries

Rating

0.0

(0)

Developer

Christian Barbosa

Christian Barbosa

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Categories

Share

Get Google Flights prices for any route and dates: airlines, flight numbers, departure and arrival times, duration, stops, layovers, CO2 emissions and the price in your currency. Search one-way or round trip, get the exact outbound and return flight pairs with their total price, or use the date grid to find the cheapest day to fly in a range of up to 62 days. You pay only per itinerary saved. Searches without flights and failed requests are free.

Why this Google Flights scraper

  • Fast and inexpensive. No browser. A search returns in 1 to 3 seconds, and a 31-day date grid completes in about 11 seconds.
  • Reliable by design. Each blocked request is retried with exponential backoff and a new IP address. Google sometimes answers datacenter IP addresses with a page that leaves the results out; the Actor detects it, retries at once and moves that request, and the run if it repeats, to residential proxies in your market country.
  • Airport codes or city names. Type JFK or New York, BOG or Bogotá. A city searches all of its airports, exactly as on the Google Flights website. If Google interprets a city name as a different place, the search stops with a clear message instead of returning flights you did not ask for.
  • Round trips done properly. By default, each outbound flight comes with Google's round-trip total. Turn on Include return flights to get each outbound and return pair with the details of both flights and the exact total for that pair.
  • Verified before you pay. Every row is checked against the search Google answered: dates, currency, stops filter and flight numbers. Rows that do not match are discarded and not charged.
  • Clear status. Every search ends as OK, NO_RESULTS, BLOCKED, ERROR, INVALID_INPUT, TIMEOUT or NOT_PROCESSED, with the reason in the RUN_SUMMARY record. If more than 20% of searches fail, the run is marked as failed so you notice.
  • Safe on long runs. A search is marked as done in the same step that saves its rows, and saving pauses while the platform moves the run to another server, so a restart does not duplicate rows or charges.

What data you get

GroupFields
ItineraryAirlines, airline codes, flight numbers, departure and arrival airport, date and time, total duration, number of stops, Google's "best flights" flag
LayoversAirport, city, duration and whether you change airports
Each flight legFlight number, airline, airports with names, times, duration, aircraft, legroom, codeshare flight numbers, CO2
PriceTotal price for all passengers, currency, price type (one-way or round-trip total), passengers, cabin
EmissionsCO2 in kg, typical CO2 for the route, percentage versus typical, level (lower, typical, higher)
Return flightWith Include return flights: the full details of the return flight in each pair
Date gridCheapest price per departure date, number of options, nonstop availability and cheapest nonstop price, the cheapest flight's details
TraceabilitygoogleFlightsUrl (opens Google Flights with the flight selected and the booking options), sourceUrl, the input used and scrapedAt on every row

The output tab has an itineraries table and a date-grid table. Download as JSON, CSV or Excel, or connect through the API.

How to use it

  1. Enter From and To: an airport code (JFK) or a city (New York, Paris, France).
  2. Set the departure date (leave it empty to search 30 days from today) and, for a round trip, the return date.
  3. Choose adults, children, cabin class and stops.
  4. Choose the currency, language and country (the market you search from).
  5. Optional: add more routes or dates in More searches.
  6. Optional: turn on Include return flights for outbound and return pairs, or Date grid for the cheapest price per day.
  7. Run the Actor.

Input example: one-way and round trip

{
"origin": "JFK",
"destination": "LAX",
"departureDate": "2026-12-10",
"searches": [
{ "origin": "Bogotá", "destination": "Madrid, Spain", "departureDate": "2026-12-10", "returnDate": "2026-12-20" }
],
"adults": 2,
"cabinClass": "economy",
"maxStops": "any",
"currency": "USD",
"country": "US",
"maxResults": 50
}

Input example: date grid

{
"origin": "MEX",
"destination": "Cancún",
"dateGrid": true,
"dateGridStart": "2026-12-01",
"dateGridEnd": "2026-12-31",
"tripLengthDays": 5,
"currency": "MXN"
}

Leave tripLengthDays empty for one-way prices.

Example output

{
"origin": "CLO",
"destination": "MIA",
"tripType": "round_trip",
"position": 1,
"isBestFlight": true,
"airlines": ["COPA"],
"flightNumbers": ["CM 322", "CM 226"],
"departureAirport": "CLO",
"arrivalAirport": "MIA",
"departureDate": "2026-12-10",
"departureTime": "04:38",
"arrivalDate": "2026-12-10",
"arrivalTime": "11:25",
"durationMinutes": 407,
"stops": 1,
"layovers": [
{ "airport": "PTY", "airportName": "Tocumen International Airport Panama", "city": "Panama City", "durationMinutes": 122, "changeOfAirport": false, "nextDepartureAirport": "PTY" }
],
"emissions": { "co2Kg": 218, "typicalCo2Kg": 238, "percentVsTypical": -8, "level": "lower" },
"legs": [
{ "flightNumber": "CM 322", "airline": "COPA", "departureAirport": "CLO", "arrivalAirport": "PTY", "departureTime": "04:38", "arrivalTime": "06:14", "durationMinutes": 96, "aircraft": "Boeing 737", "legroom": "31 inches", "alsoSoldAs": ["UA 7081"], "co2Grams": 79973 }
],
"price": 1893330,
"currency": "COP",
"priceType": "round_trip_total",
"passengers": 1,
"cabinClass": "economy",
"returnDate": "2026-12-17",
"googleFlightsUrl": "https://www.google.com/travel/flights/search?tfs=...&hl=en&gl=co&curr=COP",
"scrapedAt": "2026-11-01T23:56:50.347Z"
}

A date-grid row:

{
"origin": "MEX",
"destination": "Cancún",
"destinationResolved": "/m/01q98m",
"destinationName": "Cancún",
"tripType": "round_trip",
"departureDate": "2026-12-03",
"returnDate": "2026-12-08",
"price": 2931,
"currency": "MXN",
"priceType": "round_trip_total",
"optionsFound": 24,
"nonstopAvailable": true,
"cheapestNonstopPrice": 2931,
"cheapestFlight": { "airlines": ["Viva"], "flightNumbers": ["VB 1038"], "departureTime": "19:20", "arrivalTime": "22:25", "arrivalDate": "2026-12-03", "durationMinutes": 125, "stops": 0 }
}

Pricing

Pay per event, no monthly fee:

EventPriceWhen it is charged
flightUSD 0.001 per itinerary (USD 1 per 1,000)Each itinerary saved with a price. With Include return flights, each outbound and return pair is one itinerary.
date-priceUSD 0.01 per date (USD 10 per 1,000)Each departure date saved with a price in Date grid mode.

Searches without flights, invalid input, blocked requests, duplicates and rows that fail validation are not charged. Your maximum cost per run is respected: rows beyond it are neither saved nor charged, and the summary says how many were found but not saved.

RunRowsApproximate cost
One route, one date, 30 itineraries30USD 0.03
Daily price check on 20 routes, 25 itineraries each500USD 0.50
Round trip with return flights, 10 pairs10USD 0.01
Cheapest day in a 31-day window31USD 0.31

Output fields

FieldMeaningWhen it is null or absent
origin, destinationWhat you entered.Never
originResolved, destinationResolvedThe airport code or Google city ID searched.Never
originName, destinationNameThe city name Google matched, for city searches.Absent for airport codes
tripTypeone_way or round_trip.Never
position, isBestFlightOrder in Google's results and whether Google lists it under "Best flights".Not in date grid rows
airlines, airlineCodes, flightNumbersMarketing airlines and flight numbers, in flight order.Never
departureAirport, departureDate, departureTimeWhere and when the itinerary starts (local time).Never
arrivalAirport, arrivalDate, arrivalTimeWhere and when it ends (local time). arrivalDate shows overnight arrivals.Never
durationMinutes, stopsTotal travel time and number of stops.Never
layoversOne entry per stop: airport, city, duration, change of airport.Empty list for nonstop flights
legsEach flight: number, airline, airports, times, duration, aircraft, legroom, codeshares (alsoSoldAs), CO2 in grams.aircraft, legroom when Google has no value
emissionsCO2 for the itinerary and versus the route's typical value.When Google shows no estimate
price, currencyLowest price Google shows, total for all passengers, taxes included.Never (rows without a price are not saved)
priceTypeone_way_total or round_trip_total. For round trips without return flights, the price is Google's lowest round-trip total starting with that outbound flight.Never
passengers, cabinClass, returnDateThe search Google priced.returnDate on one-way rows
returnFlightThe return flight, with the same fields as the outbound itinerary.Only with Include return flights
optionsFound, nonstopAvailable, cheapestNonstopPrice, cheapestFlightDate grid details.Only in date grid rows; cheapestNonstopPrice is null without nonstop flights
googleFlightsUrlOpens Google Flights with this flight (or pair) selected and its booking options.Never
sourceUrlThe results page the row came from.Never
inputThe search and options used.Never
scrapedAtWhen the data was collected (UTC).Never

Statuses and errors

StatusMeaningWhat to do
OKAt least one row saved. The summary explains if fewer than maxResults were saved.Nothing
NO_RESULTSGoogle shows no priced flight for this route, date and filters. Not charged.Change the date, relax the stops filter or try nearby airports.
BLOCKEDGoogle kept blocking after all retries and proxy escalation. Not charged.Run again later or select residential proxies.
ERRORGoogle returned an unexpected page. Not charged.Report it; the page format may have changed.
INVALID_INPUTFor example, an unknown airport code, a city Google could not match, or a currency Google does not support. Not charged.Fix the input as the message says.
TIMEOUTThe run reached its timeout before this search.Increase the run timeout.
NOT_PROCESSEDYour maximum cost per run was reached before this search.Raise the maximum cost per run.

Input errors such as a date in the past, a return before the departure, more than 9 passengers or a date grid longer than 62 days stop the run within seconds with a message that says how to fix them.

Known limits

  • Prices change constantly and depend on the market (country), currency and moment of the search, as on Google Flights itself. The booking page can show a slightly different final price.
  • The Actor returns the itineraries Google lists on its results page, usually between 5 and 100 per search.
  • Infants (on lap or in seat) are not supported: Google does not price them on the results page. Adults and children up to 9 passengers in total are supported.
  • Baggage fees and fare families (basic, main, flex) are shown only on Google's booking page and are not included.
  • Prices are totals for all passengers. Divide by passengers for an average per person; child fares can differ from adult fares.
  • Multi-city trips are not supported.

How it works

The Actor requests the same pages as the Google Flights website and reads the data Google embeds in them. Routes, dates, passengers, cabin and stops are encoded in the tfs URL parameter the website itself uses, and Google's answer is checked against the search sent. City names are matched to Google's own place IDs with Google's natural-language search. No browser is used, which keeps runs fast and inexpensive.

Current status

No incidents. Operational issues are posted here.

Integrations: API, schedules, webhooks, Google Sheets and AI agents

API. Run the Actor and receive the itineraries in one call:

$curl -X POST "https://api.apify.com/v2/acts/ocius-data~google-flights-prices/run-sync-get-dataset-items?token=YOUR_API_TOKEN&format=json" -H "Content-Type: application/json" -d '{"origin": "BOG", "destination": "MIA", "departureDate": "2026-12-15", "returnDate": "2026-12-22", "currency": "USD"}'

Python, with the official apify-client package:

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ocius-data/google-flights-prices").call(run_input={"origin": "JFK", "destination": "LHR", "departureDate": "2026-12-10", "maxStops": "nonstop"})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["price"], row["currency"], row["airlines"], row["departureTime"], row["stops"])

Schedules. Save your input as a task and open Schedules in Apify Console to check the same routes and dates every day and build a fare history. Use the date grid to watch the cheapest day of a whole month in one run.

Webhooks, Google Sheets, Zapier, Make and n8n. In the task, open Integrations and add a webhook for ACTOR.RUN.SUCCEEDED, the Google Sheets integration, or the official Apify app in Zapier, Make or n8n (trigger "Actor run finished", action "Get dataset items").

MCP and AI agents. The Actor is available through the Apify MCP server (https://mcp.apify.com). Add ocius-data/google-flights-prices to the server's Actor list and an AI agent such as Claude can call it with plain inputs such as {"origin": "MAD", "destination": "BCN", "departureDate": "2026-12-20"}.

FAQ

Is it legal? The Actor collects publicly available flight schedules and prices. It does not collect personal data. Check the rules that apply to your use case.

Why do prices differ from what I see? Set the same passengers, cabin, currency and country. Google adjusts prices by market, and airlines update fares many times a day.

Can I track a route every day? Yes. Schedule the Actor and compare price by flightNumbers and departureDate over time. The date grid is the cheapest way to watch a whole month.

What happens if I am charged for a wrong price? Open an issue with the run ID. Every case is reviewed, and confirmed defects are fixed with priority.

Built to the same standard: a status for every input in RUN_SUMMARY, actionable error messages and list-based inputs, so they chain well in one workflow:

Changelog

  • 0.1.7 (November 2026) When no departure date is given, the search uses the date 30 days from today, so the default input always runs.
  • 0.1 First version: one-way and round trip, airport codes and city names, passengers and cabin, stops filter, currency, language and market, return flight pairs, date grid, statuses and run summary, proxy escalation.

Use cases

  • Fare monitoring and price alerts for routes and dates
  • Travel agencies and corporate travel teams comparing airlines and schedules
  • Flexible-date search: the cheapest day to fly in a month
  • Route and capacity research: which airlines fly nonstop, with which aircraft
  • Sustainability reporting with CO2 estimates per itinerary

Tips

  • For daily monitoring, keep the same currency and country, and compare by flightNumbers and departureDate.
  • Use airport codes for exact airports, or a city to include all its airports. Add the country to ambiguous city names, for example Cartagena, Colombia.
  • Include return flights opens one extra page per outbound flight. Set maxResults to the number of pairs you need.
  • Sort date grid rows by departureDate or price; they are saved in completion order.

Support

Open an issue on the Actor page. Issues are reviewed every business day; the first response arrives within 24 business hours and critical failures are fixed or worked around within 72 hours.