Booking.com Hotel Reviews Scraper
Pricing
from $12.75 / 1,000 results
Booking.com Hotel Reviews Scraper
Scrape Booking.com hotel guest reviews by property URL or name. Get reviewer, country, score, positive and negative text, room and traveler type, plus the property score and category breakdown.
Pricing
from $12.75 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Booking.com Hotel Reviews Scraper
Here is one real result, with every field the actor returns:
{"imageUrl": "https://xx.bstatic.com/xdata/images/xphoto/square64/77242897.jpg?k=c8e859ea9bef1dd639a1088c5b7e6673e27a72e7151c813829b5a80e96c97213&o=","hotelName": "The Manhattan Club","hotelUrl": "https://www.booking.com/hotel/us/the-manhattan-club.html","hotelId": 241699,"reviewScore": 10,"reviewTitle": "Fabulous and elegant place to stay in Midtown.","positiveText": "We loved the welcoming lobby, smiling staff, perfect location and size of the units. We will return next time in New York.","negativeText": "The elevators were challenging. We understand that they are refurbishing some elevators, they really need more working at all times. But we loved everything else so the elevators were only a minor issue.","reviewerName": "Diane","reviewerCountryCode": "US","isAnonymous": false,"travelerType": "young couple","tripType": "Leisure","roomType": "One-Bedroom Suite","reviewLanguage": null,"reviewDate": "2026-08-05","reviewUrl": "f5ad925431ebe728","overallScore": 8.3,"overallScoreWord": "Very good","totalReviewsCount": 4252,"scoreStaff": 8.9,"scoreCleanliness": 8.6,"scoreComfort": 8.7,"scoreLocation": 9.6,"scoreValue": 8.1,"scoreFacilities": 8.1,"scoreWifi": 8.4,"observedAt": "2026-08-10T14:33:05.665Z","error": null}
The most complete Booking.com reviews scraper available. It returns every field each guest review exposes, including separate positive and negative text, reviewer name and country, traveler and trip type, room type, and review date, and attaches the property's overall score, review count, and full category breakdown (staff, cleanliness, comfort, location, value, facilities, WiFi) to every review, with filters and optional AI enrichment.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor collects guest reviews from Booking.com properties. Point it at one or more hotel page URLs, or give it a hotel name plus destination and it finds the best matching property. For each property it paginates the reviews and writes one normalized record per review.
Each record carries the review score and title, separate positive and negative text, the reviewer's name and country, whether the reviewer is anonymous, the traveler type, trip type, room type, review language, and review date. Every review also carries the property context: overall score and word, total review count, and the full category breakdown so you can analyze scores without a second request.
Filters let you sort the reviews, keep one language, bound the score, keep a traveler or trip type, or limit to a date range. Dates are normalized to YYYY-MM-DD, missing source values are returned as null, and optional AI add-ons classify sentiment, summarize each review, and extract topics and a category.
Quickstart
Open the actor, paste this into the input, and press Run. It returns the 10 most relevant reviews for The Manhattan Club.
{"maxReviews": 10,"hotelUrls": ["https://www.booking.com/hotel/us/the-manhattan-club.html"],"sortBy": "most_relevant"}
Or find a property by name instead of URL with searchTerms, for example ["Hilton Barcelona"]. Provide at least one of hotelUrls or searchTerms.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
hotelUrls | string[] | conditional | ["https://www.booking.com/hotel/us/the-manhattan-club.html"] | Booking.com hotel page URLs. Reviews are collected for each property. |
searchTerms | string[] | conditional | (empty) | Hotel name plus destination, for example The Manhattan Club, New York. The best matching property is used. |
maxReviews | integer | no | 10 | Maximum reviews to collect per property. Free Apify plans are capped at 10 per property. |
sortBy | enum | no | most_relevant | Review order: most_relevant, newest, highest_score, lowest_score. |
reviewLanguage | string | no | (all) | Keep only reviews in this language code, for example en, es, pt, fr, de, it. |
minScore | integer | no | (none) | Keep only reviews with a score at or above this value (0-10). |
maxScore | integer | no | (none) | Keep only reviews with a score at or below this value (0-10). |
travelerType | string | no | (any) | Keep only reviews from this traveler type, for example Solo, Couple, Family, Group, Business. |
tripType | string | no | (any) | Keep only reviews for this trip type: Leisure or Business. |
reviewedAfter | string | no | (none) | Keep only reviews dated on or after this date (YYYY-MM-DD). |
reviewedBefore | string | no | (none) | Keep only reviews dated on or before this date (YYYY-MM-DD). |
withSentiment | boolean | no | false | Classify each review's sentiment (positive/negative/neutral) with a confidence score. Billed only when produced. Paid Apify plans only. |
withSummary | boolean | no | false | Generate a 1-2 sentence AI summary of each review. Billed only when produced. Paid Apify plans only. |
withTopics | boolean | no | false | Extract discussed aspects/keywords and a broad category per review. Billed only when produced. Paid Apify plans only. |
Provide at least one of hotelUrls or searchTerms.
Output reference
One dataset item per review. Types: string, integer, number, boolean, string[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
imageUrl | string | Reviewer avatar or property thumbnail URL. |
hotelName | string | Property name. |
hotelUrl | string | Canonical Booking.com property URL. |
hotelId | integer | Booking.com property ID. |
reviewScore | number | This review's score (0-10). |
reviewTitle | string | Review title. |
positiveText | string | The reviewer's positive comments, or null. |
negativeText | string | The reviewer's negative comments, or null. |
reviewerName | string | Reviewer name, or null when anonymous. |
reviewerCountryCode | string | Two-letter country code of the reviewer. |
isAnonymous | boolean | Whether the review is anonymous. |
travelerType | string | Traveler type, for example young couple, family. |
tripType | string | Trip type: Leisure or Business. |
roomType | string | Room type the guest stayed in. |
reviewLanguage | string | Language of the review, when detected. |
reviewDate | string | Review date (YYYY-MM-DD). |
reviewUrl | string | Booking's identifier for the review. |
overallScore | number | Property overall score (0-10). |
overallScoreWord | string | Property score label, for example Very good. |
totalReviewsCount | integer | Total number of reviews for the property. |
scoreStaff | number | Property category score for staff. |
scoreCleanliness | number | Property category score for cleanliness. |
scoreComfort | number | Property category score for comfort. |
scoreLocation | number | Property category score for location. |
scoreValue | number | Property category score for value for money. |
scoreFacilities | number | Property category score for facilities. |
scoreWifi | number | Property category score for WiFi. |
aiSentiment | string | AI sentiment (positive/negative/neutral), or null unless enabled. |
aiSentimentScore | number | AI sentiment confidence between -1 and 1, or null unless enabled. |
aiSummary | string | AI 1-2 sentence summary, or null unless enabled. |
aiTopics | string[] | AI-extracted aspects/keywords, or null unless enabled. |
aiCategory | string | AI broad category, or null unless enabled. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"hotelUrls": ["https://www.booking.com/hotel/us/the-manhattan-club.html"], "maxReviews": 10, "sortBy": "most_relevant"}):
{"hotelName": "The Manhattan Club","hotelUrl": "https://www.booking.com/hotel/us/the-manhattan-club.html","hotelId": 241699,"reviewScore": 10,"reviewTitle": "Fabulous and elegant place to stay in Midtown.","positiveText": "We loved the welcoming lobby, smiling staff, perfect location and size of the units. We will return next time in New York.","reviewerName": "Diane","reviewerCountryCode": "US","travelerType": "young couple","tripType": "Leisure","roomType": "One-Bedroom Suite","reviewDate": "2026-08-05","overallScore": 8.3,"overallScoreWord": "Very good","totalReviewsCount": 4252,"scoreLocation": 9.6,"observedAt": "2026-08-10T14:33:05.665Z","error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~booking-reviews-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"hotelUrls":["https://www.booking.com/hotel/us/the-manhattan-club.html"],"sortBy":"newest","maxReviews":50}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~booking-reviews-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"searchTerms":["Hilton Barcelona"],"reviewLanguage":"en","minScore":8,"maxReviews":100}'
Apify CLI:
apify call scrapers_lat/booking-reviews-scraper \--input '{"hotelUrls":["https://www.booking.com/hotel/us/the-manhattan-club.html"],"tripType":"Business"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per review returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes an item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - AI add-ons are opt-in. Sentiment, summary, and topics are billed per review only when usable output is produced, and only on paid Apify plans.
- Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 reviews per property. Upgrade for higher
maxReviews.
FAQ and troubleshooting
A run returned 0 records. Why? The property had no reviews matching your filters, or the URL/name did not resolve to a property. Loosen the filters or check the hotel URL. Zero-result runs are not charged.
Can I find a hotel without its URL?
Yes. Put the hotel name plus destination in searchTerms, for example The Manhattan Club, New York. The best matching property is used.
Why are positiveText or negativeText null?
A reviewer may leave only positive or only negative comments, or none at all. Missing text is returned as null, never invented.
Do reviews include the property scores? Yes. Every review carries the property's overall score, total review count, and the full category breakdown (staff, cleanliness, comfort, location, value, facilities, WiFi).
How do I get only negative reviews?
Set sortBy to lowest_score, or set maxScore to bound the review score.
Is this an official Booking.com tool? No. This actor is independent and has no affiliation with Booking.com. It reads only data that is publicly available on Booking.com review pages. Use it in accordance with Booking.com's terms of service.
Related scrapers
- Booking.com Hotels & Prices Scraper: Booking.com hotels, prices, and availability.
- Airbnb Scraper: Airbnb listings, prices, and hosts.
- Adondevivir Scraper: Latin American property listings.
- Funda Netherlands Scraper: Netherlands property listings.
- SeLoger France Scraper: French property listings.
- Instagram Scraper: Instagram profiles, posts, and stats.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Booking.com. Accesses only publicly available data. Use in accordance with Booking.com's terms of service.
