🏨 Scrape detailed reviews from hotels, apartments, and other listings on Booking.com — including review text, star ratings, guest details, room info, stay dates, and more. All data is schema-validated and exportable as JSON, CSV, Excel, or HTML for reliable and structured analysis.
🌐 Booking.com Reviews Scraper
Extract deep insights from Booking.com listings – reviews, scores, guest details, and more, all through a fast and robust API-first architecture 🚀 This scraper is a powerful tool designed to extract detailed reviews from Booking.com listings. You can get reviews from any hotel, apartment, or accommodation listed on booking.com. Just enter one (or many) hotel URLs and click "Save & Start".
Great for:
Data type | Description |
---|---|
User-Review | Title, positive & negative text, score, date, upvotes, language, and attached photos |
Booking info | Room type, number of nights, customer type (e.g. family, solo, business) |
Reply | Hotel reply (if available) |
Guest details | Username, country, avatar (if not anonymous) |
urls
(required) – List of Booking.com hotel URLssort
(optional) – Most relevant | Newest | Oldest | Score desc | Score ascmaxReviews
(optional) – Max number of reviews per hotel (-1 for all)timeOfYear
(optional) – ALL, or specific season (Mar-May, Jun-Aug, etc.)scoreRange
(optional) – ALL, or by rating bucket (Poor, Good, Wonderful, etc.)languages
(optional) – List of review languages to include (e.g. en, de)customerType
(optional) – Filter by reviewer group: families, business, solo, etc.You get two datasets:
📃 Reviews Each record includes:
📊 Scores
These are internal Booking.com metrics not always visible in the UI ✨
1{ 2 "hotelId": 10221458, // Unique? ID of the hotel 3 "hotelName": "Premier Inn Köln City Süd", // Name of the hotel 4 5 "score": 9, // The score given by the guest 6 "url": "bac28cd69950aefc", // The unique ID of the review 7 "date": "2025-02-23T17:50:44.000Z", // The ISO-date when the review was written 8 "helpfulVotesCount": 0, // The number of upvotes the review received 9 "isApproved": true, // Whether the review was approved by booking.com 10 "title": "A great choice for a stay in Cologne!", // The title of the review 11 "positiveText": "I really enjoyed my ...", // The positive text of the review (cut off here, for brevity, but will be complete in the output) 12 "negativeText": "The only thing missing ...", // The negative text of the review (cut off here, for brevity, but will be complete in the output) 13 "lang": "en", // The original language in which the review was written 14 "roomTypeId": "1022145801", 15 "roomTypeName": "Standard Double Room", // The type of room the guest booked 16 "numNights": 1, // How many nights the guest stayed 17 "stayStatus": "stayed", // Whether the guest stayed at the hotel or if they just planned to 18 "customerType": "Group of friends", // The type of customer, e.g. families, couples, business travellers, etc. 19 "checkinDate": "2025-02-20T00:00:00.000Z", // The date when the guest checked in 20 "checkoutDate": "2025-02-21T00:00:00.000Z", // The date when the guest checked out 21 "partnerReplyText": "", // The review-reply from the hotel, if available 22 "anonymous": false, // Whether the review was written anonymously or not 23 "showCountryFlag": true, 24 "countryCode": "pl", // The country code of the guest 25 "countryName": "Poland", // The country name of the guest 26 "avatarColor": "", 27 "avatarUrl": "https://...", // The URL of the avatar of the guest 28 "username": "Guest", // The username of the guest 29 "photos": [ // The photos attached to the review (if any) 30 { 31 "kind": "PROPERTY", // What the photo is about, e.g. property, room, etc. 32 "urls": [ // The URLs of the photos 33 "https://url-a", 34 "https://url-b", 35 ... 36 ], 37 "id": 464616631, // The ID of the photo 38 }, 39 ... 40 ] 41}
This dataset contains per-hotel scores, generated internally by booking.com, as such there's only one list of scores per hotel, which contain the following properties:
1{ 2 "hotelId": 10221458, // ID of the hotel (same as in the reviews dataset) 3 "hotelName": "Premier Inn Köln City Süd", // Name of the hotel (same as in the reviews dataset) 4 5 "name": "hotel_services", // What the score is about, e.g. hotel_services, location, etc. 6 "translation": "Facilities", // The translation of the score 7 "lowerBound": 6.76627492904663, // The lower bound of the score 8 "higherBound": 9.10307502746582, // The upper bound of the score 9 "value": 8.26360607147217 // The (most likely) average score 10}
Booking.com blocks shared Apify proxies. Use your own datacenter or residential proxies.
Good news: this scraper is optimized to work even with cheap datacenter proxies, thanks to smart cookie handling and retry logic.
If you want to use your own, residential, or special proxies, you can do so by changing the proxyConfiguration
field in the input.
Built with love ❤️ and way too many late-night debug logs. Have ideas or need help? Let us know!
Yes, if you're scraping publicly available data for personal or internal use. Always review Websute's Terms of Service before large-scale use or redistribution.
No. This is a no-code tool — just enter a job title, location, and run the scraper directly from your dashboard or Apify actor page.
It extracts job titles, companies, salaries (if available), descriptions, locations, and post dates. You can export all of it to Excel or JSON.
Yes, you can scrape multiple pages and refine by job title, location, keyword, or more depending on the input settings you use.
You can use the Try Now button on this page to go to the scraper. You’ll be guided to input a search term and get structured results. No setup needed!