# Booking Scraper (`kawsar/booking-scraper`) Actor

Booking Scraper pulls hotel details, prices, ratings, amenities, and images from Booking.com listings, giving you clean structured data ready to use.

- **URL**: https://apify.com/kawsar/booking-scraper.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 22 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Booking Scraper

Booking Scraper pulls hotel and property data from Booking.com at scale. Paste in a list of hotel page URLs and get back clean, structured records covering names, star ratings, guest review scores, prices, amenities, images, addresses, and geo-coordinates. No account required, no manual browsing, no copy-pasting.

***

### What It Extracts

For each hotel or property page you provide, the actor returns:

| Field | Description |
|---|---|
| `name` | Hotel or property name |
| `propertyType` | Type of accommodation (Hotel, Apartment, Hostel, etc.) |
| `stars` | Official star rating (1-5) |
| `reviewScore` | Aggregate guest score (e.g. 8.9) |
| `reviewScoreWord` | Score label (e.g. "Excellent", "Superb") |
| `reviewCount` | Total number of guest reviews |
| `address` | Full street address |
| `city` | City name |
| `country` | Country name or code |
| `latitude` | Latitude coordinate |
| `longitude` | Longitude coordinate |
| `propertyDescription` | Property description text |
| `price` | Nightly rate (when shown on the page) |
| `currency` | Currency code (USD, EUR, GBP, THB, etc.) |
| `checkIn` | Check-in time |
| `checkOut` | Check-out time |
| `amenities` | List of facilities and amenities |
| `images` | List of listing photo URLs (high-resolution) |
| `website` | Hotel's official website |
| `phone` | Contact phone number |

***

### How to Use

#### 1. Open the Actor

Go to the actor page on Apify and click **Try for free** or open it in Apify Console.

#### 2. Provide Hotel URLs

In the **Hotel URLs** field, add one or more Booking.com hotel page URLs. Copy them directly from your browser:

```
https://www.booking.com/hotel/th/veranda-chiangmai.en-gb.html
https://www.booking.com/hotel/gb/the-ritz-london.en-gb.html
https://www.booking.com/hotel/us/the-plaza-new-york.en-gb.html
```

#### 3. Configure Options (Optional)

- **Max Items** — cap the number of hotels scraped per run (default: 100, max: 1000)
- **Request Timeout** — seconds to wait for each page response (default: 30)

#### 4. Run and Export

Click **Start**. When the run finishes, download results as JSON, CSV, Excel, or JSONL from the **Dataset** tab. You can also connect results to Google Sheets, BigQuery, or any other integration via Apify integrations.

***

### Example Input

```json
{
  "urls": [
    "https://www.booking.com/hotel/th/veranda-chiangmai.en-gb.html",
    "https://www.booking.com/hotel/gb/the-ritz-london.en-gb.html"
  ],
  "maxItems": 50,
  "requestTimeoutSecs": 30
}
```

### Example Output

```json
[
  {
    "url": "https://www.booking.com/hotel/th/veranda-chiangmai.en-gb.html",
    "name": "Veranda High Resort Chiang Mai",
    "propertyType": "Resort",
    "stars": 5,
    "reviewScore": 8.7,
    "reviewScoreWord": "Excellent",
    "reviewCount": 1842,
    "address": "100 Chuampit Road, Chiang Mai, 50300, Thailand",
    "city": "Chiang Mai",
    "country": "Thailand",
    "latitude": 18.7921,
    "longitude": 98.9674,
    "propertyDescription": "Set in the mountains above Chiang Mai, Veranda High Resort offers panoramic views...",
    "price": 4500.0,
    "currency": "THB",
    "checkIn": "14:00",
    "checkOut": "12:00",
    "amenities": ["Free WiFi", "Swimming pool", "Spa", "Restaurant", "Fitness center", "Airport shuttle"],
    "images": [
      "https://cf.bstatic.com/xdata/images/hotel/max1280x900/123456.jpg",
      "https://cf.bstatic.com/xdata/images/hotel/max1280x900/123457.jpg"
    ],
    "website": "https://www.verandachiangmai.com/",
    "phone": "+66 53 888 111"
  }
]
```

***

### Use Cases

**Travel data aggregation** — build a database of hotels across cities and countries for comparison sites or travel apps.

**Competitive pricing research** — track nightly rates across competing properties in your target market.

**Destination analysis** — gather review scores and amenities across a destination to identify gaps or opportunities.

**Hotel database enrichment** — supplement existing hotel records with current ratings, images, and contact details.

**Market intelligence** — monitor property types, star distributions, and review trends in specific regions.

***

### Property Types Supported

The actor works across all Booking.com accommodation categories:

- Hotels and boutique hotels
- Apartments and serviced apartments
- Resorts
- Hostels
- Bed and breakfasts
- Guest houses
- Villas and vacation rentals
- Motels

***

### Performance and Limits

- Processes one URL at a time with built-in bypass infrastructure
- Each page typically completes in 5-15 seconds depending on server load
- Configurable item limits let you control run duration and cost
- Failed URLs are logged with error context; successful ones continue uninterrupted

***

### Frequently Asked Questions

**Do I need a Booking.com account?**
No. The actor scrapes publicly visible hotel pages without logging in.

**What languages do the URLs need to be in?**
Any language variant works. The actor reads the data regardless of locale. English URLs (`.en-gb.html` or `.en-us.html`) tend to return the most complete JSON-LD data.

**Are prices always available?**
Prices depend on whether Booking.com shows them on the static page. Availability and rate data can vary based on date parameters in the URL.

**Can I scrape search results pages?**
This actor is designed for individual hotel pages (URLs containing `/hotel/`).

**How do I get the hotel URL?**
Open any hotel page on Booking.com and copy the URL from your browser address bar.

***

### Legal and Terms of Use

This actor is intended for personal research, academic use, and lawful business intelligence. Always review Booking.com's Terms of Service and robots.txt before large-scale data collection. The author assumes no responsibility for how extracted data is used.

# Actor input Schema

## `urls` (type: `array`):

One or more Booking.com hotel page URLs to scrape. Paste the full URL from your browser address bar.

## `maxItems` (type: `integer`):

Maximum number of hotels to scrape in a single run. Increase for larger batches.

## `requestTimeoutSecs` (type: `integer`):

How long to wait for a page response before marking it as failed. Raise this for slow connections.

## Actor input object example

```json
{
  "urls": [
    "https://www.booking.com/hotel/us/the-plaza-new-york.en-gb.html"
  ],
  "maxItems": 100,
  "requestTimeoutSecs": 30
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.booking.com/hotel/th/veranda-chiangmai.en-gb.html",
        "https://www.booking.com/hotel/gb/the-ritz-london.en-gb.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/booking-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": [
        "https://www.booking.com/hotel/th/veranda-chiangmai.en-gb.html",
        "https://www.booking.com/hotel/gb/the-ritz-london.en-gb.html",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/booking-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.booking.com/hotel/th/veranda-chiangmai.en-gb.html",
    "https://www.booking.com/hotel/gb/the-ritz-london.en-gb.html"
  ]
}' |
apify call kawsar/booking-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kawsar/booking-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/TdNFYZouyFFTF50yU/builds/3fBsDhEZhGrTdpaVT/openapi.json
