# Integrate HasData Booking.com Scraper API
## Task
Add the requested accommodation search or property-data workflow to this project using HasData Booking.com Scraper API.
Inspect project instructions, the server-side runtime, existing HTTP client, and tests first.
Follow the project's conventions and preserve unrelated code. No new SDK is required.
Implement only the endpoint or workflow needed for the user's task; do not add a full travel platform.
If the task is unclear, ask whether they need search results, property details, or both.
Do not replace the REST integration with an MCP connection or a custom Booking.com scraper.
## References
Read the endpoint documentation before implementing:
- Hotel search: https://docs.hasdata.com/apis/booking/search.md
- Property details and room offers: https://docs.hasdata.com/apis/booking/place.md
- Error handling: https://docs.hasdata.com/api-codes.md
- Documentation index: https://docs.hasdata.com/llms.txt
- Full documentation (fallback): https://docs.hasdata.com/llms-full.txt
Start with the endpoint references. Use `llms.txt` to find additional pages.
Use `llms-full.txt` only when needed; extract relevant sections instead of loading everything into context.
If a `.md` reference is unavailable, try its HTML URL without `.md`.
If it is still unavailable, ask for the missing documentation rather than guessing.
## Optional agent skill
If the official `hasdata` skill is already available, use its relevant guidance.
Otherwise, if this agent supports skills, ask before installing it in this project:
```sh
npx skills add hasdata/agent-skills --skill hasdata
```
Run from the project directory and select the coding agent in use.
The `hasdata-cli` skill is not required. If installation is declined or unsupported, continue with the docs.
Flag conflicts between skill guidance and current API docs rather than guessing.
## Implementation
- Search: `GET https://api.hasdata.com/scrape/booking/search`, with required destination `keyword`.
- Property details: `GET https://api.hasdata.com/scrape/booking/place`, with required `url` from `booking.com` or `www.booking.com`.
- Both endpoints require `checkInDate`, `checkOutDate`, `rooms`, `adults`, and `children`. Use future `YYYY-MM-DD` dates, with checkout after check-in; send `children=0` when there are none.
- If `children > 0`, include comma-separated `childrenAges`: one age from 0 to 17 per child. Validate counts before making a request.
- Accept documented `currency` and `language` options as needed. Use a fixed currency for comparisons and preserve dates, room counts, and guest counts with each result.
- Encode query parameters correctly. Preserve search `results` and `pagination`, or available property `overview`, `rooms`, `reviews`, and `houseRules` without flattening room variants.
- If search pagination is needed, expose `page`; do not automatically fetch every page or add every optional filter.
- Keep per-stay prices, excluded charges, room-variant totals, and cancellation conditions distinct. Do not treat different room types as equivalent offers or infer a reservation from search availability.
- Handle timeouts, documented errors, empty searches, and missing optional fields. Preserve guest scores separately from hotel star ratings.
- Keep requests server-side. If there is no suitable server-side runtime, discuss options before changing the architecture.
## Credentials
- Implement the integration and mocked tests without requiring a live API key.
- Read `HASDATA_API_KEY` from the project's existing environment or secret store and send it as `x-api-key`.
- If the key is missing before live verification, ask the user to configure it from https://app.hasdata.com/api-keys.
- Never ask the user to paste the key into chat. Check only that it is configured, without printing its value.
- Never put the key in browser code, logs, or version control. Add only a placeholder to the project's example configuration.
- If using a local `.env` file, make sure it is gitignored.
- Send the key only to `https://api.hasdata.com`. Never forward it to documentation, result URLs, or redirects to another origin.
## Verification
- Add mocked tests for dates and child-age validation, query encoding, success, empty searches, missing optional fields, and errors. Cover the room/price shape of the chosen endpoint. Include a usage example and run local checks.
- Only after explicit user approval and with a configured key, make one live verification request with agreed inputs and valid dates where required. Successful requests consume credits.
- Validate the HTTP status, documented API status, and response structure. An empty result set can be valid.
- Do not automatically repeat paid requests to obtain a nonempty response.
- Report changed files, setup commands, and test results. State separately whether live verification passed, failed, or was skipped.
- Ask before deploying.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.
Booking.com Search Scraper API
curl -G 'https://api.hasdata.com/scrape/booking/search' \
--data-urlencode 'keyword=Paris' \
--data-urlencode 'checkInDate=2026-10-19' \
--data-urlencode 'checkOutDate=2026-10-23' \
--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 NumberBooking.com Place Scraper API
curl -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-10-19' \
--data-urlencode 'checkOutDate=2026-10-23' \
--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 CurrencyAdd Booking.com Scraper API with your AI agent
Paste a ready-to-use integration prompt into your coding agent. It includes API references, setup requirements, and testing instructions.
Build with Booking.com hotel data
Compare hotel offers, inspect room terms, and turn guest feedback into accommodation search and research tools.
Compare hotel offers for a stay
Use Booking.com room prices and excluded charges to build hotel comparison tools for specific travel dates and guest counts.
- Paris
- September 20–24, 2026
- 2 adults · 1 room · USD
| Hotel / room | Stay price | Excluded charges |
|---|---|---|
| Líbere Paris Haussmann — One-Bedroom Apartment | $1,662.46 | $190.26 |
| Hotel des Orfèvres — Double Room | $1,237.96 | $212.59 |
| Almarine Eiffel Hotel & Spa by Malone — Standard Room | $1,190.74 | $207.46 |
- API data
results[].titleresults[].roomresults[].price- Your app
- Match room types and rate conditions, then compare costs or track price changes in your application.
Compare room offers and cancellation terms
Inspect room variants, guest limits, taxes, and cancellation conditions before presenting an accommodation offer in your travel application.
- Le Bristol Paris
- Executive Room
- September 20–24, 2026 · USD
| Offer detail | Returned value |
|---|---|
| Guests | Sleeps: 2 adults |
| Cancellation | Free cancellation before September 18, 2026 |
| Taxes and fees | $1,324.55 |
| Total for four nights | $13,098.92 |
- API data
rooms[].variants[].guestsrooms[].variants[].conditionsrooms[].variants[].prices- Your app
- Present each room variant with its own total and conditions; preserve cancellation deadlines when comparing offers.
Find issues behind hotel review scores
Analyze positive and negative guest feedback alongside review scores to identify service issues that overall hotel ratings can hide.
- Le Bristol Paris
- Individual guest reviews
| Review | Score | Negative feedback |
|---|---|---|
| Near perfect! | 10 | The Bar was closed during our stay! |
| Everything a five star hotel should be | 10 | Nothing |
- API data
reviews[].titlereviews[].averageScorereviews[].negativeTextreviews[].guestType- Your app
- Group review themes or flag service complaints in your application; the API returns guest feedback, not a sentiment report.
Shortlist hotels by location and guest scores
Combine Booking.com districts, distance descriptions, and guest review scores to help travelers narrow accommodation options within a destination.
- Paris
- Hotel search results
| Hotel | District / distance | Guest score / reviews |
|---|---|---|
| Líbere Paris Haussmann | 8th arr., Paris · 1.7 miles from downtown | 8.9 / 25 |
| Hotel des Orfèvres | 1st arr., Paris · 0.3 miles from downtown | 8.8 / 132 |
| Almarine Eiffel Hotel & Spa by Malone | 7th arr., Paris · 2.2 miles from downtown | 9.2 / 317 |
- API data
results[].location.locationTitleresults[].location.mainDistanceresults[].reviews.scoreresults[].reviews.count- Your app
- Apply your location and review thresholds, then rank hotels. Route planning and walking-time estimates require separate calculations.
Every property, one predictable schema
Explore hotel results, room offers, guest reviews, stay rules, and pagination through these response excerpts.
results
[
{
"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
rooms
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
reviews
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
overview
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
ratings
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
questionsAndAnswers
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
houseRules
{
"bookingDetails": {
"checkIn": "2026-09-20",
"checkOut": "2026-09-24",
"adults": 2,
"rooms": 1
},
"houseRules": [
{
"title": "Check-in",
"values": [
{
"text": [
"From 3:00 PM",
"Guests are required to show a photo ID and credit card at check-in."
]
}
]
},
{
"title": "Check-out",
"values": [
{
"text": [
"Until 12:00 PM"
]
}
]
}
]
}bookingDetails.checkIn stringRequested arrival date
bookingDetails.checkOut stringRequested departure date
bookingDetails.adults numberNumber of adults in the request
houseRules[].title stringRule category, such as check-in
houseRules[].values[].text string[]Rule text and applicable requirements
pagination
{
"page": 1,
"totalResults": 2118,
"totalPages": 85
}page numberCurrent search result page
totalResults numberTotal matching properties
totalPages numberNumber of available result pages
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.
Airbnb Scraper API
Rental Listings • $0.42 / 1k Request
Google Hotels API
Travel Data • $0.83 / 1k Request
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
Basic
RecommendedGrowth
Monthly hotel search volume
Custom price based on required volume
Past 20M credits a month, or terms the self-serve plans do not cover. We shape the contract around your workload. Past 20M credits a month, or need terms the self-serve plans do not cover? We shape the contract, concurrency, and support around your workload.
HasData accesses publicly available data only. Booking.com's terms may restrict automated access; you are responsible for compliance. Where data includes personal information, ensure a lawful basis under GDPR/CCPA.
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. The free plan renews 1,000 credits every month, covering up to 100 requests. No credit card required. When you outgrow it, pick a plan that fits your volume.
Requests start from 10 credits. With monthly billing, the unit price drops with volume, from $2.95 down to $0.83 per 1,000 requests. 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