mrkeyoor.com_
Tue 11 Aug 13:28 UTC
Dataevaluationupdated 11 Aug 2026

flights

fast-flights is a Python library that turns Google Flights searches into structured flight results without an official Google Flights API. It builds the site's encoded search query and parses Google's own page data, giving developers a quick way to add fare discovery to scripts and prototypes.

Verdict

fast-flights is a clever, convenient starting point for personal tools and prototypes, especially when a few typed lines of Python are more valuable than contractual reliability. It should not be the only data source behind a booking or customer promise. Use it with monitoring and a fallback, or pay for a provider if missed and stale results have real consequences.

Setup4/5Simple pip install, but dependable fetching needs extra machinery
Docs4/5Clear examples and filters, with some operational gaps
Community3/5Useful contributions continue despite limited maintainer capacity
Maturity2/5Useful API built on frequently changing private Google data

Who it’s for

Python developers prototyping fare alerts, trip assistants, and personal travel tools.
Researchers who need structured Google Flights results and can tolerate scraper maintenance.
Developers who want typed filters for dates, airports, stops, airlines, times, bags, price, and fare class.
Small projects willing to add Bright Data, SearchApi, or local Playwright when direct requests stop working.

Who it’s NOT for

Booking, expense, or customer-facing systems that require complete and dependable itineraries: issue #97 documents missing self-transfer results and price differences, while issue #101 reports expected results not being parsed.
Teams that cannot respond quickly when Google changes private page data or consent flows: open pull requests describe both a cookie wall breaking searches and a shift from initial HTML to XHR payloads.
Developers expecting a supported public Google API: the README explains that this project reverse-engineers encoded requests and lists use of an internal shopping endpoint as risky enough to get blocked.
Users who need booking options and price insights from the free scraper path: the README presents those richer fields through the sponsored SearchApi integration.
Organizations that need predictable maintainer response times: the open maintenance issue says the author cannot regularly handle every Google change and invited another maintainer.

Setup reality

Installing the core library is genuinely light: Python 3.10 or newer and pip install fast-flights, with only a few runtime dependencies. Creating a query is also straightforward. Reliability is the expensive part. Direct scraping depends on undocumented Google data and the caller's IP, while local Playwright adds a browser dependency and paid integrations add accounts, credentials, and usage cost. A production user needs retries, failure detection, stored raw responses, comparison tests against the website, and a fallback provider.

A practical wrapper around an unofficial source

fast-flights exists because Google Flights is useful and its old public-facing API is not available to ordinary developers. The library recreates search requests using the Base64-encoded Protocol Buffer data inside Google Flights URLs, fetches Google's page, and parses flight information from the returned JavaScript data. The result is a Python interface that looks much calmer than the machinery underneath it.

A basic search supplies one or more flight legs, a trip type, seat class, passenger counts, and language. Version 3 adds a broad set of typed filters: maximum stops, airlines, departure and arrival windows, duration, connecting airports, layover limits, emissions, maximum price, bags, separate-ticket visibility, and basic-economy exclusion. That is enough to build a useful personal fare watcher, travel assistant, or research script without driving a browser manually.

The important word is unofficial. This library does not receive stable records from a documented Google service. It encodes and interprets details that Google can change without notice. The technique is inventive, and the API is convenient, but the operational risk belongs to the user.

The first successful query is easy

The core setup deserves credit. The package requires Python 3.10 or newer, installs with pip, and currently declares only primp, Protocol Buffers, and selectolax as core dependencies. A short example creates a query and passes it to get_flights. Developers who already understand Python data classes and airport codes should be productive quickly. The MIT license is friendly to experimentation and commercial evaluation.

Search construction is the strongest part of the design. Per-leg filters and whole-search filters are clearly separated, units are documented, and hours use each airport's local time. Multi-city and round-trip searches fit the same structure as one-way queries. The README also notes one underlying Google behavior that callers could otherwise misread: the first leg's airline filter currently affects the whole search.

Fetching has three distinct paths. Direct requests are the lightweight default. Bright Data can protect the caller's IP. SearchApi is a sponsored integration offering richer results such as cheaper alternatives, price insights, and booking options. Local Playwright is available as an optional dependency when browser behavior is required. These choices give a prototype room to recover, but they are not interchangeable. A proxy, hosted search provider, and full browser have different costs, latency, data shapes, and failure modes.

Scraper breakage is the product risk

The issue tracker shows why a successful demo is not a reliability test. An open pull request from May 2026 says Google's consent page caused searches to return no flights until a cookie was set. Another describes results moving out of the initial HTML and into a shopping XHR response, requiring browser integrations to capture network traffic. Issue #102 reports the README-style example failing because the expected page element was absent. These reports concern the exact parsing and fetching path under discussion, not unrelated components.

Completeness can be harder to detect than a crash. Issue #97 compares a route where self-transfer combinations visible on Google Flights were missing from library results, with a substantial difference between the cheapest visible and returned options. Issue #101 reports best results appearing in raw data but not in parsed output. A program may therefore return a plausible list while omitting the itinerary a user would have chosen. That makes silent validation more important than ordinary exception handling.

Any serious deployment should record query parameters, result counts, fetch mode, and parse diagnostics. It should alert on empty or sharply changed outputs, periodically compare representative searches with the website, and preserve enough sanitized response data to investigate a parser change. A second supplier is prudent when fares affect customers or money. The README's own roadmap characterizes direct use of Google's internal shopping endpoint as dangerous and potentially ban-worthy, which is refreshingly candid.

Activity has resumed, but ownership is thin

The repository was pushed on August 2, 2026. Release 3.0.1 arrived on June 15, and the development branch identifies itself as 3.0.2. Two substantial pull requests were merged in late July, including expanded filters and a weekend price-monitoring workflow. GitHub lists 34 open issues and PRs together. This is current activity, not an abandoned package.

There is still a clear people risk. In issue #92, opened in December 2025 and still open, the author said other work prevented regular attention to issues and pull requests and invited someone to help maintain the project. Later merges show that work can land, but they do not erase the warning that one person cannot chase every Google change. The project's joking, informal contributing notes also set expectations: this is a community project, not a staffed data service.

Documentation is good enough to start and unusually honest about how the scraper was discovered. The main README covers the API and integrations, and a separate documentation site exists. Operational guidance is thinner. There is no promise of result completeness, response stability, or recovery time after Google changes its pages. Users must supply those safeguards.

Use it where failure is cheap

fast-flights is a strong choice for a personal alert bot, an internal experiment, or a trip-planning prototype where someone can notice and repair bad output. Its query builder saves real reverse-engineering work, and the optional integrations offer an escape route when direct fetching fails.

Do not make it the sole truth for booking, reimbursement, or public price claims. A scraper can be technically healthy and still miss the cheapest itinerary. For higher stakes, use the library behind explicit quality checks and a fallback, or choose a paid flight-search provider with support. The code is useful; the data contract is the fragile part.

Alternatives

ProjectWhat it isPick it when
google-flights-scraperA Playwright-based Python scraper that drives the Google Flights interface.pick this instead when browser automation is acceptable and direct interaction with the rendered site matters more than speed.
SerpApi Google FlightsA commercial search API with an official Python client and Google Flights results.pick this instead when paid infrastructure and provider support are preferable to maintaining scraper behavior.
SearchApi Google FlightsA hosted Google Flights API already supported as a richer fast-flights integration.pick this instead when consistency, booking options, and price insights justify a paid service.

What people are saying

  1. [github-trending] AWeirdDev/flights

Sources

  1. fast-flights README
  2. fast-flights v3.0.1 release
  3. Project maintenance discussion
  4. Missing self-transfer flight report