Booking.com Scraper API
for hotel prices, availability, and reviews
Search Booking.com and get hotel availability as clean JSON. One request returns each property with its room, per-stay price, discount, review score, and cancellation policy, for any destination and dates, with proxies handled for you.
of requests succeed
median response
95% finish faster
per 1k hotel searches at volume
Booking.com changes overnight. Your code shouldn't care.
- A parser per page layout
- Headless browsers to keep warm
- Nulls when the markup drifts
- Retry logic for failed batches
- Fix the parsers again next week
One GET Request. That's the whole integration.
Start with just a query. Add more parameters when your use case needs them.
curl -G 'https://api.hasdata.com/scrape/booking/search' \
--data-urlencode 'keyword=Paris' \
--data-urlencode 'checkInDate=2026-06-01' \
--data-urlencode 'checkOutDate=2026-06-05' \
--data-urlencode 'rooms=1' \
--data-urlencode 'adults=2' \
--data-urlencode 'children=0' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json'keyword * Search Querysort Sort OrdercheckInDate * Check-in DatecheckOutDate * Check-out Daterooms * Roomsadults * Adultschildren * Children CountchildrenAges Children Agesprice[min] Price Minprice[max] Price Maxbedrooms Bedroomsbathrooms BathroomspropertyType[] Property Typerating[] Star RatingreviewScore[] Review ScoredistanceFromCenter[] Distance from CenterpropertyAccessibility[] Property Accessibilitymeals[] Mealsfacilities[] Hotel FacilitiesroomFacilities[] Room FacilitiesroomAccessibility[] Room AccessibilitybedPreference[] Bed PreferencereservationPolicy[] Reservation PolicyonlinePayment[] Online PaymenttravelGroup[] Travel Grouplanguage Languagecurrency Currencypage Page Numbercurl -G 'https://api.hasdata.com/scrape/booking/place' \
--data-urlencode 'url=https://www.booking.com/hotel/fr/le-bristol-paris.html' \
--data-urlencode 'checkInDate=2026-06-01' \
--data-urlencode 'checkOutDate=2026-06-05' \
--data-urlencode 'rooms=1' \
--data-urlencode 'adults=2' \
--data-urlencode 'children=0' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json'url * Property URLcheckInDate * Check-in DatecheckOutDate * Check-out Daterooms * Roomsadults * Adultschildren * Children CountchildrenAges Children Ageslanguage Languagecurrency CurrencyEvery property, one predictable schema
Each result carries the same keys, room, per-stay price, review score, and policies. Map the fields once and forget about it.
[
{
"hotelId": 54332,
"title": "Alyss Saphir Cambronne Eiffel",
"url": "https://www.booking.com/hotel/fr/alyss-saphir-cambronne-eiffel.html",
"room": "Twin Room",
"beds": 2,
"bedTypes": ["2 twin beds"],
"location": {
"locationTitle": "15th arr., Paris",
"address": "62 Rue De La Croix Nivert",
"city": "Paris",
"latitude": 48.8450976,
"longitude": 2.2973811,
"mainDistance": "2.6 miles from downtown"
},
"price": {
"pricePerStayRaw": "$431.40",
"pricePerStayParsed": 431.4,
"priceBeforeDiscountParsed": 468.92,
"currency": "USD"
},
"rating": 3,
"reviews": { "score": 8, "count": 1758, "text": "Very Good" },
"policies": { "freeCancellation": false, "noPrepayment": false }
}
]hotelId / title / url number / stringBooking.com ID, property name, and page
room / beds / bedTypes string / number / string[]Offered room, bed count, and bed layout
location objectAddress, city, coordinates, distance to center
price.pricePerStayParsed numberTotal stay price as a number
price.priceBeforeDiscountParsed numberPre-discount price when there's an offer
reviews.score / count / text number / stringReview score out of 10, count, and its label
policies objectfreeCancellation, noPrepayment, and more
// From the place endpoint: every room type for one property.
[
{
"name": "Double Room",
"roomId": "5433202",
"beds": 1,
"bedTypes": ["1 full bed"],
"facilities": ["City view", "Free WiFi", "Air conditioning"],
"variants": [
{
"guests": 2,
"conditions": ["Free cancellation"],
"prices": { "pricePerStayParsed": 431.4, "currency": "USD" }
}
]
}
]name / roomId stringRoom label and its ID
beds / bedTypes number / string[]Bed count and layout
facilities string[]What the room includes
variants[] object[]Rate options for the room
variants[].conditions string[]Cancellation and prepayment terms
variants[].prices objectParsed price for that option
// From the place endpoint: guest reviews for one property.
[
{
"title": "Affordable, amazing staff, truly great experience",
"guestName": "Caitlyn",
"averageScore": 9,
"guestType": "SOLO_TRAVELLER",
"guestCountryCode": "us",
"purposeType": "LEISURE",
"positiveText": "Friendly and helpful staff, great location near the metro..."
}
]title stringReview headline
guestName / guestType stringReviewer and traveller type
averageScore numberScore out of 10
guestCountryCode / purposeType stringReviewer origin and trip purpose
positiveText stringWhat the guest liked
// From the place endpoint: the full property profile for one hotel by URL.
{
"id": "54332",
"title": "Alyss Saphir Cambronne Eiffel",
"propertyType": "HOTEL",
"address": { "country": "France", "zipcode": "75015", "streetAddress": "62 Rue De La Croix Nivert, 15th arr., Paris", "latitude": "48.8450976", "longitude": "2.2973811" },
"description": [ { "type": "paragraph", "text": "Located in central Paris, this hotel is 0.6 mi from the Eiffel Tower..." } ],
"mostPopularFacilities": ["Non-smoking rooms", "Free WiFi", "Family rooms"],
"photos": ["https://cf.bstatic.com/xdata/images/hotel/max/abc.jpg"]
}id / title / propertyType stringBooking.com ID, property name, and type
address objectCountry, zip, street, and coordinates
description[] object[]Property description as text blocks
highlights[] object[]Callouts like "Perfect for a 4-night stay"
mostPopularFacilities string[]Top amenities for the property
photos string[]Property image URLs
// From the place endpoint: the review score broken down by category.
[
{ "label": "Average", "value": 8, "votes": 1758 },
{ "label": "Cleanliness", "value": 8.4, "votes": 1758 },
{ "label": "Location", "value": 9.1, "votes": 1758 }
]label stringRating category, e.g. Cleanliness or Location
value numberScore out of 10 for that category
votes numberHow many guests rated it
// From the place endpoint: guest questions and the property's answers.
[
{
"question": "Is there air conditioning in the rooms?",
"answer": "Dear guest, our standard rooms do not have air conditioning, but fans are available on request...",
"questionDate": "9 June 2023",
"answerDate": "9 June 2023"
}
]question stringA guest question
answer stringThe property's reply
questionDate / answerDate stringWhen each was posted
An all-in-one scraping service
Every feature you need to collect data from thousands to millions of requests.
Discover similar
scrapers and APIs
to expand your projects.
Booking.com Scraper
Travel Data • $0.75 / 1k Rows
Airbnb Scraper
Rental Listings • $0.75 / 1k Rows
Fits right into your stack.
Works with the tools you already use.
View Documentation ->Teams that deleted their scraper
Now it's the part of the pipeline they don't think about
HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.
We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.
Great web scraping API which is incredibly easy to use. It requires minimal effort to get up and running, and the documentation is very clear and helpful.
I needed to scrape some information they didn't already support, and they wrote the code for me right away, which was super nice of them.
We were particularly impressed with how easily we could integrate HasData into our existing workflow.
Plans that get cheaper at scale
Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.
Free
Startup
Business
RecommendedEnterprise
Monthly hotel search volume
Start with 100 free hotel searches. No credit card required.
Questions, answered
Both. The search endpoint takes a destination, dates, and occupancy and returns available properties. The place endpoint takes a Booking.com URL and returns one property in full. Same field names either way.
Pass checkInDate, checkOutDate, rooms, adults, and children on the request. Prices come back for exactly that stay, both a raw string and a parsed number, so no currency parsing on your side.
Per successful request, whether it's a search page or a single property. A failed request costs nothing.
Yes, a one-time trial of 100 hotel searches with every field included. No credit card required. When you're done testing, pick a plan that fits your volume.
One hotel search costs 10 credits. The unit price drops with volume, from about $2.45 down to $0.75 per 1,000 searches. Need more than the top plan covers? We'll set a custom rate.
No. Requests run on HasData's infrastructure, so there's nothing to provision or maintain. You're responsible for using the results in line with each target site's terms and applicable law.
Yes, you can cancel your subscription at any time from your dashboard in a few seconds. Once cancelled, there are no recurring payments.
Your first hotel search
is minutes away
100 hotel searches free · no credit card