Booking.com Scraper: Reviews, Room Prices & Search
Pricing
from $1.50 / 1,000 results
Booking.com Scraper: Reviews, Room Prices & Search
Paste a hotel link or a destination. Get every guest review, room prices with all taxes and fees for up to 90 dates, or every property a search lists, even for whole regions. $1.50 per 1,000 results.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Sourabh Kumar
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share
Booking.com scraper: reviews, hotel details, room prices and search
Get Booking.com data in three ways: every guest review of a hotel, a hotel's full profile with live room prices, or every property a search lists for a destination. Paste a hotel link or a destination, press Start, and download a clean spreadsheet.
$1.50 per 1,000 results in every mode, plus $0.002 per run. No proxy setup or login needed.
Works for every country and property type on Booking.com: hotels, apartments, villas, guest houses and more, in 50+ currencies.
Pick a mode
Set What to scrape (mode), paste your hotels or destinations, then fill the section with the mode's name. Hotel details and Search also use Dates, guests and currency. Other sections are ignored.
| You want | mode | Paste into |
|---|---|---|
| Every guest review of a hotel, with its scores | reviews | hotelUrls (hotel links or IDs) |
| A hotel's profile, room offers with all-in prices, and its availability calendar | hotels | hotelUrls (hotel links or IDs) |
| Every property a search lists, with its place in the list and its price | search | searches (a destination or a Booking.com search link) |
Every mode can be scheduled. Run it daily and you have a review monitor, a rate shopper or a ranking tracker.
Why this Booking.com scraper?
- 💷 The price a guest really pays: taxes and fees Booking adds at checkout are included, and each one is listed.
- 🏷️ Genius deals kept apart: when a discount is for signed-in members only,
priceis what everyone pays andmemberPriceholds the members' price. - 🗺️ Whole regions and countries: a search for Tuscany returns its 30,000+ properties, not just the first 1,000.
- 📅 Room prices for up to 90 check-in dates in one run, plus an availability calendar with minimum stays.
- 🔔 Only new reviews on scheduled runs, so a daily monitor never pays twice for the same review.
- 📍 Search rank and ads: every row carries its position in the list and whether it's a paid placement.
- 💸 One price for every row, and you pay only for rows you get. A run that falls short says so in its status.
1. Reviews: every guest review of a hotel
Paste Booking.com hotel links or numeric hotel IDs, one per line.
Get one row per review: score, title, what the guest liked and disliked, date, language, traveller type, room, stay dates, the hotel's reply and photos. A summary row per hotel comes first, with the 7 category scores next to the city average, and how reviews split by score, traveller type and language.
| Option | Field | Default | What it does |
|---|---|---|---|
| Max reviews per hotel | maxReviewsPerHotel | 100 | 0 returns only the summary row |
| Sort reviews by | sortReviewsBy | NEWEST_FIRST | Also OLDEST_FIRST, MOST_RELEVANT, SCORE_DESC, SCORE_ASC |
| Reviewed on or after / before | reviewedDateFrom, reviewedDateTo | A date, or a period such as 7 days for scheduled runs | |
| Traveller type | travellerType | ALL | Couples, families, solo, friends or business |
| Review score | reviewScore | ALL | Superb, good, passable, poor or very poor |
| Review languages | reviewLanguages | all | Reviews always come in the language they were written in |
| Reviews mentioning | reviewText | A word or phrase, for example breakfast | |
| Only new reviews | onlyNewReviews | false | Skips reviews an earlier run already returned |
Input
{"mode": "reviews","hotelUrls": ["https://www.booking.com/hotel/gb/the-savoy.html"],"maxReviewsPerHotel": 500,"reviewedDateFrom": "30 days"}
Output (one real row, selected fields)
{"rowType": "review","hotelName": "The Savoy","reviewScore": 10,"reviewedDate": "2026-10-27T15:28:54.000Z","reviewTitle": "Excellent!","positiveText": "It was stunning. Sebastian was an outstanding member of staff, so welcoming and warm.","negativeText": "Cheaper drinks","reviewLanguage": "en","reviewerCountry": "United Kingdom","travellerType": "COUPLES","roomName": "Superior Queen Room","checkinDate": "2026-10-24","nights": 2,"hotelReply": "Dear Matthew, We very much appreciate your comments regarding your recent stay at The Savoy..."}
2. Hotel details and room prices
Paste hotel links or IDs, and a check-in date.
Get one hotel row with the full profile: address, coordinates, brand, facilities, house rules, check-in times, the legal trader behind the listing, and the review scores. Then one row per room offer for each check-in date: room, beds, meal plan, rooms left, cancellation and prepayment terms, and the all-in price with every tax and fee listed.
| Option | Field | Default | What it does |
|---|---|---|---|
| Check-in date | checkIn | A date, or a period such as 30 days. Empty = hotel profile only | |
| Nights | nights | 1 | Length of each stay, up to 30 |
| Check-in dates to check | checkInDays | 1 | Up to 90 consecutive dates in one run |
| Adults, rooms, children's ages | adults, rooms, childrenAges | 2, 1 | Ages change which rooms Booking offers |
| Currency | currency | USD | Rows also carry the hotel's own currency |
| Cheapest offer only | onlyCheapestRate | false | One row per date: the lowest all-in price for your guests |
| Availability calendar days | calendarDays | 0 | One row per day: can a stay start, minimum nights, calendar price |
Input
{"mode": "hotels","hotelUrls": ["https://www.booking.com/hotel/gb/the-savoy.html"],"checkIn": "45 days","nights": 3,"checkInDays": 7,"currency": "USD"}
Output: hotel row (one real row, selected fields)
{"rowType": "hotel","hotelId": 280149,"hotelName": "The Savoy","fullAddress": "Strand, Westminster Borough, London, WC2R 0EU, United Kingdom","starRating": 5,"hotelScore": 9.4,"hotelReviewCount": 1419,"brand": "Fairmont Hotels & Resorts","checkInFrom": "15:00","checkOutUntil": "12:00","petsAllowed": "YES","popularFacilities": ["Indoor swimming pool", "Non-smoking rooms", "Spa & wellness centre"],"traderName": "Accor","traderEmail": "customercare@accor.com"}
Output: room offer (one real row, selected fields)
{"rowType": "rate","hotelName": "The Savoy","checkIn": "2026-12-12","checkOut": "2026-12-15","nights": 3,"available": true,"roomName": "Deluxe Room with 2 Twin Beds","roomSizeM2": 35,"mealPlan": "BREAKFAST_EXCLUDED","roomsLeft": 3,"currency": "USD","price": 4892.53,"pricePerNight": 1630.84,"chargesExcluded": [{ "name": "20 % VAT", "amount": 815.42 }],"memberPrice": null,"cancellationText": "Free cancellation before 11 December 2026"}
Output: calendar day (one real row)
{"rowType": "calendarDay","hotelName": "The Savoy","date": "2026-11-27","available": true,"minNights": 3,"calendarPrice": 3650,"currency": "USD"}
The calendar price is Booking's own calendar figure, without deals. Use the room offer rows for what a guest pays.
3. Search: every property for a destination
Paste a destination as you'd type it on Booking.com (a city, region, country, district or landmark), or a Booking.com search results link. A link keeps its own dates, guests, filters and order.
Get one row per property: its position in the list, whether it's an ad, type, stars, score, review count, area and distance, and with dates, the all-in price, the price before a deal, the member price, free cancellation and rooms left.
| Option | Field | Default | What it does |
|---|---|---|---|
| Max results per search | maxResultsPerSearch | 100 | Up to 100,000; regions and countries are read in full |
| Sort results by | sortResultsBy | popularity | Booking's 9 orders, such as price, top reviewed or distance |
| Star rating, review score | starRatings, minReviewScore | For example 4 and 5 stars, 8+ | |
| Property types | propertyTypes | Hotels, apartments, villas and 9 more | |
| Free cancellation, meals | freeCancellationOnly, mealPlans | Breakfast, half board, all inclusive, self catering | |
| Price per night | minPricePerNight, maxPricePerNight | All-in, needs a check-in date |
Dates, guests and currency come from the same section as Hotel details. Leave the check-in date empty to list every property without prices.
Input
{"mode": "search","searches": ["Lisbon"],"checkIn": "30 days","nights": 2,"maxResultsPerSearch": 500,"currency": "USD"}
Output (one real row, selected fields)
{"rowType": "searchResult","input": "Lisbon","totalResults": 3151,"position": 1,"isAd": false,"hotelName": "LX51 Lisbon Center - Studios & Suites by APT IIN","propertyType": "Guest houses","starRating": 4,"hotelScore": 8.2,"scoreWord": "Very good","pageReviewCount": 2688,"area": "Santo Antonio, Lisbon","checkIn": "2026-11-27","nights": 2,"currency": "USD","price": 179.7,"pricePerNight": 89.85,"priceBeforeDiscount": 220.17,"badges": ["Late Escape Deal"],"roomsLeft": 1}
Every row has a mode and a rowType column, so you can split one export into tabs.
Use it from an AI agent (Claude, ChatGPT, MCP)
Connect Claude, ChatGPT, Cursor or any MCP client to Apify's MCP server with this scraper as a tool:
https://mcp.apify.com?tools=sourabhbgp/booking-scraper
Then ask in plain words. The agent fills in the input, and you pay the same per result. For example:
- "Get this month's reviews of The Savoy London and list what guests complain about."
- "What does the cheapest room at this hotel cost for every check-in date in December, 2 nights, 2 adults, in EUR?"
- "List every 4 and 5 star hotel in Lisbon under $200 a night for 2 nights from 10 December, cheapest first."
- "Where does my hotel rank in Barcelona's search, and which hotels above it are ads?"
Notes for the agent:
| Question | Mode | Minimum input |
|---|---|---|
| What do guests say about a hotel? | reviews | hotelUrls |
| What does a room cost on a date? Is it available? | hotels | hotelUrls + checkIn |
| Which properties are in a place, at what price? | search | searches + checkIn (no checkIn = no prices) |
- Keep the cost small: you pay $1.50 per 1,000 rows, so set
maxReviewsPerHotelormaxResultsPerSearchto what the question needs (20 to 100 is usually enough), and useonlyCheapestRate: truewhen only the lowest price matters. - Dates:
checkIntakes a date like2026-12-10or a period like30 daysfrom today;nightssets the stay length. A hotel with a minimum stay returnsavailable: falsefor shorter stays, so try 2 or 3 nights before calling it sold out. - Prices:
priceis the total for the whole stay, all taxes and fees included, incurrency.pricePerNightdivides it bynights.memberPrice, when set, is the Genius members' price; quotepriceto a normal guest. - Hotel input:
hotelUrlstakes a Booking.com hotel link (any language version) or Booking's numeric hotel ID, not a hotel name. If you only have the name, find the hotel's Booking.com link first, for example with a web search. - Reading the result: the run's status message starts with a code when something went short:
[U_...]means the input (for example a hotel that doesn't exist),[E_...]means our side. TheRUN_SUMMARYrecord in the run's key-value store lists every input with its own outcome. - Time: a hotel's reviews or prices take seconds; a full city or region search of thousands of properties takes minutes (about 20 seconds per 1,000).
What people use it for
- 🏨 Hotel and revenue managers: compare your rates with the competition for every date of the next 3 months.
- ⭐ Reputation teams: pull every new review each morning and answer the bad ones first.
- 📊 Market research: size a destination by property type, price level and review score.
- 📍 Distribution and OTA teams: track where a property ranks in a city's search and who's buying ads.
- 🧳 Travel startups and agents: build a catalogue with profiles, photos, scores and live prices.
- 🧪 Analysts and researchers: guest reviews by language, traveller type and date for sentiment studies.
How much does it cost?
You pay per row, and each row is charged once. Every kind of row costs the same, in every mode and on every Apify plan.
| What you get | Per 1,000 |
|---|---|
| Any row: review, hotel, room offer, calendar day or search result | $1.50 |
Each run also costs $0.002 to start.
- Free plan: your $5 monthly credit covers about 3,300 rows.
- Starter plan ($29): about 19,300 rows a month.
Limitations
- Prices are what a logged-out visitor sees. Genius members' prices come in
memberPricewhen Booking shows them, but a signed-in account can see other deals. - Search positions can change between runs. Booking shows different visitors different versions of its "Our top picks" order.
- Very large searches take time: about 20 seconds per 1,000 properties, so a country of over 170,000 properties won't fit in one hour.
- Districts, landmarks and airports stop at a few thousand properties, and the run says so; cities, regions and countries are read in full.
- Reviews are the ones Booking publishes. Each review comes in the language it was written in, without translation.
FAQ
How do I scrape Booking.com without coding?
Pick a mode, paste a hotel link or a destination, and press Start. Download the results as Excel, CSV or JSON.
Can I track Booking.com prices every day?
Yes. Save your input as a task, set the check-in date to a period such as 30 days, and add a schedule. Every run checks the stays starting from that day forward.
Can I get only new reviews?
Yes. Turn on Only new reviews since the last run and schedule the task. Each run returns, and charges, only reviews no earlier run has returned.
Do I need a proxy or a Booking.com account?
No. It works out of the box with Apify's standard proxy, and it doesn't log in.
Can I use it from code or an AI agent?
Yes. Call it through the Apify API, or connect it to an AI agent through Apify's MCP server.
Is scraping Booking.com legal?
It collects only what Booking.com shows any visitor, with no login. How you use the data is your responsibility, especially personal data such as reviewers' names.
Your feedback
Something missing or wrong? Open an issue.