Booking.com Reviews Scraper
Pricing
from $0.80 / 1,000 results
Booking.com Reviews Scraper
Extract Booking.com reviews at scale with precision. Automate review collection, sentiment analysis, and competitive intelligence. Perfect for hospitality businesses, OTAs, and market researchers. Supports bulk scraping with filtering by rating, date, and language.
Pricing
from $0.80 / 1,000 results
Rating
5.0
(4)
Developer
Shahid Irfan
Maintained by CommunityActor stats
2
Bookmarked
11
Total users
7
Monthly active users
8 days ago
Last modified
Categories
Share
Booking Reviews Scraper
Collect guest reviews from Booking.com hotel pages into a clean dataset. Add one or more hotel URLs, choose how many reviews you want, and run the Actor.
What this Actor does
The Actor resolves each hotel URL, requests that hotel's review list, and saves reviews in batches. It follows the order and text filter you select. If a request fails, it retries with another request profile before moving to the next hotel.
Reviews that contain only a score and no text or title are skipped. Every saved record keeps the hotel, reviewer, stay, and response metadata that Booking.com returns.
Input
| Field | Type | Default | Purpose |
|---|---|---|---|
startUrls | Array of strings | The Savoy hotel page | Booking.com hotel page URLs in the /hotel/{country}/{slug}.html form. |
results_wanted | Integer | 20 | Maximum number of unique reviews to save across all hotel URLs. |
searchText | String | Empty | Keep reviews that contain this phrase. Leave empty for all reviews. |
sortBy | String | MOST_RELEVANT | Review order. Options: MOST_RELEVANT, NEWEST_FIRST, OLDEST_FIRST, SCORE_DESC, SCORE_ASC. |
proxyConfiguration | Object | None | Apify Proxy or your own proxy URLs. Use it when Booking.com blocks the run IP. |
URLs may include a language suffix, a query string, or a reviews hash. The Actor reads the country and hotel slug from the path and ignores tracking parameters.
Output
| Field | Description |
|---|---|
hotelName | Hotel name from the hotel page data. |
hotelUrl | Canonical hotel URL with the reviews tab. |
reviewId | Booking.com review hash. |
reviewUrl | Review page URL with the review hash. |
reviewTitle | Review headline. |
reviewText | Positive and negative text combined. |
positive | Positive review text. |
negative | Negative review text. |
rating | Review score. |
publishedAt | Publication date in YYYY-MM-DD form. |
language | Review language code. |
stayDate | Stay month in YYYY-MM form. |
roomType | Room name from the booking. |
travelerType | Guest type, such as Couple or Family. |
reviewerName | Reviewer display name. |
reviewerCountry | Reviewer country name. |
reviewerCountryCode | Reviewer country code. |
reviewerAvatarColor | Avatar color supplied by Booking.com. |
reviewerAvatarUrl | Avatar image URL. |
reviewerAnonymous | Whether the reviewer is anonymous. |
reviewerShowCountryFlag | Whether the country flag is shown. |
helpfulVotesCount | Number of helpful votes. |
isApproved | Whether Booking.com approved the review. |
isTranslatable | Whether the review can be translated. |
textTrivialFlag | Booking.com text flag for short or trivial reviews. |
partnerReply | Hotel reply, when one exists. |
checkinDate | Stay check-in date. |
checkoutDate | Stay check-out date. |
numNights | Number of nights in the stay. |
stayStatus | Booking.com stay status. |
roomTypeId | Room type identifier. |
customerType | Booking.com customer type. |
photos | Review photos with size and URL entries. |
photoCount | Number of review photos. |
Null and empty values are removed from each record.
Example output
The sample below is trimmed to the main fields.
{"hotelName": "The Savoy","hotelUrl": "https://www.booking.com/hotel/gb/the-savoy.en-gb.html#tab-reviews","reviewId": "907d8c1fcec3cc9f","reviewUrl": "https://www.booking.com/reviews/gb/hotel/the-savoy.en-gb.html#review_907d8c1fcec3cc9f","reviewTitle": "We had a terrific time in the Savoy!","reviewText": "Positive: Super friendly staff!","positive": "Super friendly staff!","rating": 10,"publishedAt": "2026-09-17","language": "en","stayDate": "2026-09","roomType": "Superior Queen Room","travelerType": "Couple","reviewerName": "Bert","reviewerCountry": "Netherlands","reviewerCountryCode": "nl","reviewerAnonymous": false,"helpfulVotesCount": 0,"isApproved": true,"isTranslatable": false,"numNights": 2}
Reviews across several hotels
Add URLs in the order you want them processed. The Actor keeps fetching from each hotel until it reaches results_wanted or runs out of matching reviews.
{"startUrls": ["https://www.booking.com/hotel/gb/the-savoy.en-gb.html","https://www.booking.com/hotel/gb/hampton-by-hilton-london-city.en-gb.html"],"results_wanted": 40,"sortBy": "NEWEST_FIRST"}
Text filter and order
searchText uses the review text filter on Booking.com. For example, breakfast returns reviews that mention breakfast, and the dataset text is saved without highlight markup.
sortBy applies to every hotel in the run:
MOST_RELEVANTuses Booking.com's default order.NEWEST_FIRSTandOLDEST_FIRSTsort by publication date.SCORE_DESCandSCORE_ASCsort by review score.
When a request fails
The Actor rotates request profiles, retries temporary network and server failures, and keeps a small fallback set of request formats. If one hotel cannot be resolved, it logs a warning and moves to the next URL. A run fails only when no hotel returns review data.
On Apify, when Booking.com blocks the run IP, the Actor switches to Apify residential proxy automatically. If your account cannot use residential proxy, it tries the standard Apify proxy and then stops with an error. Apify Proxy usage is billed by Apify according to your plan.
If you maintain the Actor, read API_DISCOVERY.md before changing the request. It records the endpoint, required fields, request profiles, and the checks used to verify them.
FAQ
How many reviews can I collect?
The limit is results_wanted. The actual count depends on how many matching reviews the hotel has and how many of them include text or a title.
Why is the dataset smaller than results_wanted?
The hotel may have fewer matching reviews, or the text filter may exclude short score-only entries. In that case, the Actor moves to the next hotel URL.
Can I collect reviews without a text filter?
Yes. Leave searchText empty to collect all reviews in the selected order.
Do I need a proxy?
On Apify, no. The Actor switches to Apify residential proxy when the direct IP is blocked. Add your own settings under proxyConfiguration if you want to use a specific proxy group or your own proxy URLs.
Does the Actor save reviews as it goes?
Yes. Each page of reviews is saved as soon as it is validated, so a later failure does not discard earlier results.
Legal
Review data belongs to Booking.com and the people who wrote it. Use the output according to Booking.com's terms and applicable law.