
Booking.com Review Scraper
Pricing
$2.00 / 1,000 reviews

Booking.com Review Scraper
🏨 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.
0.0 (0)
Pricing
$2.00 / 1,000 reviews
2
Total users
15
Monthly users
13
Runs succeeded
>99%
Last modified
a month ago
🌐 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:
- 🧬 Market research & trend analysis
- 📈 Competitor monitoring
- 👩🏫 Review tracking for your own listings
- 🤖 Feeding clean review data into your apps or ML models
🔍 What data do you get?
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) |
🔋 Why use this scraper?
- 🔌 Fast: Designed from the ground up to be fast. No browser automation = blazing speed (~30-50 reviews/sec)
- 🔍 Powerful filters: Sort by score, language, season, customer type & more
- 🤝 Reliable: Resumes where it left off, deduplicates reviews, handles most errors gracefully
- ⚙️ Typed output: Schema-validated for consistency & integration ease
- 🛠️ Debug-friendly: Built-in logs for catching edge cases quickly
- 🚀 Multi-format export: CSV, JSON, Excel, XML, etc.
- 🚑 Support: We actively maintain and improve the scraper. Found a bug? Just send logs & inputs.
✏️ Input fields
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.
🔧 Output format
You get two datasets:
📃 Reviews Each record includes:
- Hotel name, hotel ID
- Score, date, review title + texts
- Room type, stay duration, customer type
- Guest info (country, avatar, username)
- Photos (if available)
- Hotel reply (if available)
📊 Scores
- Per-hotel average scores:
- Category (location, cleanliness, etc.)
- Display name / translation
- Value + confidence interval
These are internal Booking.com metrics not always visible in the UI ✨
Reviews
{"hotelId": 10221458, // Unique? ID of the hotel"hotelName": "Premier Inn Köln City Süd", // Name of the hotel"score": 9, // The score given by the guest"url": "bac28cd69950aefc", // The unique ID of the review"date": "2025-02-23T17:50:44.000Z", // The ISO-date when the review was written"helpfulVotesCount": 0, // The number of upvotes the review received"isApproved": true, // Whether the review was approved by booking.com"title": "A great choice for a stay in Cologne!", // The title of the review"positiveText": "I really enjoyed my ...", // The positive text of the review (cut off here, for brevity, but will be complete in the output)"negativeText": "The only thing missing ...", // The negative text of the review (cut off here, for brevity, but will be complete in the output)"lang": "en", // The original language in which the review was written"roomTypeId": "1022145801","roomTypeName": "Standard Double Room", // The type of room the guest booked"numNights": 1, // How many nights the guest stayed"stayStatus": "stayed", // Whether the guest stayed at the hotel or if they just planned to"customerType": "Group of friends", // The type of customer, e.g. families, couples, business travellers, etc."checkinDate": "2025-02-20T00:00:00.000Z", // The date when the guest checked in"checkoutDate": "2025-02-21T00:00:00.000Z", // The date when the guest checked out"partnerReplyText": "", // The review-reply from the hotel, if available"anonymous": false, // Whether the review was written anonymously or not"showCountryFlag": true,"countryCode": "pl", // The country code of the guest"countryName": "Poland", // The country name of the guest"avatarColor": "","avatarUrl": "https://...", // The URL of the avatar of the guest"username": "Guest", // The username of the guest"photos": [ // The photos attached to the review (if any){"kind": "PROPERTY", // What the photo is about, e.g. property, room, etc."urls": [ // The URLs of the photos"https://url-a","https://url-b",...],"id": 464616631, // The ID of the photo},...]}
Scores
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:
{"hotelId": 10221458, // ID of the hotel (same as in the reviews dataset)"hotelName": "Premier Inn Köln City Süd", // Name of the hotel (same as in the reviews dataset)"name": "hotel_services", // What the score is about, e.g. hotel_services, location, etc."translation": "Facilities", // The translation of the score"lowerBound": 6.76627492904663, // The lower bound of the score"higherBound": 9.10307502746582, // The upper bound of the score"value": 8.26360607147217 // The (most likely) average score}
👤 Who is it for?
- 🔬 Data scientists & analysts – For sentiment analysis, trend tracking, and training models
- 🧱 Researchers – Monitor competitors or markets in bulk
- 💻 Developers – Integrate clean review data into your systems
- 💼 Business owners – Keep an eye on customer feedback over time
🚪 Proxy setup
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!