Cheapest destinations from an airport, each with its fare and that route's typical price.
One address for any MCP client. Your key stays in your Odel vault.

At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
| Access to | Read | Change |
|---|---|---|
| Full api access | Not stated: full_api_access | |
From the sign-in at console-backend.apify.com, as the endpoint publishes it. You approve it there.
Odel could not list its tools without signing in.
Give it an airport and get back the thirty cheapest destinations you can fly to from there, as structured JSON. Each one comes with the price, the typical price for that route, exact dates, airline, stops, duration, a photo, and a booking link.
The part nobody else gives you: which of them are actually bargains. A cheap fare and a good deal are not the same thing.
Actor: Google Flights Deals API on Apify Store
https://www.youtube.com/watch?v=jREWahDGhJM
git clone https://github.com/johnisanerd/Apify-Google-Flights-Deals-API.git
cd Apify-Google-Flights-Deals-API
cp .env.example .env # paste your Apify token
uv sync
uv run google-flights-deals-api-example.py
Get a free Apify API key at apify.com.
average_price, what that route typically costs, plus savings, savings_percent, and an is_below_typical flag.Measured across three hubs, roughly 6 to 30% of the feed genuinely beats its typical price, depending on the airport. The rest are cheap in absolute terms without being discounts, usually short-haul routes. That is the nature of the source, and it is exactly why is_below_typical exists: it turns a list of cheap flights into a list you can filter for bargains.
One limit worth knowing: setting maxDurationMinutes makes the source stop returning the typical-price baseline, so that single filter turns off bargain detection. Every other filter keeps it, including one way.
| Feature | Detail |
|---|---|
| Bargain flag | is_below_typical is true only when the fare beats its own route's typical price |
| Derived savings | savings and savings_percent, computed locally on every row |
| Multi-airport | departureIds watches several home airports in one run |
| Filters | cabin class, max price, max stops, trip length preset, airline include or exclude |
| Booking links | flight_link goes straight to the itinerary |
| Localization | currency, hl, and gl |
Nonstop options under a budget:
run_input = {"departureId": "LAX", "maxStops": "nonstop", "maxPrice": 400}
Weekend trips from a set of home airports:
run_input = {"departureIds": ["JFK", "EWR", "LGA"], "travelDuration": "weekend"}
Business class bargains:
run_input = {"departureId": "LAX", "travelClass": "business"}
| Parameter | Type | Description |
|---|---|---|
departureId | string | 3-letter IATA code, such as JFK. |
departureIds | array | More airports. Each is one lookup. |
tripType | select | Round trip (default) or one way. Both keep the savings baseline. |
outboundDate / returnDate | string | YYYY-MM-DD. Leave blank to let the feed pick cheap dates. |
travelDuration | select | any, one_week, weekend, two_weeks |
tripLength | string | Exact days, as 7 or a range like 5-10. |
travelClass | select | economy, premium_economy, business, first |
maxPrice | integer | Drop deals above this price. |
maxStops | select | any, nonstop, one_stop, two_stops |
maxDurationMinutes | integer | Drop longer deals. Turns off bargain detection, see above. |
includeAirlines / excludeAirlines | string | Comma-separated codes. Mutually exclusive. |
maxDealsPerAirport | integer | Default and maximum 30. |
currency, hl, gl | string | Currency, language, country. |
One row per destination:
{
"result_type": "deal",
"position": 1,
"departure_id": "JFK",
"name": "Nantucket",
"country": "United States",
"price": 295,
"average_price": 478,
"savings": 183.0,
"savings_percent": 38.3,
"is_below_typical": true,
"route": "JFK to ACK",
"outbound_date": "2026-10-01",
"return_date": "2026-10-08",
"flight_duration": 282,
"stops": 1,
"airline": "JetBlue",
"flight_link": "https://www.google.com/travel/flights?tfs=..."
}
Negative savings are preserved rather than hidden: knowing a "deal" sits above its typical price is useful information.
This Actor returns a snapshot. It does not track prices over time, keep history, or send alerts. It is the data layer you build a price-alert product on.

Cowork is the desktop app's automation mode. To give it the Google Flights Deals API as a tool, add the Apify MCP server as a connector.
claude_desktop_config.json directly).
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com/?tools=actors,docs,johnvc/google-flights-deals-api"
]
}
}
}
Download the desktop app and start a free trial: https://claude.ai/referral/uIlpa7nPLg More help: https://docs.apify.com/platform/integrations/claude-desktop

Claude Code is the command-line tool. Add the Actor's MCP server with one command:
claude mcp add --transport http apify \
"https://mcp.apify.com/?tools=actors,docs,johnvc/google-flights-deals-api"
To use a token instead of browser OAuth:
claude mcp add --transport http apify \
"https://mcp.apify.com/?tools=actors,docs,johnvc/google-flights-deals-api" \
--header "Authorization: Bearer YOUR_APIFY_TOKEN"
Then verify with claude mcp list, or run /mcp inside a session. Ask Claude Code to call the Google Flights Deals API.
Try Claude Code free: https://claude.ai/referral/uIlpa7nPLg Claude Code MCP docs: https://code.claude.com/docs/en/mcp

On claude.ai you add Apify as a connector, then enable just this Actor's tool.
johnvc/google-flights-deals-api.https://mcp.apify.com/?tools=actors,docs,johnvc/google-flights-deals-api, using OAuth when prompted.Open Claude on the web: https://claude.ai/referral/uIlpa7nPLg

Cursor reads MCP servers from a project file at .cursor/mcp.json.
.cursor/mcp.json:{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=actors,docs,johnvc/google-flights-deals-api"
}
}
}
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=actors,docs,johnvc/google-flights-deals-api",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}
New to Cursor? Get it here: https://cursor.com/referral?code=XQP4VBLI3NNX

ChatGPT connects to the Apify MCP server through Developer mode (available on ChatGPT Pro, Plus, Business, Enterprise, and Education plans).
https://mcp.apify.com/?tools=actors,docs,johnvc/google-flights-deals-apiMore help: https://docs.apify.com/platform/integrations/mcp
Use the Google Flights Deals API to power local lead lists, market research, and place data for your product or AI agent.
Ready-to-run examples on the Apify Store, each targeting one local-data use case:
Open a ready-to-send prompt about the Google Flights Deals API in the AI of your choice:
Last Updated: 2026.09.22