Flight price tracking

Flight price tracking on Google Flights data

The cheapest fare on each date of a route, full itineraries with layovers and emissions, Google’s price insights and every seller’s booking option, from one API.

Built forFare-alert appsDeal newslettersTravel agenciesCorporate travel tools

See it in action

The whole month in one grid

The cheapest fare for every departure day, then the trip behind the day you pick, with Google's price insight.

  • data from the API
  • added by your code

Example · fare tracker

Which day in May is the cheapest to fly?

  1. POST /v1/serp/google_flights_calendar
  2. POST /v1/serp/google_flights
  3. your alerts

YYZ → LIS

Round trip · 7 nights · economy · 1 adult

May 2027from $560

MTWTFSS

Tue, May 11

$560

1 stop · 11h 05m out, 9h 50m back · bags priced in · 4 sellers

Price insight: low. $170 under Google's typical $640–820.

Illustrative fares. The price insight comes from Google's price_insights.

The problem

When is the cheapest day to fly this route?

Fare tracking means watching a route over many dates, not checking one search. You need the price for every departure date, then the full itinerary and its sellers when a fare drops.

Google Flights has the most complete picture, but it is built for people clicking, one leg at a time. The API turns each step into a request with a token that carries the search to the next one.

Workflow

How teams build it

  1. Step 1

    Scan the date grid

    Get the cheapest price for each date on a route, so you can find the low days before searching any of them.

    POST /v1/serp/google_flights_calendar
  2. Step 2

    Search the itinerary

    Search one-way or round trip with filters for stops, airlines, bags, cabin and maximum price. The answer includes Google's price insights.

    POST /v1/serp/google_flights
  3. Step 3

    Pick the return

    Pass the chosen outbound's departure token to get its return options. Prices stay whole-trip.

    POST /v1/serp/google_flights_return
  4. Step 4

    Get the booking options

    See who sells the itinerary and for how much, airline-direct or not, with fare families and bag fees.

    POST /v1/serp/google_flights_booking

Output

What you get back

Date grid
the cheapest fare per departure date on a route
Itineraries
legs, segments, layovers, aircraft and emissions
Price insights
Google's typical range, price level and history
Sellers
airline-direct and agency options with local prices and bag fees
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-03",
    "return_date": "2026-12-08",
    "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"
}

Worked example

A deals newsletter watches 50 routes daily and re-prices 25 fare drops

Illustrative scenario, not a customer

CallPer dayCredits eachCredits a day
Date grid per route505250
Itinerary search on a dropped fare25375
Credits a month
9,750
Fits on
Starter
Plan price
$49 /month

30 days a month. Failed and empty requests cost nothing, so a bad day costs less. Compare plans

Can I search by city instead of airport?

Yes. Departure and arrival accept IATA airport codes such as YUL, or city codes such as NYC, LON and PAR, which search every airport in the city.

Are prices for the whole trip?

Yes. On a round trip, the price Google shows already includes the return, and it stays whole-trip when you pick the return leg.

Are empty searches charged?

No. A search that returns no flights is free at every step, and so is any failed request.

Does it include bag fees?

When you send carry-on or checked bag counts, Google adds the bag fees to the price, and the booking options list them per seller.

Start with 1,000 free credits a month

Tell us which properties, sources and engines you need. Our team sets up your account, and you create and rotate API keys yourself. The API is free during the beta.