# Fast Booking Scraper (`voyager/fast-booking-scraper`) Actor

Scrape Booking with this hotel scraper and get data about accommodation on Booking.com. Extract data by keywords or URLs for hotel prices, ratings, location, number of reviews, stars. Scrape and download data from Booking.com in JSON, Excel, HTML ,and CSV.

- **URL**: https://apify.com/voyager/fast-booking-scraper.md
- **Developed by:** [Voyager](https://apify.com/voyager) (Apify)
- **Categories:** Travel
- **Stats:** 1,606 total users, 28 monthly users, 94.2% runs succeeded, 21 bookmarks
- **User rating**: 2.93 out of 5 stars

## Pricing

$2.00 / 1,000 scraped place results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🏎 What does Fast Booking Scraper do?

This [web scraping](https://apify.com/web-scraping) tool expands Booking data extraction beyond the official Booking.com limitations. Fast Booking Scraper lets you scrape **over 1,000** **basic listings at once from the Booking.com search**. To scrape the full details of each listing separately, use the dedicated [Booking Scraper](https://apify.com/voyager/booking-scraper).

### 🧳 What data can I scrape from Booking search?

<table>
<tr>
<td>🏖 Hotel name</td>
<td>📍 Location</td>
</tr>
<tr>
<td>💵 Price and currency</td>
<td>🌆 Image URLs</td>
</tr>
<tr>
<td>✍️ Number of reviews</td>
<td>⭐️ Rating and stars</td>
</tr>
<tr>
<td>🛏 Room types</td>
<td>🧑‍🦰 Number of persons</td>
</tr>
</table>

### 💸 How much will it cost to scrape Booking search results?

This scraper uses the pay-per-event pricing model, so your costs are easy to predict. You're charged **$2 per 1,000 scraped place results, so $0.002 per result**, with no extra platform usage fees.

Apify’s Free plan provides $5 free usage credits every month. For those credits, you can get up to **2,500 results from Booking search for free**.

If you need to get more Booking listings regularly, you should grab an Apify subscription. We recommend the [$19/month **Starter plan**](https://apify.com/pricing) - that one could get you up to 9,500 hotel results every month.

### ⬇️ Input

For input, you can either specify a **Destination ✈️** or use specific **URLs from the Booking.com website 🔗** (you can apply all the necessary filters beforehand).

You can apply extra filters on which content you want to scrape (property type, minimum rating, price range, currency, language, etc.). You can also set the range of check-in and check-out dates and how many results you want.

If you want a step-by-step tutorial on how to scrape Booking, read the Apify blog post on [how to scrape Booking.com](https://blog.apify.com/crawling-booking-com-47511a59eef/) or watch this quick video tutorial.

[scrape hotel data from Booking](https://www.youtube.com/watch?v=FZgi9YxNBa0)

#### Tips for scraping Booking hotels

1️⃣ The Booking.com website will only display a maximum of 1,000 results, so that’s how much the scraper can get at once. If you need more than that, you can use the **Get more than 1000 results** toggle. However, in that case, you won’t be able to apply any limiting filters in **URLs** because the scraper will override them. Scraping by **Destination** will not be affected by the toggle.

2️⃣ If you need to get detailed data about pricing or specific rooms, you need to provide `checkIn` and `checkOut` dates. The reason for this is that Booking.com only shows complete room and pricing info when dates are indicated.

3️⃣ Sometimes [Booking.com](http://booking.com/) may return some suggested hotels outside of the expected city/region as a recommendation. The scraper will return all of them in the data results, so you may get more results than expected for your search.

### ⬆️ Output example

The scraped Booking listings will be shown as a dataset which you can find in the **Storage** tab. Note that the output is organized as a table for viewing convenience:

<img width="80%" src="https://i.imgur.com/ErVcqnY.png" /> <br> <br>

You can preview all the fields and choose in which format to download the data you’ve extracted: JSON, Excel, HTML table, CSV, or XML. Here below is the same dataset in JSON:

```json
[
  {
    "url": "https://www.booking.com/hotel/us/trump-international-new-york.html?selected_currency=USD&changed_currency=1&lang=en-us&group_adults=2&no_rooms=1&checkin=2023-09-01&checkout=2023-09-02&nflt=price%3DUSD-0-999999-1",
    "name": "Trump International New York",
    "address": "Upper West Side, New York",
    "rating": 8.9,
    "reviews": 1064,
    "stars": 5,
    "price": 775,
    "currency": "US$",
    "roomType": "Deluxe King Room",
    "persons": 2,
    "image": "https://cf.bstatic.com/xdata/images/hotel/square200/78707107.webp?k=00573a915d7f50fb3d2ba3ffd63b5fc0e31c5c3e89f1246e83bd166e91bf2595&o="
  },
  {
    "url": "https://www.booking.com/hotel/us/monderne.html?selected_currency=USD&changed_currency=1&lang=en-us&group_adults=2&no_rooms=1&checkin=2023-09-01&checkout=2023-09-02&nflt=price%3DUSD-0-999999-1",
    "name": "Moderne Hotel",
    "address": "Manhattan, New York",
    "rating": 7.9,
    "reviews": 721,
    "stars": 4,
    "price": 609,
    "currency": "US$",
    "roomType": "Deluxe Room",
    "persons": 2,
    "image": "https://cf.bstatic.com/xdata/images/hotel/square200/63338224.webp?k=c28959d8a2fd35027eac230d8268064a11c418605ec99a7f052df6f9311d2581&o="
  },
  {
    "url": "https://www.booking.com/hotel/us/the-manhattan-club.html?selected_currency=USD&changed_currency=1&lang=en-us&group_adults=2&no_rooms=1&checkin=2023-09-01&checkout=2023-09-02&nflt=price%3DUSD-0-999999-1",
    "name": "The Manhattan Club",
    "address": "Manhattan, New York",
    "rating": 8.1,
    "reviews": 2443,
    "stars": 4,
    "price": 413,
    "currency": "US$",
    "roomType": "Executive Junior Suite",
    "persons": 2,
    "image": "https://cf.bstatic.com/xdata/images/hotel/square200/202656761.webp?k=4bde2fc628012ddb1db86ca81e2e3ea682e55197a766a8d51c246b0ffe09685a&o="
  },
```

### ⭐️ Need to scrape reviews from Booking.com?

Use a dedicated ⭐️ [Booking Reviews Scraper](https://apify.com/voyager/booking-reviews-scraper). It was built to extract review text, ratings, stars, basic reviewer info, length of stay, liked/disliked parts, room info, date of stay, and more for each listing.

### ❓FAQ

#### What are the disadvantages of the Booking API?

The Booking.com API interface is quite user-friendly, but getting that data in a machine-processable format is no easy task. Booking.com places a lot of restrictions on how data can be collected from its listings, one of them being that **Booking.com will display a maximum of 1,000 results for any given search**. Fast Booking Scraper doesn't impose any limitations on your results, so you can scrape data from Booking.com at scale.

#### Is it legal to scrape listings on Booking.com?

Yes. However, you should note that personal data is protected by GDPR (General Data Protection Regulation) in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. We also recommend reading the Apify blog post: [is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

#### Can I integrate Fast Booking Scraper with other apps?

Yes. Fast Booking Scraper can be connected with almost any cloud service or web app thanks to [integrations](https://apify.com/integrations) on the Apify platform. You can integrate with Zapier, Slack, Make, LangChain, Airbyte, GitHub, Google Sheets, Google Drive, and <a href="https://docs.apify.com/integrations" target="_blank">with other Actors</a>. Or you can use <a href="https://docs.apify.com/integrations/webhooks" target="_blank">webhooks</a> to carry out an action whenever an event occurs, e.g., get a notification whenever this scraper successfully finishes a run.

#### Can I use Fast Booking Scraper with the API?

Yes. You can use the Apify API to get programmatic access to the Apify platform. The API is organized around RESTful HTTP endpoints that enable you to manage, schedule, and run Apify Actors. The API also lets you access any datasets, monitor Actor performance, fetch results, create and update versions, and more.

To access the API using Node.js, use the `apify-client` NPM package. To access the API using Python, use the `apify-client` PyPI package.

Check out the <a href="https://docs.apify.com/api/v2"  target="_blank"> Apify API reference</a> docs for full details or click on the <a href="https://apify.com/voyager/fast-booking-scraper/api"  target="_blank"> API tab</a> for code examples. You can also follow [this video guide](https://www.youtube.com/watch?v=ViYYDHSBAKM).

# Changelog

This Actor's version history is a separate document: https://apify.com/voyager/fast-booking-scraper/changelog.md

# Actor input Schema

## `search` (type: `string`):

Insert the destination name here, e.g. Amsterdam.

## `startUrls` (type: `array`):

Insert URLs to start with instead of a destination name. Hotel search URL's filters will be applied, except for the ones in the scraper input. You can also use shared list URLs. These links are generated for properties you saved in your Booking.com account.

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

Limit the number of places to be scraped. Input a value over `1000` to activate the 'overcome 1000 results limit' feature.

## `propertyType` (type: `string`):

Choose type of property

## `sortBy` (type: `string`):

Hotel attribute by which the results will be ordered

## `minScore` (type: `string`):

Minimum rating of a hotel in "8.4" format.

- Searching below a rating of `5` may be very inefficient, as it's not natively supported by Booking.com.

## `starsCountFilter` (type: `string`):

Only scrape places with the selected stars count. Also includes Booking.com's apartment-like properties 'square' rating.

## `currency` (type: `string`):

Currency to be set on the website

## `language` (type: `string`):

Language to be set on the website (does not apply to reviews)

## `checkIn` (type: `string`):

Select the check-in date in format YYYY-MM-DD or {number} {unit}.

- Input the date in the UTC timezone.
  Booking.com uses the UTC timezone for all check-in and check-out dates, so we do the same.

## `checkOut` (type: `string`):

Select the check-out date in format YYYY-MM-DD or {number} {unit}.

- Input the date in the UTC timezone.
  Booking.com uses the UTC timezone for all check-in and check-out dates, so we do the same.

## `flexWindow` (type: `string`):

Number of days to flex around the check-in and check-out dates. E.g. setting `3` will scrape hotels with a possible date range up to 3 days before and 3 days after the selected dates.

## `rooms` (type: `integer`):

Number of rooms for the availability and price search.

## `adults` (type: `integer`):

Number of adult guests for the availability and price search.

## `children` (type: `integer`):

Number of child guests for the availability and price search.

## `minMaxPrice` (type: `string`):

Insert the minimum and maximum price per night, e.g. '100-150' or '100+'.

## Actor input object example

```json
{
  "search": "New York",
  "maxItems": 10,
  "propertyType": "none",
  "sortBy": "distance_from_search",
  "starsCountFilter": "any",
  "currency": "USD",
  "language": "en-gb",
  "rooms": 1,
  "adults": 2,
  "children": 0,
  "minMaxPrice": "0-999999"
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing all scraped properties

# 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 = {
    "search": "New York",
    "maxItems": 10,
    "sortBy": "distance_from_search",
    "starsCountFilter": "any",
    "currency": "USD",
    "language": "en-gb",
    "minMaxPrice": "0-999999"
};

// Run the Actor and wait for it to finish
const run = await client.actor("voyager/fast-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 = {
    "search": "New York",
    "maxItems": 10,
    "sortBy": "distance_from_search",
    "starsCountFilter": "any",
    "currency": "USD",
    "language": "en-gb",
    "minMaxPrice": "0-999999",
}

# Run the Actor and wait for it to finish
run = client.actor("voyager/fast-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 '{
  "search": "New York",
  "maxItems": 10,
  "sortBy": "distance_from_search",
  "starsCountFilter": "any",
  "currency": "USD",
  "language": "en-gb",
  "minMaxPrice": "0-999999"
}' |
apify call voyager/fast-booking-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,voyager/fast-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/QGcJvQyG9NqMKTYPH/builds/HFHdMcTOEoqtR0Uoh/openapi.json
