Booking.com Scraper: Reviews, Room Prices & Search avatar

Booking.com Scraper: Reviews, Room Prices & Search

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Booking.com Scraper: Reviews, Room Prices & Search

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

Sourabh Kumar

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

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 wantmodePaste into
Every guest review of a hotel, with its scoresreviewshotelUrls (hotel links or IDs)
A hotel's profile, room offers with all-in prices, and its availability calendarhotelshotelUrls (hotel links or IDs)
Every property a search lists, with its place in the list and its pricesearchsearches (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, price is what everyone pays and memberPrice holds 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.

OptionFieldDefaultWhat it does
Max reviews per hotelmaxReviewsPerHotel1000 returns only the summary row
Sort reviews bysortReviewsByNEWEST_FIRSTAlso OLDEST_FIRST, MOST_RELEVANT, SCORE_DESC, SCORE_ASC
Reviewed on or after / beforereviewedDateFrom, reviewedDateToA date, or a period such as 7 days for scheduled runs
Traveller typetravellerTypeALLCouples, families, solo, friends or business
Review scorereviewScoreALLSuperb, good, passable, poor or very poor
Review languagesreviewLanguagesallReviews always come in the language they were written in
Reviews mentioningreviewTextA word or phrase, for example breakfast
Only new reviewsonlyNewReviewsfalseSkips 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.

OptionFieldDefaultWhat it does
Check-in datecheckInA date, or a period such as 30 days. Empty = hotel profile only
Nightsnights1Length of each stay, up to 30
Check-in dates to checkcheckInDays1Up to 90 consecutive dates in one run
Adults, rooms, children's agesadults, rooms, childrenAges2, 1Ages change which rooms Booking offers
CurrencycurrencyUSDRows also carry the hotel's own currency
Cheapest offer onlyonlyCheapestRatefalseOne row per date: the lowest all-in price for your guests
Availability calendar dayscalendarDays0One 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.

OptionFieldDefaultWhat it does
Max results per searchmaxResultsPerSearch100Up to 100,000; regions and countries are read in full
Sort results bysortResultsBypopularityBooking's 9 orders, such as price, top reviewed or distance
Star rating, review scorestarRatings, minReviewScoreFor example 4 and 5 stars, 8+
Property typespropertyTypesHotels, apartments, villas and 9 more
Free cancellation, mealsfreeCancellationOnly, mealPlansBreakfast, half board, all inclusive, self catering
Price per nightminPricePerNight, maxPricePerNightAll-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:

QuestionModeMinimum input
What do guests say about a hotel?reviewshotelUrls
What does a room cost on a date? Is it available?hotelshotelUrls + checkIn
Which properties are in a place, at what price?searchsearches + checkIn (no checkIn = no prices)
  • Keep the cost small: you pay $1.50 per 1,000 rows, so set maxReviewsPerHotel or maxResultsPerSearch to what the question needs (20 to 100 is usually enough), and use onlyCheapestRate: true when only the lowest price matters.
  • Dates: checkIn takes a date like 2026-12-10 or a period like 30 days from today; nights sets the stay length. A hotel with a minimum stay returns available: false for shorter stays, so try 2 or 3 nights before calling it sold out.
  • Prices: price is the total for the whole stay, all taxes and fees included, in currency. pricePerNight divides it by nights. memberPrice, when set, is the Genius members' price; quote price to a normal guest.
  • Hotel input: hotelUrls takes 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. The RUN_SUMMARY record 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 getPer 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 memberPrice when 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.

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.