HasData
Scraper API

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.

SUCCESS
99.9%

of requests succeed

P50
1.3s

median response

P95
1.6s

95% finish faster

PRICE
$0.83

per 1k hotel searches at volume

Stop maintaining scrapers

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 integration commit replaces a backlog you’ll never finish.
scraper | git log
✗ hotfix: markup changed, nulls in price
✗ fix: selector drift after redesign
✗ fix: headless Chrome OOM under load
✗ chore: bump browser pool memory
✗ fix: nested JSON path changed again
✗ hotfix: date parser breaks on locales
✗ fix: pagination broke after redesign
✗ chore: re-run failed batch overnight
✗ fix: currency field moved again
✗ fix: retry storm on timeouts
✗ hotfix: markup changed, nulls in price
✗ fix: selector drift after redesign
✗ fix: headless Chrome OOM under load
✗ chore: bump browser pool memory
✗ fix: nested JSON path changed again
✗ hotfix: date parser breaks on locales
✗ fix: pagination broke after redesign
✗ chore: re-run failed batch overnight
✗ fix: currency field moved again
✗ fix: retry storm on timeouts
✗ hotfix: markup changed, nulls in price
✗ fix: selector drift after redesign
✗ fix: headless Chrome OOM under load
✗ chore: bump browser pool memory
✗ fix: nested JSON path changed again
✗ hotfix: date parser breaks on locales
✗ fix: pagination broke after redesign
✗ chore: re-run failed batch overnight
✗ fix: currency field moved again
✗ fix: retry storm on timeouts
✗ hotfix: markup changed, nulls in price
✗ fix: selector drift after redesign
✗ fix: headless Chrome OOM under load
✗ chore: bump browser pool memory
✗ fix: nested JSON path changed again
✗ hotfix: date parser breaks on locales
✗ fix: pagination broke after redesign
✗ chore: re-run failed batch overnight
✗ fix: currency field moved again
✗ fix: retry storm on timeouts
✓ feat: integrate HasData API
Code Examples

One GET Request. That's the whole integration.

Start with just a query. Add more parameters when your use case needs them.

request example
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 Query
Free-text destination query. Usually a city, region or neighborhood (e.g. `Paris`, `Manhattan, New York`); a specific property name is also accepted.
sort Sort Order
Sort order applied by Booking.com to the results page.
checkInDate * Check-in Date
Check-in date in `YYYY-MM-DD` format. Must be in the future and earlier than `checkOutDate`.
checkOutDate * Check-out Date
Check-out date in `YYYY-MM-DD` format. Must be later than `checkInDate`.
rooms * Rooms
Number of rooms to book.
adults * Adults
Number of adult guests across all rooms.
children * Children Count
Number of child guests across all rooms (0–10). Pass `0` if there are no children.
childrenAges Children Ages
Comma-separated list of child ages, one entry per child (each `0`–`17`). Required when `children > 0` and the number of ages must equal `children`. Example: `1,3,7`
price[min] Price Min
Minimum total price for the stay, in the requested `currency`. Must be `>= 10`. Required if `price[max]` is omitted.
price[max] Price Max
Maximum total price for the stay, in the requested `currency`. Must be `>= 20` and greater than `price[min]`. Required if `price[min]` is omitted.
bedrooms Bedrooms
Minimum number of bedrooms in the property.
bathrooms Bathrooms
Minimum number of bathrooms in the property.
propertyType[] Property Type
Filter by property type. Multiple values are combined with OR.
rating[] Star Rating
Filter by official star rating. Multiple values are combined with OR.
reviewScore[] Review Score
Filter by minimum guest review score bucket. Multiple values are combined with OR.
distanceFromCenter[] Distance from Center
Filter by distance from the destination center. Multiple values are combined with OR.
propertyAccessibility[] Property Accessibility
Filter by property-level accessibility features. Multiple values are combined with OR.
meals[] Meals
Filter by available meal plans. Multiple values are combined with OR.
facilities[] Hotel Facilities
Filter by property-level facilities. Multiple values are combined with OR.
roomFacilities[] Room Facilities
Filter by in-room facilities. Multiple values are combined with OR.
roomAccessibility[] Room Accessibility
Filter by in-room accessibility features. Multiple values are combined with OR.
bedPreference[] Bed Preference
Filter by bed configuration. Multiple values are combined with OR.
reservationPolicy[] Reservation Policy
Filter by reservation flexibility. Multiple values are combined with OR.
onlinePayment[] Online Payment
Filter by online payment options.
travelGroup[] Travel Group
Filter by travel-group oriented stay options. Multiple values are combined with OR.
language Language
Language of the Booking.com interface and localized fields in the response.
currency Currency
Currency of the prices returned in the response. Use `hotelCurrency` to keep each property's native currency.
page Page Number
Page number of the search results. Booking.com returns 25 results per page; pass `2` for results 26–50, `3` for 51–75, etc.
TRY ALL 28 PARAMETERS FREE
AI Integration

Add 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.

booking-integration.md
# 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.

Use Cases

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
Four-night hotel offers Hotel offers
Four-night hotel offers — Hotel offers
Hotel / roomStay priceExcluded 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.
Explore response fields

Captured September 16, 2026, for 0 children. Room types differ; stay prices exclude the charges shown. These are not guaranteed bookable rates.

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
Executive Room: one returned variant Room offer
Executive Room: one returned variant — Room offer
Offer detailReturned value
GuestsSleeps: 2 adults
CancellationFree 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.
Explore response fields

Saved September 16, 2026, for 2 adults, 1 room, and 0 children. Prices and cancellation deadlines can change; this API does not reserve rooms.

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
Feedback behind two 10/10 reviews Guest feedback
Feedback behind two 10/10 reviews — Guest feedback
ReviewScoreNegative feedback
Near perfect!10The Bar was closed during our stay!
Everything a five star hotel should be10Nothing
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.
Explore response fields

Individual guest opinions from a saved response, not evidence that an issue affects every stay or remains current.

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
Location and guest rating signals Location shortlist
Location and guest rating signals — Location shortlist
HotelDistrict / distanceGuest score / reviews
Líbere Paris Haussmann8th arr., Paris · 1.7 miles from downtown8.9 / 25
Hotel des Orfèvres1st arr., Paris · 0.3 miles from downtown8.8 / 132
Almarine Eiffel Hotel & Spa by Malone7th arr., Paris · 2.2 miles from downtown9.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.
Explore response fields

Distances are straight-line distances to downtown, not walking routes. Guest review scores are separate from hotel star ratings.

Response

Every property, one predictable schema

Explore hotel results, room offers, guest reviews, stay rules, and pagination through these response excerpts.

results.json
[
  {
    "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 }
  }
]
Fields in results
hotelId / title / url number / string

Booking.com ID, property name, and page

room / beds / bedTypes string / number / string[]

Offered room, bed count, and bed layout

location object

Address, city, coordinates, distance to center

price.pricePerStayParsed number

Total stay price as a number

price.priceBeforeDiscountParsed number

Pre-discount price when there's an offer

reviews.score / count / text number / string

Review score out of 10, count, and its label

policies object

freeCancellation, noPrepayment, and more

What We Offer

An all-in-one scraping service

Every feature you need to collect data from thousands to millions of requests.

Loved by developers

Teams that deleted their scraper

Now it's the part of the pipeline they don't think about

4.8 ★★★★★
across 100+ reviews on 5 platforms
Trustpilot Trustpilot ★★★★★

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.

Denver Sinclair
Denver Sinclair
Capterra Capterra ★★★★★

We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.

JN
Jacob N.
Trustpilot Trustpilot ★★★★★

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.

Arnold Foster
Arnold Foster
Trustpilot Trustpilot ★★★★★

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.

Hussein Ali
Hussein Ali
Clutch Clutch ★★★★★

We were particularly impressed with how easily we could integrate HasData into our existing workflow.

TB
Taras Bazyshyn
CEO at BAZTDL Sp. z o.o
Pricing

Plans that get cheaper at scale

Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.

Free
$0 /mo
Free forever
100 hotel searches / month
1,000 credits / month
1 concurrent request
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Community support
Start free
Startup
$49 /mo
$2.46 / 1k hotel searches
20K hotel searches / month
200K credits / month
5 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Email support
Get started
Basic
Recommended
$99 /mo
$0.99 / 1k hotel searches
100K hotel searches / month
1M credits / month
15 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Priority email support
Get started
Growth
$208 /mo
$0.69 / 1k hotel searches
3M credits / month
50 concurrent requests
Structured JSON, no parsers to maintain
Only successful requests billed
Team seats
Dedicated account manager
Get started
Monthly hotel search volume
Free 100K 500K 2M
Best fit
Basic
hotel searches / mo
100K
Concurrency
15
$ / 1k hotel searches
$0.99
$99 /mo
Get Started
Enterprise
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.

Credits rollover
Unused credits carry into the next billing period.
Concurrency 2000+
Parallel request limits set to your peak load.
#1 request priority
Highest speed, always first in the queue.
Personal manager
A direct line to the founding team.
SSO
SAML single sign-on for the whole team.
Security review
Security questionnaire, DPA, and controls overview.
Talk to sales Quote within one business day
FAQ

Questions, answered

1 Grab your API key 2 Send a GET request 3 Get structured JSON

Your first hotel search
is minutes away

100 hotel searches free · no credit card