[Home](https://scrapfly.io/)/[Scrapers](https://scrapfly.io/scrapers)/Booking.com

Hotels · search results · prices · reviews

# // Booking.com Scraper API

Scrape Booking.com hotel pages, search results, prices and guest reviews as clean JSON. Scrapfly clears Booking.com's AWS WAF challenge, so you send a URL and read the data.

- **Clone it and run it.** An open-source Booking.com scraper for hotel search, hotel details, prices and reviews, tested against live Booking.com every night.
- **Prices for your dates.** Add check-in and check-out dates to a hotel or search URL and get the price of each room, or of each hotel in the results, for that stay.
 
 [Get free API key](https://scrapfly.io/register) [View GitHub scraper](https://github.com/scrapfly/scrapfly-scrapers/tree/main/bookingcom-scraper) [Read Unblocker docs](https://scrapfly.io/docs/scrape-api/unblocker) 

1,000 free credits. No credit card required.

 [  ](https://scrapeway.com/web-scraping-api/scrapfly) [  ](https://www.capterra.com/p/212653/Scrapfly/)  

 4.9/5 from 238 reviews 

 



 

 

 Any Booking.com URL

 

 

 Hotel JSON**Output**

```
{
  <span class="c-str">"name"</span>: <span class="c-str">"Garden Court Hotel"</span>,
  <span class="c-str">"score"</span>: <span class="c-num">7.7</span>,
  <span class="c-str">"reviews"</span>: <span class="c-num">2519</span>,
  <span class="c-str">"postcode"</span>: <span class="c-str">"W2 4BG"</span>,
  <span class="c-str">"checkin"</span>: <span class="c-str">"2026-11-13"</span>,
  <span class="c-str">"nights"</span>: <span class="c-num">2</span>,
  <span class="c-str">"from_usd"</span>: <span class="c-num">329.0</span>
}
```

Printed by the Python request below[See the request ↓](#implementation)

  

What you can scrape from Booking.com

Four kinds of Booking.com data you can scrape with Scrapfly, no Booking.com account required.

 ## // Scrape Booking.com hotel pages

Name, address, coordinates, description, photos, review score and count, popular facilities, and check-in and check-out times for any property.

- name
- address
- lat / lng
- photos
- score
- reviews
- facilities

  ## // Scrape Booking.com search results

25 properties per results page, each with its name, address, star rating, review score, distance from the center and the price for your dates, plus the total number of properties for the search. Search pages need residential proxies.

- name
- stars
- score
- distance
- price
- total results

  ## // Scrape Booking.com prices and availability

The price of every room for a given stay, or a month of nightly prices with availability and minimum stay from the hotel's availability calendar. With `country=US`, prices come in US dollars.

- room
- price
- checkin
- available
- min stay

  ## // Scrape Booking.com reviews

Page through a hotel's guest reviews, 10 per request. Each has what the guest liked and disliked, the score, date, room type, nights stayed, country, traveler type and the hotel's reply. Add the hotel's score for each category, from staff to location.

- liked
- disliked
- score
- room type
- country
- reply

  



Reliability

## // Get past Booking.com's AWS WAF challenge

Booking.com runs AWS WAF in front of its hotel and search pages. A plain request gets its JavaScript challenge: a 2 KB page with HTTP 202 and no hotel data. Render the page with Unblocker on, and the challenge clears in the browser before the HTML comes back.

`wait_for_selector=h2`Hotel pages: render with Unblocker on and wait for the hotel name. The request returns once the challenge has cleared and the real page has loaded.



`proxy_pool="residential"`Search results: Booking.com serves datacenter IPs a results page with no hotels in it. Search on residential proxies, and check that results came back before you parse.



`checkin` `checkout`Prices need dates. Add them to a hotel or search URL, and every room and result carries the total for that stay.



 



Choose your tools

## // Scrapfly products for Booking.com scraping

Scrapfly's Booking.com scraping API is the Web Scraping API with Unblocker on, and most jobs need nothing else. Add the others for prompt-based extraction, screenshots, browser sessions or lists of hotel URLs. One API key covers all of them.

 ### Web Scraping API for Booking.com

Fetch any hotel page or search results URL. Render hotel pages and wait for the hotel name; send search URLs through residential proxies.

A hotel page carries its details in a JSON-LD block and its room prices in the page's embedded data, so one request covers both.

 

```
GET /scrape?url=https://www.booking.com/hotel/gb/gardencourthotel.en-gb.html&unblocker=true&render_js=true&wait_for_selector=h2&country=US
```

 [Explore Web Scraping API →](https://scrapfly.io/products/web-scraping-api)  ### Data Extraction API for hotel pages

Name the fields in plain words with `extraction_prompt` and get them back with the page, with no parser to write.

Ask a hotel page for its score per review category, popular facilities and check-in times, and you get all of them in one response.

 

```
GET /scrape?url=https://www.booking.com/hotel/gb/gardencourthotel.en-gb.html&unblocker=true&render_js=true&wait_for_selector=h2&country=US&extraction_prompt=hotel+name,+review+score,+score+per+review+category,+popular+facilities,+check-in+and+check-out+times
```

 [Explore Data Extraction API →](https://scrapfly.io/products/extraction-api)  ### Screenshot API for hotel pages

A full-page capture of any hotel page: photos, review score, description and amenities.

Keep a visual record of how a listing looked on a given day.

 

```
GET /screenshot?url=https://www.booking.com/hotel/gb/gardencourthotel.en-gb.html&country=us&capture=fullpage&format=png
```

 [Explore Screenshot API →](https://scrapfly.io/products/screenshot-api)  ### Cloud Browser API for Booking.com sessions

Point your Playwright or Puppeteer script at a hosted browser when the job needs clicks, such as opening a hotel's Guest reviews tab.

The browser runs on Scrapfly's proxies, so your script never reaches Booking.com from your own IP.

 

```
chromium.connect_over_cdp("wss://browser.scrapfly.io?key=KEY&country=us")
```

 [Explore Cloud Browser API →](https://scrapfly.io/products/cloud-browser-api)  ### Crawler API for lists of hotel URLs

Submit a list of hotel URLs as one job, with [Unblocker](https://scrapfly.io/products/unblocker) (formerly ASP) applied to every URL. Ask for HTML output: each hotel's details sit in its JSON-LD block.

- url\_list
- unblocker
- country
- content\_formats

 [Explore Crawler API →](https://scrapfly.io/products/crawler-api)  



One request

## // Fetch a Booking.com hotel and its price for your dates

The JSON at the top is what this code prints: one rendered request for a hotel page with dates, then the hotel's details from its JSON-LD block and the cheapest room that fits two adults from the page's room data. No CSS selectors to maintain.

**Prefer the full scraper?** The open-source [Booking.com scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/bookingcom-scraper) covers hotel search, hotel details, the price calendar and reviews in Python 3.10 and runs against live Booking.com every night. Clone it, set `SCRAPFLY_KEY`, and run `poetry run python run.py`.

 

 Python · scrapfly-sdkscrape + parse

```
<span class="c-key">import</span> json
<span class="c-key">from</span> datetime <span class="c-key">import</span> date, timedelta
<span class="c-key">from</span> scrapfly <span class="c-key">import</span> ScrapeConfig, ScrapflyClient

client = ScrapflyClient(key=<span class="c-str">"YOUR_SCRAPFLY_KEY"</span>)
checkin = date.today() + timedelta(days=<span class="c-num">30</span>)
result = client.scrape(ScrapeConfig(
  <span class="c-str">"https://www.booking.com/hotel/gb/gardencourthotel.en-gb.html"</span>
  <span class="c-str">f"</span><span class="c-str">?checkin=</span>{checkin}<span class="c-str">&checkout=</span>{checkin + timedelta(days=<span class="c-num">2</span>)}<span class="c-str">"</span>,
  unblocker=<span class="c-key">True</span>,  <span class="c-com"># previously asp</span>
  render_js=<span class="c-key">True</span>, wait_for_selector=<span class="c-str">"h2"</span>, country=<span class="c-str">"US"</span>,
))
ld = json.loads(result.selector.css(
  <span class="c-str">'script[type="application/ld+json"]::text'</span>).get())
key = <span class="c-str">"b_rooms_available_and_soldout: "</span>
rooms, _ = json.JSONDecoder().raw_decode(
  result.content, result.content.index(key) + len(key))
hotel = {
  <span class="c-str">"name"</span>: ld[<span class="c-str">"name"</span>],
  <span class="c-str">"score"</span>: ld[<span class="c-str">"aggregateRating"</span>][<span class="c-str">"ratingValue"</span>],
  <span class="c-str">"reviews"</span>: ld[<span class="c-str">"aggregateRating"</span>][<span class="c-str">"reviewCount"</span>],
  <span class="c-str">"postcode"</span>: ld[<span class="c-str">"address"</span>][<span class="c-str">"postalCode"</span>],
  <span class="c-str">"checkin"</span>: str(checkin),
  <span class="c-str">"nights"</span>: <span class="c-num">2</span>,
  <span class="c-str">"from_usd"</span>: min(float(b[<span class="c-str">"b_raw_price"</span>]) <span class="c-key">for</span> r <span class="c-key">in</span> rooms
    <span class="c-key">for</span> b <span class="c-key">in</span> r[<span class="c-str">"b_blocks"</span>] <span class="c-key">if</span> b[<span class="c-str">"b_can_fit_them_all"</span>]),
}
```

 

 



What the data is used for

## // Common Booking.com scraping use cases

### Rate shopping

Track what competing hotels charge for the same dates, room by room.



### Availability tracking

Watch which nights sell out and where a minimum stay applies.



### Review analysis

Pull guest reviews with liked and disliked text, scores and room types for sentiment tracking.



### Market research

Size a destination: how many properties, at what star ratings, scores and prices.



### Travel apps

Feed a comparison or trip-planning app with hotel names, photos, scores and prices.



### Hotel mapping

Plot properties by coordinates, address and distance from the center.



 



Common questions

## // Booking.com scraping FAQ

 Is scraping Booking.com legal?There is no universal answer. Legality depends on your jurisdiction, the data, the access method and how you use the result. Keep the workflow to public pages, avoid signed-in content, treat reviewer names as personal data, review Booking.com's terms, and get legal advice for commercial use.

 Do I need a Booking.com account or API key?No. Scrapfly loads public Booking.com pages signed out, so there is no Booking.com account, partner ID or API key to manage. You only need a Scrapfly API key.

 Why does Booking.com return HTTP 202 and an empty page?That is Booking.com's AWS WAF challenge: a 2 KB page that runs a JavaScript check, then reloads. Render the page with `render_js=true` and wait for an element of the real page, such as `wait_for_selector=h2` on a hotel page, and the challenge clears in the browser.

 Can I scrape Booking.com prices?Yes. Add `checkin` and `checkout` dates to a hotel or search URL. A hotel page then carries the total for every room for that stay, and each search result carries its price. For a calendar view, the hotel's availability calendar returns a month of nightly prices with availability.

 Can I scrape Booking.com reviews?Yes. A hotel's reviews load from Booking.com's GraphQL endpoint 10 at a time, with the total count in the first response, so you can page through them. Each review has the guest's liked and disliked text, score, date, room type, country and the hotel's reply. The open-source scraper does the paging for you.

 Can I scrape Booking.com search results?Yes. Send a search results URL through residential proxies and get 25 properties per page with names, scores, star ratings and prices for your dates, plus the total count for the search. Booking.com serves datacenter IPs a results page with no hotels that still returns HTTP 200, so check that results came back and retry when they didn't.

 How much does scraping Booking.com cost?A rendered hotel page costs 6 credits on datacenter proxies, or 30 when Unblocker moves it to residential. A search results page on residential proxies costs 25 to 30. An extraction prompt adds 20 to 30 credits, and a Screenshot API capture costs 60. Every account starts with 1,000 free credits.

 What are the rate limits when scraping Booking.com?Scrapfly sets no Booking.com-specific limit. Your maximum parallelism is the concurrency quota on your plan, or a lower cap configured for the project. Each in-flight request uses one slot until it finishes.

 



Start with one request

## Fetch the URL. Read the JSON.

Web Scraping API with Unblocker on, one call per Booking.com URL.

Proxies across 190+ countries

 [Booking.com scraper on GitHub](https://github.com/scrapfly/scrapfly-scrapers/tree/main/bookingcom-scraper) [How to scrape Booking.com](https://scrapfly.io/blog/posts/how-to-scrape-bookingcom) [All scraper pages](https://scrapfly.io/scrapers) 

 

 [Get free API key](https://scrapfly.io/register) [Read the docs](https://scrapfly.io/docs/scrape-api/unblocker)