Skip to content

Google Flights API

Live Google Flights data, with a price verdict

Two endpoints over live Google Flights results: fares as flat JSON, with Google's price band, a low | typical | high verdict, and a booking link.

  • POST /oneway and POST /roundtrip: round-trips come back as paired itineraries, not stapled legs
  • price_insights_low / high + Google's verdict on every result, on every plan
  • X-Search-Status separates "no flights" from "the search failed"

Free tier on RapidAPI. No card to try.

POST /api/google_flights/oneway/v1
captured run · 2026-08-26
{
  "from_airport": "JFK",
  "to_airport": "CUN",
  "departure_date": "2027-01-01",
  "limit": 5,
  "currency": "usd"
}
Replays the captured request: free, no account, nobody's quota.

POST /api/google_flights/oneway/v1

One-way: the full request surface

Three required fields; everything else narrows the search. The dedicated one-way page covers each response field too.

Required

departure_datestring

The travel date as YYYY-MM-DD.

from_airportstring

Origin IATA code. New York is JFK.

to_airportstring

Destination IATA code.

Optional · filtering

max_stopsint

Maximum stops per itinerary. 0 for nonstop only.

airline_codes / exclude_airline_codesstring[]

Restrict results to these carriers, or keep everything except them.

departure_time_min / _max, arrival_time_min / _maxint 0–23

Hour-of-day windows for departure and arrival.

max_priceint

Upper bound on the fare, in the requested currency.

seat_typeint

Cabin: 1 Economy, 3 Business.

Optional · shape & behavior

sort_type"Overall" | "Price" | "Duration"

Default Overall. Note that "Price" reflects Google's own ordering, not a strict sort. Sort locally on price_as_number for exact price order.

passengersint[]

Passenger mix: 1 adult, 2 child, 3 infant on lap, 4 infant in seat.

currencystring

Defaults to USD.

limitint

Maximum results returned. Defaults to 10.

strictbool

Opt-in, default false: a search that did not complete returns HTTP 503 instead of an empty array. Details on the search-status page.

use_ext_proxybool

Default true: routes through a residential proxy to reduce blocks. Set false for lower latency on easy routes.

POST /api/google_flights/roundtrip/v1

Round-trip: same controls, split per leg

Four required fields, and every one-way filter exists twice: once for the outbound, once for the return.

Required

departure_date / return_datestring

Both travel dates, YYYY-MM-DD.

from_airport / to_airportstring

IATA codes, as on one-way.

Optional · per leg

max_departure_stops / max_return_stopsint

Stop limits set independently. Nonstop out, one stop back is a valid ask.

departure_airline_codes / return_airline_codesstring[]

Per-leg carrier restrictions, with matching _exclude_ variants for both legs.

departure_* / return_* time windowsint 0–23

departure_departure_time_min/_max, departure_arrival_time_min/_max, and the return_-prefixed equivalents.

Optional · shared

sort_type · currency · max_price · seat_type · passengers · limit · strict · use_ext_proxy

Exactly as on one-way, applied to the paired search as a whole.

Why this one

Common gaps in other Google Flights APIs

Each row is a failure mode this API was designed against, and every right-hand answer is provable on the pages above, not adjectives.

The problemHow this API handles it
Round-trips return broken or unpaired legsA real /roundtrip endpoint with paired itineraries and combined totals.
No sense of whether a price is goodGoogle’s own price band and a low | typical | high verdict on every result.
You have to bring your own SerpApi key and pay twiceOne subscription. No third-party key, no second bill.
An empty response could mean “no flights” or a failed scrape, and you cannot tell whichFailed reads are retried, and an empty array counts as an answer only when the page said so. X-Search-Status tells a real empty apart from a degraded search, and opt-in strict turns a degraded one into a 503.
Blocked by Google under loadResidential proxy routing on by default, switchable per request.
Filters are a thin subset of the Google Flights UIStops, airlines, exclusions, time-of-day windows per leg, cabin, passenger mix, max price, currency.
Serial only, so flexible dates take minutesRate limits sized for parallel date scans: 150 / 250 / 500 requests per minute by plan.

Pricing

Every plan gets both endpoints

PlanPrice / moRequests$ / 1k reqOverageRate limit
BASICFree10 / mohard capGet this plan →
PRO$102,500 / mo$4.00$0.003 / req150 / minGet this plan →
ULTRArecommended$2510,000 / mo$2.50$0.003 / req250 / minGet this plan →
MEGA$5050,000 / mo$1.00$0.001 / req500 / minGet this plan →

Every plan includes every endpoint. You only choose volume and rate limit. Read from the live listing on 2026-08-26; the listing is authoritative.

Questions, answered plainly

Is this an official Google API?
No. FlightPowers is an independent API that reads the public Google Flights site live at request time; it is not affiliated with or endorsed by Google. The fields it returns, including the price band and the low | typical | high verdict, are the values Google shows travellers, passed through as-is.
What data does each flight result include?
Flat JSON per itinerary: price as a display string and a number (price / price_as_number), airline, duration in text and seconds, stop count with per-layover details, local departure and arrival times, a buy_link that reopens the exact itinerary on Google Flights, and Google’s price_insights_low / price_insights_high band with a low | typical | high verdict.
Is the round-trip endpoint really one search?
Yes. POST /roundtrip returns one object per itinerary with total_price, total_duration_seconds, total_stops, and the outbound and return legs already paired, not two one-way responses you have to combine yourself. Each leg takes its own filters.
What happens when a route has no flights?
The response says so explicitly. X-Search-Status: empty means the search completed and Google genuinely has no itineraries. The empty array is the answer. X-Search-Status: degraded means the search did not complete and the empty array says nothing about availability. Opt-in strict: true turns a degraded search into an HTTP 503 instead.
How do I search flexible dates?
One request per date, fired in parallel. “3 to 5 nights, JFK to Paris or Prague, anywhere in May” is 31 dates × 3 durations × 2 destinations = 186 requests. The per-minute rate limits (150 on Pro, 250 on Ultra, 500 on Mega) are sized so that finishes in a burst or two, not a serial loop.
Do I need a SerpApi key or another scraping subscription?
No. One RapidAPI subscription covers everything on this page. There is no third-party key to bring and no second bill.
How much does the Google Flights API cost?
Plans on RapidAPI: a $0 BASIC tier (10 requests/month, hard cap: it verifies your key, it doesn’t evaluate), then $10, $25, $50 per month for 2,500, 10,000, 50,000 requests. Every plan includes both endpoints and every response field.
How fast is a search?
Results are scanned live against Google Flights at request time, not served from a cache, so response time tracks route complexity. Dense routes with many connections take longer than trunk routes, and a search that has to retry an unreadable page takes longer still. Set a generous client timeout.

Every fare, judged, from one subscription

Live Google Flights data with the price band, verdict, and booking link attached to every result.

Free tier: 10 requests/month. No card to try.