Google has had no public flights API since QPX Express shut down in 2018. These are three small, working Python scripts that get the data anyway, through the Google Flights Scraper Actor on Apify. No browser, no proxy setup, no HTML parsing — the Actor returns flat JSON rows.
Every output below is a real run, not an illustration.
pip install apify-client
export APIFY_TOKEN=... # console.apify.com/settings/integrationspython examples/cheapest_day.py DPS SIN 45DPS -> SIN: 45 priced days
2026-11-19 50 USD
2026-11-20 50 USD
2026-11-27 50 USD
2026-11-21 56 USD
2026-11-26 56 USD
Cheapest: 2026-11-19 at 50 USD
One call returns the whole price calendar as rows, so you can sort, chart or diff it against yesterday's run. Useful for a fare alert that only fires on a real drop.
python examples/explore_from.py DPS 10Cheapest destinations from DPS
63 USD Komodo Indonesia Wings Abadi Airlines nonstop 1.5h
91 USD Yogyakarta Indonesia Lion nonstop 1.5h
107 USD Perth Australia Jetstar nonstop 3.6h
190 USD Brisbane Australia Batik Air nonstop 5.8h
211 USD Sydney Australia Batik Air nonstop 6.1h
This is the "Explore" map behind Google Flights, as a table: city, country, price, airline, stops and flight time. Coordinates come back too, if you are putting it on a map.
python examples/who_sells_it.py DPS SIN 2026-11-19Jetstar — 50 USD
50 USD (870000 IDR) Jetstar [airline]
119 USD (2085182 IDR) Qantas [airline]
128 USD (2251997 IDR) Jettzy [agency]
Scoot — 64 USD
64 USD (1112308 IDR) Scoot [airline]
65 USD (1139996 IDR) Jettzy [agency]
The same seat, sold three ways at 50, 119 and 128 dollars. Each option carries the seller, whether it is the airline or an agency, the price in the local currency of the point of sale, and a direct booking link. This is the part most flight scrapers skip.
Beyond these three scripts: flight numbers, aircraft type, layover airports and durations, CO₂ emissions per itinerary, Google's own price level ("low" / "typical" / "high") with the historical band it compares against, multi-city itineraries, and batch routes in one run. Filters cover cabin, stops, airlines to include or exclude, max price, max duration, max layover, and departure/arrival time windows.
Full field list and input reference: apify.com/lergassy/google-flights-scraper
- Prices are what Google Flights shows for that point of sale. Set
market(a two-letter country) to price a route the way a buyer in another country sees it — fares genuinely differ. - The Actor reads Google's own search endpoint and falls back to the rendered page when
that endpoint refuses a datacentre address;
resultsSourcein every row tells you which path ran. - These scripts use
apify-client3.x, wherecall()returns aRunobject —run.default_dataset_id, notrun["defaultDatasetId"]as older tutorials show.
MIT licensed. Issues and pull requests welcome.