A Chrome extension that bridges Google Flights and seats.aero for award travel.
Search award availability from Google Flights with one click, and see Google Flights cash prices with cents-per-point (CPP) calculations on seats.aero results.
Award travel search is a two-tab problem. You check Google Flights for cash prices, then separately search seats.aero for award availability — manually copying routes, dates, and cabin classes between the two. And even when you find award space, you have no easy way to know if it's actually a good deal.
This extension bridges the gap:
- From Google Flights, one click searches seats.aero with all your filters pre-filled — no manual re-entry.
- From seats.aero, every award result automatically shows the equivalent Google Flights cash price and a cents-per-point (CPP) value, so you can instantly tell whether burning points is worth it or if you should just pay cash.
A CPP of 2.0+ generally means you're getting great value from your points. Below 1.0 and you're better off paying cash. Without this context, you're flying blind.
demo.mp4
| Google Flights | Settings |
|---|---|
![]() |
![]() |
| seats.aero — Individual Flights | seats.aero — Program Summary |
|---|---|
![]() |
![]() |
- Search button — appears in the Google Flights filter bar, opens seats.aero with your route pre-filled
- Smart filter mapping — automatically transfers origin, destination, date, cabin class, passenger count, nonstop filter, and airline selection
- Round-trip & multi-city — round-trip opens both legs (outbound + return); multi-city routes get a per-leg selector to open any single leg or all at once
- Flexible dates — optionally search seats.aero with ± N days around your date (popup setting)
- Keyboard shortcut — press
Alt+Son a results page to search without clicking (customizable atchrome://extensions/shortcuts)
seats.aero offers several result layouts (Individual Flights, plus program-grouped views). The extension adapts to them with different levels of detail:
Individual Flights — shows the exact cash price and CPP for each specific flight
- Matches the flight number to its specific Google Flights cash price (e.g., "$352 · 1.41cpp")
- Green highlight for good redemptions — threshold configurable in the popup (default 2.0 CPP), and automatically uses per-program point valuations when the program is recognized (e.g., ~1.2 for SkyMiles, ~1.6 for AAdvantage)
- Award taxes/fees are subtracted from the cash price before computing CPP, with automatic currency conversion (frankfurter.dev ECB rates)
- Min CPP filter — set a minimum CPP threshold in the popup to hide low-value redemptions, optionally hiding the entire row
- Links carry your seat count: a
min_seats=2search opens Google Flights with 2 passengers
Program Summary — shows the lowest cash price on the route as a reference
- Displays "from $X" since the points cost and cash price may not correspond to the same flight
- Useful for quickly scanning which routes have cheap cash alternatives
Price currency — fetched prices and CPP can be shown in USD, EUR, GBP, CAD, AUD, or JPY (popup setting)
| Google Flights | seats.aero | Notes |
|---|---|---|
| Origin | origins |
Metro codes (NYC) or specific airports (EWR) |
| Destination | destinations |
Same as above |
| Date | date |
YYYY-MM-DD format |
| Cabin class | applicable_cabin |
economy / premium / business / first |
| Passengers | min_seats |
Total passenger count |
| Nonstop filter | direct_only |
From Stops filter |
| Airline | op_carriers |
From Airlines filter |
Filters without a seats.aero equivalent (bags, price, times, emissions, duration, connecting airports) are skipped.
Install from the Chrome Web Store — one click, auto-updates.
- Clone or download this repo
- Open Chrome →
chrome://extensions/ - Enable Developer mode (top right)
- Click Load unpacked
- Select this folder
- Run
npm run package(requires Node.js) to builddist/seats-aero-google-flights-<version>-firefox.zip - Open Firefox →
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on and select the zip
The Firefox build uses the same code with an event-page background instead of a service worker (manifest.firefox.json).
- Search for flights on Google Flights
- Click "Search on seats.aero" in the filter bar
- seats.aero opens in a new tab with your search filters pre-filled
- Search for award availability on seats.aero
- Each result shows the Google Flights cash price and CPP value inline
- Good-value redemptions are highlighted in green — based on per-program point valuations when the program is recognized, or the configurable threshold (default 2.0 CPP) otherwise
- Set a minimum CPP in the extension popup to filter out low-value results (optionally hiding whole rows)
This extension has been audited for security and privacy. Here's what we found:
| Category | Status | Details |
|---|---|---|
| Permissions | Minimal | Only activeTab and storage — no access to browsing history, bookmarks, or other tabs |
| Host access | Scoped | Limited to google.com/travel/flights, seats.aero, and api.frankfurter.dev |
| Data collection | None | No personal data collected, no analytics, no tracking |
| External requests | Exchange rates only | frankfurter.dev (open-source, ECB data) is queried for currency conversion rates — no personal data is sent, no other third-party servers, CDNs, or analytics services are contacted |
| Data storage | Settings only | Only stores your display preferences (button toggle, CPP filters, currency) via Chrome sync storage |
| Dependencies | Zero | Pure vanilla JavaScript — no npm packages, no external libraries |
| DOM safety | Safe | No eval(), no innerHTML with untrusted data — all DOM manipulation uses safe APIs (createElement, createTextNode) |
| Code transparency | Full | 100% open source, no minified or obfuscated code |
All code runs locally in your browser. The only network requests are to Google Flights (for cash prices), seats.aero (when you click the search button), and frankfurter.dev (for exchange rates).
- Google Chrome (Manifest V3) or Firefox 115+ (experimental)
- seats.aero account (Pro recommended for full access)
node --test # run the unit test suite (no dependencies needed)
npm run package # build Chrome + Firefox zips into dist/CI runs the tests and builds both zips on every push and pull request.
├── manifest.json # Extension manifest (Manifest V3, Chrome)
├── manifest.firefox.json # Firefox variant (event-page background)
├── content.js # Google Flights content script: button injection, filter extraction
├── seats-content.js # seats.aero content script: link injection, CPP calculation
├── protobuf.js # Protobuf encoder for Google Flights deep-link URLs
├── background.js # Service worker: tab management + Google Flights price fetching with LRU cache
├── airlines.js # Airline name → IATA code lookup (~100 airlines)
├── metros.js # City/metro name → IATA airport code lookup
├── styles.css # Button styling for Google Flights
├── seats-styles.css # Link styling for seats.aero
├── popup.html # Extension popup UI
├── popup.js # Popup settings handler
├── icons/ # Extension icons (16, 48, 128px)
├── test/ # Unit tests (node --test)
└── scripts/package.sh # Builds distributable zips
MIT — see LICENSE



