Klook Reviews Scraper avatar

Klook Reviews Scraper

Pricing

Pay per event

Go to Apify Store
Klook Reviews Scraper

Klook Reviews Scraper

Extract public traveler reviews from Klook activities and hotels with ratings, translations, images, reviewer details, likes, and booking context.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Collect public traveler feedback from Klook activity and hotel pages with the Klook Reviews Scraper.

Turn review pages into structured records containing review text, translations, ratings, images, reviewer details, likes, package names, room context, and timestamps. Use the output in reputation dashboards, guest-experience reports, competitive research, sentiment analysis, or AI workflows.

The Actor accepts normal Klook URLs. You do not need to find an API endpoint, provide a Klook account, or manually copy page IDs.

What does Klook Reviews Scraper do?

Klook Reviews Scraper extracts one dataset row per public review from:

  • 🎟️ Klook activities, tours, attractions, experiences, and tickets
  • 🏨 Klook hotel detail pages
  • 🌍 Locale-specific URLs such as en-US, ko, ja, and zh-TW

It supports newest, relevant, high-rating, and low-rating ordering for activities. A date cutoff helps scheduled runs focus on recent feedback.

Why use this Klook review extractor?

Manual review collection is slow and difficult to repeat. This Actor provides:

  • βœ… Structured JSON, CSV, Excel, XML, and RSS exports
  • βœ… Original and Klook-translated review text
  • βœ… Ratings, labels, dates, reviewer names, and avatars
  • βœ… Activity package names, review likes, and images
  • βœ… Hotel room, guest, stay-length, and language context
  • βœ… Pagination, deduplication, retry handling, and output limits
  • βœ… Direct integration with Apify schedules, webhooks, API, and MCP

Who is it for?

Tour and activity operators can monitor feedback on their products and competing attractions.

Hotel reputation teams can aggregate guest comments, scores, room context, and recurring service themes.

Destination marketers can compare visitor sentiment across attractions and accommodation partners.

Travel agencies and OTAs can build internal quality dashboards and supplier reports.

Researchers and data teams can create clean multilingual review datasets for analysis.

Supported Klook pages

Use full public URLs in either of these forms:

https://www.klook.com/en-US/activity/3303-eiffel-tower-skip-the-line-entry-paris/
https://www.klook.com/en-US/hotels/detail/285841-hotel-gracery-shinjuku/

The Actor reads the numeric page ID and source type from the URL. Search result pages, destination pages, account pages, and booking pages are not supported.

What Klook review data can I extract?

FieldDescription
sourceTypeactivity or hotel
pageIdKlook activity or hotel ID
pageUrlNormalized source URL
reviewIdKlook review ID or deterministic hotel-review fingerprint
reviewTimeReview date or timestamp
contentOriginalOriginal traveler review
contentTranslatedKlook-provided translation, when available
scoreNumeric review score
scoreLabelHuman-readable rating label
reviewerNamePublic masked display name
reviewerAvatarUrlPublic avatar image URL
imagesTraveler-uploaded image URLs
likeCountActivity review likes
packageId / packageNameActivity package context
checkInInfoHotel room, guests, and stay context
originalLanguageHotel review source language
translatedLanguageHotel translation language
hasReplyWhether an activity review has a reply
scrapedAtUTC extraction timestamp

Input options

InputTypeDefaultPurpose
startUrlsarrayrequiredActivity and hotel detail URLs
maxReviewsPerUrlinteger20Per-page review cap
maxItemsinteger50Overall dataset cap
sortBystringnewestActivity review order
languagestringen-USLocale for translated content
cutoffDatedateemptyExclude older reviews
proxyConfigurationobjectemptyOptional Apify Proxy fallback

Keep the first run small. Increase limits after confirming that the selected Klook pages contain the review volume you expect.

Example: scrape newest activity reviews

{
"startUrls": [
{
"url": "https://www.klook.com/en-US/activity/3303-eiffel-tower-skip-the-line-entry-paris/"
}
],
"maxReviewsPerUrl": 10,
"maxItems": 10,
"sortBy": "sort_review_time_desc",
"language": "en-US"
}

This workflow is useful for tracking recently published attraction feedback.

Example: extract hotel guest feedback

{
"startUrls": [
{
"url": "https://www.klook.com/en-US/hotels/detail/285841-hotel-gracery-shinjuku/"
}
],
"maxReviewsPerUrl": 25,
"maxItems": 25,
"language": "en-US"
}

Hotel output includes room and stay context when Klook exposes it.

Example: monitor reviews after a date

{
"startUrls": [
{ "url": "https://www.klook.com/en-US/activity/3303-eiffel-tower-skip-the-line-entry-paris/" },
{ "url": "https://www.klook.com/en-US/hotels/detail/285841-hotel-gracery-shinjuku/" }
],
"maxReviewsPerUrl": 100,
"maxItems": 200,
"sortBy": "sort_review_time_desc",
"language": "en-US",
"cutoffDate": "2026-01-01"
}

Run this input on an Apify schedule and send the dataset to a webhook or data warehouse.

Example output

{
"sourceType": "activity",
"pageId": "3303",
"pageUrl": "https://www.klook.com/en-US/activity/3303-eiffel-tower-skip-the-line-entry-paris/",
"reviewId": "18903604",
"reviewTime": "2026-07-14T06:06:06.000Z",
"contentOriginal": "Unfortunately our tour was canceled...",
"contentTranslated": "Unfortunately our tour was canceled...",
"score": 4,
"scoreLabel": "Great",
"images": [],
"likeCount": 0,
"reviewerName": "Metua *************",
"packageId": "323076",
"packageName": "Eiffel Tower: 2nd floor + Seine River cruise",
"hasReply": false,
"scrapedAt": "2026-07-15T03:15:00.000Z"
}

Optional fields are omitted when Klook does not expose them.

How to run the scraper

  1. Open Klook Reviews Scraper on Apify.
  2. Add one or more activity or hotel detail URLs.
  3. Choose small per-URL and overall review limits.
  4. Select an activity sort order and Klook language.
  5. Optionally add a date cutoff or proxy configuration.
  6. Click Start.
  7. Preview or export the default dataset.

Sorting and date cutoffs

Activity pages support:

  • sort_most_relevant
  • sort_review_time_desc
  • sort_score_high_to_low
  • sort_score_low_to_high

Klook returns hotel reviews newest first. For efficient recurring monitoring, combine sort_review_time_desc with cutoffDate.

A cutoff filters output. If newest ordering is active, the Actor can also stop pagination after reaching older records.

How much does it cost to scrape Klook reviews?

The Actor uses pay-per-event pricing:

  • Actor start: $0.005 per run
  • Klook review: tiered by Apify plan; current BRONZE price is $0.00037345 per saved review

You pay for successfully saved review records, not requested empty pages. Apify plan discounts reduce the per-review price on higher tiers. Check the Pricing tab for the live amount before a large run.

A ten-review smoke test is approximately the start fee plus ten review events.

Export and integrations

Use Apify's dataset export to download:

  • JSON for applications and pipelines
  • CSV or Excel for analysts
  • XML or RSS for compatible tools
  • HTML table previews for quick review

Useful automation patterns include:

  • πŸ”” Webhook new reviews into Slack or Microsoft Teams
  • πŸ“Š Load scheduled datasets into BigQuery or Snowflake
  • 🧾 Send hotel review summaries to Airtable or Google Sheets
  • 🧠 Feed multilingual text into sentiment or topic models
  • πŸ”„ Compare review IDs against the previous scheduled run

JavaScript API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/klook-reviews-scraper').call({
startUrls: [{
url: 'https://www.klook.com/en-US/activity/3303-eiffel-tower-skip-the-line-entry-paris/'
}],
maxReviewsPerUrl: 10,
maxItems: 10,
sortBy: 'sort_review_time_desc',
language: 'en-US'
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python API example

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/klook-reviews-scraper').call(run_input={
'startUrls': [{
'url': 'https://www.klook.com/en-US/hotels/detail/285841-hotel-gracery-shinjuku/'
}],
'maxReviewsPerUrl': 20,
'maxItems': 20,
'language': 'en-US',
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

cURL API example

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~klook-reviews-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url": "https://www.klook.com/en-US/activity/3303-eiffel-tower-skip-the-line-entry-paris/"}],
"maxReviewsPerUrl": 10,
"maxItems": 10,
"sortBy": "sort_review_time_desc",
"language": "en-US"
}'

Poll the returned run ID or use run-sync-get-dataset-items for small synchronous jobs.

Use with Apify MCP

Connect Claude or another MCP client to Apify at:

https://mcp.apify.com/?tools=automation-lab/klook-reviews-scraper

Claude Code setup

$claude mcp add --transport http apify "https://mcp.apify.com/?tools=automation-lab/klook-reviews-scraper"

Claude Desktop setup

Add this to the Claude Desktop MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=automation-lab/klook-reviews-scraper"
}
}
}

Cursor setup

Add the same mcpServers JSON to Cursor's MCP settings and authorize your Apify account when prompted.

VS Code setup

Open the MCP server configuration in VS Code, add the HTTP URL above, and complete Apify authentication.

Example prompts:

  • β€œExtract the newest 20 reviews from this Klook attraction.”
  • β€œCollect hotel guest comments since January and summarize cleanliness concerns.”
  • β€œCompare ratings and common themes across these Klook activity URLs.”

Scheduling a Klook review monitor

Create an Apify schedule with newest sorting and a recent cutoff date. A practical workflow is:

  1. Run daily or weekly.
  2. Store the latest review IDs in your destination system.
  3. Ignore IDs already processed.
  4. Alert only on new low-score reviews.
  5. Update the cutoff periodically to limit unnecessary pagination.

The Actor itself deduplicates records within each run.

Reliability and proxy behavior

The Actor uses Klook's anonymous structured review interfaces rather than rendering the protected website. This keeps runs fast and memory-efficient.

Direct requests are attempted by default. If your account or geography receives transient blocks, configure Apify Proxy in the input. Requests use bounded retries and do not loop indefinitely.

Klook can change its public interfaces. Check run logs if a previously valid URL begins returning no data.

Limitations

  • Only public activity and hotel detail URLs are supported.
  • Activity sorting does not apply to hotels.
  • Klook may omit review IDs for hotel records; the Actor creates deterministic fallback IDs.
  • Some reviews have no translation, images, likes, avatar, or package context.
  • Review counts can change while pagination is running.
  • Deleted, moderated, private, or region-restricted content cannot be returned.
  • The Actor does not scrape private bookings or account data.

This Actor extracts publicly visible review data. Whether a specific use is lawful depends on your jurisdiction, purpose, volume, retention, and contractual obligations.

Do not use review data to harass, identify, or profile travelers. Avoid republishing personal details unnecessarily. Follow applicable privacy, database, copyright, and consumer-protection rules, as well as Klook's terms.

You are responsible for your input and use of the output.

Troubleshooting

The Actor says the URL is unsupported.

Use a Klook URL containing /activity/{numeric-id} or /hotels/detail/{numeric-id}. Do not use a search, destination, or checkout URL.

The dataset is empty.

Confirm that the page currently has public reviews, remove an overly recent cutoffDate, and inspect logs. Try a small run with optional Apify Proxy settings if Klook blocked the endpoint.

Fewer reviews were returned than requested.

The page may contain fewer public records, the date cutoff may remove older reviews, or the global maxItems limit may have been reached first.

FAQ

Does it require a Klook login?

No. It extracts anonymous public review data.

Can it scrape both activities and hotels in one run?

Yes. Add both URL types to startUrls; output uses one normalized review schema.

Can I get translated review text?

Yes, when Klook provides a translation for the requested locale.

Can I sort hotel reviews by rating?

No. Klook's hotel review interface supplies newest-first records. Activity pages support all four sort modes.

How do I collect only new reviews?

Use newest sorting and cutoffDate, then schedule the Actor.

Are duplicate reviews removed?

Yes, duplicate source/page/review identifiers are suppressed within a run.

Explore other Automation Lab actors for adjacent travel research:

Use Klook Reviews Scraper when your source pages are specifically Klook activities or hotels and you need one row per traveler review.

Support

If a valid public Klook activity or hotel URL fails, open an Actor issue with:

  • the URL type (activity or hotel),
  • a redacted example URL if possible,
  • the run ID,
  • the expected and actual record counts,
  • and the relevant log message.

Do not include private booking details, account credentials, or personal travel documents.