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 group
  • legs[].segments[] — flight number, airline, aircraft, times and airports
  • legs[].layovers[] — connection airport and duration
  • carbon_emissions — emissions in kg and how they compare with typical
  • price_insights — lowest price, price level, typical range and history
  • departure_token / booking_token — continue to the next leg or to booking options
  • booking_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"
  }'
Response (trimmed)
{
  "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.

EndpointWhat it returnsCreditsStarter · Growth · Scale
Flight search
POST /v1/serp/google_flights
Itineraries for one-way, round-trip and multi-city trips with filters3 credits$0.0029 · $0.0018 · $0.0012
Return or next leg
POST /v1/serp/google_flights_return
The legs that pair with a chosen itinerary3 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 itinerary3 credits$0.0029 · $0.0018 · $0.0012
Fare calendar
POST /v1/serp/google_flights_calendar
Cheapest fare per departure date5 credits$0.0049 · $0.0030 · $0.0020
Airport lookup
POST /v1/serp/google_flights_location_search
Airports, cities and regions for a name1 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.