# Changelog of Google Flights Scraper & Price Tracker (`foxlabs/google-flights-scraper`) Actor

- **URL**: https://apify.com/foxlabs/google-flights-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/foxlabs/google-flights-scraper.md

## Changelog

### 0.1.5 — 2026-10-01

- Docs only: the `airlines` filter is described as Google's filter, which also returns codeshare flights sold under those codes but flown by partners (run `9sHVeu7tjnx2ANJTt`: a `BA`, `VS` filter returned AA 103 sold as BA 1516 and DL 2 sold as VS 4007). The input description, the README example and a new FAQ entry say so; on each row `airlines` is the airline flying the plane and `codeshares` the numbers it is sold under. No code or output change.

### 0.1.4 — 2026-10-01

- README only: the reliability note now gives the final platform count (49 default-setting runs, 135 Google requests, none rate-limited). No code change.

### 0.1.3 — 2026-10-01

- The run's status message (shown with the run in Apify Console) now says what was delivered, or why nothing was: for example "No changes since the previous run (3 search(es)); nothing charged." Before, a run showed no status message.
- README: round-trip prices described as Google shows them ("From … round trip total", the lowest total with that outbound flight), checked on Google's own page.

### 0.1.2 — 2026-10-01

Fixes after an independent check of every README claim (not yet published; nothing changes for existing users).

- `priceLevel` now carries Google's own word for every code Google sends: 1 `low`, 2–4 `typical`, 5 `high` (read on Google's pages). Before, only codes 1 and 3 were labelled.
- Monitor mode: the first run stores the whole list as the baseline, also when `maxFlightsPerSearch` delivers only part of it. Later runs no longer list old flights as `NEW`.
- Monitor mode: `GONE` rows have `priceUnavailable` empty (was `true`); the flight is no longer listed, so there is no current price.
- A search Google does not accept (seen for the city code `LON`) costs one request instead of four and ends with a plain message instead of Google's raw error. Nothing is charged, as before.
- Cheapest-days mode: a departure day that two overlapping lines share is searched and charged once. Days whose departure or return falls more than 365 days ahead are not searched and are counted in the log and in `SOURCE_REPORT` (`daysBeyondRange`).
- A return date more than 365 days ahead now stops the run with the reason, like a departure date.

### 0.1 — 2026-09-30

First version.

- Three modes:
  - `search`: every flight for each route and dates.
  - `monitor`: only what changed since the previous run of the same search.
  - `cheapest-days`: the lowest fare for each departure day in a range.
- Routes as 3-letter airport codes (`IST-LHR`). A line can carry its own departure and return dates. Dates as `YYYY-MM-DD` or days from today (`+30`, UTC); a return as a date or `+N` days after the departure.
- The whole list: the flights Google hides behind "View more flights" come in the same single request (`includeHiddenFlights`, on by default). The route row says how many Google hides.
- Flight rows:
  - price (for all adults; round trips: Google's lowest round-trip total with that outbound flight), with an explicit `priceUnavailable` when Google lists a flight without a price;
  - airlines, flight numbers and a stable `itineraryKey`;
  - local departure and arrival times, duration;
  - stops and layovers, with a change-of-airport flag;
  - codeshares, operating airline, aircraft, legroom;
  - CO₂ against Google's typical figure for the route;
  - Google's "best" flag;
  - a Google Flights link for the flight.
- Route rows, one per search: lowest price and cheapest flight; Google's price-level code (`low` and `typical` labelled), position against Google's typical price range, the typical range itself; Google's price history (61–62 days for most searches).
- Monitor mode:
  - `NEW`, `CHEAPER`, `PRICIER`, `GONE`, `PRICE_ADDED`, `PRICE_REMOVED`; `CHEAPER` and `PRICIER` rows with the previous price and the change;
  - a threshold (`minPriceChangePercent`) measured against the last reported price;
  - state in the key-value store `google-flights-monitor-<monitorName>`;
  - changes over the `maxFlightsPerSearch` cap follow in later runs.
- Filters: cabin, adults (1–9), stops, airlines, currency, market.
- Pricing: `flight` per flight row, `route-check` per search that delivered at least one flight row, `date-price` per priced day. Status rows, empty or failed searches and searches that delivered no flight row are free.
- Invalid input stops before any request, with the reason. Empty searches leave a free status row, and every run writes a `SOURCE_REPORT` record.
- Batch and Standby (HTTP API) modes share the same code and events.
