Google Flights Fare Monitor: Cheapest Price & Drop Alerts
Pricing
from $9.00 / 1,000 fare check returneds
Google Flights Fare Monitor: Cheapest Price & Drop Alerts
Google Flights price tracker: the cheapest fare for a route and date, Google's own low / typical / high verdict and typical band, as one answer row per check. Monitor fares and get drop alerts in Slack, Discord or Telegram. No login or API key; checks that find nothing are free.
Pricing
from $9.00 / 1,000 fare check returneds
Rating
0.0
(0)
Developer
Adriana Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Type a route and a date, get one finished answer: the cheapest fare Google Flights shows, Google's own verdict on whether that price is low, typical or high, the typical price band behind it, and a link to the same search. Switch on monitoring and the actor remembers what each route cost last time, flags a price drop and posts it to Slack, Discord or Telegram.
It sells the answer, not 300 raw rows per search. If you want every itinerary Google lists, add them as opt-in rows; if you just want to know "is LHR to JFK cheap this week?", you get one row.
Who uses this
- Travellers and travel bloggers who want a "tell me when it drops" alert for a route and date they care about.
- Deal newsletters and Telegram / Discord channels that post cheap fares. One check per route and day, an alert only when the fare moved.
- Agencies and n8n / Make / Clay builders who need a fare for a route and date inside a workflow, without a Google account or an API key.
Try it in 30 seconds
Press Start with the pre-filled input. It checks London Heathrow to New York JFK, 60 days from today, and returns one row:
{ "routes": ["LHR-JFK +60d"] }
Write your own lines like this, one check per line:
LHR-JFK 2026-12-10 one wayLHR-JFK 2026-12-10 2026-12-17 returnBUD-LIS +45d 45 days from todayhttps://www.google.com/travel/flights?q=Flights+to+JFK+from+LHR+on+2026-12-10+one+way
A pasted Google Flights link is read as text for its route and dates. It is never opened.
What you get
One answer row per route and date:
| Field | Meaning |
|---|---|
cheapestPrice, currency | Lowest fare Google lists (one adult; for a return trip, the full round-trip price). |
cheapestAirlines, cheapestStops, cheapestDurationMin | Airline(s), number of stops and total travel time of that cheapest itinerary. |
cheapestNonstopPrice | Lowest nonstop fare, or null when Google lists no nonstop flight. |
bestPrice | Lowest fare inside Google's own "best flights" group. |
itineraryCount | How many itineraries Google lists for the search. |
priceLevel | low, typical or high: whether the cheapest fare sits below, inside or above Google's typical band for this search. |
typicalLow, typicalHigh | The bottom and top of that typical band. |
googleFlightsUrl | The same search on Google Flights, to open and book there. |
changeType, previousCheapest, changePct, lowestEverSeen, daysSincePrevious | Monitoring fields (empty unless you turn monitoring on). |
Set Itinerary rows to add per check above 0 and the cheapest N itineraries follow as extra rows: airlines, flight numbers, departure and arrival time, duration, stops, layover airports, price, and CO2 estimate where Google shows one.
Other settings, each one verified to change the result: currency (USD, EUR, GBP), cabin (economy, business, first), nonstopOnly (applied after the fetch), dateWindowDays (check a run of consecutive days).
Example output
An answer row for Budapest to Lisbon, with Google saying the price is low:
{"rowType": "fare-check","origin": "BUD", "destination": "LIS","departDate": "2026-12-10", "returnDate": null,"currency": "USD","cheapestPrice": 70, "cheapestAirlines": "Ryanair", "cheapestStops": 0, "cheapestDurationMin": 235,"cheapestNonstopPrice": 70, "bestPrice": 70, "itineraryCount": 9,"priceLevel": "low", "typicalLow": 75, "typicalHigh": 205}
Monitoring: a fare-drop alert in three steps
- Turn on monitoring and name the watchlist. Tick Track fares across runs, type a Watchlist name, and tick Only return rows that changed so a quiet day writes no row and costs nothing. The first run records today's fares; alerts start from the second run (tick Seed silently to also skip the first run's rows).
- Schedule it. Save the input as an Apify Task and add a daily Schedule. Each run compares every route and date with the previous run and sets
changeTypetodrop,rise,level-low(Google's verdict turned low) orunchanged. A drop of 5% or more counts; change the threshold with Alert when the fare drops by at least (%). - Send it somewhere. Paste a Slack or Discord webhook (or a Telegram bot link) into Send alerts to. Every drop and every "verdict turned low" arrives as one message with the route, dates, new and previous price and the Google Flights link. For n8n or Make, leave the format on JSON, or skip the webhook and add an Apify trigger node on run success, then read the dataset: rows with
changeType=drop.
Alerts are only sent for checks that were actually billed, messages are never billed, and a failed message never fails the run (the row's notifyErrors says why).
Limits, stated plainly
- It returns Google's list as shown. Whatever Google Flights puts on the page for that search is what you get. It does not search for self-transfer or hidden-city tricks and makes no claim about them.
- No booking links, no hotels.
googleFlightsUrlopens the search on Google Flights. Hotels are not covered. - One adult. Prices are per passenger for one adult. Premium economy is not offered because Google did not understand it in testing.
- At most 31 checks per run. A longer list, or a list combined with a wide
dateWindowDays, is cut at 31; the lines that were cut come back as free "not checked" rows. - Google decides what exists. Dates in the past or too far ahead, and airport codes Google cannot place, come back as not found (free). Google quietly re-reads some wrong codes as another airport; the actor compares Google's airports with yours and returns a not-found row instead of someone else's fare.
- The verdict follows the search. With Nonstop only on,
cheapestPriceis the cheapest nonstop fare, whilepriceLevelstill describes the whole search. - Misses are free. Not found, blocked, consent page, layout change: nothing is charged.
Pay-per-event. A flat per-run fee covers session/proxy warmup; you're billed
per item only when data is actually found and returned — see
.actor/pay_per_event.json for exact prices. A miss is never charged.
How to use
- In the Apify Console. Open the actor page and click Start — the
routesfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~google-flights-fare-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"routes":["LHR-JFK +60d"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
Input
{"routes": ["LHR-JFK +60d"]}
One check per line: LHR-JFK 2026-12-10 for one way, LHR-JFK 2026-12-10 2026-12-17 for a return. +60d instead of a date means 60 days from today. A pasted google.com/travel/flights link is read as text for its route and dates (it is never opened). Accepted formats: LHR-JFK 2026-12-10, LHR-JFK 2026-12-10 2026-12-17, LHR-JFK +60d, https://www.google.com/travel/flights?q=Flights+to+JFK+from+LHR+on+2026-12-10+one+way.
Sample output
| query | found | status | rowType | origin | destination | departDate | returnDate | currency | cheapestPrice | cheapestAirlines | cheapestStops | cheapestDurationMin | cheapestNonstopPrice | bestPrice | itineraryCount | priceLevel | typicalLow | typicalHigh | googleFlightsUrl | checkedAt | changeType | previousCheapest | changePct | lowestEverSeen | daysSincePrevious | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LHR-JFK +60d | true | OK | <cheapest fare: duration (min)> | <cheapest 'best' fare> | <google's price verdict> | <change (%)> | 1970-01-01T00:00:00.000Z |
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~google-flights-fare-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"routes":["LHR-JFK +60d"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~google-flights-fare-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"routes":["LHR-JFK +60d"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~google-flights-fare-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"routes":["{{fare check}}"]}, mapping the row's fare check into the routes array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Google Flights Price Tracker: Cheapest Fare & Drop Alerts" — the agent will find and run this actor.
FAQ
Is this the official Google Flights API? No. It reads the public Google Flights page for a route and date without logging in, stays on the /travel/flights page that Google's robots.txt allows, and never opens a booking or search path.
Why does a return trip show only outbound flights? That is how Google lists a return search: each row is an outbound itinerary priced with the cheapest matching return, so cheapestPrice is the full round-trip price.
What does "typical" mean? Google compares the cheapest fare with the usual price range for that route and date range. low is below the range, high is above it, typical is inside it. typicalLow and typicalHigh are the ends of that range.
Which currencies? USD, EUR and GBP.
Why did my check come back "not found"? The date is in the past or too far ahead, Google could not place an airport code, or (with Nonstop only) no nonstop flight exists. It costs nothing.