Booking.com Scraper - Hotel Prices, Availability & Reviews avatar

Booking.com Scraper - Hotel Prices, Availability & Reviews

Pricing

from $0.85 / 1,000 hotel delivereds

Go to Apify Store
Booking.com Scraper - Hotel Prices, Availability & Reviews

Booking.com Scraper - Hotel Prices, Availability & Reviews

Scrape Booking.com without login: hotels for any destination and dates with 50+ fields (total and nightly price, rating, reviews, stars, distance, room, free cancellation, breakfast, coordinates), plus guest reviews of any hotel. US$ 3.50 per 1,000 hotels, errors free.

Pricing

from $0.85 / 1,000 hotel delivereds

Rating

0.0

(0)

Developer

Scrapewise Data

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Booking.com Scraper

Booking.com Scraper turns Booking.com search results and guest reviews into clean JSON, CSV or Excel, without login or cookies. Give it destinations and dates and get every property's total price and price per night, currency, guest rating, number of reviews, stars, address, coordinates, distance from the center, room type, free cancellation, breakfast, deals and photo. Give it hotel links and get the guest reviews: score, title, what guests liked and disliked, language, date, country, traveler type, room and the hotel's reply.

US$ 1.00 per 1,000 hotels. US$ 0.429 per 1,000 reviews. No monthly fee, no start fee. Error rows are free.

At a glance

  • Price per 1,000 hotels: US$ 1.00 (down to US$ 0.85 on Gold and above), no run start fee
  • Search: Any city, region, neighborhood or landmark; check-in and check-out or number of nights; adults, children ages, rooms; any currency and language
  • Price: Total for the stay and per night, price before discount, taxes and fees note, deal badges
  • Filters: Star class, minimum guest rating, free cancellation, breakfast included, hotels only, plus any Booking.com nflt filter
  • Sort: Booking.com's own orders: top picks, price, rating, stars, distance
  • Depth: Up to about 2,000 properties per destination; every review of a hotel
  • Fields: 50+ per hotel row, 20+ per review row
  • Error rows: Free, with an errorCode

One real row

Lisbon, 2026-11-10 to 2026-11-13, 2 adults, in USD (collected on 2026-09-30):

{
"type": "hotel",
"destination": "Lisbon",
"destinationName": "Lisbon",
"destinationType": "CITY",
"position": 5,
"hotelId": 8306313,
"name": "LR Guest House",
"url": "https://www.booking.com/hotel/pt/lr-guest-house.html",
"address": "Rua Norte 83 - 1º",
"city": "Lisboa",
"countryCode": "PT",
"latitude": 38.7120805,
"longitude": -9.1438114,
"neighborhood": "Misericordia, Lisbon",
"distanceFromCenter": "0.3 miles from downtown",
"publicTransport": "Restauradores station is within 450 yards",
"stars": 4,
"reviewScore": 9.7,
"reviewScoreWord": "Exceptional",
"reviewCount": 895,
"priceTotal": 485.95,
"pricePerNight": 161.98,
"currency": "USD",
"roomType": "Double Room with Private External Bathroom",
"beds": 1,
"freeCancellation": true,
"freeCancellationUntil": "2026-10-10T23:00:00Z",
"breakfastIncluded": true,
"mealPlan": "Breakfast included",
"roomsLeft": "We have 1 left at this price",
"preferredPartner": true,
"imageUrl": "https://cf.bstatic.com/xdata/images/hotel/square600/634313208.jpg?k=c54d89dc1a031abaa1defc16e3f60d5769ac32532379730222e93b50ef4d9ae3&o=",
"checkIn": "2026-11-10",
"checkOut": "2026-11-13",
"nights": 3,
"adults": 2,
"rooms": 1
}

A review row from the same run:

{
"type": "review",
"reviewId": "8fc748a831ac2dd6",
"hotelName": "LX Living by Mirabilis",
"hotelUrl": "https://www.booking.com/hotel/pt/mirabilis-apartments-lx-living.html",
"rating": 9,
"title": "The most perfect apartment",
"positive": "The apartment was clean and modern with a big balcony. Lots of storage and sockets by the bed. Facilities were excellent, bathroom was big and well equipped. Was simple to contact reception via WhatsApp at any time. Very quiet area in general. We also broke a plate by accident and they were very understanding.",
"negative": "The pool was a little dirty and some of the paint was missing at the bottom. The location was a bit further away than I thought but I would have walked it if the temperature wasnt so high.",
"language": "en",
"reviewedAt": "2026-09-29T20:59:10Z",
"reviewerName": "Louise",
"reviewerCountry": "Ireland",
"travelerType": "Solo traveler",
"roomType": "Apartment with Balcony",
"stayCheckIn": "2026-09-22",
"stayCheckOut": "2026-09-25",
"nights": 3,
"hotelReply": null
}

What you can do with it

  • Price monitoring and rate shopping: schedule the same destination and dates every day and watch how prices, deals and availability move.
  • Market research for hotels and short-term rentals: supply, star mix, ratings and price per night for any city or neighborhood.
  • Travel deals and content: cheapest well-rated stays with free cancellation or breakfast, with coordinates for maps.
  • Reputation and guest feedback: what guests like and dislike about your property and your competitors, by language and traveler type.
  • Datasets for AI and sentiment analysis: liked and disliked text split by the guests themselves, with score and language on every row.

Input

FieldWhat it does
destinationsCities, regions, neighborhoods or landmarks (Lisbon, Algarve, Manhattan, Eiffel Tower)
maxItemsHotels per destination, default 50
checkIn, checkOutYYYY-MM-DD. Empty check-in = 30 days from today; empty check-out = check-in plus nights
nightsDefault 1, used when check-out is empty
adults, childrenAges, roomsGuests and rooms, as on the site
currency, languageAny Booking.com currency (USD, EUR, GBP, BRL...) and language (en-us, pt-br, de...)
sortBypopularity (default), price, price_from_high_to_low, review_score_and_price, bayesian_review_score, class, class_asc, distance_from_search, upsort_bh
starRatings, minReviewScoreFor example ["4", "5"] and "8"
freeCancellationOnly, breakfastIncluded, hotelsOnlyBooking.com's own filters
rawFiltersAny nflt value from a Booking.com search link, such as ht_id=201;distance=1000
hotelUrlsBooking.com hotel links, for guest reviews
maxReviewsReviews per hotel, default 50
reviewsSortByNEWEST_FIRST (default), MOST_RELEVANT, OLDEST_FIRST, SCORE_DESC, SCORE_ASC
reviewLanguages, travelerType, reviewsPublishedAfterReview filters
compareWithPreviousRun, onlyChangedPrice tracking between runs for hotel searches, see Schedule it daily
{ "destinations": ["Lisbon", "Porto"], "checkIn": "2026-11-10", "checkOut": "2026-11-13", "adults": 2, "currency": "EUR", "minReviewScore": "8", "freeCancellationOnly": true, "maxItems": 300 }
{ "hotelUrls": ["https://www.booking.com/hotel/pt/mirabilis-apartments-lx-living.html"], "maxReviews": 500, "reviewsSortBy": "SCORE_ASC", "reviewLanguages": ["en"] }

Schedule it daily: a price monitor

Save a destination search as a Task with fixed dates, turn on compareWithPreviousRun and onlyChanged, and attach a daily Schedule. Every run checks the same hotels and delivers, and charges, only the hotels that are new for this search or whose price for the stay moved since the previous run. A day with no change costs nothing for results and returns one free row per destination with errorCode: NO_PRICE_CHANGES.

{ "destinations": ["Lisbon"], "checkIn": "2026-12-18", "checkOut": "2026-12-21", "adults": 2, "currency": "EUR", "sortBy": "price", "maxItems": 200, "compareWithPreviousRun": true, "onlyChanged": true }

Each hotel row then carries previousPrice and previousSeenAt (the priceTotal in the previous run that saw it, and when), priceChange and priceChangePct, isNew (first time in this search), isNewLowest and lowestSeenPrice (lowest price seen so far), and firstSeenAt.

  • The history lives in a key-value store on your own account, booking-scraper-price-history, one record per search (destination, dates, guests, rooms, currency, sort and filters). Inspect it in the Console, or delete it to start over.
  • Unchanged hotels are checked but not saved and not charged, and maxItems still counts the hotels checked, so you pay only for the rows you get.
  • sortBy: price keeps the same hotels in the result from day to day; the default order shuffles between pages. A hotel that leaves the result stays in the history for 90 days and does not come back as new.
  • Leave out the dates and the default (30 days from today) moves every day, so every run is a new search. Reviews are not price-tracked and are delivered as usual.

Output fields

Hotel rows (type: "hotel")

destination, destinationName, destinationType, position, hotelId, name, url, address, city, countryCode, latitude, longitude, neighborhood, distanceFromCenter, publicTransport, beachDistance, stars, starsType, reviewScore, reviewScoreWord, reviewCount, priceTotal, pricePerNight, currency, priceBeforeDiscount, taxesAndFees, deals, roomType, unitType, bedrooms, bathrooms, beds, area, freeCancellation, freeCancellationUntil, noPrepayment, breakfastIncluded, mealPlan, roomsLeft, soldOut, isAd, preferredPartner, newlyOpened, imageUrl, checkIn, checkOut, nights, adults, children, rooms.

priceTotal is the price for the whole stay as Booking.com shows it; pricePerNight is that total divided by the nights. starsType is official for hotel stars, booking_quality for the squares Booking.com gives apartments and homes, otherwise the site's own value.

Review rows (type: "review")

reviewId, hotelId, hotelName, hotelUrl, rating (1 to 10), title, positive, negative, language, reviewedAt, reviewerName, reviewerCountry, reviewerCountryCode, travelerType, roomType, stayCheckIn, stayCheckOut, nights, stayStatus, helpfulVotes, hotelReply.

Only what Booking.com shows publicly about the guest: display name, country and traveler type. Never photos, avatars or profile links. Many Booking.com reviews are a score without text; they still come as rows.

Error codes (never charged)

errorCodeMeaning
NOT_FOUNDBooking.com did not recognize the destination, or the hotel page does not exist
NO_RESULTSNo property for these dates, guests and filters, or no review for these filters
INVALID_INPUTA date in the past, check-out before check-in, a link that is not a Booking.com hotel, or a value the Actor does not understand
BLOCKEDBooking.com refused the request after retries; run again
NO_PRICE_CHANGESWith onlyChanged: every hotel of this search was checked and none is new or changed price since the previous run
NOT_REACHED, UNEXPECTEDThe run timeout arrived, or something unforeseen broke; only that input is lost

Pricing

EventPer 1,000
Hotel deliveredUS$ 1.00
Review deliveredUS$ 0.429

300 hotels for three cities cost US$ 0.30; 500 reviews cost about US$ 0.21. Duplicates and error rows are free, and there is no Apify compute bill on top.

FAQ

Is it legal to scrape Booking.com? This Actor reads only what Booking.com shows to any logged-out visitor: public search results and public guest reviews, with no login, no cookies and no bypass of any access control. About guests it keeps only what the review page itself displays (display name, country, traveler type), never photos, avatars or profile links. Collecting public data for price monitoring, research and analysis is common practice, but how you store, share and use the data, including any personal data in reviews, is your responsibility: check Booking.com's terms and the laws that apply to you.

Why are there no Genius prices? Genius and other member rates only appear to visitors logged into a Booking.com account. This Actor never logs in, so it returns the public price every visitor sees for those dates, guests and currency, which is also the price comparison sites and your competitors see.

How far ahead can I search? The Actor sets no limit of its own: any check-in from today onwards that Booking.com's own calendar accepts works, and a stay can be up to 90 nights (Booking.com's maximum). A check-in in the past or a check-out before check-in comes back as a free INVALID_INPUT row; with no dates, the Actor searches 30 days from today for 1 night.

Can it alert me when a hotel gets cheaper? Yes: save a Task with fixed dates, turn on compareWithPreviousRun and onlyChanged and schedule it daily. Each run delivers only the hotels whose price moved, with previousPrice, priceChange and isNewLowest; connect the Task to Slack, e-mail or Google Sheets and filter on priceChange < 0.

How do I get the nflt filter from a Booking.com link? Set your filters on booking.com, then copy the page address: the part after nflt= is the filter string, for example nflt=ht_id%3D201%3Bdistance%3D1000. Paste it into rawFilters as is or decoded (ht_id=201;distance=1000); both work, and it is combined with the filters above. Useful for property types, districts, facilities and distance filters that have no field of their own.

Limitations

  • Booking.com lists about 1,000 properties per search order. With the default order the Actor adds passes sorted by price to reach up to about 2,000 per destination; for more, split the search with filters (stars, property type, neighborhoods).
  • Prices are what Booking.com shows a logged-out visitor for the chosen dates, guests and currency. Genius and member prices are not included.
  • Hotel page details (full description, all facilities, room table) are not part of this version.
  • This Actor reads public data only and respects the site's terms.

Changelog

  • 2026-10-04: price tracking between runs for hotel searches. compareWithPreviousRun adds previousPrice, priceChange, priceChangePct, isNew, isNewLowest, lowestSeenPrice, firstSeenAt and previousSeenAt, from a history kept in your own key-value store; onlyChanged delivers, and charges, only new hotels and price changes, for daily scheduled monitors.
  • 2026-09-30, 0.1: first release. Hotels by destination and dates with prices, rating, stars, location, room and policies; filters and sort orders; guest reviews by hotel link with language, traveler type and date filters; free error rows.