# Changelog of Airbnb Listing Details, Host & Amenities Scraper (`integrative_tangent/airbnb-listing-scraper`) Actor

- **URL**: https://apify.com/integrative\_tangent/airbnb-listing-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/integrative\_tangent/airbnb-listing-scraper.md

## Changelog

All notable changes to the Airbnb Listing Details Scraper will be documented in this file.

### \[1.0.8] — 2026-04-13

#### Fixed

- **Critical**: Expanded listing-ID validator from 6–13 to 6–19 digits. Version 1.0.7 rejected all post-2022 Airbnb "Snowflake" IDs (18–19 digits like `1506456228556318996`), which caused bounding-box / location searches to return only the minority of legacy 8-digit listings. Zone runs that previously discovered 280+ listings (Las Terrenas) were dropping to a handful. The validator now accepts both legacy (6–10 digit) and modern (18–19 digit) IDs, with a 20-digit hard cap to still reject nanosecond timestamps and tracking noise.

### \[1.0.7] — 2026-04-13

#### Fixed

- Previous attempt to cap listing-ID validation to 6–13 digits. This over-filtered and was reverted in 1.0.8.
- Session manager no longer applies the proxy to the Playwright seed-URL browser. Routing the initial cookie harvest through a residential proxy triggered Airbnb's bot challenge and produced zero cookies. The browser now runs direct (proxy is still applied to HTTP API calls downstream), which gives us a full cookie set on first attempt.
- Listing-client browser also runs direct (not via proxy), matching the sister reviews-sentiment actor's proven pattern.
- Replaced Airbnb's deprecated `explore_tabs` v2 geocoding call with OpenStreetMap Nominatim. Location strings like `"Paris, France"` now resolve reliably to a bounding box on the first attempt.

#### Improved

- `waitUntil` strategy tightened back to `'domcontentloaded'` with `page.content()` + 2s render wait — faster than `'networkidle'` and produces the same payload since Airbnb's PDP data is server-side rendered.
- End-to-end smoke-test pass: Paris, France → 1 listing in 20s with all 40+ fields populated (title, amenities, 6 sub-ratings, host profile, house rules).

### \[1.0.0] — 2026-04-26

Initial public release.

#### Features

- Full Airbnb PDP (Property Detail Page) scraping with 40+ fields per listing
- Title, description, neighborhood overview, property type, and room type
- Bedrooms, beds, bathrooms, and maximum guest capacity
- Precise latitude and longitude coordinates
- Overall rating plus six sub-ratings (accuracy, cleanliness, check-in, communication, location, value)
- House rules, cancellation policy, and check-in / check-out times
- Minimum and maximum night requirements
- Host profile data — ID, name, about text, thumbnail URL, superhost status, identity verification, response rate, response time, total listings count, and join date
- Full amenity list per listing
- Photo count and photo URLs
- Five input modes: listing IDs, listing URLs, Airbnb search URL, geographic bounding box, or plain location name
- Adaptive rate limiter that speeds up when Airbnb is responsive and backs off automatically on HTTP 429 / 403
- Playwright-based session rotation with automatic cookie refresh
- String-safe handling of Airbnb listing IDs throughout (no JS number-precision loss)
- Full Apify Proxy and custom proxy support
- Null-safe output — fields that could not be extracted are explicitly `null` rather than missing
- Optional direct Supabase sync for projects that want results written straight into a Postgres table
- Structured dataset with overview table view in the Apify console

#### Validated at scale

- Tested against 40,000+ real Airbnb listings across 20+ markets with a 99.9% success rate
- Per-run session refresh keeps long jobs (1,000+ listings) alive without manual intervention

#### Known limitations

- Review text is not returned (only review count and sub-ratings). A separate reviews-sentiment actor is available for full review analysis.
- Nightly pricing and availability calendar are not included here — use the companion **Airbnb Calendar & Availability Scraper** for day-by-day pricing data.
