# Changelog of Google Flights Scraper (`searchapi/google-flights-scraper`) Actor

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

## Changelog

All notable changes to the Google Flights Scraper are documented here.

### \[3.1.0] - 2026-09-22

#### Changed

- Updated the diagnostic input to a future JFK to LHR round-trip visible in the live Chrome page, which produced 19 valid flight records.
- Added page position, source type, data source, retrieval method, and synchronized route metadata to the existing normalizer and schema.
- Removed the public debug input and pinned Crawlee, Playwright, and the Chrome image to the validated runtime.

### \[3.0.0] - 2026-08-29

#### Added

- Single-route and fair concurrent batch modes, locale controls, bounded retry/timeout controls, stable SHA-256 IDs, deterministic ordering, and direct dataset auditing.
- Rich source-backed airport names, stop-code arrays, layover arrays, route/query positions, market metadata, and one consistent scrape timestamp.

#### Fixed

- Rejected the incompatible `GOOGLE_SERP` Playwright tunnel and retained direct, Residential, and custom proxy support.
- Added status/content-type/challenge/no-results validation, session rotation, persistent cookies, consistent fingerprints, and resource optimization.
- Replaced the malformed legacy dataset structure with a typed 65-field contract and removed fields the Actor never emitted.
- Removed the unused helper that read local Apify authentication files and manually constructed proxy credentials.
- Removed unused generated modules, the browser-install postinstall step, and vulnerable development/runtime dependency resolutions.

### \[2.0.0] - 2026-06-12

#### Added

- **Schema expanded** from 30 to **57 fields**.
- **New fields**: `type`, `resultType`, `link`, `airlineCode`, `airlineLogo`, `airlines`, `flightNumber`, `flightNumbers`, `originCode`, `originName`, `originCity`, `destinationCode`, `destinationName`, `destinationCity`, `departureAtRaw`, `arrivalAtRaw`, `returnDepartureAt`, `returnArrivalAt`, `durationMinutes`, `stopAirports`, `stopCities`, `layoverDurations`, `priceNumeric`, `originalPrice`, `discount`, `cabinClass`, `travelClass`, `seatsLeft`, `bookingSite`, `bookingSiteUrl`, `emissions`, `emissionsGrams`, `aircraft`, `isAd`, `isSponsored`, `query`, `language`.
- **New view**: `fullDetails` — all 57 fields.
- **INPUT.json** added at project root for local validation.

### \[1.0.0] - 2025-05-20

#### Added

- Initial production release of the Google Flights Scraper.
- `PlaywrightCrawler`-based architecture using Chrome.
- Modular project structure.
- `validate-datasets.js` for local dataset output validation.
- `Dockerfile` using `apify/actor-node-playwright-chrome` image.
- `README.md` with full Apify usage guide.
