Fast Google Flights CLI for humans and LLM agents.
airfetch builds Google Flights queries internally, fetches results using pluggable providers, parses flight data, and returns either:
- human-readable text (default)
- structured JSON (
--output json)
- Human-first UX by default (
textoutput) - LLM/tool-friendly JSON mode (
--output json) - Multi-leg support (
--legrepeated) - Quick command for simpler manual usage (
quick) - Embedded skill install command (
install-skill) - Result limiting (
--limit) - Provider adapters:
directbrightdatazenrows
- Health checks for provider readiness (
health)
cd airfetch
cargo build --release
./target/release/airfetch --helpcd airfetch
cargo install --path .
airfetch --helpAdvanced mode with explicit legs.
airfetch search \
--leg 2026-04-10:JFK:LAX \
--trip one-way \
--seat economy \
--adults 1Round trip example:
airfetch search \
--leg 2026-04-10:JFK:LAX \
--leg 2026-04-17:LAX:JFK \
--trip round-trip \
--output textSimple shortcut for manual use.
airfetch quick JFK LAX 2026-04-10Round-trip shortcut:
airfetch quick JFK LAX 2026-04-10 --return 2026-04-17Provider readiness overview.
airfetch health
airfetch health --output jsonInstalls the embedded .skill payload (no source path required).
airfetch install-skillairfetch search --leg 2026-04-10:JFK:LAX --limit 3airfetch search --leg 2026-04-10:JFK:LAX --output json --limit 3JSON envelope format:
{
"ok": true,
"data": {},
"error": null,
"meta": {
"provider": "direct",
"elapsed_ms": 1234,
"version": "0.1.0"
}
}airfetch search --leg 2026-04-10:JFK:LAX --provider directEnvironment variables:
BRIGHT_DATA_API_KEY(required)BRIGHT_DATA_API_URL(optional, default:https://api.brightdata.com/request)BRIGHT_DATA_SERP_ZONE(optional, default:serp_api1)
export BRIGHT_DATA_API_KEY="..."
airfetch search --leg 2026-04-10:JFK:LAX --provider brightdataEnvironment variables:
ZENROWS_API_KEY(required)ZENROWS_API_URL(optional, default:https://api.zenrows.com/v1/)
export ZENROWS_API_KEY="..."
airfetch search --leg 2026-04-10:JFK:LAX --provider zenrows--output text|json(default:text)--limit <N>--proxy <url>--timeout-ms <ms>--language <hl>--currency <ISO4217>--airline <IATA>(repeatable)--max-stops <N>
0: success2: input validation error3: provider/network error4: parser error5: internal error
See DEPLOYMENT.md for production deployment options (single binary, Docker, systemd, CI release).
Google Flights can change HTML/data structure at any time. Treat parsing as best effort and monitor failures in production.