Booking.com Reviews Scraper
Pricing
from $0.19 / 1,000 reviews
Booking.com Reviews Scraper
Booking.com reviews scraper API for guest reviews of a hotel or stay: score, what guests liked and disliked, date, room, stay dates, traveller type, country and the property's reply, plus the hotel's category scores. Filter by travellers, score, language and time of year. $0.185 per 1,000 reviews.
Pricing
from $0.19 / 1,000 reviews
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
3 hours ago
Last modified
Categories
Features
Share
Booking.com reviews scraper for hotels, apartments and every other stay: paste a property's link and get one row per guest review, with the score, what the guest liked and disliked, the date, the room, the stay dates, the traveller type, the guest's country and the property's reply.
Every row also carries the property: its address, how many reviews it has and its category scores for location, cleanliness, staff, comfort, facilities and value. Booking.com's own filters work: traveller type, score band, language, time of year and words, plus a score range and a date window.
Plenty of guests leave a score and no comment. Those rows have empty text, and one switch leaves them out.
| Input | Booking.com property links, from any of its country or language versions, or property names as Booking.com shows them |
| Output | One row per review: score, title, liked, disliked, date, room, check-in, check-out, nights, traveller type, guest country, language, photo links, the property's reply, and the property's address, review count and category scores |
| Ceiling | 100,000 reviews per property, 200,000 per run |
| Account needed | None from you |
| Price | $0.185 per 1,000 reviews, the same rate on every plan. The free plan's $5 a month covers about 27,000 reviews |
| Using an AI agent? | |
|---|---|
| Actor | dami_studio/booking-reviews-scraper |
| Set one field | startUrls, labelled "Properties" in the Console |
| Cap the bill | maxTotalChargeUsd on the run, for example 0.10: it never charges past that |
| MCP, one link | https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/booking-reviews-scraper |
| How often | Daily, with "Only new reviews" on, to see each new review the day it appears |
🔍 What Booking.com Reviews Scraper does
It finds each property from its link, or from its name the way Booking.com's search box does (only a property carrying that name is read), reads its reviews the way the property's page lists them, 25 at a time, and writes one row per review until it has the number you asked for. A hotel with 10,000 reviews can come back whole.
The filters are Booking.com's own, so a run asking for poor scores from families reads only those. Each row is checked against your filters again before it is written. A row that doesn't match is left out and not charged.
Two options save time on repeat work. "Written since" and "Written until" take a date window, and the run goes straight to it instead of reading everything newer. "Only new reviews" remembers what earlier runs gave you, in a store in your own account, and returns only the reviews written since.
📋 What data you get from each Booking.com review
| What you get | Field |
|---|---|
| The review's id | reviewId |
| Score and title | score (1 to 10), title |
| What the guest liked and disliked | liked, disliked |
| When it was written, and its language | reviewedAt, language |
| The stay | roomType, checkIn, checkOut, nights |
| Who travelled | travellerType (families, couples, friends, solo, business), guestType |
| Where the guest is from | reviewerCountry, reviewerCountryCode |
| Votes and photo links | helpfulVotes, photoUrls |
| The property's reply | hostReply |
| The reviewer (optional) | reviewer.name, reviewer.isAnonymous, reviewer.reviewCount, reviewer.memberSince, reviewer.avatarUrl |
| The property | hotelId, hotelName, hotelUrl |
| The property's summary (optional) | hotel.address, hotel.city, hotel.countryCode, hotel.reviewCount, hotel.categoryScores (category, score, reviews) |
| Where the row came from | searchInput, position, scrapedAt |
▶️ How to scrape Booking.com reviews
- Open Booking.com Reviews Scraper and click Try for free.
- Paste one or more property links into Properties, one per line, or type their names into Property names.
- Set Reviews per property. Twenty is plenty for a first look.
- Pick any filters under Filters: travellers, scores, languages, time of year, words, dates.
- Click Start, then open the Output tab or export the rows as CSV, Excel or JSON.
An empty run returns one free sample row showing the shape of the output.
💰 How much does it cost to scrape Booking.com reviews?
$0.185 per 1,000 reviews, the same rate on every plan. The free plan's $5 a month covers about 27,000 reviews.
Not charged: the sample row, note rows, a review a run has already returned, and reviews left out by your filters. The property's summary on each row costs nothing extra.
📥 What you give it
| Field | What it does | Default |
|---|---|---|
startUrls | Property links, one per line | none (prefill The Savoy) |
hotelNames | Property names as Booking.com shows them, one per line, up to 100; the city can follow the name | none |
maxReviewsPerHotel | Reviews for each property, up to 100,000 | 100 |
maxItems | Reviews in the whole run, up to 200,000 | no limit |
searchResultsDatasetId | A dataset with hotelUrl, propertyUrl, url or link columns | none |
sortBy | newest, oldest, mostRelevant, highestScore or lowestScore | newest |
skipReviews | Start after this many reviews in that order | 0 |
travellerType | families, couples, friends, solo or business | all |
scoreBand | superb, good, average, poor or veryPoor, as Booking.com groups scores | all |
minScore, maxScore | A score range, 1 to 10 | none |
languages | Language codes such as en, fr, de | all |
season | marchToMay, juneToAugust, septemberToNovember or decemberToFebruary: when the guest stayed | any time |
searchText | Only reviews mentioning these words | none |
onlyWithText | Leave out reviews with a score and no comment | off |
reviewsSince, reviewsUntil | 2026-01-31, or for "since" a span like 30 days or 6 months | none |
monitoringStoreName | A store in your account that remembers what earlier runs returned | none |
includeHotelDetails, includeReviewerDetails | Add the property's summary and the reviewer to every row | on |
siteLanguage | The language of Booking.com's own labels, such as room names | en-us |
flattenOutput | One column per field, for a spreadsheet | off |
A date written any other way, or a value the lists above don't have, stops the run before it asks Booking.com anything, with a free row saying which field to fix.
{"startUrls": ["https://www.booking.com/hotel/gb/the-savoy.html"],"maxReviewsPerHotel": 200,"scoreBand": "poor","reviewsSince": "6 months"}
📤 What you get back
A review of The Savoy read from Booking.com on 7 November 2026, trimmed:
{"recordType": "review","reviewId": "03ccbceb065f1373","hotelId": "280149","hotelName": "The Savoy","score": 10,"title": "Lovely place to stay","liked": "Loved the room very comfortable especially the bed. Would definitely stay here again great location","disliked": null,"language": "en","reviewedAt": "2026-11-04T13:23:19.000Z","travellerType": "families","guestType": "Family","roomType": "Superior Queen Room","checkIn": "2026-09-26","checkOut": "2026-09-29","nights": 3,"reviewerCountry": "United Kingdom","hostReply": "We very much appreciate your comments regarding your stay at The Savoy, and for taking the time to complete a guest survey.","hotel": {"address": "Strand","city": "London","reviewCount": 1418,"categoryScores": [{ "category": "Location", "score": 9.75, "reviews": 1402 },{ "category": "Value for money", "score": 8.48, "reviews": 1400 }]}}
| Field | How to read it |
|---|---|
score | The guest's score from 1 to 10 |
liked, disliked | Empty when the guest wrote nothing in that box |
reviewedAt | When the guest wrote it, in UTC |
language | The language the guest wrote in; empty when Booking.com gives none |
hotel.reviewCount | Every review the property has, whatever filters the run used |
🧾 Reading the output
Real rows have recordType review. The free sample row has _sample: true. Note rows have ok: false, cost nothing and carry an errorCode:
BAD_INPUT: a field was unusable, so nothing was asked of Booking.com.detailssays which.NOT_FOUND: Booking.com has no property at that link, or a name didn't lead to a property of that name.detailssays what Booking.com found instead: a city, a landmark, or a property called something else, with its link.NO_RESULTS: the property has no review matching every filter, or no new review since your last run with that store.NOT_SERVED: Booking.com did not answer for this property during the run. Run it again later.TIME_LIMIT: the run's time limit came first; reviews before it are delivered.COST_LIMIT: your maximum cost was reached.UNEXPECTED_ERROR: something broke on our side; please report it.
To keep only reviews, filter on recordType being review.
💡 What people use it for
- Hotel and apartment owners reading what guests say about them and about the places down the street, lowest scores first.
- Anyone comparing a shortlist of stays: every poor review from families, side by side.
- Teams answering reviews: a daily run with "Only new reviews" on, kept to the rows where
hostReplyis empty. - Researchers who need guest comments in quantity, by language, traveller type and season.
A small recipe: run Booking.com Hotels Scraper for a city, pass its dataset in with searchResultsDatasetId, set scoreBand to poor, and read what the low scores have in common.
🚧 What it does not do
- Up to 100,000 reviews per property and 200,000 per run.
- No phone numbers or e-mail addresses, the property's or anyone else's.
- Photos are links, not downloaded files.
- Reviews come as Booking.com publishes them; removed reviews don't come.
- It is not an official Booking.com tool. Dami's Studio is independent and is not affiliated with or endorsed by Booking.com, or by any other company named on this page.
🧭 Which Booking.com scraper do you need?
| If you want | Use |
|---|---|
| Guest reviews of Booking.com hotels and stays | This one |
| Hotels, prices and rooms in a city on Booking.com | Booking.com Hotels Scraper |
| Reviews of the same places on Google Maps | Google Maps Reviews Scraper |
| Agoda hotels with their guest reviews | Agoda Hotels Scraper |
❓ Questions people ask
Do I need a Booking.com account to scrape reviews?
No. You don't need a Booking.com account. The run reads what a signed-out visitor sees on booking.com.
Why don't my numbers match what I see on Booking.com?
The page may sort or filter reviews for you, and new reviews appear all day. Open the property in a private browser window, pick "All reviews", and compare with a run started at the same moment.
Can I get only the new reviews every day?
Yes. Put a name in "Only new reviews", such as my-hotels, and schedule the run. Each run returns only reviews written since the last one, and a free note row for a property with nothing new.
How do I call it from code or an AI assistant?
Use the actor's API tab, or connect an assistant through https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/booking-reviews-scraper. In Python:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("dami_studio/booking-reviews-scraper").call(run_input={"startUrls": ["https://www.booking.com/hotel/gb/the-savoy.html"], "maxReviewsPerHotel": 50},max_total_charge_usd=0.10,)for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row.get("ok") is False:continueprint(row["score"], row["liked"])
Is scraping Booking.com legal?
The data is public and read the way a signed-out visitor sees it, with no account and nothing private. Any personal data in the rows, such as a guest's name, falls under laws like GDPR, so keep only what you need. Booking.com's own terms still apply to what you do with the data. Apify has a plain-language write-up on the legality of web scraping. We are not lawyers.
🆘 If something breaks
Open an issue on the actor's Issues tab. Include the run link and the input you used.