# Booking.com Attractions & Things-to-Do Scraper (`axlymxp/booking-attractions-scraper`) Actor

Scrape Booking.com attractions, tours and activities by destination — price, rating, reviews, availability, duration and cancellation policy via the official Booking.com Android API. Pay only for the results you get.

- **URL**: https://apify.com/axlymxp/booking-attractions-scraper.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** Travel, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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.com Attractions & Things-to-Do Scraper

Scrape **attractions, tours, tickets and activities** from Booking.com at scale — price, rating, review count, duration, availability time-slots, cancellation policy and photos — using the **official Booking.com Android app API**. No HTML scraping, no browser, no login.

This is the first dedicated Booking.com _attractions_ scraper on the Apify Store. If you build travel guides, price-comparison tools, activity marketplaces, or AI trip planners, this actor turns any destination into structured activity data.

### What you get

| Field                                                                                    | Description                                                     |
| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `id`, `name`, `slug`                                                                     | Attraction identifiers                                          |
| `short_description`                                                                      | One-line summary                                                |
| `url`                                                                                    | Booking.com attraction page URL                                 |
| `price_amount`, `price_public_amount`, `price_currency`                                  | Representative price                                            |
| `review_score`, `review_count`                                                           | Aggregate guest rating                                          |
| `category_ratings`                                                                       | Per-category scores (value, access, service, facilities)        |
| `duration`                                                                               | Typical duration label                                          |
| `has_free_cancellation`, `cancellation_label`                                            | Cancellation info                                               |
| `flags`                                                                                  | Badges (e.g. "#1 Best seller")                                  |
| `available_dates`, `available_from`                                                      | Bookable dates                                                  |
| `photos`                                                                                 | High-resolution image URLs                                      |
| `city`, `country`, `latitude`, `longitude`, `ufi`                                        | Location                                                        |
| `description`, `highlights`, `whats_included`, `not_included`, `restrictions`, `address` | Full detail (when `includeDetails` is on)                       |
| `availability`                                                                           | Bookable time slots + offers (when `includeAvailability` is on) |
| `reviews`                                                                                | Guest review snippets (when `includeReviews` is on)             |

### Use cases

- Build an activities / things-to-do marketplace or aggregator
- Monitor tour and ticket pricing across destinations
- Enrich AI travel planners with real attraction data
- Competitive analysis for tour operators
- Feed recommendation engines with rated activities

### Input

| Parameter             | Type    | Description                                                                                           |
| --------------------- | ------- | ----------------------------------------------------------------------------------------------------- |
| `destinations`        | array   | Required. City name + country code (`"New York, us"`), a Booking.com attractions URL, or a raw `ufi`. |
| `startDate`           | string  | Availability window start `YYYY-MM-DD` (default: 14 days out).                                        |
| `endDate`             | string  | Availability window end `YYYY-MM-DD` (default: same as start).                                        |
| `maxItemsPerLocation` | integer | Max attractions per destination (default 50).                                                         |
| `includeDetails`      | boolean | Fetch full attraction detail (default `true`).                                                        |
| `includeAvailability` | boolean | Fetch bookable time slots (default `false`).                                                          |
| `includeReviews`      | boolean | Fetch guest reviews (default `false`).                                                                |
| `currency`            | string  | ISO currency code (default `USD`).                                                                    |
| `language`            | string  | Language code (default `en-us`).                                                                      |

#### Example input

```json
{
    "destinations": ["New York, us", "Rome, it"],
    "startDate": "2026-08-10",
    "endDate": "2026-08-10",
    "maxItemsPerLocation": 50,
    "includeDetails": true,
    "includeAvailability": false,
    "includeReviews": false,
    "currency": "USD"
}
````

#### Example output row

```json
{
    "id": "PRCMOkYUz7Um",
    "name": "SUMMIT One Vanderbilt Tickets",
    "slug": "prcmokyuz7um-summit-one-vanderbilt-tickets",
    "short_description": "Digital art installations and views of New York from a skyscraper terrace",
    "url": "https://www.booking.com/attractions/us/prcmokyuz7um-summit-one-vanderbilt-tickets.html",
    "price_amount": 54.45,
    "price_currency": "USD",
    "review_score": 4.7,
    "review_count": 4439,
    "duration": "Duration: 2 hours",
    "has_free_cancellation": true,
    "flags": ["#1 Best seller in New York"],
    "city": "New York",
    "latitude": 40.75,
    "longitude": -73.97
}
```

### Pricing

This actor uses **Pay Per Event** pricing:

- **Actor start:** $0.02 per run
- **Attraction result:** $0.004 per attraction pushed to the dataset

Scraping 500 attractions costs about **$0.02 + 500 × $0.004 = $2.02**. You only pay for the results you get.

### Finding destinations

The easiest input is `"City, CC"` (e.g. `"Paris, fr"`). You can also paste a Booking.com attractions city URL (`https://www.booking.com/attractions/city/us/new-york.html`) or a numeric `ufi`. To discover cities and their `ufi`s programmatically, use the companion **Booking.com MCP Server** actor's `list_attraction_cities` tool.

### Scheduling & integrations

Run on a schedule to track pricing over time, and connect the dataset to Google Sheets, S3, webhooks, or your database via Apify integrations.

### Use with AI agents (MCP)

Prefer live, on-demand access from Claude, Cursor, or your own agent? Use the **Booking.com MCP Server** actor, which exposes `search_attractions`, `get_attraction`, `get_attraction_availability` and more as MCP tools.

### FAQ

**Do I need a proxy?** No. The Booking.com app API works from datacenter IPs. A proxy field is available if you want geo-specific pricing.

**Is login required?** No. The actor authenticates anonymously via the official app's device-token flow.

**How current is the data?** Every run fetches live data directly from Booking.com's app backend.

**What about hotels?** Use the companion **Booking.com Hotel Detail & Reviews Scraper**.

### Disclaimer

This actor collects publicly available data for legitimate use cases such as research and price comparison. You are responsible for how you use the collected data, including compliance with Booking.com's terms and applicable laws.

# Actor input Schema

## `destinations` (type: `array`):

One or more destinations to scrape attractions for. Each item can be: a Booking.com attractions city URL (e.g. https://www.booking.com/attractions/city/us/new-york.html), a city name with a 2-letter country code (e.g. 'New York, us'), or a raw Booking location id / ufi (e.g. '20088325').

## `startDate` (type: `string`):

Start of the availability window in YYYY-MM-DD format. Defaults to 14 days from today.

## `endDate` (type: `string`):

End of the availability window in YYYY-MM-DD format. Defaults to the start date.

## `maxItemsPerLocation` (type: `integer`):

Maximum number of attractions to collect for each destination. The actor paginates automatically (20 per page).

## `includeDetails` (type: `boolean`):

Enrich each attraction with full detail (description, highlights, what's included, restrictions, address, languages).

## `includeAvailability` (type: `boolean`):

Fetch bookable time slots and offers for each attraction on the start date. Slower — one extra request per attraction.

## `includeReviews` (type: `boolean`):

Fetch guest review snippets for each attraction. Slower — one extra request per attraction.

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

ISO 4217 currency code for prices (e.g. USD, EUR, GBP).

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

Language code for localized names and descriptions (e.g. en-us, de, fr).

## `proxyConfiguration` (type: `object`):

Optional proxy configuration. The Booking.com app API works from datacenter IPs, so a proxy is usually not required.

## Actor input object example

```json
{
  "destinations": [
    "New York, us"
  ],
  "startDate": "2026-08-10",
  "endDate": "2026-08-10",
  "maxItemsPerLocation": 50,
  "includeDetails": true,
  "includeAvailability": false,
  "includeReviews": false,
  "currency": "USD",
  "language": "en-us",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "destinations": [
        "New York, us"
    ],
    "startDate": "2026-08-10",
    "endDate": "2026-08-10"
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/booking-attractions-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 = {
    "destinations": ["New York, us"],
    "startDate": "2026-08-10",
    "endDate": "2026-08-10",
}

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

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

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

```

## CLI example

```bash
echo '{
  "destinations": [
    "New York, us"
  ],
  "startDate": "2026-08-10",
  "endDate": "2026-08-10"
}' |
apify call axlymxp/booking-attractions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=axlymxp/booking-attractions-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Booking.com Attractions & Things-to-Do Scraper",
        "description": "Scrape Booking.com attractions, tours and activities by destination — price, rating, reviews, availability, duration and cancellation policy via the official Booking.com Android API. Pay only for the results you get.",
        "version": "1.0",
        "x-build-id": "0P9yIvu9gbsgwzEiw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/axlymxp~booking-attractions-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-axlymxp-booking-attractions-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/axlymxp~booking-attractions-scraper/runs": {
            "post": {
                "operationId": "runs-sync-axlymxp-booking-attractions-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/axlymxp~booking-attractions-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-axlymxp-booking-attractions-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "destinations"
                ],
                "properties": {
                    "destinations": {
                        "title": "Destinations",
                        "type": "array",
                        "description": "One or more destinations to scrape attractions for. Each item can be: a Booking.com attractions city URL (e.g. https://www.booking.com/attractions/city/us/new-york.html), a city name with a 2-letter country code (e.g. 'New York, us'), or a raw Booking location id / ufi (e.g. '20088325').",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startDate": {
                        "title": "Start date",
                        "type": "string",
                        "description": "Start of the availability window in YYYY-MM-DD format. Defaults to 14 days from today."
                    },
                    "endDate": {
                        "title": "End date",
                        "type": "string",
                        "description": "End of the availability window in YYYY-MM-DD format. Defaults to the start date."
                    },
                    "maxItemsPerLocation": {
                        "title": "Max attractions per destination",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of attractions to collect for each destination. The actor paginates automatically (20 per page).",
                        "default": 50
                    },
                    "includeDetails": {
                        "title": "Fetch full attraction detail",
                        "type": "boolean",
                        "description": "Enrich each attraction with full detail (description, highlights, what's included, restrictions, address, languages).",
                        "default": true
                    },
                    "includeAvailability": {
                        "title": "Fetch availability time slots",
                        "type": "boolean",
                        "description": "Fetch bookable time slots and offers for each attraction on the start date. Slower — one extra request per attraction.",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "Fetch guest reviews",
                        "type": "boolean",
                        "description": "Fetch guest review snippets for each attraction. Slower — one extra request per attraction.",
                        "default": false
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "ISO 4217 currency code for prices (e.g. USD, EUR, GBP).",
                        "default": "USD"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "Language code for localized names and descriptions (e.g. en-us, de, fr).",
                        "default": "en-us"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy configuration. The Booking.com app API works from datacenter IPs, so a proxy is usually not required.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
