Booking.com Reviews Scraper
Pricing
Pay per event
Booking.com Reviews Scraper
Extract guest reviews from any Booking.com hotel page. Get review scores, positive/negative comments, reviewer details, stay dates, and room types. Perfect for hospitality analysis and competitor monitoring.
Pricing
Pay per event
Rating
5.0
(1)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
38
Total users
11
Monthly active users
5 days ago
Last modified
Categories
Share
Scrape guest reviews from any hotel on Booking.com. Extract reviewer names, countries, scores, positive and negative comments, stay dates, room types, traveller types, and more. Supports multiple hotels, pagination, language filtering, and custom sorting.
Features
- Multiple hotels in a single run -- provide a list of Booking.com hotel URLs
- Pagination -- automatically scrapes all reviews up to your specified limit
- Language filtering -- filter reviews by language (English, German, French, Spanish, etc.)
- Sort options -- sort reviews by relevance, newest/oldest first, or highest/lowest scores
- Rich data -- extracts 13+ fields per review including positive/negative text, room type, nights stayed
- Pay per result -- only pay for the reviews you actually scrape
- Export -- download results in JSON, CSV, Excel, or connect via API
Input
| Field | Type | Default | Description |
|---|---|---|---|
hotelUrls | Array of strings | (required) | Booking.com hotel URLs to scrape reviews from |
maxReviews | Integer | 50 | Maximum reviews per hotel (0 = unlimited) |
language | String | all | Filter reviews by language code (en, de, fr, es, it, pt, ja, zh, etc.) |
sortBy | String | most_relevant | Sort order: most_relevant, newest_first, oldest_first, highest_scores, lowest_scores |
How to get hotel URLs
- Go to Booking.com
- Search for a hotel or city
- Click on a hotel to open its page
- Copy the URL from your browser
The URL should look like: https://www.booking.com/hotel/gb/the-savoy.html
Example input
{"hotelUrls": ["https://www.booking.com/hotel/gb/the-savoy.html","https://www.booking.com/hotel/us/the-plaza.html"],"maxReviews": 50,"language": "en","sortBy": "newest_first"}
Output
Each review is output as a JSON object with the following fields:
| Field | Type | Description |
|---|---|---|
hotelName | String | Name of the hotel |
hotelUrl | String | Original Booking.com hotel URL |
reviewerName | String | Name of the reviewer |
reviewerCountry | String | Country of the reviewer |
reviewDate | String | When the review was posted (e.g., "March 22, 2026") |
score | Number | Review score from 0 to 10 |
title | String | Review title/headline |
positive | String | What the guest liked |
negative | String | What the guest disliked |
stayDate | String | Month and year of the stay (e.g., "March 2026") |
nightsStayed | Integer | Number of nights stayed |
roomType | String | Type of room booked |
travellerType | String | Solo traveller, Couple, Family, Group, etc. |
scrapedAt | String | ISO timestamp when the review was scraped |
Example output
{"hotelName": "The Savoy","hotelUrl": "https://www.booking.com/hotel/gb/the-savoy.html","reviewerName": "Cohen","reviewerCountry": "United States","reviewDate": "November 12, 2024","score": 10,"title": "Exceeded expectations and loved our stay!","positive": "Location. Gorgeous property. Wonderful staff","negative": "","stayDate": "November 2024","nightsStayed": 4,"roomType": "Superior Queen Room","travellerType": "Group","scrapedAt": "2026-03-27T04:09:54.188Z"}
How much does it cost?
The scraper uses a pay-per-result pricing model:
| Event | Price |
|---|---|
| Run started | $0.01 (one-time per run) |
| Review scraped | $0.003 per review |
Example costs:
- 50 reviews from 1 hotel: $0.01 + (50 x $0.003) = $0.16
- 100 reviews from 2 hotels: $0.01 + (100 x $0.003) = $0.31
- 500 reviews from 5 hotels: $0.01 + (500 x $0.003) = $1.51
Platform compute costs are minimal for small and medium runs; the actor opens Booking.com hotel pages in a headless browser and charges only for extracted review events.
Use cases
Hotel market research
Compare guest satisfaction across competing hotels in the same area. Analyze what guests like and dislike about each property to identify competitive advantages.
Sentiment analysis
Feed review data into NLP tools to analyze guest sentiment trends over time. Track how renovations, management changes, or seasonal factors affect reviews.
Travel planning
Collect reviews for hotels you're considering to make informed booking decisions. Filter by language to find reviews from travellers who share your background.
Hospitality benchmarking
Monitor review scores and common complaints across your hotel portfolio. Identify properties that need attention and track improvement over time.
Content creation
Gather authentic guest feedback for travel blogs, hotel comparison sites, or recommendation engines.
Build travel content workflows with structured accommodation reviews
Use Booking.com Reviews Scraper after collecting hotel URLs with Booking.com Scraper to enrich programmatic destination pages, travel affiliate sites, hotel comparison workflows, and AI-assisted CMS drafts with guest scores, positive/negative comments, stay dates, room types, traveller types, and language-filtered review text.
Supported URL formats
The scraper accepts standard Booking.com hotel URLs:
https://www.booking.com/hotel/gb/the-savoy.htmlhttps://www.booking.com/hotel/us/the-plaza.htmlhttps://www.booking.com/hotel/fr/hotel-le-bristol-paris.htmlhttps://www.booking.com/hotel/it/hassler-roma.html?aid=12345&label=testhttps://www.booking.com/hotel/fr/hotel-le-bristol-paris.en-gb.html
The scraper extracts the country code and hotel identifier from the URL path. Query parameters and language suffixes are handled automatically.
Language codes
Common language filter values:
| Code | Language |
|---|---|
all | All languages (default) |
en | English |
de | German |
fr | French |
es | Spanish |
it | Italian |
pt | Portuguese |
ja | Japanese |
zh | Chinese |
ko | Korean |
ru | Russian |
ar | Arabic |
nl | Dutch |
pl | Polish |
sv | Swedish |
Tips
- Start small: Test with
maxReviews: 10to verify the data format meets your needs before running larger scrapes. - Use language filter: If you only need English reviews, set
language: "en"to skip reviews in other languages and reduce run time. - Sort by newest: Use
sortBy: "newest_first"to get the most recent reviews first. Useful for monitoring. - Multiple hotels: You can scrape reviews from multiple hotels in a single run. The scraper processes them sequentially.
- URL format: Make sure your URLs follow the pattern
https://www.booking.com/hotel/{country_code}/{hotel-slug}.html.
Who is it for?
This actor is useful for hospitality analysts, hotel owners, travel-tech teams, reputation managers, travel bloggers, and data teams that need structured Booking.com guest feedback without manually opening each property page.
API usage
Run the actor from code with the same input you use in the Apify Console.
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/booking-reviews-scraper').call({hotelUrls: ['https://www.booking.com/hotel/gb/the-savoy.html'],maxReviews: 20,language: 'all',sortBy: 'most_relevant',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/booking-reviews-scraper').call(run_input={'hotelUrls': ['https://www.booking.com/hotel/gb/the-savoy.html'],'maxReviews': 20,'language': 'all','sortBy': 'most_relevant',})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/automation-lab~booking-reviews-scraper/runs?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"hotelUrls":["https://www.booking.com/hotel/gb/the-savoy.html"],"maxReviews":20,"language":"all","sortBy":"most_relevant"}'
MCP
You can call this actor from Apify MCP-compatible agents by selecting automation-lab/booking-reviews-scraper and passing the input JSON above. This is helpful when an AI workflow needs fresh hotel review evidence before summarizing sentiment, extracting complaints, or comparing properties.
Add the Apify MCP server
$claude mcp add apify -- npx -y @apify/actors-mcp-server --actors automation-lab/booking-reviews-scraper
MCP JSON config
{"mcpServers": {"apify": {"command": "npx","args": ["-y", "@apify/actors-mcp-server", "--actors", "automation-lab/booking-reviews-scraper"],"env": {"APIFY_TOKEN": "YOUR_APIFY_TOKEN"}}}}
Example prompts showing MCP usage
- "Using the Apify MCP server, run
automation-lab/booking-reviews-scraperforhttps://www.booking.com/hotel/gb/the-savoy.htmland summarize the top guest complaints." - "Use MCP to collect 20 Booking.com reviews for these two hotel URLs and compare their staff and location sentiment."
- "Call the Booking.com Reviews Scraper through MCP for my hotel shortlist, then return a table with score, reviewer country, and positive/negative text."
Legality
This actor extracts publicly available Booking.com review information. Use the data responsibly, respect Booking.com's terms, avoid collecting personal data you do not need, and comply with privacy laws that apply to your use case. If you publish analysis based on reviews, aggregate or anonymize where appropriate.
Related actors
- Booking.com hotel/property scrapers for discovering hotel URLs before collecting reviews
- Tripadvisor review scrapers for cross-platform hotel reputation analysis
- Google Maps review scrapers for local hospitality benchmarking
Integrations
Connect Booking.com Reviews Scraper with your existing tools:
- Google Sheets -- automatically export reviews to a spreadsheet
- Slack -- get notified when new reviews are scraped
- Zapier / Make -- build automated workflows with review data
- API -- access results programmatically via the Apify API
- Webhooks -- trigger actions when a scraping run completes
Limitations
- The scraper extracts reviews from the public Booking.com review pages. Private or removed reviews are not accessible.
- Review dates show month and year of the stay, not the exact check-in/check-out dates.
- The hotel name is derived from the URL slug. In rare cases, it may differ slightly from the official hotel name on Booking.com.
- Very high-volume scraping (thousands of reviews per hotel) may encounter rate limiting. The scraper includes polite delays between page requests.
FAQ
Q: Can I scrape reviews for any hotel on Booking.com? A: Yes, as long as you have the hotel's Booking.com URL, you can scrape its public reviews.
Q: How many reviews can I scrape?
A: There is no hard limit. Set maxReviews to 0 for unlimited. The scraper will paginate through all available reviews.
Q: Can I filter reviews by score?
A: Use the sortBy option with highest_scores or lowest_scores to prioritize reviews by score. Combined with maxReviews, this effectively filters by score range.
Q: How fresh is the data?
A: Reviews are scraped in real-time from Booking.com. The scrapedAt timestamp shows exactly when each review was collected.
Q: Can I run this on a schedule? A: Yes! Use Apify's scheduling feature to run the scraper daily, weekly, or at any interval to monitor new reviews.
Q: What happens if a hotel URL is invalid? A: The scraper logs a warning and skips invalid URLs. It continues processing the remaining valid URLs in your list.
Q: Do I need a Booking.com account? A: No. The scraper extracts publicly available review data. No login or account is required.
Q: Can I combine this with other Apify actors? A: Absolutely. Use the Booking.com Scraper to find hotel URLs, then feed them into this Reviews Scraper for detailed review data. Chain actors together using Apify's API or integration tools.