Free Booking Reviews Scraper
Pricing
from $0.00005 / actor start
Free Booking Reviews Scraper
Free Booking review scraper. No per-result charge, pay only Apify proxy/compute costs. Get full review text, guest details, stay data, and hotel rating breakdowns via Booking's internal API, no browser needed. Bypasses WAF automatically. 10 runs/day, 5 hotels/run.
Pricing
from $0.00005 / actor start
Rating
0.0
(0)
Developer
Vladimir Efimenco
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
11 days ago
Last modified
Categories
Share
Scrape Booking.com Reviews | 🆓 Free
Scrape Booking.com reviews for free, straight from the site's internal review API, not a headless browser. No per-result charge, no subscription: this is a free Booking.com review scraper, you only cover Apify's own platform usage (proxy traffic and compute), nothing goes to the developer. 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.
Looking for a way to extract Booking hotel review data without paying per review? This free 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, at zero cost beyond your own proxy and compute usage.
🆓 Free tier limits
This is a free Booking Reviews Scraper: no charge per result, no rental fee. You only pay Apify for the proxy and compute your run uses, same as you would running any actor with your own proxy. To keep the free plan sustainable, these limits apply:
- 10 runs per day for free-tier accounts. Paid Apify accounts skip this limit.
- Up to 5 hotels per run on the free tier, up to 25 on a paid Apify account.
- No cap on reviews per hotel.
maxResultsis yours to set
Need more than that? A proxy is required either way. Use Apify Proxy (Residential or Datacenter) or plug in your own proxy URLs under "Proxy configuration" in the input, the actor won't start without one.
⚡ Why use this free Booking Reviews Scraper
- Free, not a limited trial. No credit card charge per result and no expiring trial period. Most Booking.com review scrapers you find charge per row from the first run; this one only bills you for the proxy and compute you'd pay for anyway.
- 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 for free 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 up to 5 hotels in a single free run.
- 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 free 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 (max 5 on free tier) |
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 |
proxyConfiguration | Required. Apify Proxy (Residential/Datacenter) or your own proxy URLs |
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","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
🐍 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","proxyConfiguration": {"useApifyProxy": True,"apifyProxyGroups": ["RESIDENTIAL"],},}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 free tools that scrape Booking.com reviews? Most either charge per result from the first row or 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, solves the WAF challenge automatically, and doesn't charge per result.
Is this actor really free? Yes. There's no per-result charge. You only pay Apify for the platform usage your run consumes, mainly proxy traffic and compute time, same as running any actor with your own proxy.
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.
Do I need to provide my own proxy? You need a proxy either way. Use Apify Proxy (Residential or Datacenter, billed by Apify at platform rates) or your own proxy URLs. The actor won't run without one set in the input.
How many reviews can I extract per hotel? Up to the limit you set in maxResults, or all available reviews if left empty. No cap here, just the 5-hotels-per-run and 10-runs-per-day limits.
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.
💳 Pricing
Free. No per-result charge, no rental fee. You're billed by Apify only for platform usage (proxy and compute), not by this actor's developer.
⚠️ Notes
- Limited to 5 hotels per run and 10 runs per day, see Free tier limits above.
- A proxy (Apify Proxy or your own) is required to run this actor.
- 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: