Flight Price Insights API
Fares with a verdict, not just a number
Send a route and a date; get live fares with Google's own price band and a low | typical | high call on each.
price_insights_low / high: Google's historical band for the route & datesprice_range_in_relation_to_other_periods: the verdict, straight from Google- On every plan, on every search, including round-trips and the free tier
Free tier on RapidAPI. No card to try.
{
"from_airport": "JFK",
"to_airport": "CUN",
"departure_date": "2027-01-01",
"limit": 5,
"currency": "usd"
}The three fields
What the response tells you
Captured from a real search (JFK→Cancún, January 1) on the date stamped above.
price_insights_lownumber | nullThe bottom of Google's historical price range for this route and these dates. In the capture: $140.
price_insights_highnumber | nullThe top of the band. In the capture: $180. A fare under the low end is objectively cheap for the route; over the high end, objectively expensive.
price_range_in_relation_to_other_periods"low" | "typical" | "high" | nullGoogle's own comparison of the current fare against that band: the field your alerting, ranking, and "book now" logic can branch on directly. In the capture: typical
The captured fare ($177) on Google's band for JFK→CUN
This is the whole feature in one picture: the band says what the route usually costs, the dot says what it costs right now. Rendering this, or just reading the verdict, is one field access.
Patterns
Three things this field replaces
Each of these normally requires months of your own fare history. The band ships it in the response.
A price alert without a database
fares = search("JFK", "LHR", "2026-12-10")
best = min(fares, key=lambda f: f["price_as_number"])
if best["price_range_in_relation_to_other_periods"] == "low":
alert(f"JFK→LHR is LOW: {best['price']}",
link=best["buy_link"])An agent that can say "book it"
{
"price": "$177",
"price_insights_low": 140,
"price_insights_high": 180,
"price_range_in_relation_to_other_periods":
"typical"
}
// "That fare is typical for this route.
// The usual range is $140 to $180."Ranking results by value
const rank = { low: 0, typical: 1, high: 2 };
flights.sort((a, b) =>
rank[a.price_range_in_relation_to_other_periods] -
rank[b.price_range_in_relation_to_other_periods] ||
a.price_as_number - b.price_as_number
);Pricing
Every plan carries this field
| Plan | Price / mo | Requests | $ / 1k req | Overage | Rate limit | |
|---|---|---|---|---|---|---|
| BASIC | Free | 10 / mo | — | hard cap | — | Get this plan → |
| PRO | $10 | 2,500 / mo | $4.00 | $0.003 / req | 150 / min | Get this plan → |
| ULTRArecommended | $25 | 10,000 / mo | $2.50 | $0.003 / req | 250 / min | Get this plan → |
| MEGA | $50 | 50,000 / mo | $1.00 | $0.001 / req | 500 / min | Get 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
- Where do the price insights come from?
- From Google Flights itself. Google computes a historical price range for a route and date window and, when available, a verdict on how the current fare compares. The API surfaces those exact values as price_insights_low, price_insights_high, and price_range_in_relation_to_other_periods. Nothing is modelled on our side.
- Is the verdict on every result?
- No. It appears when Google publishes it for that route and date, which is most well-travelled routes. When Google doesn’t provide a band, the fields are null and your code should treat the fare as unjudged rather than bad. The captured example on this page shows real values.
- What values can the verdict take?
- price_range_in_relation_to_other_periods is one of "low", "typical", or "high", in Google’s own wording. "low" means the current fare sits below the usual range for that route and dates: the buy signal.
- How do I build a price alert with this?
- Poll the route on a schedule (a cron, an n8n workflow, or an agent) and fire when the verdict flips to "low". You skip building a price-history database entirely, because Google’s band is the history.
- Do competing flight APIs return this?
- Check their docs for a price-insights or price-band field. Most Google Flights wrappers return fares only, which leaves “is this a good price?” unanswerable without your own history. It is the main reason this API exists as a separate product. Our comparison pages quote competitors’ own documentation, dated.
- Does it cost extra?
- No. The fields ride on every one-way and round-trip search on every plan, including the free tier.
Stop guessing whether a fare is good
One subscription, every endpoint, and Google's own price context on every result.
Free tier: 10 requests/month. No card to try.