mrkeyoor.com_
Fri 25 Sept 21:47 UTC
Dataevaluationupdated 26 Aug 2026

flights review

fast-flights is a Python library that builds Google Flights searches and parses the returned JavaScript data into typed results. It gives developers flight search data without an official Google Flights API, but it depends on an undocumented web interface that Google can change.

+8stars / 7d
Verdict

Our fast-flights run installed 37 packages and passed all 8 tests in 35 seconds across install, build, and test steps. It is a good fit for prototypes and internal fare checks where a missed result can be caught, retried, or compared with the website. Do not make it the sole source for booking, pricing promises, or complete itinerary coverage.

We ran it

Lab card: what happened when we ran flightsScreenshot of flights (flights.aweird.me)
Install✓ · 21s37 packages · 63 MB
Build✓ · 6s
Tests✓ · 8s8 passed · 0 failed of 8 (pytest)
Known vulns0(pip-audit)
Repo49 files~5,082 lines of source · 1.3 MB · 2 CI workflows · tests dir

Answers from our run

Does flights build from source?

Dependencies installed in 21 seconds (37 packages), and the build succeeded in 6 seconds. We cloned commit 3e7948b into a clean Debian container with 3 CPUs and no project-specific setup.

Do flights's tests pass?

Yes: 8 of 8 passed when we ran the project's own test command (pytest). Some failures need services or credentials a bare container does not have.

Does flights have known vulnerabilities in its dependencies?

pip-audit found none in the dependency tree at the time of our run.

Who should not use flights?

Booking or customer-facing systems that need a supported data contract: fast-flights parses undocumented Google data, and issue #101 reports missing best-flight results.

What are the alternatives to flights?

Google Flights Scraper, Amadeus Python SDK, SearchApi Google Flights API. Our fast-flights run installed 37 packages and passed all 8 tests in 35 seconds across install, build, and test steps.

Setup4/521-second install and all 8 tests passed
Docs4/5Clear query examples and filter semantics, with scraper limits scattered
Community4/51,939 stars and August 2026 contributions
Maturity3/5v3.1.0 is current, but upstream page changes remain a standing risk

Discussed on

  1. hnFast, Robust Google Flights Scraper (API) for Python3 points

Who it’s for

Python developers prototyping travel search or fare-monitoring tools.
Small projects that can tolerate scraper maintenance and verify results against Google Flights.
Teams that want filters for stops, airlines, time windows, bags, price, layovers, and emissions.
Developers willing to add Bright Data, SearchApi, or local Playwright when direct requests stop working.

Who it’s NOT for

Booking or customer-facing systems that need a supported data contract: fast-flights parses undocumented Google data, and issue #101 reports missing best-flight results.
Buyers who need every cheap itinerary: issue #97 documents absent self-transfer and separate-ticket combinations.
Teams without time to chase site changes: the maintainer said in issue #92 that they cannot update the project whenever Google changes.
Apps that treat returned prices as bookable inventory: the README describes search results, while booking options are listed under the sponsored SearchApi integration.

Setup reality

Our sandbox installed 37 Python packages in 21 seconds and used 63 MB. The build passed in 6 seconds, and pytest passed all 8 tests in 8 seconds. Pip-audit found 0 known vulnerabilities.

The basic direct path needs no API key, but Google may return consent or bot-detection pages. Bright Data needs a zone, SearchApi needs its service credentials, and local Playwright adds a browser runtime.

Python installation is small, and the repository has 2 CI workflows plus a tests directory. There is no Dockerfile. The harder setup question is network reliability: current issues and pull requests discuss consent walls, missing results, route-specific failures, and browser-backed fallbacks.

Typed flight searches sit on an undocumented Google response

fast-flights turns airport codes, dates, passenger counts, cabin class, and trip shape into a Google Flights query. Version 3 parses JavaScript data returned by the site and maps it into Python objects. The public API is pleasantly small: create a query, call get_flights, then inspect the results. You get type hints without having to decode Google's Base64 and Protobuf-shaped query parameter yourself.

The tradeoff is structural. Google does not offer this project a supported Flights API contract, so a harmless website change can alter the parser's input. Pull request #107, merged in August 2026, added parsing for shopping XHR responses because itinerary data was no longer always present in the initial script.ds:1 HTML. That kind of repair is normal for a scraper, and it should shape where you use one.

Fourteen newer filters cover many practical searches

Release v3.1.0 includes the extended parameters from pull request #110. Per-leg filters cover departure and arrival hours, stops, duration, connecting airports, layover limits, airlines, and lower-emission results. Search-wide options include a maximum price, 2 bag types, separate-transfer hiding, and basic-economy exclusion. The README notes that hours use local airport time and that Google applies the first leg's airline filter to the whole search.

Those details are useful for alerting and itinerary discovery, but result completeness is unsettled. Issue #97 shows a route where self-transfer combinations visible on Google Flights were absent from the scraper's output. Issue #101 reports that best-flight results were not parsed for another query. A fare monitor should store the query URL and raw diagnostic context so an empty or partial result does not silently become 'no flights available.'

What happened when we ran it

Our fresh Debian sandbox installed 37 packages in 21 seconds and used 63 MB on disk. The build completed in 6 seconds. Pytest then passed 8 of 8 tests in 8 seconds, and pip-audit found 0 known vulnerabilities. For a 49-file Python repository with about 5,082 source lines, the local development path was quick and clean.

The checkout had 2 CI workflow files and a tests directory, with no Dockerfile. Our run exercised the repository's available automated checks. It did not prove that a particular live route returns every fare, because the supplied measurement block contains no route search or comparison with the Google Flights UI. That distinction matters more here than it would for a library whose input format is owned by its maintainers.

Direct requests are simple until consent or blocking appears

The basic library call does not require a vendor credential. Google can still respond differently by IP, region, cookies, or request pattern. Open pull request #108 says a Google consent page caused searches to return 'No flights found' and proposes setting a consent cookie. Earlier issue #70 described a consent or language-selection page after bot detection. A successful Python install does not remove those network conditions.

The repository offers 3 escape routes. Bright Data can proxy requests, the sponsored SearchApi integration returns its own richer result type, and local Playwright can use a browser. Each changes the cost and operating model. SearchApi becomes an external paid dependency, Bright Data needs account configuration, and Playwright adds browser deployment. Pick one deliberately and log which route produced each result.

Search results are not booking inventory

fast-flights is most credible as a discovery layer. It can help an internal tool shortlist routes, populate a travel assistant, or watch broad price movement. A customer-facing workflow needs another source for fare rules, availability, taxes, passenger details, and ticketing. The README only attributes booking options and price insights to the SearchApi result, not to every direct result returned by the core library.

The 63 MB installed footprint makes experiments cheap, while false certainty is expensive. Cache timestamps, expose the source to users, and recheck a selected itinerary with a booking-capable provider before presenting it as purchasable. If missing self-transfer routes would change the recommendation, this parser cannot be your only comparison set while issue #97 remains representative of current behavior.

August 2026 work is active despite limited maintainer time

GitHub recorded the last push on August 18, 2026, the same day v3.1.0 was released. The repository had 1,939 stars and 33 combined issues and pull requests when fetched. Recent contributors added filters and corrected tuple handling for dates and times. Those are concrete signs of current work, even though the queue is sizeable for a small project.

Issue #92 adds an unusually direct maintenance warning. In December 2025, the maintainer said they were busy with other work and could not respond whenever Google changed the site, while offering to explain the code to another maintainer. Community patches have landed since then, so the project is not abandoned. Adoption still means accepting that upstream breakage may wait for a volunteer who can reproduce and repair it.

Alternatives

ProjectWhat it isPick it when
Google Flights ScraperA browser-driven Google Flights scraper built around Playwright.pick this instead when browser rendering is acceptable and direct response parsing is failing.
Amadeus Python SDKThe Python client for Amadeus travel APIs, including flight shopping.pick this instead when you need a documented provider API and can work within its account and pricing terms.
SearchApi Google Flights APIA paid hosted Google Flights data service with richer result fields.pick this instead when consistency and booking-related fields matter more than avoiding a paid dependency.

What people are saying

  1. [github-trending] AWeirdDev/flights

Sources

  1. fast-flights README
  2. fast-flights v3.1.0 release
  3. Issue 92: project maintenance
  4. Issue 97: missing self-transfer flights
  5. Issue 101: results not parsed
  6. Pull request 107: shopping XHR parsing

More data reviews

go-stock · sqlitebrowser · hydradb · DouYin_Spider · helix-db · abu · the whole board →