# Klook Experiences & Activities Scraper (`crawlerbros/klook-experiences-scraper`) Actor

Scrape Klook travel experiences and activities, search activities, browse by city or category, or enrich specific activity URLs. Extracts title, price, rating, reviews, city, category, highlights, cancellation policy, and more.

- **URL**: https://apify.com/crawlerbros/klook-experiences-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

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

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

## Klook Experiences & Activities Scraper

Extract travel experiences and activities from [Klook](https://www.klook.com) — search by keyword, browse by city, or enrich specific activity URLs. Ideal for travel researchers, price trackers, and anyone building travel comparison tools.

### What It Scrapes

Klook lists millions of activities, tours, theme park tickets, and travel experiences across thousands of destinations worldwide. This actor retrieves structured activity data including title, price, rating, review count, city, category, and booking tags.

### Input

| Field | Type | Description | Default |
|-------|------|-------------|---------|
| `mode` | Select | `byCity`, `searchActivities`, or `byActivityUrls` | `byCity` |
| `city` | Text | City/destination name (mode=byCity), e.g. Tokyo, Paris | `Tokyo` |
| `searchQuery` | Text | Keyword search (mode=searchActivities), e.g. snorkeling | `Tokyo` |
| `sortBy` | Select | Sort order for results | `most_relevant` |
| `minRating` | Number | Minimum rating filter (0.0–5.0) | — |
| `minPrice` | Integer | Minimum price in USD | — |
| `maxPrice` | Integer | Maximum price in USD | — |
| `startUrls` | List | Klook activity URLs to enrich (mode=byActivityUrls) | — |
| `maxItems` | Integer | Maximum activities to return (1–5000) | `50` |

#### Sort Options

| Value | Description |
|-------|-------------|
| `most_relevant` | Most relevant (default) |
| `top_picks` | Klook top picks |
| `price_asc` | Price: low to high |
| `price_desc` | Price: high to low |
| `rating` | Highest rated |
| `newest` | Newest listings |

### Output

Each record contains:

| Field | Type | Description |
|-------|------|-------------|
| `activityId` | String | Unique Klook activity ID |
| `title` | String | Activity name |
| `url` | String | Full Klook activity URL |
| `thumbnailUrl` | String | Cover image URL |
| `city` | String | City where activity takes place |
| `category` | String | Activity category (e.g. Theme parks) |
| `price` | Float | Current selling price (USD) |
| `originalPrice` | Float | Original/market price before discount |
| `discountPercent` | Integer | Discount percentage (if applicable) |
| `currency` | String | Currency code (`USD`) |
| `rating` | Float | Average rating out of 5 |
| `reviewCount` | Integer | Total number of reviews |
| `tags` | Array | Activity tags (e.g. Instant confirmation, Free cancellation) |
| `isSoldOut` | Boolean | Whether activity is currently sold out |
| `recordType` | String | Always `klookActivity` |
| `scrapedAt` | String | ISO 8601 scrape timestamp |

#### Example Output

```json
{
  "activityId": "695",
  "title": "Tokyo Disney Resort - Tokyo Disneyland & Tokyo DisneySea Park Tickets",
  "url": "https://www.klook.com/en-US/activity/695-tokyo-disney-resort-1-day-pass-tokyo/",
  "thumbnailUrl": "https://res.klook.com/image/upload/activities/frrnxyfrq6uzs1kapdct.jpg",
  "city": "Tokyo",
  "category": "Theme parks",
  "price": 52.35,
  "currency": "USD",
  "rating": 4.8,
  "reviewCount": 95464,
  "tags": ["Book now for tomorrow", "Instant confirmation"],
  "isSoldOut": false,
  "recordType": "klookActivity",
  "scrapedAt": "2026-05-15T12:00:00+00:00"
}
````

### FAQ

**Q: Do I need a Klook account or API key?**
A: No. The scraper uses Klook's public search API which requires no authentication.

**Q: How many activities can I scrape per run?**
A: Up to 5,000 activities per run.

**Q: What cities are supported?**
A: Any city that Klook covers — Tokyo, Paris, New York, London, Bangkok, Bali, Dubai, and thousands more worldwide. Just enter the city name in the `city` field.

**Q: Are prices in USD?**
A: Yes, all prices are normalized to USD. Klook serves multiple currencies; this actor requests USD pricing.

**Q: What does `discountPercent` mean?**
A: If an activity has a promotional discount, this shows the percentage off the original price. For example, if `originalPrice=50` and `price=35`, `discountPercent=30`.

**Q: Can I filter by minimum rating?**
A: Yes — set `minRating` to any value from 0.0 to 5.0. Only activities at or above that rating will be returned.

**Q: Why do some activities have no `originalPrice`?**
A: `originalPrice` is only included when a discount is active (market price higher than selling price). If there's no active discount, only `price` is shown.

# Actor input Schema

## `mode` (type: `string`):

How to fetch activities.

## `city` (type: `string`):

City or destination name (mode=byCity), e.g. Tokyo, Paris, New York.

## `searchQuery` (type: `string`):

Free-text search query (mode=searchActivities), e.g. snorkeling, food tour.

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

How to order results.

## `minRating` (type: `number`):

Only include activities with rating >= this value (0.0 to 5.0).

## `minPrice` (type: `integer`):

Minimum price filter.

## `maxPrice` (type: `integer`):

Maximum price filter.

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

Klook activity page URLs to enrich, e.g. https://www.klook.com/en-US/activity/695-tokyo-disney-resort-1-day-pass-tokyo/

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

Maximum number of activities to return.

## Actor input object example

```json
{
  "mode": "byCity",
  "city": "Tokyo",
  "searchQuery": "Tokyo",
  "sortBy": "most_relevant",
  "startUrls": [],
  "maxItems": 50
}
```

# Actor output Schema

## `activities` (type: `string`):

Dataset containing all scraped Klook activities.

# 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 = {
    "mode": "byCity",
    "city": "Tokyo",
    "searchQuery": "Tokyo",
    "sortBy": "most_relevant",
    "startUrls": [],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/klook-experiences-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 = {
    "mode": "byCity",
    "city": "Tokyo",
    "searchQuery": "Tokyo",
    "sortBy": "most_relevant",
    "startUrls": [],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/klook-experiences-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 '{
  "mode": "byCity",
  "city": "Tokyo",
  "searchQuery": "Tokyo",
  "sortBy": "most_relevant",
  "startUrls": [],
  "maxItems": 50
}' |
apify call crawlerbros/klook-experiences-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Klook Experiences & Activities Scraper",
        "description": "Scrape Klook travel experiences and activities, search activities, browse by city or category, or enrich specific activity URLs. Extracts title, price, rating, reviews, city, category, highlights, cancellation policy, and more.",
        "version": "1.0",
        "x-build-id": "5KltPGNeF8r9fFE8Q"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~klook-experiences-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-klook-experiences-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/crawlerbros~klook-experiences-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-klook-experiences-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/crawlerbros~klook-experiences-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-klook-experiences-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "byCity",
                            "searchActivities",
                            "byActivityUrls"
                        ],
                        "type": "string",
                        "description": "How to fetch activities.",
                        "default": "byCity"
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "City or destination name (mode=byCity), e.g. Tokyo, Paris, New York."
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Free-text search query (mode=searchActivities), e.g. snorkeling, food tour."
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "most_relevant",
                            "top_picks",
                            "price_asc",
                            "price_desc",
                            "rating",
                            "newest"
                        ],
                        "type": "string",
                        "description": "How to order results.",
                        "default": "most_relevant"
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "number",
                        "description": "Only include activities with rating >= this value (0.0 to 5.0)."
                    },
                    "minPrice": {
                        "title": "Minimum price (USD)",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Minimum price filter."
                    },
                    "maxPrice": {
                        "title": "Maximum price (USD)",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum price filter."
                    },
                    "startUrls": {
                        "title": "Start URLs (mode=byActivityUrls)",
                        "type": "array",
                        "description": "Klook activity page URLs to enrich, e.g. https://www.klook.com/en-US/activity/695-tokyo-disney-resort-1-day-pass-tokyo/",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of activities to return.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
