Booking.com Reviews Scraper
Pricing
from $0.84 / 1,000 review-scrapeds
Booking.com Reviews Scraper
Scrape every Booking.com guest review for any hotel. Just add hotel URLs or names and get the score, the good and the bad text, stay dates, nights, room, traveller type, reviewer country, owner replies and photos. Filter by language, score, traveller type or stay month. $1.65 per 1,000 reviews.
Pricing
from $0.84 / 1,000 review-scrapeds
Rating
0.0
(0)
Developer
BonCross API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
What is Booking.com Reviews Scraper?
Booking.com asks every guest two questions: what did you like, and what didn't you? Booking.com Reviews Scraper gives you both answers as separate fields, for every review a property has, back to the oldest one. Paste a hotel link or just type the hotel's name.
What you get here that a plain review dump doesn't give you:
- The whole history. A property with 317 reviews returned all 317, and one with 4,470 returned all of those.
- Booking's own review filters, applied by Booking: language, score band, traveller type, topic, keyword and date. A review your filters remove isn't charged.
- The stay behind each review: check-in, check-out, nights, the room that was booked (with a room id you can join to rate data) and who travelled.
- Booking's AI summary of a hotel's reviews as an optional extra row, with pros and cons by topic. 12 of 13 hotels in one test had one.
- A typed name that can't be matched with confidence gets a free row naming the closest hotel. You never get another hotel's reviews by mistake: of 25 names tested, 15 of 16 real ones resolved, and 6 that would have landed on the wrong hotel were refused.
- Speed. 36 hotels at 200 reviews each, 7,200 reviews, took 11 to 16 seconds.
BonCross Verified means we tested this actor against the live site before release and kept the record:
- 37 of 37 live checks on its inputs and filters passed on 8 October 2026
- 12 hotels run on 7 October 2026 in 12 countries: 300 reviews, 2 error rows
- Charges checked against the 300 reviews; error rows were free
- A weak name match gets a free error row naming the closest hotel
It also returns the property's reply where there is one, the guest's country and display name (which you can switch off), helpful votes, review photos as full-size links, and the hotel's category scores. Scheduled runs can return only the reviews that are new since last time.
What data is in each review?
| Field | Description |
|---|---|
| ⭐ Score | The guest's score out of ten |
| 👍 Liked | What the guest praised |
| 👎 Disliked | What the guest complained about |
| Title | The review headline, where the guest wrote one |
| 🗓️ Posted date | When the review appeared |
| 🛏️ Stay dates | Check-in, check-out and number of nights |
| Room | The room type that was booked, with Booking.com's room id |
| Stay status | Whether the guest stayed, or cancelled and reviewed anyway |
| 👪 Traveller type | Families, couples, groups, solo or business |
| 🌍 Language | The language the review was written in |
| Guest | Display name and country |
| 💬 Property reply | The owner's response text |
| Helpful votes | How many people found the review useful |
| 📊 Category scores | Staff, services, cleanliness, comfort, value, location and wifi |
| Review total | How many reviews match your filters |
| 📷 Photos | The photos the guest attached: links to the full-size images, ids and count |
| 🔗 Hotel | Hotel id, name, country and page link |
| AI summary (optional) | Booking.com's pros and cons of the hotel's recent reviews, each with its topic, as one row per hotel |
How to scrape Booking.com reviews
You don't need to write any code. It's a form, and what you get back opens in Excel.
- Create a free Apify account.
- Open Booking.com Reviews Scraper.
- Paste a Booking.com hotel link, or type the hotel name. A numeric Booking hotel id works too.
- Set how many reviews you want per hotel and any filter you need.
- Click Start, then download the reviews as Excel, CSV or JSON.
⬇️ Input
A hotel is all you have to give it: a Booking.com hotel link, a hotel name, or a numeric Booking hotel id. A link is the safest of the three, because it's looked up as that exact page. Only a typed name goes through the name check described in the FAQ: a link or an id is taken as given.
Got a long list of links? Put them in Start URLs, which loads them in bulk from a file, a Google Sheet or a remote list. The two inputs are combined.
You have two limits. "Maximum reviews per hotel" (default 100) applies to each hotel separately: ten hotels at 50 each returns 500. "Maximum results for the whole run" caps the run as a whole, and nothing past it is fetched or charged.
The filters are Booking.com's own:
- "Sort": newest, oldest, highest score, lowest score, or Booking.com's own order.
- "Languages", "Traveller type" and "Score band" (superb 9+, good 7 to 9, average 5 to 7, poor 3 to 5, very poor under 3).
- "Months of stay": keep reviews whose stay began in the months you list, as numbers from 1 to 12.
- "Contains keyword": only reviews mentioning a word or phrase, such as breakfast or noisy.
- "Topics": the chips above a hotel's review list on Booking.com (Location, Breakfast, Room, Clean, Staff and so on), matched on each hotel's own list. A topic id works too.
- "Posted after" (YYYY-MM-DD): only reviews posted on or after a date.
- "Only reviews with an owner response": only the ones the property replied to.
Every review for one hotel
{"hotels": ["https://www.booking.com/hotel/fr/le-bristol-paris.html"],"maxReviewsPerHotel": 100000}
Look a property up by name and take the recent complaints
{"hotels": ["Hôtel Le Bristol Paris"],"sortBy": "lowest","scoreBand": "poor","maxReviewsPerHotel": 200}
Summer couples, in English, with no personal data
{"hotels": ["1769895"],"customerType": "COUPLES","stayMonths": ["6", "7", "8"],"reviewLanguages": ["en"],"includeGuestProfile": false}
Booking.com's AI summary of each hotel, ahead of its 20 newest reviews
{"hotels": ["https://www.booking.com/hotel/us/bellagio.html", "Raffles Singapore", "62665"],"maxReviewsPerHotel": 20,"includeAiSummary": true}
A daily watch that returns only new reviews
{"hotels": ["Hôtel Le Bristol Paris", "Generator Berlin Mitte"],"sortBy": "newest","onlyNewReviews": true,"dedupStoreName": "my-booking-watch"}
For developers
maxReviewsPerHotelis the per-hotel limit andmaxItemsthe run-wide one (0 means no run-wide limit). Error rows don't count towardmaxItemsand are never charged.stayMonthstakes strings from"1"to"12". Booking.com groups the year into four seasons, so the matching season is applied at source and the exact month is then checked on each review.- With
reviewedAfterand newest first, the run stops as soon as it has passed the date. - With
onlyNewReviewsand newest first, a run stops at the first review it has already delivered.dedupStoreNamenames the store that remembers them. A day with no new reviews returns nothing. - A filter that keeps almost nothing is cut short: after 200 reviews read for a hotel, the run stops reading that hotel if fewer than 0.15 reviews a page are being kept.
maxConcurrency(Parallel requests, default 32, from 1 to 32) sets how many requests run at once. Set it to 1 for a strictly one-at-a-time run. The rows and their order are the same either way.delayMs(default 0) adds a pause before each request, in milliseconds. Values above 2000 are treated as 2000. We'd leave both alone unless a run reports errors.- If the platform moves or restarts a run part-way, it carries on where it stopped. Reviews already in the dataset aren't delivered or billed twice. We tested that by restarting a 36-hotel run part-way: the same 7,200 reviews in the same order as an uninterrupted run.
⬆️ Output
One row per review. This one is from Le Bristol Paris, looked up by name on 7 October 2026 (the owner's reply is shortened here).
{"id": "1769895-1ae9dca08bb88594","reviewId": "1ae9dca08bb88594","url": "https://www.booking.com/hotel/fr/le-bristol-paris.html","scrapedAt": "2026-10-07T19:38:17.207Z","input": "Hôtel Le Bristol Paris","hotelId": 1769895,"hotelName": "Le Bristol Paris, Oetker Hotels","hotelCountryCode": "FR","title": "Near perfect!","text": "Best Laundry and dry cleaning service EVER!!! Our clothes looked NEW like coming out of the store..bravo to the team! Next time we'll bring more shirts and dresses to enjoy the top quality service!\n\nThe Bar was closed during our stay!","positiveText": "Best Laundry and dry cleaning service EVER!!! Our clothes looked NEW like coming out of the store..bravo to the team! Next time we'll bring more shirts and dresses to enjoy the top quality service!","negativeText": "The Bar was closed during our stay!","language": "en","isTranslatable": false,"rating": 10,"ratingScale": 10,"postedAt": "2026-08-03T11:17:16.000Z","checkIn": "2026-07-26","checkOut": "2026-07-29","nights": 3,"stayMonth": "2026-07","customerType": "COUPLES","roomName": "Deluxe Room","roomId": 176989501,"stayStatus": "stayed","authorName": "Jean-dominique","authorCountry": "Democratic Republic of Congo","authorCountryCode": "CD","authorAvatar": "https://xx.bstatic.com/static/img/review/avatars/ava-j.png","helpfulVotes": 0,"hasOwnerResponse": true,"ownerResponseText": "Dear Sir,\n\nThank you very much for your kind feedback regarding our laundry and dry-cleaning service. All team concerned were very touched by your compliments.…","photoIds": [],"photos": [],"photoCount": 0,"isApproved": true,"hotelSubRatings": [{ "name": "clean", "rating": 9.52 }, { "name": "comfort", "rating": 9.94 }, { "name": "free_wifi", "rating": 9.38 }, { "name": "location", "rating": 9.75 }, { "name": "services", "rating": 9.08 }, { "name": "staff", "rating": 9.65 }, { "name": "value", "rating": 8.38 }],"hotelRatingScale": 10,"hotelReviewCount": 58}
A few columns worth a word:
idjoins the hotel to the review, which keeps rows distinct across hotels.reviewIdis Booking's own identifier for the review.urlis the hotel's page. Booking publishes no link for a single review. It's filled whichever way you gave the hotel: link, name or id.textispositiveTextandnegativeTextjoined by a blank line, if you want one review body. The title stays apart intitle.hotelReviewCountis the number of reviews matching your filters, andhotelSubRatingsholds the hotel's category scores out of 10.languageis a two-letter code. A regional variant (US English, Latin American Spanish, Brazilian Portuguese, traditional Chinese) is reported as its base language.roomIdis the same number Booking.com Room Rates Scraper returns for a room, which lets you match a review to its room and rate.
Switch on "Add Booking's AI review summary" and each hotel also gets one row ahead of its reviews, marked isSummary: true. It has the hotel's identity and the pros and cons Booking.com's own AI draws from its recent reviews. summaryReviewCount is the number of reviews Booking says the summary is based on. A hotel Booking hasn't summarised gets no summary row and no charge.
{"isSummary": true,"id": "186104-summary","url": "https://www.booking.com/hotel/us/bellagio.html","scrapedAt": "2026-10-07T20:36:10.220Z","input": "https://www.booking.com/hotel/us/bellagio.html","hotelId": 186104,"hotelName": "Bellagio","hotelCountryCode": "US","pros": [{ "topic": "Location", "text": "Central position on the Strip near major attractions and restaurants." },{ "topic": "Cleanliness", "text": "Tidy and well-maintained spaces with fresh linens." },{ "topic": "Views", "text": "Overlooks the famous fountains and mountains through large panoramic windows." }],"cons": [{ "topic": "Prices", "text": "High costs for parking, resort fees, and basic amenities like water and kettles." },{ "topic": "Staff", "text": "Friendly and helpful team, though some guests report rude or dismissive service at reception." }],"summaryReviewCount": 1414}
You can download any of it as JSON, CSV, Excel, XML or HTML.
How much does it cost?
| Event | Free plan | Starter | Scale | Business |
|---|---|---|---|---|
actor-start, per run | $0.001 | $0.001 | $0.001 | $0.001 |
hotel-resolved, per hotel looked up | $0.0005 | $0.0005 | $0.0005 | $0.0005 |
review-scraped, per review | $0.00165 | $0.00148 | $0.0012 | $0.00084 |
hotel-summary, per hotel AI review summary | $0.002 | $0.0018 | $0.0016 | $0.0014 |
Enterprise plans pay the Business price.
$1.65 per 1,000 reviews on the Free plan, $0.84 on Business. That's the whole price: proxy usage and platform usage are included, and there's nothing to set up. hotel-summary is billed only when "Add Booking's AI review summary" is on, once per hotel that has a summary.
- One hotel with 1,000 reviews: $0.001 + $0.0005 + 1,000 × $0.00165 = $1.6515 ($0.84 on Business).
- Ten hotels at 200 reviews each: $0.001 + 10 × $0.0005 + 2,000 × $0.00165 = $3.306 ($1.69 on Business). The AI summary for those ten adds 10 × $0.002 = $0.02 ($0.014 on Business).
Apify's Free plan comes with $5 of credits a month, which is about 30 runs of one hotel at the default 100 reviews, or roughly 3,000 reviews, before you pay anything.
How many reviews can you get, and how fast?
All of them. There's no depth limit, and the run reaches the oldest review a property has if you set the per-hotel maximum high enough.
| Run | Reviews | Time |
|---|---|---|
| One hotel, newest 10 | 10 | 3 to 5 s |
| Four hotels, 150 each | 600 | 6 to 17 s on most runs, up to 51 s |
| 36 hotels, 200 each | 7,200 | 11 to 16 s |
These are whole runs on Apify, start-up included, measured on 2 October 2026. Booking.com's answer time varies through the day, which is the spread on the second line. Several hotels are read at once, and a longer list adds little time: the 36-hotel run worked out at about 30,000 reviews a minute, which puts hundreds of hotels inside the default one-hour run limit.
What people do with Booking.com reviews
- Track a property's score month by month and see which category is dragging it down.
- Read every complaint about a competitor before repositioning.
- Compare what couples say against what families say about the same hotel.
- Find the rooms that attract the most complaints, using the room name on each review.
- Measure how often a property replies to its guests, and whether that moves its score.
- Compare summer stays against winter stays using the actual check-in date.
- Build a labelled dataset for sentiment work, with the positive and negative halves already separated.
- Watch for new low-scoring reviews the day they appear.
For that last one you don't need code. Schedule the run in Apify, switch on "Only reviews not seen in earlier runs", and send the result to Slack or a Google Sheet through Apify's integrations. From your own code, POST https://api.apify.com/v2/acts/boncross~booking-reviews/run-sync-get-dataset-items with the input JSON as the body runs it and returns the reviews in one call, and an AI agent can call it as boncross/booking-reviews through the Apify MCP server (mcp.apify.com) with a hotel name and a filter.
FAQ
I typed a hotel name and got an error row. Why?
Because no suggestion from Booking matched the name closely enough, and we'd sooner tell you than hand you another hotel's reviews. Spelling slips and partial names do resolve. When nothing matches with confidence, the row names the closest hotel and its id, and it costs you nothing. If that's the hotel you meant, pass its id. If a name is shared by several hotels, use a link or an id. One known miss: "Plaza Hotel New York" resolves to a property in Cyprus whose name contains every word you typed.
How do I get only the complaints?
Sort by "Lowest score first" and pick the "Poor" or "Very poor" score band. Each review's complaint is in negativeText, apart from the praise. Bear in mind that many guests write only what they liked: a negative half appears on roughly four reviews in ten.
Can I filter by the time of year guests stayed?
Use "Months of stay". Booking.com itself only filters by season, so the season is applied by Booking and the exact month is then checked on each review. What you get back is the months you asked for and nothing else.
How do I get only the new reviews each day?
Schedule the run, keep the sort on newest first, switch on "Only reviews not seen in earlier runs" and give the "De-duplication store name" a name. Each run then returns what was posted since the last one. A day with no new reviews returns nothing.
I filtered for business travellers. Why don't the rows say "business"?
The business-traveller filter is Booking.com's own and it does return business trips. But each review's customerType names who travelled (solo, couple, family, friends), and that's what the column shows.
Can I leave guest names out?
Turn off "Include guest details" and the name, country and avatar are left empty.
Do I need proxies or a Booking.com account?
Neither. There's no login, and proxy usage is included in the price.
What are the limits?
- Booking.com doesn't publish one overall score on this data. You get the per-category scores, not a single headline number.
- A link Booking has no page for returns an error row naming the nearest hotel it suggests.
- A hotel with no reviews yet, or with none that pass your filters, writes one row with an
errorsaying so. The $0.0005 lookup fee for that hotel still applies. - A title appears on roughly four reviews in ten.
- Review photos are links to the full-size image as Booking.com serves them, beside their ids. About 1 review in 15 has a photo.
stayStatusis Booking.com's own code:stayedon almost every review, and for examplenon_stayed_cancelled_by_gueston the few written by guests who cancelled (2 of 300 measured).languageis the base language. Regional variants such as US English or Brazilian Portuguese aren't told apart.
Is it legal to scrape Booking.com reviews?
The scraper collects what Booking.com publishes publicly, without signing in. Collecting public data is broadly lawful, but reviews include personal data such as guest names, and what you do with that is your responsibility under GDPR and similar rules. Take legal advice if you're unsure, or switch guest details off.
More from BonCross
- Booking.com Hotel Details Scraper: The full Booking.com record for a property.
- Booking.com Hotel Search Scraper: Every hotel Booking.com is selling for a destination and your dates.
- Booking.com Room Rates Scraper: Every room Booking.com is selling for a hotel and your dates.
- Expedia Reviews Scraper: Expedia guest reviews for any hotel, including hotels given as Hotels.com links.
- Google Hotels Reviews Scraper: Google Hotels reviews from every source Google shows, including the hotel's own site.
- Google Maps Reviews Scraper: Google Maps reviews for any place using URLs, Place IDs or names.
Your feedback
Is a review missing, or did a hotel name land somewhere it shouldn't? Report it on the Issues tab in Apify Console, where we read every issue and answer. If it's a name that resolved wrongly, include the name you typed and the hotel you expected.