# Changelog of Hotel Rate Parity Checker — OTA Price Comparison (`kestrel/hotel-rate-parity`) Actor

- **URL**: https://apify.com/kestrel/hotel-rate-parity/changelog.md
- **Full Actor documentation**: https://apify.com/kestrel/hotel-rate-parity.md

## Changelog

### 2026-08-30

- Reliability: a run that cannot act on its input — a URL from the wrong site, a name nothing resolves to, an empty target list, a number outside the documented range — now ends cleanly with the reason on the run card instead of as a failed run. Nothing is charged in either case; a blocked or throttled source still fails loudly.
- Store listing: moved into the categories buyers actually browse (the old `Business` category has no Store page).

### 1.0 — 2026-08-29

First public release.

- One `parity` row per property and stay from Google Hotels: every booking source's lowest rate side by side (OTAs and the official site) with source ids, stay totals, free-cancellation flags and booking links.
- Parity math in the row: cheapest and dearest source, spread in percent, median, the official-site rate, whether direct is the cheapest, which sources undercut it and by how much.
- Properties by Google Hotels URL or entity token (exact, one offers call each) or by name (one place search; kept only when the listing's name matches most of the query's words, so a lookup never bills a stranger).
- `minSpreadPct` delivers only properties whose spread reaches a threshold — the violations-only feed — and what it drops is never billed.
- Relative dates (`"30 days"`, `"6 weeks"`, `today`) and `sweepDays` for a week of check-in dates per property in one run; occupancy with children's ages; any currency and market.
- Billing: pay per delivered parity row only. Unpriced properties, unresolved names, duplicates, filtered rows and `status` rows are free; each property and stay is billed once per run.
- `status` row per property and stay (ok, filtered, no\_rates, not\_found, duplicate, unpaid, error) and a `SUMMARY` record with the run's counts, so a failure is visible rather than a silent zero.
- Same fetching module as the verified Google Hotels Prices Scraper, watched by a daily canary run.
