# Changelog of Airbnb Occupancy Rate Scraper — Calendar Availability & ADR (`kestrel/airbnb-occupancy-scraper`) Actor

- **URL**: https://apify.com/kestrel/airbnb-occupancy-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/kestrel/airbnb-occupancy-scraper.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 release.

- One `occupancy` row per listing and calendar month from the public availability calendar: days counted (today onward), days available, days blocked or booked, `occupancy_pct`, check-in days, the typical minimum stay and the next free day.
- A sampled nightly rate per month (`includeRates`, on by default): the first bookable stay of the month — check-in on the first available day, the listing's minimum nights, capped at 7 — priced for `adults` guests, so each row carries `rate_nightly`, `rate_total` and the sampled dates. An ADR proxy, one extra request per listing and month.
- Address listings by place search (`locationQueries`), pasted Airbnb search or listing URLs (`startUrls`) or ids (`listingIds`); the unknown-place guard from the Airbnb Scraper is kept, so a misspelt place costs nothing.
- `minOccupancyPct` filter: only months at or above the line are delivered, and the filter runs before billing.
- Optional free `listing` rows (`includeListingRow`) with name, type, location, rating and reviews.
- Billing: pay per delivered `occupancy` row. Filtered months, listing rows, status rows, unknown places and failed calendars are free, and nothing a spending limit refused is ever delivered.
- Honest by design: the calendar does not say whether a night is booked or host-blocked, so every occupancy figure is a proxy and the README says so; a failed rate sample is a null rate with `rate_status`, never a fabricated number.
