Booking.com Hotel Prices avatar

Booking.com Hotel Prices

Pricing

from $1.40 / 1,000 hotel scrapeds

Go to Apify Store
Booking.com Hotel Prices

Booking.com Hotel Prices

One search, one flat table: hotel name, id, address, lowest all-in price for the stay, star rating, review score and count, and the booking URL.

Pricing

from $1.40 / 1,000 hotel scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

One search in, one flat table out. Give it a destination and a date; it returns the hotels Booking.com would show you, each with its lowest all-in price for the whole stay in the currency you asked for, its star rating, its guest review score and review count, and the URL of the property page.

Built to be called by an agent or a script: small input, small output, one row per hotel, no nested objects, no HTML.

Input

fielddefaultmeaning
destinationrequiredCity, region, district or landmark: Bangkok, Osaka, Bali, Times Square
checkIn30 days outCheck-in date, YYYY-MM-DD
nights1Length of stay; check-out is derived from it
adults2Adult guests the prices are quoted for
rooms1Rooms requested
children, childAges0, []Children, and one age per child
currencyUSDThree-letter code the prices are quoted in
maxResults50Stop after this many hotels have been delivered
includeUnpricedfalseAlso emit properties with nothing bookable, at a null price

Output

One item per hotel:

fieldmeaning
hotel_idBooking's numeric property id, stable across searches
nameProperty name as Booking displays it
urlProperty page on booking.com
areaStreet address as Booking prints it on the card
cityCity as Booking classifies the property — see the note below
country_codeTwo-letter country code, e.g. th
star_ratingOfficial star rating, 1-5
review_scoreBooking guest score out of 10
review_countNumber of guest reviews behind that score
total_priceLowest all-in price for the whole stay, not per night
currencyCurrency total_price is quoted in
check_in, check_out, nights, adults, roomsThe search the prices belong to
requested_destinationThe destination string you sent, echoed back
resolved_destination, resolved_country_code, resolved_ufiThe place Booking actually searched
destination_matchedfalse when Booking searched somewhere other than what you asked for

total_price is the whole stay

Booking's search cards quote a total for the dates, so that is what this returns. It is not divided by nights to make a nightly rate, because a stay whose rate changes from night to night has no single nightly price and inventing one would be wrong for exactly the bookings people care about. Divide it yourself if an approximate nightly figure is what you need.

Always check destination_matched

Booking resolves free text on its own side and answers nearly any string with some place, so a typo or a bad input can produce a complete, successful, charged run about somewhere else. This actor cannot refuse that outright without also refusing legitimate variants — Booking files "Koh Samui" as "Ko Samui" and answers a city name with the surrounding region — so instead every row says what you asked for and what it got. When destination_matched is false, read resolved_destination before trusting the prices.

A destination Booking cannot place at all is not silently swapped for another: the run ends with no items and says so.

city is not reliably in English

Measured 2026-08-25: the same Bangkok search answered Bangkok on one request and กรุงเทพมหานคร minutes later, with an English language setting on both. Booking localises this field to the property's own language some of the time, and no request-side setting changes it. It is passed through exactly as sent rather than transliterated, because a guessed translation would put an invented value in a column you might join on. resolved_destination is consistently in the requested language — group by that.

Nulls are never zeros

A property with nothing bookable for those dates has total_price: null and currency: null, and by default is not emitted at all. A property nobody has reviewed yet has review_score: null and review_count: null. None of these ever come back as 0, because a 0 would read as a measurement — "free", or "rated nought" — which is the one thing it never means.

Use a residential proxy

Booking.com sits behind an AWS WAF. A challenged request comes back as HTTP 202 carrying a JavaScript proof-of-work instead of data, and no HTTP client can solve it — only a different exit address clears it. The input's default proxy configuration is RESIDENTIAL, and it should be left that way. The actor rotates its exit address before every retry, which is the thing that actually clears a block; re-asking from the blocked address never does.

What it costs

Pay per event: a small charge when the run starts, and one charge per hotel row delivered. Properties skipped for having no price are not charged for, and a hotel that appears on two pages is charged once. A run rejected for a malformed date is not charged the start event at all.