Booking Reviews Scraper
Pricing
from $0.75 / 1,000 results
Booking Reviews Scraper
Extracts Booking.com hotel reviews via the site's own internal API — no browser needed. Full review text, guest profiles, stay details, hotel replies, and category rating breakdowns, ready to export.
Pricing
from $0.75 / 1,000 results
Rating
0.0
(0)
Developer
Vladimir Efimenco
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Scrape Booking.com Reviews | ⚡ Fast & Browserless
Scrape Booking.com reviews straight from the site's internal review API, not a headless browser. You get the full review content (positive, negative, and title) alongside guest details, stay data, and hotel-wide rating breakdowns, all in one clean dataset.
Whether you need to extract Booking hotel review data for one property or pull reviews at scale across a whole portfolio, this actor calls the same API Booking.com's own frontend uses, so it stays fast and stays online after layout changes that break HTML scrapers.
🎥 Video tutorial
⚡ Why this Booking Reviews Scraper
- Full dataset, not a summary. Every review comes with the complete positive/negative text split, guest profile info, room and stay details, and the hotel's reply where present. Most tools that scrape Booking.com reviews give you a score and a snippet of text and stop there.
- Bypasses Booking.com's bot protection automatically. Booking.com puts an AWS WAF challenge in front of its pages specifically to slow down scrapers. This actor solves that challenge on its own, on every run, so you never see a blocked request.
- Hotel-wide rating breakdown included. Per-category scores (cleanliness, comfort, location, and more) are attached to every review, not buried behind a separate call.
- Flexible filtering. Sort order and translation language match what's available on the live site, plus keyword search across the review title, positive text, and negative text at once.
- Batch scraping. Crawl and extract reviews for multiple hotels in a single run, with a configurable result cap per hotel or unlimited collection.
- Proxies included. The proxy pool is built into the price, nothing to configure.
- Fast, no-code extraction. No browser, no rendering wait. Pure HTTP calls to the same internal API the Booking.com frontend uses.
🎯 Who uses this Booking Reviews Scraper
- Hotel operators & revenue managers monitoring guest feedback across their own properties and reacting to recurring complaints before they hit occupancy.
- Market researchers & hospitality analysts studying guest sentiment, category-score trends, or seasonal patterns across a city or hotel chain.
- Competitor analysis teams benchmarking review scores and category ratings against rival properties to spot where they're losing on cleanliness, location, or service.
- Data teams running sentiment analysis feeding positive/negative review text straight into NLP pipelines for topic and trend detection.
- Reputation monitoring tools tracking new reviews and hotel replies over time to measure response rate and tone.
🧾 What you get, per review
- Review content: title, positive text, negative text, overall score, approval status
- Guest info: username, guest type, review count, country, avatar, anonymity flag, join date
- Stay details: room type, check-in/check-out dates, customer type, stay status
- Hotel reply: reply message, when the hotel responded
- Hotel-wide ratings: category-by-category score breakdown for the hotel
- Keyword match: whether and where a search term was found
🔧 Input options
| Field | Description |
|---|---|
hotelUrls | One or more Booking.com hotel page URLs |
maxResults | Max reviews to collect per hotel. Leave empty to collect all available |
sort | Sort order: most relevant, newest, oldest, highest or lowest score |
lang | Language reviews are auto-translated into (40+ supported) |
search | Keywords to tag in reviews, matched against title, positive, and negative text |
Example input
{"hotelUrls": [{ "url": "https://www.booking.com/hotel/it/al-mascaron-ridente.html" },{ "url": "https://www.booking.com/hotel/it/palazzo-ti-tti.html" }],"maxResults": 500,"search": ["amazing", "good"],"sort": "MOST_RELEVANT"}
🐍 Run it with Python
Install the client:
$pip install apify-client
Then run the actor and pull the results:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run_input = {"hotelUrls": [{"url": "https://www.booking.com/hotel/it/al-mascaron-ridente.html"},{"url": "https://www.booking.com/hotel/it/palazzo-ti-tti.html"},],"maxResults": 500,"search": ["amazing", "good"],"sort": "MOST_RELEVANT",}run = client.actor("mof1re/booking-reviews-scraper-browserless").call(run_input=run_input)for review in client.dataset(run["defaultDatasetId"]).iterate_items():print(review["hotel_name"], review["review_score"], review["review_title"])
call() blocks until the run finishes. If you're kicking off a long run and don't want to wait, use client.actor(...).start(run_input=run_input) instead, then poll or fetch the dataset later with the returned run ID.
🤖 Use it from Claude via MCP
This actor also runs as a tool inside Claude (or any other MCP-compatible AI client), no code needed. Apify runs a hosted MCP server at https://mcp.apify.com that exposes Actors from Apify Store as callable tools.
Hosted server (recommended)
Add a custom connector in Claude Desktop with server URL https://mcp.apify.com and sign in with your Apify account. The default tool set already includes Actor search and detail lookup, so you can just ask: "Scrape reviews for these two Booking.com hotels and tag any mentioning 'amazing' or 'good'." Claude finds this actor in Apify Store and runs it with the input you described.
To skip the search step and expose this actor directly, add it to the tools query parameter:
https://mcp.apify.com?tools=mof1re/booking-reviews-scraper-browserless
Local stdio server
For clients that don't support the remote URL, run the server locally:
{"mcpServers": {"actors-mcp-server": {"command": "npx","args": ["-y", "@apify/actors-mcp-server"],"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }}}}
To limit the local server to this actor, pass --tools on the command line instead:
npx @apify/actors-mcp-server --tools mof1re/booking-reviews-scraper-browserless
Full setup and tool reference: Apify MCP server docs.
📊 Data Fields
📝 Review Details
| Field | Description |
|---|---|
hotel_url | Hotel page URL this review belongs to |
hotel_name | Name of the hotel |
accommodation_type | Type of accommodation (hotel, apartment, etc.) |
review_score | Reviewer's overall score for this stay |
review_approved | Whether the review passed moderation |
review_title | Review headline |
review_positive_text | Positive part of the review |
review_negative_text | Negative part of the review |
review_photos | Photos attached to review in max resolution (if available) |
review_reply | Hotel's reply to the review, if any |
👤 Guest
| Field | Description |
|---|---|
guest_username | Display name of the reviewer |
guest_type | Type of guest (e.g. couple, solo, family) |
guest_reviews | Total number of reviews written by this guest |
guest_country | Reviewer's country name |
guest_country_code | Reviewer's country code |
guest_avatar | URL of the reviewer's avatar image |
guest_anonymous | Whether the reviewer chose to stay anonymous |
guest_join_date | Date the reviewer joined |
🛏️ Stay Details
| Field | Description |
|---|---|
booking_room | Room type booked by the guest |
booking_checkin | Check-in date of the stay |
booking_checkout | Check-out date of the stay |
booking_customer_type | Customer type for this booking |
booking_stay_status | Status of the stay (e.g. completed) |
⭐ Ratings & Matching
| Field | Description |
|---|---|
rating_statistics | Hotel-wide rating breakdown by category (cleanliness, comfort, etc.). Same for every review of a given hotel |
keyword_match | True if search keywords were set and at least one matched this review |
matched_keywords | Map of matched keyword to the field it was found in (title, positive, or negative text) |
📋 Example output
[{"hotel_url": "https://www.booking.com/hotel/cy/flora-apartments.ro.html","hotel_name": "Flora Hotel Apartments","accommodation_type": "HOTEL","review_score": 9.0,"review_approved": true,"review_title": "Very enjoyable weekend break at tha Flora Hotel Appts which was very enjoyable.","review_positive_text": "This was a short two day break to Protaras for my wife’s birthday.\nMy only slight gripe was the mattresses on the beds.\nI don’t know if they were new but they were very hard.\nWe had two breakfasts and one evening meal which were all delicious\nA special shout out to all the staff who were all brilliant.\nThis was our second short stay at the Flora Hotel Appts and we will definitely be back later in the year.","review_negative_text": null,"review_photos": null,"review_reply": "Thank you for choosing Flora Hotel Apartments for your wife's birthday getaway! We are thrilled to hear that you enjoyed your stay with us and found the breakfasts and evening meal delicious. Your feedback on the mattresses is greatly appreciated, and we will look into improving this for your next visit. We are grateful for your kind words about our staff; they work hard to ensure our guests have a memorable experience. We can't wait to welcome you back later this year for another enjoyable stay.","guest_username": "Brian","guest_type": "Couple","guest_reviews": 19,"guest_country": "Cyprus","guest_country_code": "cy","guest_avatar": "https://xx.bstatic.com/static/img/review/avatars/ava-b.png","guest_anonymous": false,"guest_join_date": "2013-06-03","booking_room": "Standard Apartment","booking_checkin": "2025-04-04","booking_checkout": "2025-04-06","booking_customer_type": "COUPLES","booking_stay_status": "stayed","rating_statistics": {"hotel_staff": {"rating_rounded": 9.0,"rating_orig": 9.00786304473877,"name_translated": "Staff"},"hotel_services": {"rating_rounded": 7.7,"rating_orig": 7.72118091583252,"name_translated": "Facilities"},"hotel_clean": {"rating_rounded": 8.2,"rating_orig": 8.20839023590088,"name_translated": "Cleanliness"},"hotel_comfort": {"rating_rounded": 8.1,"rating_orig": 8.10650062561035,"name_translated": "Comfort"},"hotel_value": {"rating_rounded": 8.5,"rating_orig": 8.52496433258057,"name_translated": "Value for money"},"hotel_location": {"rating_rounded": 9.2,"rating_orig": 9.24711036682129,"name_translated": "Location"},"hotel_free_wifi": {"rating_rounded": 8.5,"rating_orig": 8.51440048217773,"name_translated": "Free Wifi"}},"keyword_match": false,"matched_keywords": {}},{"hotel_url": "https://www.booking.com/hotel/cy/flora-apartments.ro.html","hotel_name": "Flora Hotel Apartments","accommodation_type": "HOTEL","review_score": 9.0,"review_approved": true,"review_title": null,"review_positive_text": "Great location, right on top of the northern end of the strip, few minutes walk down to the beach. Room was clean, WiFi was stable, staff were polite and attentive. Would happily stay again if a cheap and cheerful place was needed.","review_negative_text": null,"review_photos": null,"review_reply": "Thank you for taking the time to share your thoughts! We are thrilled to hear you enjoyed our central location, clean rooms, reliable WiFi, and our attentive staff. It's wonderful to know that you had a pleasant stay with us. We look forward to welcoming you back to Flora Hotel Apartments whenever you need a \"cheap and cheerful\" place in the area. Your kind words mean a lot to us!","guest_username": "Mark","guest_type": "Family","guest_reviews": 14,"guest_country": "United Kingdom","guest_country_code": "gb","guest_avatar": "https://graph.facebook.com/v2.9/10157434864745648/picture?type=square&height=64&width=64","guest_anonymous": false,"guest_join_date": "2016-09-30","booking_room": "One-Bedroom Apartment","booking_checkin": "2025-03-29","booking_checkout": "2025-03-30","booking_customer_type": "FAMILIES","booking_stay_status": "stayed","rating_statistics": {"hotel_staff": {"rating_rounded": 9.0,"rating_orig": 9.00786304473877,"name_translated": "Staff"},"hotel_services": {"rating_rounded": 7.7,"rating_orig": 7.72118091583252,"name_translated": "Facilities"},"hotel_clean": {"rating_rounded": 8.2,"rating_orig": 8.20839023590088,"name_translated": "Cleanliness"},"hotel_comfort": {"rating_rounded": 8.1,"rating_orig": 8.10650062561035,"name_translated": "Comfort"},"hotel_value": {"rating_rounded": 8.5,"rating_orig": 8.52496433258057,"name_translated": "Value for money"},"hotel_location": {"rating_rounded": 9.2,"rating_orig": 9.24711036682129,"name_translated": "Location"},"hotel_free_wifi": {"rating_rounded": 8.5,"rating_orig": 8.51440048217773,"name_translated": "Free Wifi"}},"keyword_match": false,"matched_keywords": {}},{"hotel_url": "https://www.booking.com/hotel/cy/flora-apartments.ro.html","hotel_name": "Flora Hotel Apartments","accommodation_type": "HOTEL","review_score": 8.0,"review_approved": true,"review_title": "Nice option for a short stay","review_positive_text": "Friendly staff","review_negative_text": "Mattress are very hard","review_reply": null,"guest_username": "Milos","guest_type": "Solo traveler","guest_reviews": 129,"guest_country": "United Kingdom","guest_country_code": "gb","guest_avatar": "https://xx.bstatic.com/static/img/review/avatars/ava-m.png","guest_anonymous": false,"guest_join_date": "2013-03-25","booking_room": "One-Bedroom Apartment with Pool View","booking_checkin": "2024-09-27","booking_checkout": "2024-09-30","booking_customer_type": "SOLO_TRAVELLERS","booking_stay_status": "stayed","rating_statistics": {"hotel_staff": {"rating_rounded": 9.0,"rating_orig": 9.00786304473877,"name_translated": "Staff"},"hotel_services": {"rating_rounded": 7.7,"rating_orig": 7.72118091583252,"name_translated": "Facilities"},"hotel_clean": {"rating_rounded": 8.2,"rating_orig": 8.20839023590088,"name_translated": "Cleanliness"},"hotel_comfort": {"rating_rounded": 8.1,"rating_orig": 8.10650062561035,"name_translated": "Comfort"},"hotel_value": {"rating_rounded": 8.5,"rating_orig": 8.52496433258057,"name_translated": "Value for money"},"hotel_location": {"rating_rounded": 9.2,"rating_orig": 9.24711036682129,"name_translated": "Location"},"hotel_free_wifi": {"rating_rounded": 8.5,"rating_orig": 8.51440048217773,"name_translated": "Free Wifi"}},"keyword_match": false,"matched_keywords": {}}]
❓ FAQ
How is this different from other tools that scrape Booking.com reviews? Most parse the rendered HTML page, which breaks every time Booking.com updates its layout, and most stop cold at Booking.com's WAF challenge. This actor calls the internal API directly and solves the WAF challenge automatically, so it keeps working and keeps returning data.
Does this scraper need an account or API key? No Booking.com account needed. It extracts publicly available review data. You do need an Apify API token to run it via the API or Python client.
How many reviews can I extract per hotel? Up to the limit you set in maxResults, or all available reviews if left empty.
Can I filter reviews by keyword? Yes. Set the search field to match against the review title, positive text, and negative text at once.
Does it work without a browser? Yes. It calls the internal review API directly instead of rendering pages in a browser, which makes it faster and cheaper per review than browser-based crawlers.
Can I get reviews in a specific language? Yes. The lang field matches Booking.com's own review auto-translation options.
Is this legal? Can I scrape publicly available reviews? This tool extracts publicly available review data. You're responsible for complying with the target site's terms of service and applicable data protection laws for your use case.
Can I use this data for competitor analysis or market research? Yes. The hotel-wide rating breakdown and full review text make it suitable for benchmarking competitors, tracking sentiment trends, and building hospitality research datasets.
💳 Pricing
Pay-per-result. You're charged for reviews actually delivered, not for pages fetched or requests made.
⚠️ Notes
- Free-tier accounts are capped at a small sample size per run. Upgrade to a paid Apify plan for full volume.
- Data reflects what's publicly listed on Booking.com at the time of the run; the source updates continuously.
🔗 See also
Need a scraper for another platform? Check out: