All scrapers

Travel

Booking.com Reviews Scraper

booking.com

100% Success rate
0.7s Avg response
DataDome Protection
1,311 calls Measured over

Booking.com hotel reviews are served through a dedicated plugin endpoint rather than the generic page fetch. Give it a hotel - a booking.com hotel URL such as https://www.booking.com/hotel/gb/the-savoy.html, with or without a locale suffix, or the short form gb/the-savoy - and it returns the hotel's newest guest reviews already parsed: the review id and date, the score out of 10 with Booking's score word and a rating band, the title, what the guest liked and what they disliked, the reviewer's name and country, the trip type and traveler type, the number of nights and the month of the stay, helpful votes, a mobile flag, the review language and Booking's raw tags. Booking exposes the newest 15 reviews written in each language, so a call returns up to 15 per language you pick from 18, or up to 270 with all of them, and since drops reviews older than a date. That makes it a fit for monitoring new reviews and multilingual sentiment, not for downloading a hotel's full review history. The response holds the reviews only, without the hotel's name or overall score, and no Booking.com account or partner API is involved.

What you can extract

  • Review id, review date, language and Booking's raw tags
  • Score out of 10, Booking's score word and a rating band from exceptional to very_poor
  • Title, what the guest liked (positiveText) and what they disliked (negativeText)
  • Reviewer name, country and ISO country code
  • Trip type, traveler type, number of nights and month of stay
  • Helpful votes and a submitted-from-mobile flag
  • Per language: status, reviews found and a capped flag when Booking holds older reviews than it serves
  • The newest 15 reviews per language in 18 languages or all of them (up to 270 per call), with a since date cut-off

Dedicated endpoints

/travel/booking-reviews

Booking.com hotel reviews

The newest guest reviews of a Booking.com hotel (hotel as a booking.com hotel URL or cc/slug such as gb/the-savoy): hotel (url, countryCode, slug) and a reviews array with id, reviewDate, rating, ratingText, ratingBand, title, positiveText, negativeText, reviewer (name, country, countryCode), tripType, travelerType, nights, stayMonth, helpfulVotes, submittedFromMobile, language and tags. Booking serves the newest 15 reviews per language: pick them with languages (a comma list of en, de, fr, es, it, nl, pt, pl, ru, ja, zh, ko, sv, da, no, fi, cs and tr, or all; default en), cap the total with max_results (1-270) and drop older reviews with since (YYYY-MM-DD). languages reports status, reviewsFound and capped per language, and pagesFetched counts the language pages billed.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/travel/booking-reviews?hotel=https%3A%2F%2Fwww.booking.com%2Fhotel%2Fgb%2Fthe-savoy.html&languages=en%2Cde&max_results=30"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/travel/booking-reviews",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"hotel": "https://www.booking.com/hotel/gb/the-savoy.html", "languages": "en,de", "max_results": "30"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const data = await su.bookingReviews('https://www.booking.com/hotel/gb/the-savoy.html', {
  languages: 'en,de',
  maxResults: 30,
});
console.log(data);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Example response

{
  "hotel": {
    "url": "https://www.booking.com/hotel/gb/the-savoy.html",
    "countryCode": "gb",
    "slug": "the-savoy"
  },
  "reviews": [
    {
      "id": "c035aefe035f7172",
      "language": "en",
      "reviewDate": "2026-09-29",
      "reviewDateText": "Reviewed: September 29, 2026",
      "rating": 10.0,
      "ratingText": null,
      "ratingBand": "exceptional",
      "title": "Quality, classic and elegant.",
      "positiveText": "Location was fantastic, the history of the hotel and beautiful decor. The staff are lovely, very kind and friendly. Loved the American Bar and the Spa...",
      "negativeText": "Going home!",
      "reviewer": { "name": "Emma", "country": "United Kingdom", "countryCode": "GB" },
      "tripType": "leisure",
      "travelerType": "solo",
      "nights": 3,
      "stayMonth": "2026-09",
      "stayText": "Stayed in September 2026",
      "helpfulVotes": 5,
      "submittedFromMobile": true,
      "tags": ["Leisure trip", "Solo traveler", "Stayed 3 nights", "Submitted from a mobile device"]
    },
    {
      "id": "755717066e20eec1",
      "language": "de",
      "reviewDate": "2026-05-25",
      "reviewDateText": "Bewertung abgegeben: 25. Mai 2026",
      "rating": 8.0,
      "ratingText": null,
      "ratingBand": "very_good",
      "title": "Es ist ein tolles Hotel mit dem besten Service, den ich jemals hatte.",
      "positiveText": "Die Lage des Hotels kann nicht besser sein, das Service ist top! Die Ausstattung ist sehr edel...",
      "negativeText": null,
      "reviewer": { "name": "Sabine", "country": "Österreich", "countryCode": "AT" },
      "tripType": "leisure",
      "travelerType": "couple",
      "nights": 3,
      "stayMonth": "2026-05",
      "stayText": "Übernachtet am Mai 2026",
      "helpfulVotes": 0,
      "submittedFromMobile": false,
      "tags": ["Urlaub", "Paar", "Länge des Aufenthalts: 3 Nächte"]
    }
  ],
  "resultsCollected": 25,
  "languages": [
    { "language": "en", "status": "ok", "reviewsFound": 15, "capped": true },
    { "language": "de", "status": "ok", "reviewsFound": 10, "capped": false }
  ],
  "pagesFetched": 2,
  "since": null
}

Read the API docs

Frequently asked questions

Is it legal to scrape Booking.com reviews?

Collecting publicly available Booking.com reviews and scores is lawful in many jurisdictions, but the rules depend on your country, the data you collect and how you use it. Reviewer names and review text can be personal data, so follow the privacy rules that apply to you. ScrapeUnblocker returns the public reviews; what you collect and how you use it is your responsibility.

How do I scrape Booking.com reviews without getting blocked?

Booking.com guards its pages with DataDome. The /travel/booking-reviews plugin reads Booking's own review list for each language over rotating ISP exits, hands a page that comes back blocked to ScrapeUnblocker's full anti-bot chain, which renders it in a real browser when it has to, and tries a blocked page once more on a fresh exit. In ScrapeUnblocker's benchmark it returned reviews on 100% of 1,311 calls with different hotels in 46 countries, about 0.7s per call.

How many Booking.com reviews can I get?

Booking.com exposes the newest 15 reviews written in each language, newest first, with no deeper page, sort or filter behind them. So a call returns at most 15 reviews per language you select, and up to 270 with all 18 languages (max_results 1-270). When a language has more reviews than that, its capped flag is true: older reviews exist on Booking but cannot be reached here. The plugin is built for monitoring new reviews and multilingual sentiment - call it on a schedule, keep the review ids you have not seen yet and set since to the date of your last run - and it does not download a hotel's full review history.

What data do I get for each review?

Each review has its id and date, the score out of 10 with Booking's score word where it shows one and a ratingBand from exceptional, superb and very_good down to very_poor, the title, what the guest liked (positiveText) and disliked (negativeText), the reviewer's display name, country and ISO country code, the trip type (leisure or business), the traveler type (couple, solo, family, group or friends), the number of nights and the month of the stay, helpful votes, whether it was sent from a mobile device, its language and Booking's raw tags. The response does not include the hotel's name, overall score or review count; the Booking.com hotels plugin, /travel/booking, returns those for every property in a search.

Can I get Booking.com reviews in other languages?

Yes. Set languages to a comma list of review languages - en, de, fr, es, it, nl, pt, pl, ru, ja, zh, ko, sv, da, no, fi, cs and tr - or to all; the default is en. Reviews come back in the language they were written in, each tagged with its language code, not machine-translated. Languages are read in the order you give them until max_results is reached, so list the ones you care about first; the languages array shows for each whether it was read (ok), had no reviews (empty) or was not needed (skipped), with reviewsFound and capped. Leave proxy_country blank: a pinned exit country makes the call slower.

How much does it cost to scrape Booking.com reviews?

Each language page served is billed as one request: a call that reads en and de counts as 2 requests, all 18 languages as up to 18, and pagesFetched shows the exact number. A language Booking answers with no reviews still counts, since its page was served; languages left unread once max_results is reached are marked skipped and not billed. 1 request = 1 credit, EUR 1.00 per 1,000 on pay as you go, down to about EUR 0.55 per 1,000 on the Ultimate plan. Blocks and timeouts are not billed, and the free trial includes 500 requests with no card.

Related scrapers

Start scraping this site today

Free tier included. No credit card required to test it.