Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Booking.com Reviews Scraper icon

Booking.com Reviews Scraper

Scrape Booking.com guest reviews. Get the score, title, liked and disliked text, reviewer name, country and stay dates. $1.50 per 1,000 reviews.

134 runs on Apify $0.0015 per successful guest review ($1.5 / 1,000)
Run this in the cloudRun on Apify →

Reviews & Reputation Data

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust propertyUrls, maxReviewsPerProperty, reviewSort (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0015 per successful guest review = $1.5 per 1,000

You are charged forWhenPrice
Successful guest reviewOne public Booking.com guest review row returned to the dataset.$0.0015

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-07-28, and they are what you are actually charged.

Inputs

FieldWhat it doesType
propertyUrlsBooking.com hotel, apartment, or property URLs, e.g. https://www.booking.com/hotel/gb/the-savoy.html. The actor opens each property and reads its published guest reviews. Empty input returns one uncharged sample row.array
maxReviewsPerPropertyHow many published guest reviews to return for each property. The actor pages through the property's public review list until it reaches this number or runs out of reviews, so ask only for what you need, every returned review is one charged result.integer
reviewSortThe order Booking.com serves the reviews in. "Most relevant" is Booking's own default ranking; "Newest first" is what you want for monitoring.string
enableResidentialFallbackWhen direct Booking.com traffic is blocked or rate-limited, retry that page once through the built-in connection, or through your own proxy servers if you supply them. Metered options are not used.boolean

What you get

A structured dataset — each result includes fields like:

propertyNameratingreviewTitlepositiveTextnegativeTextreviewerNamereviewerCountryroomTypecheckinDatepublishedAtreviewUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Reviews & Reputation Data

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

Google Play Reviews Scraper iconApp Store Data

Google Play Reviews Scraper

Google Play reviews by app ID or URL: score, text, reviewer, date, developer reply. Any country. Up to 5,000 per app. $0.09 per 1,000.

Ready to run — no setup

2GIS Reviews Scraper iconMaps & Local Lead Generation

2GIS Reviews Scraper

Scrape 2GIS reviews by place URL or city: rating, text, author, date, photos, owner replies. No API key. $0.50 per 1,000.

Ready to run — no setup

Yelp Scraper iconMaps & Local Lead Generation

Yelp Scraper

Scrape Yelp businesses and reviews through Yelp's official Fusion API. Get rating, review count, price, phone, address, GPS and text. Bring your own key.

Ready to run — no setup

Glassdoor Company Reviews Scraper iconJob Market Scrapers

Glassdoor Company Reviews Scraper

Scrape Glassdoor reviews: pros, cons, six sub-ratings, recommend rate and CEO approval. First page per company without login. $2.50 per 1,000.

20 use cases

Google Reviews Monitor — Multi-Location Alerts & Reports iconMaps & Local Lead Generation

Google Reviews Monitor — Multi-Location Alerts & Reports

Watch Google reviews for every location on a schedule. Get only the new ones, rating-drop alerts in Slack and AI reply drafts. $1.00 per 1,000 reviews.

4 use cases

App Review Triage Monitor — App Store & Google Play Alerts iconApp Store Data

App Review Triage Monitor — App Store & Google Play Alerts

Sort new App Store and Google Play reviews into bugs, billing and feature requests. Get alerts on rating drops in Slack. $0.40 per 1,000 reviews.

4 use cases

See all Reviews & Reputation Data →

Booking.com Reviews Scraper: guest reviews, scores and stay dates for any property

Give it Booking.com property URLs and it returns the published guest reviews as rows. The score out of 10, the title, what the guest liked, what they didn't, their name and country, the room they booked, the check-in and check-out dates, and the property's public reply when there is one.

Only a guest who booked through Booking.com can leave a review there, which is why every row carries a real room and a real pair of dates.

Now the part worth knowing before your first run. A few properties never open their full review list, and for those you get the handful of highlights the property page prints instead. Those rows carry no title, no dislikes text and no stay dates, and their rating is the property's overall score rather than one guest's. They are charged the same as a full review, so read reviewKind before you count anything.

InputBooking.com property URLs
OutputOne row per guest review
Ceiling10 properties per run, up to 1,000 reviews each
Account neededNone
Price$1.50 per 1,000 reviews, which is $0.0015 each, flat on every plan

🏨 What Booking.com Reviews Scraper does

It opens each property you list, reads the same review list the page itself loads, and keeps paging until it has the number you asked for or the property runs out of reviews. It does not stop at the few reviews printed on the property page.

You pick the order: Booking's own relevance ranking, newest first, oldest first, or by score either way. Newest first is the one you want if you are watching a property week to week.

Booking collects praise and complaint in two separate boxes, and they arrive that way: positiveText and negativeText. Either can be null, because plenty of guests fill in only one.

📥 What you give it

{
  "propertyUrls": ["https://www.booking.com/hotel/gb/the-savoy.html"],
  "maxReviewsPerProperty": 100,
  "reviewSort": "NEWEST_FIRST"
}
FieldDefaultWhat it is
propertyUrlsemptyBooking.com property pages: hotels, apartments, anything with its own page. Up to 10 per run. The box arrives with one example URL in it, which you replace.
maxReviewsPerProperty10Reviews per property, 1 to 1,000. Every review returned is one charged row, so ask for what you need.
reviewSortMOST_RELEVANTMOST_RELEVANT, NEWEST_FIRST, OLDEST_FIRST, SCORE_DESC or SCORE_ASC.
enableResidentialFallbackfalseThe name is a leftover. It allows one extra attempt by another route when a page comes back refused.
proxyConfigurationApify defaultOnly used for that one extra attempt. Your own servers are used exactly as you give them.

Leave propertyUrls empty and the run returns a single sample row showing the shape of the output, with nothing fetched and no rows charged.

📤 What you get back

A real row from a real run. The long complaint is cut short here so the block stays readable:

{
  "ok": true,
  "propertyName": "The Savoy",
  "propertyUrl": "https://www.booking.com/hotel/gb/the-savoy.html",
  "reviewId": "effe0db533ff9e1c",
  "rating": 9,
  "reviewTitle": "Booking Error",
  "positiveText": "The staff in every part of the hotel, who were unfailingly cheerful, personable and helpful.",
  "negativeText": "Our advance booking of a celebratory afternoon tea was mistakenly in for the previous day...",
  "reviewerName": "Mccourt",
  "reviewerCountry": "United Kingdom",
  "reviewerCountryCode": "gb",
  "guestType": "Solo traveler",
  "roomType": "Superior Queen Room",
  "stayDate": "Stayed 2026-09-10",
  "checkinDate": "2026-09-10",
  "checkoutDate": "2026-09-12",
  "nights": 2,
  "publishedAt": "2026-09-13T08:59:46.000Z",
  "reviewLanguage": "en",
  "helpfulVotes": 0,
  "partnerReply": null,
  "photoCount": 0,
  "propertyScore": 9.4,
  "propertyReviewCount": 1447,
  "reviewKind": "guest_review",
  "reviewSort": "MOST_RELEVANT",
  "scrapedAt": "2026-09-14T05:42:40.594Z",
  "transport": "direct_browser"
}
FieldWhat it is
ratingThat guest's score out of 10 on a guest_review row. On a featured_public_review row it is the property's overall score instead.
propertyScore, propertyReviewCountThe property's average and its published review total, repeated on every row.
reviewTitleNull when the guest didn't write one.
positiveText, negativeTextBooking's two boxes, kept apart. Either can be null.
checkinDate, checkoutDate, nightsThe actual stay. publishedAt is when the review went up, usually later.
partnerReplyThe property's public answer, on the same row as the review it answers. Null when there isn't one.
reviewUrlThe property page. Booking publishes no per-review permalink, so there is nothing more precise to point at.
reviewerNameNull when the guest posted anonymously.
transportWhich route produced the row. Useful when you are comparing two runs.

🧾 Reading the output

Filter on reviewKind, not on ok. Three kinds of row land in the dataset, and the default table view does not show you which is which.

RowHow to spot itCharged
A guest reviewreviewKind is guest_review, and reviewId is setyes
A page highlight, when the full list never openedreviewKind is featured_public_reviewyes, same rate
The sample row_sample is trueno
A diagnosticok is false, _diagnostic is true, and status names the reasonno
statusWhat it means
BAD_INPUTNot a Booking.com property URL, or nothing usable in the list.
NOT_FOUNDNo property page at that address.
NO_RESULTSThe page opened and had no published reviews on it.
BLOCKEDThe page never came through. A wrong property slug looks the same from outside, so the row says both and leaves a hint. Open the URL in your own browser first.
RATE_LIMITEDToo much traffic just now. Try again shortly.
NETWORKBooking.com was unreachable or answered badly. Re-run it.

One property failing writes one diagnostic row. The run carries on with the next property.

▶️ How to run it

1. Open Booking.com Reviews Scraper and click Try for free. 2. Paste your property URLs into Booking.com property review URLs, one per line, up to ten. 3. Set Maximum reviews per property. Start small, then raise it once you have seen the shape. 4. Pick a Review order. Newest first for monitoring, most relevant for a general read. 5. Click Start, then download the dataset as JSON, CSV or Excel, or read it from the API.

💰 How much does it cost?

$1.50 per 1,000 reviews, which is $0.0015 each. Flat on every Apify plan, no volume tiers.

You pay per review row. The sample row and diagnostics are not billed, so a property that comes back blocked or has no reviews leaves you a row explaining it and nothing on the bill. Page highlights are charged at the review rate, which is the one case where a thinner row costs the same as a full one.

Ten properties at 100 reviews each is 1,000 rows, so $1.50.

💡 What people use it for

  • Watching what guests say about one hotel, sorted newest first, on a schedule.
  • Reading the complaint field on its own. negativeText is where the operational problems are.
  • Comparing a handful of properties in the same city before a booking decision.
  • Pulling stay dates, room types and guest countries to see who a property actually attracts.
  • Checking whether management replies to bad reviews, and how fast.

🚧 What it does not do

  • Ten properties per run. Split a longer list across runs, or schedule it.
  • No per-review link. Booking does not publish one, so reviewUrl points at the property.
  • Published reviews only. Nothing private, nothing behind a sign-in, no guest contact details.
  • Some properties only give highlights. At most about ten of them, with no title, no dislikes

text and no dates, and the property's score in rating.

  • No property data beyond the score and the review count. For rooms, prices and availability use

the hotels scraper linked below.

  • Scores and counts are a snapshot at the moment of the run, not a running total.
  • No translation. A review written in Portuguese arrives in Portuguese, with

reviewLanguage set so you can route it.

🧭 Which travel scraper do you need?

If you wantUse
Guest reviews for a propertyThis one
Hotel listings, prices and availability on Booking.comBooking.com Hotels Scraper
Reviews from Tripadvisor insteadTripadvisor Reviews Scraper
Live hotel prices across sitesGoogle Hotels Scraper

❓ Questions people ask

Do I need a Booking.com account? No. Nothing to paste, nothing that expires.

Can I get every review a hotel has? Up to 1,000 per property per run, in the order you choose. The Savoy row above comes from a property with 1,447 published reviews, so a big hotel takes two runs.

Why is rating higher than I expected? Check reviewKind. On a highlight row that field is the property's overall score, not one guest's.

Can I run it every morning? Yes. Use NEWEST_FIRST, and keep reviewId as your dedupe key so you only store what is new.

Is negativeText really the guest's words? Yes, exactly as Booking published it, with no editing and no summarising.

Is scraping reviews legal? These are public pages. Reviews are personal data under GDPR and similar laws, so have a reason for holding them and be careful about republishing. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the property URL and the run ID. If there is a diagnostic row on the run, its status and hint usually name the reason already.