# Klook Scraper — Activities, Prices & Reviews (`huggable_quote/klook-scraper`) Actor

Extract activity details, pricing options, and reviews from Klook.com. The only all-in-one Klook data extraction tool on Apify.

- **URL**: https://apify.com/huggable\_quote/klook-scraper.md
- **Developed by:** [OrbitData Labs](https://apify.com/huggable_quote) (community)
- **Categories:** Travel, E-commerce, Other
- **Stats:** 35 total users, 9 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 activity 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/platform/actors/running/actors-in-store#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

## Klook Scraper — Activities, Prices & Reviews 🎯

The **only all-in-one Klook scraper** on Apify. Extract activity details, pricing options, AND customer reviews in a single run — no need to combine multiple scrapers.

### Why this scraper?

- **All-in-one**: Other scrapers give you search results only OR reviews only. This one gives you **everything** — activity details, pricing options, and reviews.
- **No official API needed**: Klook's API is partner-only. This scraper gives you the same data without a merchant partnership.
- **Multi-language & multi-currency**: Support for **7 languages** (English, Korean, Japanese, Chinese, Indonesian, Thai) and **8 currencies** (USD, KRW, JPY, TWD, SGD, THB, EUR, GBP).
- From the maker of [Agoda Reviews Scraper](https://apify.com/huggable_quote/agoda-reviews-scraper) and [Naver Map Scraper](https://apify.com/huggable_quote/naver-map-scraper).

### What data can you extract?

#### Activity Details (18+ fields)

| Field | Description |
|-------|-------------|
| `activityId` | Klook internal activity ID |
| `activityName` | Activity name (localized) |
| `activityUrl` | Full URL to the activity page |
| `description` | Full description text |
| `highlights` | Key highlights / selling points |
| `inclusions` | What's included (when available) |
| `exclusions` | What's not included (when available) |
| `duration` | Duration (e.g., "1hr 30min", "Full day") |
| `location` | City and country |
| `address` | Venue / meeting point |
| `price` | Lowest available price |
| `originalPrice` | Price before discount |
| `currency` | Price currency |
| `discount` | Discount rate |
| `rating` | Average rating (1-5 scale) |
| `reviewCount` | Total number of reviews |
| `bookingCount` | Booking popularity (e.g., "50K+ booked") |
| `photos` | Photo URLs |

#### Pricing Options

| Field | Description |
|-------|-------------|
| `name` | Option/ticket type name (e.g., "Adult", "Child") |
| `price` | Price for this option |
| `originalPrice` | Original price before discount |
| `currency` | Currency |

#### Reviews (10+ fields per review)

| Field | Description |
|-------|-------------|
| `reviewId` | Unique review ID |
| `reviewText` | Review content |
| `rating` | Star rating (1-5) |
| `reviewerName` | Reviewer's display name |
| `reviewDate` | Date the review was posted |
| `travelDate` | Date of the experience |
| `photos` | Review photo URLs |
| `translatedText` | Machine-translated version (if available) |
| `originalLanguage` | Original language of the review |
| `helpful` | Number of "helpful" votes |

### How to use

#### Option 1: Direct Activity URLs

Provide specific Klook activity page URLs to scrape:

```json
{
    "startUrls": [
        { "url": "https://www.klook.com/activity/2270-hong-kong-ocean-park-ticket/" },
        { "url": "https://www.klook.com/activity/1000-tokyo-disneyland-ticket/" }
    ],
    "includeReviews": true,
    "maxReviewsPerActivity": 100
}
```

#### Option 2: Search by Keywords

Search Klook and automatically scrape the results:

```json
{
    "searchKeywords": ["Tokyo Disneyland", "Bangkok temples"],
    "maxActivitiesPerSearch": 10,
    "includeReviews": true
}
```

#### Option 3: Search by City

Get activities for an entire city:

```json
{
    "searchCity": "seoul",
    "maxActivitiesPerSearch": 20,
    "language": "ko-KR",
    "currency": "KRW"
}
```

### Output example

```json
{
    "activityId": 97967,
    "activityName": "Oxford University & City Centre Half-Day Guided Tour",
    "activityUrl": "https://www.klook.com/en-US/activity/97967/",
    "description": "Get your tickets for the Oxford University College Walking Tour and enjoy an unforgettable experience here today!",
    "highlights": [
        "Journey through human history's turning points, from petty rivalries to perplexing architectural masterpieces",
        "Oxford students blend personal experiences with deep passion for unique city tours",
        "Choose between a join-in group or private tour"
    ],
    "inclusions": [],
    "exclusions": [],
    "duration": "1hr 30min",
    "location": "Oxford, United Kingdom",
    "address": "Balliol College",
    "price": 42.0,
    "originalPrice": 49.0,
    "currency": "USD",
    "discount": "15% OFF",
    "rating": 3.1,
    "reviewCount": 13,
    "bookingCount": "1K+ booked",
    "photos": ["https://res.klook.com/images/..."],
    "options": [
        { "name": "Join-in Group Tour", "price": 42.0, "currency": "USD" },
        { "name": "Private Tour", "price": 120.0, "currency": "USD" }
    ],
    "reviews": [
        {
            "reviewId": 12979366,
            "reviewText": "A great day, not our first time with Alumni Tours however first time booking with Klook and the process was much easier.",
            "rating": 5.0,
            "reviewerName": "Klook User",
            "reviewDate": "2024-10-27 09:38:23",
            "travelDate": "2024-10-25",
            "photos": [],
            "translatedText": "A great day, not our first time...",
            "originalLanguage": "en_GB",
            "helpful": 0
        }
    ],
    "scrapedAt": "2026-05-08T00:00:00+00:00",
    "language": "en-US"
}
```

### Proxy configuration

Klook uses anti-bot protection (DataDome). For best results:

- **Recommended**: Use Apify **Residential** proxies
- **Alternative**: Apify Datacenter proxies may work for lower volumes
- Set reasonable delays between requests (built-in: 1-3 seconds)

### Use cases

- **Travel market research** — Compare activity offerings across destinations
- **Price monitoring** — Track pricing changes over time
- **Competitive intelligence** — Analyze competitor activity portfolios on Klook
- **Sentiment analysis** — Process review data with NLP for traveler insights
- **Recommendation engines** — Build activity suggestion systems with structured data
- **Academic research** — Study tourism trends and consumer behavior

### Pricing

Pay per event:

| Event | Price | Description |
|-------|-------|-------------|
| **Activity result** | $3.50 / 1,000 results | Charged per activity scraped |
| **Review** | $0.20 / 1,000 reviews | Charged per review collected |

Reviews are charged separately so you only pay for what you use. Set `maxReviewsPerActivity` to control costs, or leave it at 0 to collect all available reviews.

### Related scrapers

Looking for more travel data?

- **[Agoda Reviews Scraper](https://apify.com/huggable_quote/agoda-reviews-scraper)** — Extract hotel reviews from Agoda
- **[Naver Map Scraper](https://apify.com/huggable_quote/naver-map-scraper)** — Scrape Korean local business data from Naver Maps

### Legal notice

This scraper is provided for educational and research purposes. Users are responsible for compliance with Klook's Terms of Service and applicable laws. Respect rate limits and robots.txt directives.

# Actor input Schema

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

Direct Klook activity page URLs to scrape. Example: https://www.klook.com/activity/1234-some-activity/

## `searchKeywords` (type: `array`):

Keywords to search on Klook. Example: Tokyo Disneyland, Bangkok temples

## `searchCity` (type: `string`):

City name to search for activities. Example: tokyo, bangkok, seoul

## `maxActivitiesPerSearch` (type: `integer`):

Maximum number of activities to collect per search keyword or city.

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

Whether to scrape customer reviews for each activity.

## `maxReviewsPerActivity` (type: `integer`):

Maximum number of reviews to collect per activity. Set 0 to collect all available reviews. Reviews are charged separately ($0.20 per 1,000 reviews).

## `includeOptions` (type: `boolean`):

Whether to scrape detailed pricing options (ticket types and individual prices).

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

Content language for the scraped data.

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

Currency for price display.

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

Proxy settings. Recommended: Apify Residential proxies for best success rate.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.klook.com/activity/97967-oxford-university-college-walking-tour/"
    }
  ],
  "maxActivitiesPerSearch": 20,
  "includeReviews": true,
  "maxReviewsPerActivity": 0,
  "includeOptions": true,
  "language": "en-US",
  "currency": "USD",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "startUrls": [
        {
            "url": "https://www.klook.com/activity/97967-oxford-university-college-walking-tour/"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("huggable_quote/klook-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 = {
    "startUrls": [{ "url": "https://www.klook.com/activity/97967-oxford-university-college-walking-tour/" }],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("huggable_quote/klook-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 '{
  "startUrls": [
    {
      "url": "https://www.klook.com/activity/97967-oxford-university-college-walking-tour/"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call huggable_quote/klook-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bHbXvWBcH3E3mJjuR/builds/y1Rg9tqFDwAynAyzg/openapi.json
