Booking Reviews Scraper
Pricing
from $1.00 / 1,000 record scrapeds
Booking.com Reviews Scraper — Extract Hotel Reviews at Scale
Pull thousands of Booking.com guest reviews in minutes — with no API key, no manual work, and no blocks.
Whether you manage a hotel's reputation, conduct hospitality research, or build a competitive intelligence tool, this actor gives you structured, fresh review data straight from Booking.com's live database.
- ✅ Scrapes any Booking.com hotel page — no account required
- ✅ Bypasses WAF and bot protection automatically
- ✅ Extracts reviews in clean, structured JSON ready for analysis
- ✅ Supports bulk scraping across multiple properties in one run
- ✅ Pay only for what you scrape — $0.001 per review
📌 What This Actor Does
This Apify Actor extracts guest reviews from Booking.com hotel pages — the same reviews guests see when they search for accommodation.
For each hotel URL you provide, the actor fetches:
- Full guest reviews (positive and negative comments, separated)
- Star ratings on a 1–5 scale
- Guest names, check-in dates, and room types
- Hotel management replies
- Hotel-level summary (overall score, rating distribution)
Who is this for?
- 🏨 Hotel owners & managers monitoring their reputation and benchmarking competitors
- 📊 Market researchers & analysts studying hospitality trends across regions
- 🏢 OTAs & travel platforms enriching their own databases with third-party social proof
- 🤖 AI & NLP teams building sentiment analysis models on real hospitality data
- 💼 Reputation management agencies tracking client portfolios at scale
✨ Key Features
- Bulk scraping — provide a list of hotel URLs and scrape them all in a single run
- Pagination handled automatically — fetches all review pages without any configuration
- Date filtering — set a stop date to only collect reviews newer than a given cutoff, great for weekly or monthly monitoring workflows
- Review limit control — cap the number of reviews per hotel to control cost and runtime
- Separated positive/negative text — Booking.com stores positive and negative comments as distinct fields; this actor preserves that structure so you don't have to parse it yourself
- Hotel management replies — captures the owner's response to each review, if present
- Room-level data — includes the room name and ID the guest stayed in
- WAF challenge solver — automatically handles AWS WAF JavaScript challenges that Booking.com deploys to block scrapers; no manual intervention required
- Residential proxy support — runs through Apify's residential proxy network for high success rates
🧠 Why This Actor Is Different
Most Booking.com scrapers parse the rendered HTML page — which breaks every time Booking.com updates its frontend layout. This actor calls Booking.com's internal GraphQL API directly, the same endpoint the browser itself uses. That means:
| This Actor | Typical HTML Scrapers | |
|---|---|---|
| Data freshness | Live from the API | Depends on page render |
| Resilience to layout changes | High — API contract is stable | Low — breaks on CSS/HTML changes |
| Positive/negative text separated | ✅ Yes | ❌ Usually merged |
| Room details included | ✅ Yes | ❌ Rarely |
| Management replies | ✅ Yes | ❌ Often missed |
| WAF bypass | ✅ Automatic | ❌ Often blocks |
| Pricing | $0.001 / review | Varies |
⚙️ Input Configuration
Input fields
| Field | Type | Required | Description |
|---|---|---|---|
startUrls | Array of URLs | ✅ Yes | List of Booking.com hotel page URLs to scrape |
maxNumberOfReviews | Integer | No | Maximum reviews to collect per hotel. Leave empty or set to 0 to collect all available reviews. Default: 100 |
targetDate | Date (ISO) | No | Stop collecting reviews older than this date. Useful for incremental/scheduled scraping. Leave empty to disable. |
proxyConfiguration | Object | No | Proxy settings. Defaults to Apify Residential Proxy (US). Change country if you need reviews in a specific language. |
Example input
{"startUrls": [{ "url": "https://www.booking.com/hotel/fr/edenarc.en-gb.html" },{ "url": "https://www.booking.com/hotel/es/hotel-arts-barcelona.en-gb.html" }],"maxNumberOfReviews": 500,"targetDate": "2024-01-01","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "FR"}}
Tips for best results
Use the full hotel URL. Booking.com short URLs (e.g.,
booking.com/hotel/fr/name.html) work, but URLs with query parameters (dest_id,aid,label) help the actor resolve the hotel faster and more reliably.
Set
apifyProxyCountryto match the hotel's country. Reviews on Booking.com are sometimes language-filtered by region. Using a French proxy for French hotels gives you the most complete review set.
Use
targetDatefor scheduled monitoring. If you run this actor weekly, settargetDateto 7 days ago to only fetch new reviews since your last run — saves cost and time.
Leave
maxNumberOfReviewsempty for complete datasets. Setting it to0or leaving it blank collects every available review for the property.
📤 Output Format
Each record in the dataset represents one hotel, containing:
- An
entityobject with hotel-level metadata - A
reviewsarray with all scraped reviews for that hotel
Sample output
{"entity": {"businessName": "Hôtel Eden Arc","businessUrl": "https://www.booking.com/hotel/fr/edenarc.en-gb.html","score": 8.6,"totalNumberOfReviews": 1243,"ratings": {"one": 12,"two": 28,"three": 95,"four": 310,"five": 798}},"reviews": [{"reviewId": "/reviews/fr/hotel/edenarc-fr.en-gb.html?...","title": "Perfect mountain escape","room_name": "Superior Double Room with Mountain View","room_id": "12345678","text": {"positive": "The view from our room was breathtaking. Staff were incredibly welcoming and helpful throughout our stay.","negative": "The spa was closed for renovation during our visit, which was a bit disappointing."},"rating": 5,"datetime": "2025-03-14T00:00:00.000Z","consumerName": "Marie G.","dateOfExperience": "2025-03-10T00:00:00.000Z","reviewUrl": "/reviews/fr/hotel/edenarc-fr.en-gb.html?...","reply": "Thank you so much for your kind words, Marie! We hope to welcome you back once the spa renovation is complete."}]}
Output field reference
entity object
| Field | Description |
|---|---|
businessName | Hotel name as shown on Booking.com |
businessUrl | Clean hotel page URL (no tracking params) |
score | Overall Booking.com score (out of 10) |
totalNumberOfReviews | Total review count on Booking.com |
ratings.one – ratings.five | Count of reviews per star band (1–5 stars) |
Each review in reviews
| Field | Description |
|---|---|
reviewId | Unique review identifier (relative URL path) |
title | Review headline written by the guest |
room_name | Name of the room type booked |
room_id | Internal Booking.com room type ID |
text.positive | Positive comments from the guest |
text.negative | Negative comments from the guest |
rating | Guest rating, converted to 1–5 scale |
datetime | Date the review was submitted (ISO 8601) |
consumerName | Guest display name |
dateOfExperience | Guest check-in date (ISO 8601) |
reviewUrl | Direct link to the review on Booking.com |
reply | Hotel management's reply, or null if none |
▶️ How to Use
Option 1 — Apify Console (No Code)
- Open the actor page on Apify Store
- Click Try for free
- Paste your Booking.com hotel URL(s) in the Start URLs field
- Set your desired review limit and optional stop date
- Click Start and wait for the run to finish
- Download your results as JSON, CSV, or Excel
Option 2 — Apify API
curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{ "url": "https://www.booking.com/hotel/fr/edenarc.en-gb.html" }],"maxNumberOfReviews": 200}'
Option 3 — Schedule it (Automated Monitoring)
- Go to Schedules in your Apify account
- Create a new schedule (e.g., every Monday at 9am)
- Attach this actor with your hotel URLs and a rolling
targetDateset to 7 days ago - Connect to a webhook or Google Sheets integration for automatic delivery
📈 Use Cases
1. Hotel Reputation Monitoring
Track what guests are saying about your property in real time. Run the actor weekly, filter for new reviews since your last run using targetDate, and pipe results into your CRM or Slack for instant alerts on negative feedback.
2. Competitive Intelligence
Scrape the top 20 hotels in your destination city. Compare average ratings, score distributions, and recurring complaints in positive/negative text fields to identify gaps your property can exploit.
3. Hospitality Market Research
Build a dataset of thousands of hotels across Europe and analyse review trends by region, price tier, or property type. The structured positive/negative split makes sentiment analysis straightforward.
4. AI Training Data
Generate large, labelled datasets of real guest reviews for training sentiment classifiers, summarisation models, or hospitality-specific NLP tools. The text.positive/text.negative separation gives you pre-labelled training examples.
5. OTA & Aggregator Enrichment
If you run a travel comparison platform, enrich your hotel listings with live Booking.com review summaries, scores, and rating distributions to improve trust signals for your users.
🛠️ Advanced Tips
Scraping a large hotel with 5,000+ reviews
Set maxNumberOfReviews to 0 (no limit) and increase the actor memory in the Advanced options if the run times out. The actor paginates automatically — no extra configuration needed.
Getting reviews in a specific language
Booking.com serves reviews based on the proxy location. To get French-language reviews, set:
"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "FR"}
Running for hundreds of hotels
Provide all URLs in the startUrls array. The actor processes them sequentially in a single run. For very large batches (100+ hotels), consider splitting them across multiple scheduled runs to avoid memory pressure.
Saving cost on repeat runs
Use targetDate set to your last run date. The actor stops pagination as soon as it encounters reviews older than the cutoff — you only pay for new reviews, not the entire history.
Integrating with Google Sheets
Use Apify's native Google Sheets integration to push results directly to a spreadsheet after each run — no coding required.
❓ FAQ & Troubleshooting
Q: Do I need a Booking.com account? No. The actor scrapes public review pages. No login is required.
Q: Is it legal to scrape Booking.com? Scraping publicly available data for research, analysis, and personal use is generally permitted in many jurisdictions. Always review Booking.com's Terms of Service and consult legal counsel for commercial applications. This actor only accesses data that any visitor can see without logging in.
Q: Why did my run return fewer reviews than the hotel shows? Booking.com occasionally limits the total number of reviews accessible through their API (typically capping at ~10,000 most recent reviews for very popular properties). This is a platform-level restriction, not an actor bug.
Q: The actor failed — what do I do? Check the Log tab in your run. Common causes:
- The hotel URL is invalid or the page no longer exists — verify the URL in a browser
- The run was blocked by WAF — try again; the actor automatically retries, but persistent blocks may require switching proxy country
- The hotel page structure changed — contact support
Q: The rating field shows values 1–5, but Booking.com uses 1–10. Why?
The actor normalises ratings to a 1–5 scale (divides by 2 and rounds) for consistency with other review platforms. The raw score is not preserved in the current output.
Q: Can I scrape reviews in multiple languages? Booking.com serves reviews in the guest's original language. The actor does not filter by language — all reviews are included regardless of the language they were written in.
Q: How fresh is the data? Every run fetches live data directly from Booking.com. There is no cache. Reviews published minutes ago will appear in your results.
Q: How much does it cost? The actor charges $0.001 per review scraped (Pay-Per-Event billing). Scraping 1,000 reviews costs $1. There is no base run fee — you only pay for what you actually collect.
📞 Support
Have a question, found a bug, or need a custom feature?
- 📧 Email: me@ahmedhrid.com
- 🐛 Report issues: Use the Issues tab on the actor page
- 💬 General questions: Use the Discussions section on the Apify platform
Response time is typically within 24 hours on business days.
Built with ❤️ using Apify. Not affiliated with Booking.com.