Booking.com Reviews Scraper — Most Comprehensive avatar

Booking.com Reviews Scraper — Most Comprehensive

Pricing

Pay per event

Go to Apify Store
Booking.com Reviews Scraper — Most Comprehensive

Booking.com Reviews Scraper — Most Comprehensive

From $0.20 per 1,000 reviews — 10× cheaper than typical $2/1k actors. Scrape Booking.com hotel reviews: title, positive/negative text, 0–10 score, stay date, room, nights, traveler type, country, with date/language/keyword filters + a new-review monitor with alerts. No login or API key.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Share

🏨 Booking.com Reviews Scraper — Most Comprehensive

Scrape Booking.com hotel reviews — title, positive AND negative text, 0–10 score, stay date, room type, nights, traveler type, country, plus the hotel's full sub-score breakdown — at $0.20 per 1,000 reviews. Filter by date range (with early-stop), language, keyword, score band, or traveler type, and run it on a schedule as a new-review monitor with Slack/email/webhook alerts.

Why this one?

This actorLeading Booking.com reviews scraper
Price per 1,000 reviews$0.20 (pay-per-event)$2.00 (pay per result)
Positive / negative text split✅ separate fields
Review title + 0–10 score
Hotel sub-score breakdown (cleanliness, comfort, location, facilities, staff, value, Wi-Fi)✅ on every rownot advertised
Stay metadata (room type, nights, stay month, trip type, traveler type, mobile flag)✅ parsed into separate fieldsnot advertised
Reviewer country + review/helpful countspartial
Language filter (server-side, 35+ languages or ALL)
Date-range filter with early-stop (stops paginating — you don't pay for skipped pages)not advertised
Keyword filter ("breakfast", "noise", "bed bugs"…)not advertised
Score-band filter (e.g. only 0–5 complaints)not advertised
Sort control (newest / oldest / featured / best / worst)not advertised
New-review monitor + Slack / email / webhook alerts✅ built in
GDPR toggle (stripPersonalData, ON by default)
Failure handlingper-page retry with fresh browser fingerprint + rotating proxy session — a single bad page never kills the rununknown
Login / API key needednonenone

What does Booking.com Reviews Scraper do?

It reads Booking.com's own server-rendered review pages (no login, no API key, no fragile headless browser) and returns clean, structured review rows you can export to JSON, CSV, Excel, or fetch via the Apify API. Paste any hotel URL — that's it.

  • 📝 The full review — title, the positive ("liked") and negative ("disliked") texts as separate fields, plus the raw tag list.
  • Scores — the review's 0–10 score, and the hotel's overall score with the complete category breakdown (cleanliness, comfort, location, facilities, staff, value for money, free Wi-Fi) on every row.
  • 🧳 Stay context — room type, number of nights, stay month, leisure vs business, couple/solo/family/group, submitted-from-mobile.
  • 🌍 Reviewer context — country + country code, age group when shown, how many reviews and helpful votes the reviewer has (first name only if you opt out of stripPersonalData).
  • 🗓️ Date filters that save moneydateFrom/dateTo with newest-first early-stop: pagination halts the moment reviews get older than your window.
  • 🔎 Keyword & score filters — isolate every "breakfast" complaint or every ≤5/10 review across thousands of stays.
  • 🔔 New-review monitor — schedule it and get Slack / email / webhook alerts for each fresh review per hotel (reputation watch for your own or competitor hotels).

What data does it extract?

One dataset row per review:

  • 🆔 review_id (stable dedup hash), page_number, scraped_at
  • 🏨 hotel_name, hotel_cc, hotel_slug, hotel_url, reviews_url
  • hotel_score, hotel_total_reviews, hotel_reviews_in_language, hotel_score_breakdown {cleanliness, comfort, location, facilities, staff, value_for_money, free_wifi}
  • 📝 title, title_is_scoreword, positive_text, negative_text, owner_response*
  • 🔢 score (0–10), score_best
  • 🗓️ review_date (ISO), review_date_raw, stayed_date (e.g. "June 2026")
  • 🧳 nights, trip_type (leisure/business), traveler_type (couple/solo/family/group), room_type, submitted_via_mobile, tags_raw[]
  • 🌍 reviewer_country, reviewer_country_code, reviewer_age_group, reviewer_review_count, reviewer_helpful_votes, reviewer_name (null unless you disable stripPersonalData)
  • 🌐 language (the language scope you requested), ✨ is_new (monitor mode)

* Booking.com's review pages only rarely include property responses; the field is populated whenever the page shows one.

Who is it for?

  • 🏨 Hoteliers & revenue managers watching their own and competitors' guest sentiment in near-real-time.
  • 📊 Hospitality analysts & consultants building sentiment datasets across markets, brands, or seasons.
  • 🤖 AI / NLP teams that need labeled positive/negative hotel text at scale (the pos/neg split is free labeling).
  • 🛎️ Reputation & CX tools wiring new reviews into Slack, dashboards, or ticketing via webhook.
  • 🏠 OTA / travel product teams doing competitive research on inventory quality.

How to use it (step by step)

  1. Click Try for free.
  2. Paste one or more hotel URLs — any form works: https://www.booking.com/hotel/gb/royal-national.html, the reviews URL, or just gb/royal-national.
  3. (Optional) set filters: date range, language (all = every language), keyword, score band, trip/traveler type.
  4. Click Start, then open the Dataset tab to view/export.
  5. (Optional) set monitorMode: true + an Apify Schedule + a Slack/webhook/email channel to get pinged on every new review.

Quick start

{
"startUrls": ["https://www.booking.com/hotel/gb/royal-national.html"],
"maxReviewsPerHotel": 200
}

Competitor reputation monitor

{
"startUrls": [
"https://www.booking.com/hotel/us/pod.html",
"https://www.booking.com/hotel/us/your-competitor.html"
],
"monitorMode": true,
"slackWebhookUrl": "https://hooks.slack.com/services/…"
}

Complaint mining (last 90 days, low scores only)

{
"startUrls": ["https://www.booking.com/hotel/gb/royal-national.html"],
"maxReviewsPerHotel": 0,
"dateFrom": "2026-03-14",
"maxScore": 5,
"language": "all"
}

Input

FieldWhat it does
startUrlshotel page URLs (or cc/slug shorthand), one per hotel
maxReviewsPerHotelcap per hotel (0 = all reviews; default 50)
sortBynewest (default) · oldest · featured · score_high · score_low
languageserver-side language scope: all (default, most reviews), en, fr, de, … or default
dateFrom / dateToreview-date window (YYYY-MM-DD); newest-first runs early-stop below dateFrom
keywordonly reviews mentioning this word (title/positive/negative/room)
tripType / travelerTypeleisure/business · couple/solo/family/group
minScore / maxScore0–10 score band
stripPersonalDataON by default — drops the reviewer's first name (GDPR-friendly)
maxRetriesPerPageanti-WAF retry budget per page (default 10)
monitorMode, alertOnNewReviewrecurring new-review watcher
webhookUrl, slackWebhookUrl, emailRecipientsalert channels
proxyConfigurationApify proxy (datacenter works; RESIDENTIAL for very large runs)

Output

Example record (truncated):

{
"hotel_name": "Royal National Hotel",
"hotel_score": 7.9,
"hotel_total_reviews": 19601,
"hotel_score_breakdown": { "cleanliness": 8.3, "comfort": 8.3, "location": 9.1, "facilities": 7.8, "staff": 8.6, "value_for_money": 7.9, "free_wifi": 8.2 },
"title": "Clean rooms, great location and pleasant staff.",
"positive_text": "The location was ideal. Walking distance to Russell Square Underground…",
"negative_text": "Our tv did not work correctly…",
"score": 8, "score_best": 10,
"review_date": "2026-06-12", "stayed_date": "June 2026",
"nights": 3, "trip_type": "leisure", "traveler_type": "Couple",
"room_type": "Standard Plus Double Room", "submitted_via_mobile": true,
"reviewer_country": "Ireland", "reviewer_country_code": "ie",
"reviewer_review_count": 1, "reviewer_helpful_votes": 0,
"personal_data_stripped": true
}

How much does it cost?

Pay-per-event — you pay for what you pull, no subscription:

EventWhat it coversPrice
lot-scrapedeach review returned$0.0002 (= $0.20 / 1,000 reviews)
monitor-run-completedeach scheduled watch run$0.02 / run
new-lot-detectedeach new review found by the monitor$0.005 / review
alert-deliveredeach Slack/email/webhook push$0.002 / alert

(Final per-event prices are set on the actor's pricing page.)

That's $0.20 per 1,000 reviews — about 10× cheaper than the typical $2.00/1k Booking reviews actor. A daily monitor on 5 hotels costs roughly $0.10/day plus the new reviews it actually finds.

  • Personal data: reviews can contain personal data (the reviewer's first name and nationality). By default this actor strips the reviewer's name (stripPersonalData: true). Only disable that if you have a lawful basis under GDPR/your local privacy law to process reviewer names, and honor deletion requests.
  • Terms of Service: Booking.com's ToS does not welcome automated collection; this is a gray area that this actor does not resolve for you. The data scraped is publicly visible without any login, and courts have repeatedly found scraping public pages lawful (e.g. hiQ v. LinkedIn) — but you are responsible for your own use case, jurisdiction, and volume. Use the data for analysis/monitoring, don't republish reviews wholesale.

FAQ

Do I need a Booking.com account, login, or API key? No. The reviews are served on public pages — the actor reads them directly. No login or API key.

Which hotels can it scrape? Any property on Booking.com with guest reviews — paste its hotel page URL in any country/locale form.

How many reviews can I get per hotel? All of them (set maxReviewsPerHotel: 0). Pages hold 25 reviews each and the actor paginates gaplessly until the end, your cap, or your date window.

Does it get non-English reviews? Yes — the default language: "all" returns every language (e.g. 19,601 vs only 6,547 English reviews for a large London hotel). Set a 2-letter code to scope to one language.

Can I get only recent reviews? Yes — dateFrom (+ default newest-first sort) stops pagination the moment it reaches older reviews, so a "last 30 days" pull on a 20k-review hotel costs only a few pages.

Can I monitor a hotel for new reviews? Yes. monitorMode: true + an Apify Schedule. The actor remembers what it has seen per hotel (in a persistent named store) and outputs/alerts only new reviews, to Slack, email, or any webhook.

Does it include review scores and sub-scores? Every review carries its 0–10 score, and every row carries the hotel's full category breakdown (cleanliness, comfort, location, facilities, staff, value, Wi-Fi). Booking.com does not publish per-review category scores on its review pages.

Does it include the hotel's reply to a review? The owner_response field is populated whenever Booking.com's review page shows one — most properties' responses are not exposed there, so expect it to be null for most rows.

Why do I see "WAF/odd response … retry" lines in the log? Booking.com randomly challenges ~2 of 3 requests with an AWS WAF page. The actor retries with a fresh browser fingerprint, cookie jar, and proxy session — a clean page typically arrives within 1–4 tries. That's normal and already priced in.

What if one hotel URL fails? The run keeps going — each hotel is isolated, and whatever was collected is always pushed. A failed page logs a warning instead of crashing the run.

Is the reviewer's name included? Not by default (stripPersonalData: true). Disable it only if you have a lawful basis to process names; nationality, review counts, and helpful votes are kept either way.

How do I export the data? JSON, CSV, Excel, HTML, or RSS from the Dataset tab, or via the Apify API. Webhooks/Slack/email for monitor alerts.

Can I run it from my own code / Make / Zapier / n8n? Yes — call it via the Apify API or client libraries, or wire the alert webhook into any automation tool.

You might also like

  • 🛫 Airline & travel review scrapers
  • 🏠 Vacation-rental review & listing scrapers
  • ⭐ Google Maps / TripAdvisor review scrapers

Feedback

Found a missing field or want a new filter? Open an issue on the actor — fast fixes and feature requests welcome.