Booking.com Reviews Scraper avatar

Booking.com Reviews Scraper

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Booking.com Reviews Scraper

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

Shahid Irfan

Maintained by Community

Actor stats

2

Bookmarked

11

Total users

7

Monthly active users

8 days ago

Last modified

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

FieldTypeDefaultPurpose
startUrlsArray of stringsThe Savoy hotel pageBooking.com hotel page URLs in the /hotel/{country}/{slug}.html form.
results_wantedInteger20Maximum number of unique reviews to save across all hotel URLs.
searchTextStringEmptyKeep reviews that contain this phrase. Leave empty for all reviews.
sortByStringMOST_RELEVANTReview order. Options: MOST_RELEVANT, NEWEST_FIRST, OLDEST_FIRST, SCORE_DESC, SCORE_ASC.
proxyConfigurationObjectNoneApify 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

FieldDescription
hotelNameHotel name from the hotel page data.
hotelUrlCanonical hotel URL with the reviews tab.
reviewIdBooking.com review hash.
reviewUrlReview page URL with the review hash.
reviewTitleReview headline.
reviewTextPositive and negative text combined.
positivePositive review text.
negativeNegative review text.
ratingReview score.
publishedAtPublication date in YYYY-MM-DD form.
languageReview language code.
stayDateStay month in YYYY-MM form.
roomTypeRoom name from the booking.
travelerTypeGuest type, such as Couple or Family.
reviewerNameReviewer display name.
reviewerCountryReviewer country name.
reviewerCountryCodeReviewer country code.
reviewerAvatarColorAvatar color supplied by Booking.com.
reviewerAvatarUrlAvatar image URL.
reviewerAnonymousWhether the reviewer is anonymous.
reviewerShowCountryFlagWhether the country flag is shown.
helpfulVotesCountNumber of helpful votes.
isApprovedWhether Booking.com approved the review.
isTranslatableWhether the review can be translated.
textTrivialFlagBooking.com text flag for short or trivial reviews.
partnerReplyHotel reply, when one exists.
checkinDateStay check-in date.
checkoutDateStay check-out date.
numNightsNumber of nights in the stay.
stayStatusBooking.com stay status.
roomTypeIdRoom type identifier.
customerTypeBooking.com customer type.
photosReview photos with size and URL entries.
photoCountNumber 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_RELEVANT uses Booking.com's default order.
  • NEWEST_FIRST and OLDEST_FIRST sort by publication date.
  • SCORE_DESC and SCORE_ASC sort 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.

Review data belongs to Booking.com and the people who wrote it. Use the output according to Booking.com's terms and applicable law.