All notable changes to the Trip.com Hotel Scraper actor.
- Reordered input form: structured filters are now Option A (the primary path) and the URL list (
filterArgs) is Option B (advanced override). The form opens with sensible prefills (country = GB, dates two days out, 2 adults, USD/en-US) so the actor is runnable out of the box.
- README rewritten around the structured-filter flow with a
listFilters decoding table and the full supported-country list.
- Sample
storage/key_value_stores/default/INPUT.json switched to a structured-filter example (London / 4–5★ / 8+ rating / breakfast / free cancellation / price asc).
- Structured filter inputs — configure searches without building URLs manually. New fields in the Apify input form:
- Destination:
searchWord, cityId, countryId, country (51-country ISO-2 selector)
- Dates:
checkIn, checkOut (date pickers, YYYY-MM-DD)
- Guests:
adults, children, childAges, rooms
- Money:
currency (34 codes), locale (26), lowPrice, highPrice (-1 = no cap)
- Quality:
starRatings (multi-select 2–5★), guestRatingMin, sortBy
- Amenities:
breakfastIncluded, freeCancellation, payAtHotel
- Context:
domestic, travelPurpose
- Country → cityId/countryId resolution. Built-in mapping for 51 ISO-2 country codes with verified Trip.com country IDs plus a fallback representative city. Picking a country with no other location input auto-targets that country's main city (e.g.
FR → Paris city=192, US → New York city=633).
- HMT handling. Hong Kong / Macau / Taiwan are exposed as separate options even though Trip.com shares
countryId=1 for them — the scraper emits a city=-based URL to avoid mixed Mainland+HMT results.
listFilters composer. Star rating, guest rating threshold, breakfast, free cancellation, pay-at-hotel, and sort order are encoded into Trip.com's listFilters grammar (type|value segments joined by *) automatically.
- Typed input validation with clear
Actor.fail(status_message=...) messages: invalid date format, checkout ≤ checkin, missing location, child-count/ages mismatch, unknown country code.
filterArgs is now optional. It still takes precedence when provided, so existing runs are non-breaking. When empty, the scraper builds the URL from the structured fields above.
- Default input no longer prefills a hardcoded Paris URL — the form opens with structured filters ready to fill.
- Canonical URL encoding: dates as
YYYY%2FMM%2FDD, listFilters pipe as %7C, segment separator * kept literal — matches Trip.com's own URL format.
- URL builder now skips empty / whitespace-only entries in
filterArgs.
Initial release.
- A/B-layout-aware hotel card extractor (hydrated DOM + SSR variants).
- Lazy-load scroll handler with stale-batch detection.
- Popup dismissal, debug page dumps on empty results.
- Per-event Apify pay-per-event charging (
actor-start, page-start, hotel-extracted, page-complete, actor-complete).