# Changelog of Booking Scraper (`voyager/booking-scraper`) Actor

- **URL**: https://apify.com/voyager/booking-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/voyager/booking-scraper.md

This changelog summarizes all changes of the Booking actors provided by the [Voyager organization](https://apify.com/store?search=voyager%2Fbooking-scraper). The specific actors that are affected are listed for each change.

### 2026-09-16

*Fixes (all Booking actors)*

- Fixed `search` queries for property names (e.g. `Four Seasons Hotel Riyadh`) returning the property's city listing without the property itself for every `sortBy` other than Booking.com's default. Property names are now searched the same way Booking.com does it, so the matched property is returned first again regardless of `sortBy`, followed by properties nearby (set `maxItems` to `1` to get just the matched property). The property is searched by its Booking.com name, so queries that differ from it (e.g. `ホテルニューオータニ東京`) also resolve to the property instead of its city.
- Fixed `search` queries that Booking.com's destination autocomplete cannot match (e.g. property names combined with a wrong city, typos, or landmarks in other scripts) returning no results. Booking.com removed its `SearchPlaces` geocoding API; such queries are now passed as free text to the properties search API, which resolves them itself, the same way Booking.com does for unmatched destinations. Queries Booking.com cannot resolve at all still finish with a `No destination found for location` warning.

### 2026-09-15

*Fixes (all Booking actors)*

- Fixed `search` queries for property names (e.g. `Hilton Riyadh`) failing with `Failed to extract destination`. Booking.com's destination autocomplete now returns these as `hotel` destinations, which are now supported (also in `startUrls` with `dest_type=hotel`). As on Booking.com itself, the matched property is returned first, followed by other properties in its city.
- Fixed `search` queries that Booking.com's autocomplete cannot resolve at all crashing with `Cannot read properties of undefined (reading 'searchPlaces')`. Booking.com no longer serves the fallback `SearchPlaces` API, so such runs now finish with a `No destination found for location` warning instead of failing the request.

### 2026-09-14

*Features ('booking-scraper')*

- Added `minimumNights` (the minimum length of stay Booking.com requires for the scraped check-in date) and `minimumNightsByDate` (the same requirement per check-in date, covering the requested stay) to the properties. Both come with the **Scrape hotel surroundings & room offerings** add-on, as they are extracted from the same API call.

### 2026-08-31

*Features (all Booking actors)*

- Added support for `startUrls` without the `www.` subdomain (e.g. `https://booking.com/hotel/cz/jeromehouse.en-gb.html`), which are now normalized to the canonical `https://www.booking.com/...` URL before scraping instead of being rejected as invalid

### 2026-08-17

*Breaking changes ('booking-scraper')*

- Removed `privacyLevel` from `roomOfferings.roomDetail.property.roomsDetails[]`, since Booking.com no longer returns this field there and it was causing the room offerings extraction to fail. The privacy classification is still available under `roomOfferings.roomDetail.highlightsForAllRooms[].roomHighlights[].privacyLevel`.

### 2026-06-18

*Features ('booking-scraper')*

- Added `hasGeniusDiscount` and `geniusDiscountText` to each room rate plan (`rooms[].options[]`), so it is possible to identify which specific rate plans are eligible for the Booking.com Genius discount

### 2026-06-12

*Breaking changes ('booking-scraper')*

- The `bedTypes[].beds` field now returns a single pre-joined string instead of separate entries. Multiple beds that always coexist are joined with `" AND "` (e.g. `"1 king bed AND 1 sofa bed"`); selectable alternatives are joined with `" OR "` (e.g. `"2 single beds OR 1 large double bed"`). Previously each bed option was a separate element in the array.

### 2026-01-26

*Features ('booking-scraper')*

- Added support for various URL parameters in `startUrls`, such as `checkin` or `checkout`

### 2025-11-05

*Features ('booking-scraper)*

- Added scraping of the rating label on the place details page.

### 2025-07-28

*Fixes ('booking-scraper')*

- Fixed hotel facilities extraction crawling, which was moved under a frontend API by Booking

### 2025-07-18

*Fixes ('booking-scraper')*

- Use unlimited max items limit on the case of not setting `maxItems` at all (instead of defaulting to 100)

### 2025-07-08

*Fixes ('booking-scraper')*

- Detect and retry on missing rooms data

### 2025-07-07

*Fixes ('booking-scraper')*

- Decreased blocking rate

### 2025-06-29

*Fixes ('booking-scraper')*

- Detect and retry on new anti-bot protection

### 2025-06-25

*Fixes ('booking-scraper')*

- Fixed minimum `minScore` filter values below 5, which were causing the scraper to fail

### 2025-06-19

*Fixes ('booking-scraper')*

- Fixed `address`, `rating`, and `reviews` extraction for hotels
- Also fixed the facilities name extraction for a specific new name format

### 2025-05-09

*Fixes ('booking-scraper')*

- Fixed extraction of the `breadcrumbs`, `categoryReviews`, and `facilities` fields
  - Note that the extraction of `facilities` still sometimes fails, since it will be a bit harder to get the data with full accuracy, we will need to spend more time on it. Give us some feedback in the Actor issues if you are interested in this data, so we can prioritize it ;)

### 2025-03-15

*Features (all Booking actors)*

- Updated allowed Actor memory range values to 2-8 GB to help with scraping scalability

*Fixes ('booking-scraper')*

- Fixed extraction of the `traderInfo`, which was previously failing for specific hotels

### 2025-03-07

*Features (all Booking actors)*

- Updated date input fields to also allow relative date values (e.g. `1 day`, `2 weeks`, `3 months`)

### 2025-03-06

*Features ('booking-scraper')*

- Added extraction of hotel's `propertyInfo` for the `See business details` or `See host details` sections

### 2025-02-06

*Features ('booking-scraper')*

- Added extractions of hotel's room's `discount`, including the `discountedPrice`, `text` and `description`
  - The regular price will now always be the non-discounted price for consistency.
  - This is because the discounted price can wary depending on proxy location and Booking's randomness.

*Fixes ('booking-scraper')*

- Fixed "Room ID extraction" errors for "Partner offer" rooms
  - Added a new `isPartnerOfferRoom` field to indicate these rooms

### 2025-02-04

*Features ('booking-scraper')*

- Added extractions of hotel's room's `displayedPrice` and `excludedTaxesPrice`.
  - The `price` field is now always extracted as the total price including taxes and fees.
  - The total `price` will now be consistent no matter what proxy location is used.

*Fixes ('booking-scraper')*

- Fixed extraction of hotel's:
  - "House rules" policy `checkIn` and `checkOut` times
  - facilities under the `facilities` field
  - "Guest category reviews" under the `categoryReviews` field

### 2024-12-05

**Breaking changes:** *Features ('booking-reviews')*

- Completely reworked the scraper to extract new data points in more detail. List of the most important changes:
  - Reviewer's stay dates under the new `checkInDate` and `checkOutDate` fields
  - Review posted date up to seconds under `reviewDate` field
  - Room ID under `stayRoomId` field
  - Number of helpful votes under `helpfulVotes` field
  - Review category data like `totalCategoryReviews` and `hotelRatingScores`

*Fixes ('booking-reviews')*

- Fixed blocking issues for specific users

### 2024-11-29

*Fixes ('booking-scraper')*

- Fixed detection for removed stay dates for hotels with no available rooms

### 2024-11-27

*Fixes ('booking-scraper')*

- Added detection for removed stay dates as a form of blocking from Booking - the requests will be retried
- Fixed blocking issues initial page loads at the start of the runs

### 2024-11-08

*Fixes ('booking-scraper')*

- Fixed blocking issues for hotel detail pages with different language and currency settings

### 2024-10-12

*Fixes ('booking-scraper')*

- Fixed extraction of hotel facilities (`facilities` output field)

### 2024-08-26

*Features ('booking-scraper')*

- Added extraction of breadcrumbs under the new `breadcrumbs` field
  - Each breadcrumb object has the following fields: `name`, `fullName`, `link` (primary URL) and `altLink` (alternative URL)

### 2024-08-23

*Features ('booking-scraper')*

- Added extraction of room cancellation policies
  - New output fields `cancellationType` and `freeCancellation` available under `rooms[i].options[j]`

### 2024-08-12

*Fixes ('booking-scraper')*

- Fixed extraction of property description

### 2024-07-21

*Features ('booking-scraper')*

- Added extraction of host data under the new `hostInfo` field

### 2024-07-20

*Fixes ('booking-scraper')*

- Results were occasionally extracted in an incorrect language (not respecting the input configuration).

### 2024-07-01

*Features ('booking-scraper', 'fast-booking-scraper')*

- Added support for region search URLs such as:
  - https://www.booking.com/region/es/tenerife-island.cs.html
  - https://www.booking.com/searchresults.cs.html?region=5765

### 2024-07-01

*Features ('booking-scraper')*

- Added extraction of license data under the new `licenseInfo` field

### 2024-06-06

*Features ('booking-scraper', 'fast-booking-scraper')*

- Added support for `startUrls` with geo coordinates (latitude + longitude), such as:
  - https://www.booking.com/searchresults.html?dest\_type=latlong\&latitude=9.49777239589238\&longitude=76.3387864375036
  - https://www.booking.com/searchresults.html?dest\_type=latlong;latitude=25.9798617990057;longitude=-80.117758901886

### 2024-04-01

*Features ('booking-scraper', 'fast-booking-scraper')*

- Added support for inputted hotel search URLs parameter filters. The URL filters will now be respected and applied to the search.
  - Filters like "Parking", "Breakfast included", "Less than 1 km from city center", etc. are now supported.

### 2024-03-23

*Fixes ('booking-scraper', 'fast-booking-scraper')*

- Fixed crawling of destination search page to match Booking's results.

### 2024-03-18

*Fixes ('booking-scraper')*

- Fixed extraction of hotel's rooms due to Booking's redirection blocking.

*Fixes ('fast-booking-scraper')*

- Fixed price extraction decimal point issue.

### 2024-03-12

*Features ('booking-scraper')*

- Added extraction of hotel's rooms left count under the new `[room].roomsLeft` field.

### 2024-03-11

*Fixes ('booking-scraper', 'fast-booking-scraper')*

- Fixed number of results scraped and crawled for hotel search pages. This was caused by an update on Booking.

### 2024-02-25

*Features ('booking-scraper', 'fast-booking-scraper')*

- Added flexible stay duration input option field - `flexWindow`
- Added extraction of the picked stay dates

### 2024-02-20

*Features ('booking-scraper')*

- Added extraction of rooms images. You can find them under the new `roomImages` field.
- Added extraction of room IDs. See the new `[room].id` field.
- Improve hotel rooms beds data extraction into a more detailed and structured format
  - **Breaking**: updated the field name from `[room].bedType` to `[room].bedType*s*`

### 2024-01-10

*Features ('booking-scraper', 'fast-booking-scraper')*

- Significantly improved the performance and speed of scraping.

*Fixes*

- Fixed input options like 'language' and 'currency' not being respected for shared MyWishlist URLs.

### 2023-12-09

*Features*

- Added review ratings distributions - `reviewScoresDistribution` (`booking-scraper`, `fast-booking-scraper`)

### 2023-11-27

*Features*

- Added back the 'overcome 1000 results limit' feature, to activate when the `maxItems` limit is set above 1000 (`booking-scraper`, `fast-booking-scraper`)
- Added full input parsing and validation - might potentially break incorrect inputs (`booking-scraper`, `fast-booking-scraper`)

*Fixes*

- Fixed last page detection for certain page formats (`booking-scraper`, `fast-booking-scraper`)

### 2023-11-24

*Features*

- Added hotel chain/brand extraction under the `hotelChain` output field (`booking-scraper`)

### 2023-10-25

*Features*

- Added time of scrape to each extracted place under the `timeOfScrapeISO` field (`booking-scraper`, `fast-booking-scraper`)
  - The format is in the ISO 8601 format, i.e. `2023-10-25T12:00:00.000Z` *(GMT/UTC+0)*

### 2023-10-21

*Features*

- Added hotel facilities extraction under the `facilities` field (`booking-scraper`)

### 2023-10-06

*Fixes*

- Fixed parsing of inputted hotel start URLs, which was causing the scraper to fail

### 2023-08-10

*Fixes*

- Fixed hotel stars extraction
- Fixed place type extraction
- Fixed "Get more than 1000 results" functionality
- Fixed hotel extraction when `simple: true`
- Fixed timeout on new pages - actor should run faster now
- Fixed price range input filter

*Features*

- Added relative dates for check-in and check-out fields (relative to the run's start date)
  - i.e. "1 day", "2 weeks", "6 months"
  - note: can only be used in JSON input
- Updated duplicate place detectors from name to place url
  - Places with identical names are now scraped properly
- Reworked "Get more than 1000 results" with price ranges and location filters
  - Price ranges activate when both `checkIn` and `checkOut` dates are specified (can be relative)
  - Location filters are default (they are not as accurate as price ranges though)

*Deprecations*

- `useFilters` field was deprecated, update your input with new field `overcomeResultsLimit` (Get more than 1000 results)
  - `useFilters` will still work for now

### 2023-04-05

- Handle shared URLs

### 2023-02-16

- Fixed issue with `stars` extraction

### 2023-01-30

- Fixed issue with category reviews extraction
- Add `Resorts` option to property types

### 2023-01-27

- Fixed issue with reviews extraction

### 2023-01-17

- Rewrite the scraper to Crawlee
- Fixed issue extracting `renderedCurrency` from the website

### 2023-01-16

- Fixed issue where validation fails because `selected_currency` is not present in the url

### 2023-01-04

- Fixed issue where 'reviews' are not scraped correctly when `simple: true`

### 2022-12-04

- Fixed missing months in review dates

### 2022-11-30

- Fixed missing prices and malformed price format

### 2022-11-29

- Fixed filter parameters in the search URL (`propertyType` and `minMaxPrice`)

### 2022-11-25

- Fixed incorrect currencies in the output - request retries

### 2022-11-23

- Added support for Booking-generated shared list of properties

### 2022-10-27

- Excluded `rating: null` results from the output if `minScore` is set

### 2022-10-12

- Removed preview reviews extraction - all reviews are now extracted from separate pages.
- Decreased timeout error rate by increasing timeout seconds, enabling browser fingerprinting and limiting max concurrency.

### 2022-06-27

- Fixed `image` extraction from listing page (for `simple: true` scrape parameter)
- Added the possibility to combine `useFilters` (circumventing Booking's limit of 1000 results) with scrape filters on property type (hotels, apartments, etc.) or price range

### 2022-04-03

- Added user reviews extraction from both detail page and reviews pagination pages
- Added category reviews extraction from detail page
- Removed default settings `minScore = 8.4`
- Fixed language settings for detail page (`language` input field was not respected)
- Fixed `stars` extraction from detail page
- Fixed `checkInFrom` and `checkInTo` extraction from detail page
- Handled global state with external package `apify-global-store`
- Split code into more source files, created `extraction` and `routes` folders

### 2022-01-10

- Fixed rejection of current date in `checkIn` and `checkOut` fields

### 2021-12-28

- Set custom `minMaxPrice` filter to provide more specific filtering than booking.com API
- Added rooms scraping support without `checkIn` and `checkOut` set (simple output with basic info only)
- Implemented `useFilters` to overcome 1000 results limit by setting filters one by one and combining them
- Refactored `handlePageFunction`

### 2021-11-22

- Fixed broken url search
- Fixed outdated selectors to scrape more detailed info
- Fixed `minMaxPrice` search filter
- Maximized results count when `maxPages` is set (included `minScore` and `priceRange` into search url)
- Prevented infinite run when no `maxPages` restriction is set

### 2021-08-24

- Extracted all images

### 2021-01-22

Features:

- Added screenshots for errors
- Added SessionPool

Fixes:

- Removed broken currency check (the main bug that prevented the scraper to work)
- Fixed scraper getting into infinite error loop
- Major code refactor (will help with future fixes and UX)
