Google Flights API
Every itinerary Google Flights shows for a route and date, with legs, layovers, emissions and price insights, then the return leg and the booking options behind the fare you pick.
1,000 free credits a month · Failed requests are free · Free during the beta
The Google Flights API follows the same flow as the Google Flights site. Search a route and date to get every itinerary, grouped into best and other flights. An itinerary with more legs to choose carries a departure_token that returns the matching return or next multi-city leg. A complete itinerary carries a booking_token that returns the sellers, fares, fare rules and bag fees.
The calendar endpoint answers the other common question, which day is cheapest, with the lowest fare for each departure date around the one you ask for. Airport and city codes can be looked up by name first.
What you get
itineraries[]— price, total duration, stops and the best/other grouplegs[].segments[]— flight number, airline, aircraft, times and airportslegs[].layovers[]— connection airport and durationcarbon_emissions— emissions in kg and how they compare with typicalprice_insights— lowest price, price level, typical range and historydeparture_token / booking_token— continue to the next leg or to booking optionsbooking_options[]— sellers with price, fare rules and bag fees (booking endpoint)
One call, structured JSON
POST /v1/serp/google_flights — 3 credits per successful call.
curl -X POST "https://api.scrapercompany.com/v1/serp/google_flights" \
-H "x-api-key: $SCRAPERCOMPANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"departure": "JFK",
"arrival": "LAX",
"departure_date": "2026-12-02",
"return_date": "2026-12-07",
"adults": 1,
"currency": "USD"
}'{
"departure_airport": "YUL",
"arrival_airport": "CDG",
"departure_date": "2029-03-30",
"currency": "USD",
"adults": 1,
"itineraries": [
{
"legs": [
{
"segments": [
{
"departure_airport": "YUL",
"arrival_airport": "CDG",
"departure_time": "2026-11-04T18:10:00",
"arrival_time": "2026-11-05T07:20:00",
"airline": "Air Canada",
"airline_code": "AC",
"flight_number": "AC 874",
"duration_minutes": 430,
"aircraft": "Airbus A330",
"cabin_class": "economy",
"departure_airport_name": "Montréal-Pierre Elliott Trudeau International Airport",
"arrival_airport_name": "Aéroport de Paris-Charles de Gaulle",
"ticket_also_sold_by": [
"LH 6809",
"SN 9636"
],
"legroom": "31 in",
"legroom_category": "average",
"overnight": true,
"red_eye": false,
"often_delayed_by_over_30_min": false,
"carbon_emissions_kg": 325,
"extensions": [
"Average legroom (31 in)",
"Wi-Fi for a fee"
],
"airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
}
],
"departure_airport": "YUL",
"arrival_airport": "CDG",
"duration_minutes": 430,
"stops": 0,
"layover_airports": [],
"is_direct": true,
"layovers": [],
"airlines": [
"Air Canada"
],
"departure_time": "2026-11-04T18:10:00",
"arrival_time": "2026-11-05T07:20:00"
}
],
"price": 527,
"currency": "USD",
"display_price": "$527",
"carbon_emissions_kg": 325,
"carbon_emissions_comparison": "19% lower than typical",
"trip_type": "round_trip",
"total_stops": 0,
"is_direct": true,
"departure_token": "gf1.eNqFUMkKwjAU_Jd3TiGpVqU3TVuhBO1iIhpyEhe09NJWBfHfTRexxS2BlxneMvNygzPYBMEObJkWSYKqQOpHKo0kQbi8Cr3yn4IsD6w4A12rVMmBOtOGVSW4VQ4mNgcGwQax4Dmg7u5k6hF1x5hqPhr2Qf3w0quU29JdW9-NmCb8WbEReFMnCkFWfWMONtBj5C1db8bdq8dEFMRYzBm3AkHJhAnfC_klj0XkL04iDoW_1kttdBuPHY0OiYbbVKN9iYoM7g_hQ347",
"google_flights_url": "https://www.google.com/travel/flights/search?tfs=CBwQAho_EgoyMDI2LTExLTA0Ih8KA1lVTBIKMjAyNi0xMS0wNBoDQ0RHKgJBQzIDODc0agc...",
"group": "best",
"price_exact": 526.19,
"carbon_emissions": {
"this_flight": 325000,
"typical_for_this_route": 399000,
"difference_percent": -19
},
"total_duration_minutes": 430,
"carry_on_bags_included": 1,
"airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
},
{
"legs": [
{
"segments": [
{
"departure_airport": "YUL",
"arrival_airport": "YYZ",
"departure_time": "2026-11-04T10:10:00",
"arrival_time": "2026-11-04T11:45:00",
"airline": "Air Canada",
"airline_code": "AC",
"flight_number": "AC 407",
"duration_minutes": 95,
"aircraft": "Airbus A321",
"cabin_class": "economy",
"departure_airport_name": "Montréal-Pierre Elliott Trudeau International Airport",
"arrival_airport_name": "Toronto Pearson International Airport",
"ticket_also_sold_by": [],
"legroom": "31 in",
"legroom_category": "average",
"overnight": false,
"red_eye": false,
"often_delayed_by_over_30_min": false,
"carbon_emissions_kg": 71,
"extensions": [
"Average legroom (31 in)",
"Free Wi-Fi"
],
"airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
},
{
"departure_airport": "YYZ",
"arrival_airport": "CDG",
"departure_time": "2026-11-04T21:10:00",
"arrival_time": "2026-11-05T10:20:00",
"airline": "Air Canada",
"airline_code": "AC",
"flight_number": "AC 872",
"duration_minutes": 430,
"aircraft": "Boeing 777",
"cabin_class": "economy",
"departure_airport_name": "Toronto Pearson International Airport",
"arrival_airport_name": "Aéroport de Paris-Charles de Gaulle",
"ticket_also_sold_by": [],
"legroom": "31 in",
"legroom_category": "average",
"overnight": true,
"red_eye": true,
"often_delayed_by_over_30_min": true,
"carbon_emissions_kg": 394,
"extensions": [
"Average legroom (31 in)",
"Wi-Fi for a fee"
],
"airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
}
],
"departure_airport": "YUL",
"arrival_airport": "CDG",
"duration_minutes": 1090,
"stops": 1,
"layover_airports": [
"YYZ"
],
"is_direct": false,
"layovers": [
{
"duration_minutes": 565,
"airport": "YYZ",
"airport_name": "Toronto Pearson International Airport",
"city": "Toronto",
"departure_airport": "YYZ",
"change_of_airport": false,
"overnight": false
}
],
"airlines": [
"Air Canada"
],
"departure_time": "2026-11-04T10:10:00",
"arrival_time": "2026-11-05T10:20:00"
}
],
"price": 535,
"currency": "USD",
"display_price": "$535",
"carbon_emissions_kg": 464,
"carbon_emissions_comparison": "16% higher than typical",
"trip_type": "round_trip",
"total_stops": 1,
"is_direct": false,
"departure_token": "gf1.eNqFUMkKwjAU_Jd3TiGpVqU3TVuhBO1iIhpyEhe09NJWBfHfTRexxS2BlxneMvNygzPYBMEObJkWSYKqQOpHKo0kQbi8Cr3yn4IsD6w4A12rVMmBOtOGVSW4VQ4mNgcGwQax4Dmg7u5k6hF1x5hqPhr2Qf3w0quU29JdW9-NmCb8WbEReFMnCkFWfWMONtBj5C1db8bdq8dEFMRYzBm3AkHJhAnfC_klj0XkL04iDoW_1kttdBuPHY0OiYbbVKN9iYoM7g_hQ347",
"google_flights_url": "https://www.google.com/travel/flights/search?tfs=CBwQAhpgEgoyMDI2LTExLTA0Ih8KA1lVTBIKMjAyNi0xMS0wNBoDWVlaKgJBQzIDNDA3Ih8...",
"group": "other",
"price_exact": 534.12,
"carbon_emissions": {
"this_flight": 464000,
"typical_for_this_route": 399000,
"difference_percent": 16
},
"total_duration_minutes": 1090,
"carry_on_bags_included": 1,
"airline_logo": "https://www.gstatic.com/flights/airline_logos/70px/AC.png"
}
],
"wire_bytes": 330950,
"elapsed_s": 0.942,
"cheapest_price": 527,
"trip_type": "round_trip",
"leg_index": 0,
"legs_total": 2,
"itinerary_count": 69,
"best_count": 3,
"price_insights": {
"lowest_price": 527,
"price_level": "typical",
"typical_price_range": [
475,
530
],
"price_history": [
[
1790568000,
528
],
[
1790654400,
528
]
]
},
"airlines_available": [
{
"code": "ONEWORLD",
"name": "Oneworld",
"type": "alliance"
},
{
"code": "SKYTEAM",
"name": "SkyTeam",
"type": "alliance"
}
],
"google_flights_url": "https://www.google.com/travel/flights/search?tfs=CBwQAhoeEgoyMDI2LTExLTA0agcIARIDWVVMcgcIARIDQ0RHGh4SCjIwMjYtMTEtMTFqBwgBEgNDREdyBwgBEgNZVUxAAUgBcAGCAQsI____________AZgBAQ&hl=en&gl=us&curr=USD",
"source": "rpc",
"return_date": "2029-04-06"
}Endpoints and price per call
Credits per successful call, and what one call costs on the Starter, Growth, Scale plans. Failed requests cost nothing. See all plans.
| Endpoint | What it returns | Credits | Starter · Growth · Scale |
|---|---|---|---|
| Flight search POST /v1/serp/google_flights | Itineraries for one-way, round-trip and multi-city trips with filters | 3 credits | $0.0029 · $0.0018 · $0.0012 |
| Return or next leg POST /v1/serp/google_flights_return | The legs that pair with a chosen itinerary | 3 credits | $0.0029 · $0.0018 · $0.0012 |
| Booking options POST /v1/serp/google_flights_booking | Sellers, fares, fare rules and bag fees for a complete itinerary | 3 credits | $0.0029 · $0.0018 · $0.0012 |
| Fare calendar POST /v1/serp/google_flights_calendar | Cheapest fare per departure date | 5 credits | $0.0049 · $0.0030 · $0.0020 |
| Airport lookup POST /v1/serp/google_flights_location_search | Airports, cities and regions for a name | 1 credit | $0.0010 · $0.0006 · $0.0004 |
Frequently asked questions
Does Google have a public Flights API?
No. Google retired its QPX Express flight API in 2018 and Google Flights has no public API. This API returns the public Google Flights results as structured data.
How do round trips work?
Send a search with a return_date. Each outbound itinerary carries a departure_token; pass it to the return-leg endpoint to get the return flights that pair with it, then use the booking_token of the complete trip for booking options. Multi-city trips work the same way, one leg at a time.
Which filters are supported?
Cabin class, passengers, stops, included or excluded airlines, maximum price and duration, departure and arrival time windows, layover duration, bags, emissions and sort order.
Can I find the cheapest day to fly?
Yes. The fare calendar returns the lowest fare for each departure date around the date you ask for, for one-way or round trips, in one 5-credit call.
Do failed requests cost credits?
No. A failed or blocked call (any non-2xx response) costs 0 credits, and so does a search page that comes back empty. You pay only for successful results.
How do I get an API key?
Request a free API key through the contact page. The Free plan includes 1,000 credits a month, and the API is free while it is in beta. You create and rotate keys yourself in the dashboard.