Google Flights Smart Search — Natural-Language Flight Deals
Pricing
$2.50 / 1,000 searches
Google Flights Smart Search — Natural-Language Flight Deals
Type a trip in plain English and get the best flight deals across every date and destination combination. Pay per search — $2.50 / 1,000 searches; the natural-language translation is free.
Type a trip in plain English and get the best flight deals across every date and destination combination — not just one search. Describe origins, multiple destinations, a month or date window, a range of nights, day-of-week rules, direct-only, cabin, budget, and passengers, all in one sentence. The request is understood, expanded into many real Google Flights searches, and the cheapest options are ranked for you.
Billing: pay per search — $2.50 / 1,000 searches. The natural-language translation is free. You set max_searches as
your spend cap; you are charged only for the flight searches actually run (searches_performed in the
output), never for the natural-language parsing.
What you get
- Understands free text: "3–5 night trip from Tel Aviv to Barcelona or Athens in August, direct only".
- Explores combinations: multiple origins × destinations × dates in the window × nights range.
- Applies your filters: direct-only, max price, preferred/avoided airlines, departure time.
- Returns ranked deals (cheapest first) plus the cheapest option per destination.
Input
| Field | Type | Required | Description |
|---|---|---|---|
query | string | Yes | The trip in plain English (origins, destinations, dates, nights, filters). |
max_searches | integer | No | Spend cap: the most searches the fan-out runs (1–120, default 40). You are billed per search performed. |
top_n | integer | No | How many ranked deals to return (1–100, default 20). |
currency | string | No | Currency code for prices (default USD). |
Example input
{"query": "3-5 night trip from Tel Aviv to Barcelona or Athens in August, direct only","max_searches": 40,"top_n": 20,"currency": "USD"}
{"query": "one way from New York to London on 2026-08-20, business class","max_searches": 5}
Output
Each dataset item is one ranked flight deal:
{"origin": "TLV","destination": "ATH","outbound_date": "2026-08-27","return_date": "2026-09-01","nights": 5,"price": "$293","price_numeric": 293,"airline": "Aegean","stops": 0,"duration": "2 hr 5 min","departure_time": "…","arrival_time": "…","booking_url": "https://www.google.com/travel/flights?tfs=…"}
Fields
| Field | Description |
|---|---|
origin / destination | Airport IATA codes for this deal. |
outbound_date / return_date | Dates for the itinerary (return_date null for one-way). |
nights | Nights at the destination (round-trip). |
price / price_numeric | Price as displayed and as a number, for sorting/filtering. |
airline | Primary airline. |
stops | Number of stops (0 = nonstop). |
duration | Total travel time. |
booking_url | Google Flights link for this itinerary. |
Pagination
None to handle — one run explores up to max_searches combinations and returns the ranked deals
directly. Raise max_searches for broader coverage (and a higher bill); lower it to cap spend.
Python client
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("good-apis/google-flights-smart-search").call(run_input={"query": "3-5 night trip from Tel Aviv to Barcelona or Athens in August, direct only","max_searches": 40,})for deal in client.dataset(run["defaultDatasetId"]).iterate_items():print(deal["origin"], "->", deal["destination"], deal["price"], deal["airline"])
Node.js client
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('good-apis/google-flights-smart-search').call({query: '3-5 night trip from Tel Aviv to Barcelona or Athens in August, direct only',max_searches: 40,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const deal of items) console.log(deal.origin, '->', deal.destination, deal.price);
Install the client with npm install apify-client.
FAQ
How am I billed? Per search performed, not per result. One free-text request expands into up
to max_searches real flight searches; you pay for the number actually run (returned as
searches_performed). The natural-language translation is free.
How do I control cost? With max_searches. It's a hard cap on how many searches the fan-out runs,
so it's your maximum spend for the run. A simple one-way query may only need 1 search even if the cap
is 40 — you're billed for the 1.
Why did I get fewer searches than my cap? Your request produced fewer combinations than the cap (e.g. a single date and destination), so only those ran.
Why fewer/zero deals than expected? Filters (direct-only, max price, airline) can exclude flights, and very tight windows may have little availability. Widen the dates/destinations or relax filters.
Do I need a login or account for the source? No — you only need your Apify token.