Klook Activity Reviews Scraper avatar

Klook Activity Reviews Scraper

Pricing

from $1.40 / 1,000 review-scrapeds

Go to Apify Store
Klook Activity Reviews Scraper

Klook Activity Reviews Scraper

Scrape every review Klook shows for an activity. Just add activity ids or URLs and get the rating, full text, English translation, photos, reviewer, date, likes and the package booked, plus the activity rating and AI summary. Sort them or get only new ones. $2.00 per 1,000 reviews.

Pricing

from $1.40 / 1,000 review-scrapeds

Rating

0.0

(0)

Developer

BonCross API

BonCross API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

What is Klook Activity Reviews Scraper?

Klook Activity Reviews Scraper collects the traveller reviews of any Klook tour, ticket or pass. You paste the activity's link and get each review with its rating, its full text, Klook's English translation and the exact package the reviewer booked.

That last part is what most review data is missing. A Bangkok temple tour on Klook sells 20 packages, private and join-in, half-day and full-day. A complaint about "the tour" is only useful once you know which one, and each row here names the package and its id.

  • Reviews written in Chinese, Korean, Thai or Japanese arrive with Klook's translation beside the original. In a sample of 25 recent reviews of Seoul's WOWPASS card, 23 had one.
  • It's quick: the newest 100 reviews of each of 15 activities, 1,500 in all, took 5 to 7 seconds.
  • Run it on a schedule and you get only the reviews posted since last time. Reviews you've already had are free.
  • $2.00 per 1,000 reviews on the Free plan, $1.40 on Business, with no proxy to arrange and no usage charges on top.

BonCross Verified means we tested this actor against the live site before release and kept the record:

  • 26 of 26 live checks on its inputs and filters passed on 8 October 2026
  • 14 activities run on 7 October 2026: 257 reviews, 5 summaries, 2 error rows
  • Charges matched the rows: 12 activities, 257 reviews
  • An unknown id or an activity with no reviews gets an uncharged row saying so

Reviews are one of four things you can get from Klook with BonCross actors. To find activities in a city, use Klook Search Scraper. For an activity's packages, description and FAQs there's Klook Activity Details Scraper, and for dated prices and places left, Klook Activity Availability & Prices.

How to scrape Klook reviews

  1. Sign up for a free Apify account, then open Klook Activity Reviews Scraper.
  2. Paste one or more Klook activity links. The activity number on its own works too.
  3. Choose how many reviews you want per activity and the order: newest, most relevant, highest or lowest rated.
  4. Press Start. A couple of hundred reviews take a few seconds.
  5. Open the Output tab and download the reviews as Excel, CSV or JSON.

What data comes with each review?

⭐ Rating out of fiveRating wording, such as Fantastic
📝 Full review text🌐 Klook's English translation
🎟️ Package booked, name and id🔗 Activity link
👤 Reviewer name and avatar📅 Posted date and time
📷 Review photos, full sizePhoto count
👍 Helpful votesWhether the operator replied
Activity rating and review countKlook's own review summary
Review idThe sort and filter you used

⬇️ Input

All the form needs is an activity link. Left alone, it returns the newest 200 reviews of each activity plus one row with Klook's own summary of what reviewers say.

You have two limits. "Max reviews per activity" applies to each activity separately: ten activities at 50 each returns 500. Set it to 0 to keep going until the reviews run out. "Maximum results for the whole run" caps the total, and nothing past it is fetched or charged.

The newest 200 reviews of one activity

{
"activities": ["https://www.klook.com/en-GB/activity/3021-bangkok-must-visit-landmarks-day-tour/"],
"maxReviewsPerActivity": 200,
"sort": "newest"
}

Everything written since a date

{
"activities": ["1163"],
"sort": "newest",
"reviewedAfter": "2026-08-01",
"maxReviewsPerActivity": 1000
}

The worst reviews first, for a quality check

{
"activities": ["122675"],
"sort": "lowest",
"maxReviewsPerActivity": 500
}

Only reviews with photos

{
"activities": ["3021"],
"filter": "photos",
"onlyWithPhotos": true,
"maxReviewsPerActivity": 300
}

A daily watch on two activities, new reviews only

{
"activities": ["3021", "86208"],
"sort": "newest",
"maxReviewsPerActivity": 100,
"dedupStoreName": "klook-reviews-seen"
}
FieldNotes
activitiesKlook activity links or activity numbers.
startUrlsThe same links loaded in bulk from a file, a Google Sheet or a remote list. Combined with activities.
maxReviewsPerActivity, maxItemsThe per-activity limit (default 200) and the run-wide one (default 0, no limit).
sortnewest (default), relevant, highest or lowest.
filterall (default), photos, or mylanguage for reviews written in your language.
minRatingDrops reviews below this score out of 5. Default 0. Filtered rows are free.
reviewedAfterA date as YYYY-MM-DD. Older reviews are left out.
onlyWithPhotosDrops reviews with no images. Default off.
includeAiSummaryAdds the summary row per activity. Default on.
currency, languageDefault USD and en_GB. The language also sets the language of the translation and the summary.
dedupStoreNameNames the store that remembers which reviews you've had.
pageSize, maxConcurrency, delayMsAdvanced. See below.

For developers

  • When a filter or the only-new store keeps nothing, the read stops early: after 5 pages in a row with no review kept, or after about three times the pages the per-activity limit needs.
  • On the newest-first order it also stops at the reviewedAfter date and at the first review an earlier run returned. That's why a scheduled run with dedupStoreName returns only the reviews posted since the last run. Older reviews that an earlier run didn't return aren't filled in later.
  • On the other orders reviewedAfter works as a filter, because those lists aren't in date order.
  • pageSize (default 50, from 10 to 50) is how many reviews are asked for at a time. A thousand reviews is twenty requests.
  • Klook occasionally returns an empty page part way down. The actor retries, and stops only when two pages in a row are empty.
  • maxConcurrency (default 64, from 1 to 64) is how many requests run at once, and delayMs (default 0, up to 10,000) adds a pause before each. We'd leave both alone unless a run reports errors.
  • activity-resolved is charged once Klook returns a rating or a review for the activity. An id with neither gets a row with an error and no fee.
  • If a review page can't be read after the activity resolved, the reviews already read are kept and one free row names the page where the list stopped.
  • If Apify moves a run to another server part-way through, it carries on where it stopped. Rows already delivered aren't written or charged again.

⬆️ Output

Each review is one row. This one is from the Bangkok temple tour, written in Chinese by someone on the join-in full-day package:

{
"input": "https://www.klook.com/en-US/activity/3021-bangkok-must-visit-landmarks-day-tour/",
"dataType": "review",
"id": "19478229",
"reviewId": "19478229",
"url": "https://www.klook.com/en-GB/activity/3021-activity/",
"activityId": "3021",
"rating": 5,
"ratingScale": 5,
"ratingText": "Fantastic",
"text": "体验很好,中英文导游都有,会有讲解,行程安排也比较合理,非常适合第一次来泰国参观的游客。导游CHOPIN和她的搭档,另一个会说中文的姐姐,比较负责幽默。",
"textTranslated": "Great experience, with both Chinese and English-speaking guides providing explanations. The itinerary is quite well-arranged, making it very suitable for first-time visitors to Thailand. The tour guide CHOPIN and her partner, another friendly lady who speaks Chinese, were very responsible and humorous.",
"isTranslated": true,
"authorName": "Klook客路用户",
"authorAvatar": "https://cdn.klook.com/upload/img200X200/Property_1_zh_CN_03.png",
"postedAt": "2026-10-05T10:20:39.000Z",
"postedText": "2026-10-05T10:20:39.000Z",
"packageId": "608302",
"packageName": "Join-in · Emerald Buddha + Grand Palace + Wat Arun + Wat Pho · Full day · With admission tickets · Siam Paragon Meet Up",
"images": [
"https://cdn.klook.cn/user_review/product/1949762/fbd670a4-bbd5-42d8-6450-39f17955d7e4.0*1200.jpeg",
"https://cdn.klook.cn/user_review/product/1949762/40ea4079-54ba-4011-7be4-3037dbe77cd7.0*1200.jpeg",
"https://cdn.klook.cn/user_review/product/1949762/d96a9030-f396-44a0-5190-f1f9a57634f0.0*1200.jpeg"
],
"imageCount": 3,
"likes": 1,
"hasReply": false,
"activityRating": 4.8,
"activityRatingScale": 5,
"activityReviewCount": 5787,
"sort": "newest",
"filter": "all",
"currency": "USD",
"scrapedAt": "2026-10-07T16:50:02.251Z"
}

With the summary switched on, each activity that has one also produces a row with dataType: "summary". It holds the activity rating, its wording, the review count and Klook's summary points in aiSummary, each with a title and text, under the heading Klook gives them in aiSummaryTitle. For this tour the points were Overall impression, Guide, Itinerary, Quality of transfer and Value for money. The summary row isn't charged as a review.

postedText keeps the date as Klook wrote it, beside the parsed postedAt. A row with an error and no review fields usually means Klook has no reviews and no rating for that id. The error text says which case you're looking at.

How many reviews can you get, and how fast?

RunRowsTimePrice
Newest 200 reviews of one activity with 89,507 reviews200 reviews + 1 summary2 to 7 s$0.404
Newest 200 reviews each of three activities600 reviews + 2 summaries1.5 to 4 s$1.208
Newest 100 reviews each of 15 activities1,500 reviews + 7 summaries5 to 7 s$3.032

Times are whole runs, start to finish. At roughly 15,000 reviews a minute, what limits you is how deep each activity's reviews go, not the clock.

On depth, be realistic. Very deep paging thins out well before the headline review count, so treat that count as the size of the pool. It isn't a promise that each one can be reached.

How much does it cost to scrape Klook reviews?

EventFree planStarterScaleBusiness
actor-start, per run$0.002$0.002$0.002$0.002
activity-resolved, per activity$0.002$0.002$0.002$0.002
review-scraped, per review returned$0.002$0.0018$0.0016$0.0014

Enterprise plans pay the Business price.

$2.00 per 1,000 reviews on the Free plan, $1.40 on Business, platform usage and proxy included. You don't pay for reviews a filter removed, for reviews an earlier run already gave you, or for the summary row.

  • 200 reviews of one activity: $0.002 + $0.002 + 200 × $0.002 = $0.404 ($0.284 on Business).
  • A daily watch on five activities that finds 40 new reviews between them: $0.002 + 5 × $0.002 + 40 × $0.002 = $0.092 ($0.068 on Business).

On Apify's Free plan, the $5 of monthly credits pays for about 2,400 reviews at the size of the first example, or 54 days of that daily watch.

Monitoring, analysis and your own code

The setup we'd recommend for anyone managing a product on Klook is the daily watch: an Apify Schedule, the newest-first order and an only-new store. Each morning you get yesterday's reviews, and a webhook can post to Slack when a run brings any back.

People also use the reviews to find out which package draws the complaints, to compare how one attraction is reviewed across operators, to pull quotes and photos for a travel guide, and to build a translated corpus for sentiment analysis.

From code, POST https://api.apify.com/v2/acts/boncross~klook-reviews/run-sync-get-dataset-items with the input as the JSON body returns the reviews in one request. Through the Apify MCP server (mcp.apify.com) an AI agent sees the actor as the tool boncross/klook-reviews and can be asked to summarise the last month of reviews for an activity.

Limitations

  • Klook reviews have no headline, and there's no title field. The rating wording, such as Fantastic, is the closest thing.
  • Klook masks part of each reviewer's name. The full name can't be recovered.
  • The language a review was written in isn't published, and rows have no language field. The translation follows your language setting.
  • Operator replies are flagged with hasReply. The reply text isn't returned.
  • The photo filter narrows the pool without reordering it. On a heavily reviewed activity the first page can look unchanged.
  • "Most relevant" is Klook's own ranking. Nothing on the row lets you check it, unlike the newest and rating orders.
  • Activities only. Klook's hotel pages use different addresses and ids, and this actor doesn't read them.

FAQ

Do I need proxies or a Klook account?

You need neither, and there's no proxy charge added to the per-review price.

Where do I find the activity number?

It's the number in the address of the activity page: 3021 in klook.com/en-GB/activity/3021-bangkok-must-visit-landmarks-day-tour/. Paste the whole address and the number is picked out for you.

How do I get only the bad reviews?

Sort by lowest rating and stop at the number you need. The "Minimum rating" filter works the other way round: it keeps the good ones.

How do I get only the reviews posted since my last run?

Give "Only-new store" a name, keep the newest-first order, and use the same name on each run. The run stops at the first review it has returned before.

Why did I get fewer reviews than the activity's review count?

Klook's list thins out at depth, well before the headline count. An activity showing 89,507 reviews won't hand over all of them. Filters reduce the number as well, and filtered rows cost nothing.

What happens with an activity that has no reviews, or a wrong id?

Klook answers both the same way, with no reviews and no rating. You get one row for that input saying so, and no activity fee is charged. The same goes for an activity Klook wouldn't answer for at all on this run: one free row that says what happened and what to try next.

Can I get the reviews in English?

Reviews written in other languages come with Klook's translation in textTranslated, next to the original in text. Set "Language" to another locale and the translation and the summary follow it.

The actor reads reviews Klook shows to any visitor who isn't logged in. Reviewer names arrive already masked by Klook. Scraping public data is generally lawful, but reviews are personal opinions written by people, so check Klook's terms and the data protection law that applies to you before you republish them.

More from BonCross

Your feedback

If a review on Klook's page is missing from your rows, or a translation looks cut short, open an issue on the Issues tab in Apify Console and include the activity link. We read each one and reply there.