# Klook Reviews Scraper (`stealth_mode/klook-reviews-scraper`) Actor

Scrape verified traveler reviews from Klook.com including ratings, review content, user info, check-in details, and images. Perfect for hospitality businesses, travel analysts, and reputation management teams needing structured review data.

- **URL**: https://apify.com/stealth\_mode/klook-reviews-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

Learn more: https://docs.apify.com/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.com Reviews Scraper: Extract Hotel & Activity Reviews at Scale

***

### What Is Klook.com?

Klook is a leading travel experiences and accommodation booking platform serving millions of travelers across Asia and beyond. Its review system contains verified, post-stay feedback on hotels, tours, and activities — making it a valuable source for sentiment analysis, competitive benchmarking, and reputation monitoring. Manually collecting this data is impractical at scale; the **Klook Reviews Scraper** automates the extraction into clean, structured records.

***

### Overview

The **Klook.com Reviews Scraper** targets review pages for both hotels and activities, collecting rich traveler feedback data. Designed for:

- **Hotel & attraction managers** monitoring guest sentiment
- **Travel analysts** tracking rating trends over time
- **Researchers** studying traveler behavior and language patterns
- **OTA aggregators** building review datasets across platforms

It supports sorting options, pagination control, and configurable item limits — giving you precise control over what data is collected.

***

### Input Format

The scraper accepts a JSON configuration:

```json
{
  "ignore_url_failures": true,
  "max_items_per_url": 200,
  "page": 1,
  "item_id": "285841",
  "sort_by": "sort_most_relevant",
  "type": "hotels"
}
```

#### Field Reference

| Field | Type | Description |
|---|---|---|
| `item_id` | `string` | The numeric ID found in the Klook URL. Examples: `en-US/activity/107259-parapharmacie-monge.../` → `107259`; `hotels/detail/285841-hotel-gracery-shinjuku/` → `285841` |
| `type` | `string` | Type of listing. Accepted values: `"activity"` or `"hotels"` |
| `sort_by` | `string` | Sort order for reviews. Options: `"sort_most_relevant"` (Relevant), `"sort_review_time_desc"` (Newest), `"sort_score_high_to_low"`, `"sort_score_low_to_high"` |
| `page` | `integer` | Page number to start scraping from. Defaults to `1` |
| `max_items_per_url` | `integer` | Maximum reviews to collect per run. Default: `20`; set higher (e.g., `200`) for bulk collection |
| `ignore_url_failures` | `boolean` | If `true`, skips failed requests instead of stopping the run. Recommended: `true` for reliability |

> **Tip:** To find an `item_id`, open a Klook hotel or activity page and extract the number from the URL path (e.g., `.../285841-hotel-name/` → `285841`).

***

### Output Format

#### Sample Record (Abbreviated)

```json
{
  "review_id": 14215787,
  "user_info": {
    "user_name": "LAM ********",
    "user_avatar": "https://cdn.klook.com/upload/img200X200/7030dc178eb8486b5869aee21b7eb986.jpg",
    "user_rating": "5.0",
    "rating_desc": "",
    "rating_time": "2024-12-01T05:41:48.000Z"
  },
  "review_content": "當日剛巧還遇上Black Friday Sale, 部份產品還可以用上這張購物優惠券，購物滿100歐元後還可以退稅",
  "translate_content": "..",
  "has_reply": false,
  "show_translation": true,
  "has_liked": false,
  "liked_count": 0,
  "product_info": {
    "id": 362471,
    "product_name": "Shopping coupon",
    "deeplink": "",
    "is_booking_now": true
  },
  "review_image_list": [
    {
      "id": 16351779,
      "resize_url": "https://cdn.klook.com/user_review/product/1947978/120e330f-ba51-44af-72d1-c1d62882df0c.250*0.jpeg",
      "url": "https://cdn.klook.com/user_review/product/1947978/120e330f-ba51-44af-72d1-c1d62882df0c.1200*0.jpeg"
    },
    {
      "id": 16351778,
      "resize_url": "https://cdn.klook.com/user_review/product/1947978/5874823f-d846-487e-4b4c-4fb9c96c47e4.0*250.jpeg",
      "url": "https://cdn.klook.com/user_review/product/1947978/5874823f-d846-487e-4b4c-4fb9c96c47e4.0*1200.jpeg"
    },
    {
      "id": 16351782,
      "resize_url": "https://cdn.klook.com/user_review/product/1947978/13ece126-d143-4021-516e-d13fd58223d1.0*250.jpeg",
      "url": "https://cdn.klook.com/user_review/product/1947978/13ece126-d143-4021-516e-d13fd58223d1.0*1200.jpeg"
    },
    {
      "id": 16351777,
      "resize_url": "https://cdn.klook.com/user_review/product/1947978/9ba8b1aa-0a84-4b41-6a3b-1710d87d48ec.0*250.jpeg",
      "url": "https://cdn.klook.com/user_review/product/1947978/9ba8b1aa-0a84-4b41-6a3b-1710d87d48ec.0*1200.jpeg"
    },
    {
      "id": 16351780,
      "resize_url": "https://cdn.klook.com/user_review/product/1947978/d54ab03d-f19e-4d39-5ff7-9d394c4e6f99.0*250.jpeg",
      "url": "https://cdn.klook.com/user_review/product/1947978/d54ab03d-f19e-4d39-5ff7-9d394c4e6f99.0*1200.jpeg"
    },
    {
      "id": 16351781,
      "resize_url": "https://cdn.klook.com/user_review/product/1947978/7143c819-5934-4d26-6d27-8fca9c9cf4c4.0*250.jpeg",
      "url": "https://cdn.klook.com/user_review/product/1947978/7143c819-5934-4d26-6d27-8fca9c9cf4c4.0*1200.jpeg"
    }
  ],
  "check_in_info": null,
  "language": null,
  "review_time": null,
  "review_score": null,
  "from_url": null
}
```

Each review returns a structured record with the following fields:

| Field | Meaning |
|---|---|
| `Review ID` | Unique identifier for the review |
| `User Info` | Reviewer's display name, nationality, and profile metadata |
| `Review Content` | Full original review text as submitted by the traveler |
| `Translate Content` | Machine-translated version of the review (if applicable) |
| `Show Translation` | Boolean flag indicating whether a translation is displayed |
| `Has Reply` | Whether the property or operator has responded to the review |
| `Has Liked` | Whether the current session user has liked the review |
| `Liked Count` | Total number of likes the review has received |
| `Review Score` | Numeric rating given by the reviewer (typically 1–5) |
| `Review Time` | Timestamp of when the review was submitted |
| `Language` | Detected language of the original review content |
| `Check In Info` | Check-in or experience date, and room/activity variant if available |
| `Product Info` | Name and ID of the hotel or activity being reviewed |
| `Review Image List` | Array of image URLs uploaded by the reviewer |

***

### How to Use

1. **Find the Item ID** — Open any Klook hotel or activity page. Extract the numeric ID from the URL (the number before the slug).
2. **Set the type** — Use `"hotels"` for accommodation, `"activity"` for tours and experiences.
3. **Choose sort order** — Use `"sort_review_time_desc"` for the latest reviews, or `"sort_most_relevant"` for highest-signal feedback.
4. **Set page and limit** — Start from `page: 1` and set `max_items_per_url` to your target volume (up to `200` per run).
5. **Run and export** — Download results as JSON or CSV for analysis.

**Common issues:**

- If no results return, double-check that `type` matches the URL type (`hotels` vs `activity`).
- For items with fewer reviews than `max_items_per_url`, the scraper will simply return all available records.

***

### Use Cases & Business Value

- **Reputation management:** Aggregate guest feedback across properties for QA teams
- **Sentiment analysis:** Feed review text into NLP pipelines to detect recurring themes
- **Competitive benchmarking:** Compare scores and feedback patterns across similar listings
- **Content research:** Identify what travelers highlight most (location, service, cleanliness)

***

### Conclusion

The **Klook.com Reviews Scraper** delivers structured, detailed traveler review data without manual effort. With flexible sorting, language metadata, image lists, and check-in context per record, it provides everything needed for meaningful analysis of guest experience on one of Asia's most active travel platforms.

# Actor input Schema

## `item_id` (type: `string`):

Enter Item ID. For example, en-US/activity/107259-parapharmacie-monge-shopping-coupon-paris/ -> 68846 | hotels/detail/285841-hotel-gracery-shinjuku/ -> 285841

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

Select Item Type

## `sort_by` (type: `string`):

Select your option to sort reviews

## `page` (type: `integer`):

Page to start from

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "item_id": "107259",
  "type": "activity",
  "page": 1,
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "item_id": "107259",
    "type": "activity",
    "page": 1,
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/klook-reviews-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 = {
    "item_id": "107259",
    "type": "activity",
    "page": 1,
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/klook-reviews-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 '{
  "item_id": "107259",
  "type": "activity",
  "page": 1,
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/klook-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/gwfmGu6SB9eJTiPLF/builds/dnqRTboKByZxXEWQl/openapi.json
