Klook Reviews Scraper - Activity Ratings, Photos & Text avatar

Klook Reviews Scraper - Activity Ratings, Photos & Text

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Klook Reviews Scraper - Activity Ratings, Photos & Text

Klook Reviews Scraper - Activity Ratings, Photos & Text

Scrape Klook activity, tour and experience reviews across Asia-Pacific and worldwide. Extract star ratings, full review text, translations, reviewer photos, liked counts, booked package and activity summary (city, category, score) by activity URL or ID. Export JSON, CSV, Excel.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

1

Monthly active users

8 days ago

Last modified

Security

Limited permissions

Share

Klook Reviews Scraper — Activity & Experience Reviews with Ratings, Photos and Translations

The most complete Klook review extractor on Apify. This Klook scraper lets you scrape Klook — the leading activities, tours and experiences platform across Asia-Pacific and worldwide — and pull real guest reviews with the full review text, its translation, a 0–5 star rating, reviewer photos, liked counts, the exact package booked, and each activity's overall score, city, country and category. No login, no coding. Built for reputation monitoring, competitor benchmarking, sentiment analysis and travel-experience market research.

Export every review to JSON, CSV, Excel, or API.

Apify Actor

Built for activity & tour operators tracking their reputation, travel-analytics and OTA teams, market researchers studying the Asia-Pacific experiences market, and data scientists building review/sentiment datasets.


🔎 Why scrape Klook?

Klook is the #1 platform for booking tours, activities, attraction tickets, transport passes and experiences across Asia and beyond — Japan, Taiwan, Korea, Thailand, Singapore, Hong Kong, the UAE and worldwide. Every popular activity accumulates thousands of verified guest reviews, and those reviews are unusually rich: a star rating, full free-text feedback, an on-platform translation, traveler-uploaded photos, the exact package/option the guest booked, and a helpful-vote count. That is a goldmine of first-party voice-of-customer data — but Klook gives you no download button and no public reviews API.

Collecting it by hand is painful. Reviews are paginated 10 at a time behind a JSON endpoint, the activity's name/score/city live on a different part of the page, photos are nested in a separate list per review, and the site blocks datacenter traffic. Copy-pasting hundreds of reviews is a non-starter, and a naïve HTTP request just gets a 403.

This Klook reviews scraper does all of it for you. Point it at an activity URL or ID and it returns one clean row per review, fully enriched with the activity summary, ready to export or pipe into your analytics stack.

Common reasons people scrape Klook:

  • 🎟️ Monitor the reputation of your own Klook activities and catch recurring complaints
  • 📊 Benchmark competitor tours and attractions in a destination side by side
  • 💬 Feed review text + ratings into sentiment / NLP / LLM pipelines
  • 📈 Research which experiences delight or disappoint travelers across Asia-Pacific
  • 📸 Collect reviewer-uploaded photos at scale for UGC and visual-quality analysis
  • 🤖 Build large labeled review datasets (rating, language, package, images) for ML
  • ⭐ Track rating and review-count trends for an activity over time

✨ What this Klook scraper does

  • ✅ Collects every guest review for any Klook activity, tour, ticket or experience — one clean, deduplicated row per review.
  • ✅ Full automatic pagination through Klook's get_review_list endpoint (10 reviews/page), walking page=1, 2, 3, … until the last page — hundreds to thousands of reviews per activity.
  • ✅ Rich review fields captured verbatim: reviewId, 0–5 rating, ratingDesc label (e.g. Fantastic), ISO reviewDate, original reviewContent, its translatedContent, likedCount, hasReply, the reviewer userName and userAvatar.
  • ✅ Reviewer photos — every uploaded image URL in reviewImages (|-separated) plus an imageCount.
  • ✅ Package-level attribution — packageName and packageId for the exact option the review is about.
  • ✅ Activity summary on every row (optional): activityName, activityCity, activityCountry, activityCategory, activityScore and activityReviewCount.
  • ✅ Language control — return review text in English, Chinese (Simplified / Traditional / HK), Japanese, Korean, Thai, Vietnamese, Indonesian, Malay, Spanish, French, German or Russian.
  • ✅ Sort & cap — order by Most relevant or Most recent, and cap with maxReviewsPerActivity (or set 0 for everything).
  • ✅ Resilient fetching — Asia-Pacific residential proxy with session rotation and retry/back-off, so transient 403 / 429 / 590 blocks retry on a fresh IP instead of failing the run.
  • ✅ Many activities per run and export to JSON, CSV, Excel, HTML or RSS.

Only what the code actually does — no empty promises.

🎯 Use cases

  • 🎟️ Activity & tour operators — monitor your Klook reputation, surface recurring praise and complaints, and read guest photos to improve the experience.
  • 📊 Competitor benchmarking — pull reviews, scores and photos for rival activities in a city and compare them side by side.
  • 💬 Sentiment & voice-of-customer — run review text and ratings through NLP/LLM models for experience-level insight.
  • 📈 Travel & OTA market research — study traveler preferences across Asia-Pacific: which experiences delight, which disappoint, and why.
  • 📸 UGC & photo analysis — collect reviewer-uploaded images at scale for visual quality, moderation or computer-vision work.
  • 🤖 ML / NLP training data — build large labeled review datasets (rating, language, package, images) for model training.
  • 🏨 Destination & DMO analysts — measure satisfaction for attractions and transport passes in a market.
  • 🧭 Review aggregators — add Klook experience reviews to a cross-platform ratings product.

📥 Input

Paste one or more Klook activity URLs (or numeric IDs), pick a language and sort order, set your cap, and run. All inputs are optional except at least one activity target.

FieldTypeDefaultDescription
startUrlsarray–Klook activity/experience page URLs, e.g. https://www.klook.com/en-US/activity/73749-thsr-one-way-ticket-taipei/. Works with any Klook language path (/en-US/, /zh-CN/, /ja-JP/, …). Stale slugs are fine — Klook redirects to the canonical page.
activityIdsarray–(Advanced) Numeric activity IDs — the number right after /activity/ in the URL (e.g. 73749).
languageenumenLanguage the review text is returned in: en, zh_CN, zh_TW, zh_HK, ja, ko, th, vi, id, ms, es, fr, de, ru. Klook translates reviews into the chosen language.
sortByenummost_relevantReview order: most_relevant or most_recent.
maxReviewsPerActivityinteger200Max reviews per activity. Set 0 for all available (popular activities can have tens of thousands).
includeActivityInfobooleantrueAttach activity name, city, country, category, overall score and total review count to every review.
proxyConfigurationobjectResidentialProxy settings — an Asia-Pacific residential proxy is required and enabled by default.

Example input

{
"startUrls": [
{ "url": "https://www.klook.com/en-US/activity/73749-thsr-one-way-ticket-taipei/" }
],
"language": "en",
"sortBy": "most_relevant",
"maxReviewsPerActivity": 200,
"includeActivityInfo": true,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

📋 How to get an activity URL

  1. Open klook.com and choose any activity, tour, ticket or experience.
  2. Copy the address-bar URL — it looks like .../activity/73749-thsr-one-way-ticket-taipei/.
  3. Paste it into Activity URLs. Add as many as you like.

📤 Output

One clean record per review, enriched with the activity context. Below is a real item from a fresh run of the Taipei High Speed Rail activity:

{
"reviewId": "18171293",
"activityId": "73749",
"activityName": "Taiwan High Speed Rail Ticket for non-Taiwanese",
"userName": "Lee *****",
"userAvatar": "https://cdn.klook.com/upload/img200X200/f157ba7806e0487c66f0a28d28aaca42.jpg",
"rating": "5.0",
"ratingDesc": "Fantastic",
"reviewDate": "2026-04-01T05:42:53.000Z",
"reviewContent": "The Taiwan High-Speed Rail ticket for non-Taiwanese was on a buy-one-take-one promotion. We were glad we were able to purchase it before it expired. Upon arrival, we were welcomed by nice staff who instructed us on how to redeem the ticket. The train was very clean and comfortable, and we reached Zuoying Terminal in just under two hours.",
"translatedContent": "",
"likedCount": "8",
"hasReply": "false",
"imageCount": "6",
"reviewImages": "https://cdn.klook.com/user_review/product/1949310/e69f7e58-35eb-4b42-414e-0b92abad6f78.0*1200.jpeg | https://cdn.klook.com/user_review/product/1949310/c656cc9a-050d-4461-73f6-5080d8a1731d.0*1200.jpeg",
"packageName": "Buy 1 Get 1 - Promo Code [G02TAIWAN] · Taipei · Zuoying (Kaohsiung) · Free voucher (select at checkout)",
"packageId": "339074",
"activityCity": "Taipei",
"activityCountry": "Taiwan",
"activityScore": "4.8",
"activityReviewCount": "25564",
"activityCategory": "Transport",
"activityUrl": "https://www.klook.com/en-US/activity/73749-thsr-one-way-ticket-taipei/",
"language": "en_US",
"scrapedAt": "2026-11-02T00:52:51.360Z"
}

💬 Review fields

FieldDescription
reviewIdUnique Klook review identifier (natural dedup key).
userName · userAvatarReviewer display name and avatar URL.
rating · ratingDesc⭐ Score out of 5 and its label (e.g. Fantastic).
reviewDateReview timestamp (ISO 8601).
reviewContentOriginal review text.
translatedContentTranslated text, present when Klook's translation differs from the original.
likedCount👍 How many users found the review helpful.
hasReplytrue/false — whether the merchant replied.
imageCount · reviewImages📸 Number and URLs of reviewer photos (`
packageName · packageId🎟️ The exact booked package/option the review is about.

🏙️ Activity fields (when includeActivityInfo is on)

FieldDescription
activityId · activityNameActivity identifier and name.
activityCity · activityCountryWhere the activity takes place.
activityCategoryTop category (Transport, Tours & experiences, Attractions…).
activityScoreActivity overall score out of 5.
activityReviewCountTotal reviews for the activity.
activityUrl · language · scrapedAtSource URL, review language code and extraction timestamp.

Field coverage, honestly: the review fields (reviewId, rating, ratingDesc, reviewDate, userName, userAvatar, reviewContent, likedCount, hasReply, imageCount, packageName, packageId) populate at 100% on every run. translatedContent and reviewImages are present when available — a review has a translation/photos or it doesn't. The activity summary fields populate whenever the activity has a live Klook page (the vast majority); for rare legacy or merged activities whose standalone page has been retired, the name/city/score may be blank while the reviews themselves still come through in full, and activityReviewCount is backfilled from the review feed total.

Export everything to JSON, CSV, Excel, HTML or RSS, or pull it through the Apify API and integrations.

🔁 Pagination & scale

The Klook scraper reads reviews straight from Klook's get_review_list endpoint, which serves 10 reviews per page. For every activity it starts at page=1 and walks forward page by page — page=1, page=2, page=3, … — appending each page of guest feedback to your dataset until Klook signals the last page (has_next = false) or your maxReviewsPerActivity limit is reached.

  • Hundreds to thousands per activity. Popular activities carry tens of thousands of reviews (the Taipei THSR activity above reports 25,564); the scraper paginates through all of them when you set maxReviewsPerActivity to 0.
  • Deduplicated rows. Each review is keyed by its reviewId, so reviews that repeat across page boundaries are collected once — a fresh 305-review verification run returned 0 duplicates.
  • Controlled by maxReviewsPerActivity. Cap each activity (default 200) to keep runs fast and predictable, or set 0 to pull every available review.
  • Many activities per run. Add as many Klook activity URLs or IDs as you like; the actor iterates them one after another, streams results as it goes, and updates a live progress status.
  • Resilient fetching. Each request runs through an Asia-Pacific residential proxy with automatic session rotation and retry/back-off, so transient blocks (403 / 429 / upstream 590) are retried on a fresh IP rather than failing the run.

⚙️ How to use

  1. On Apify Console — open the actor, click Try for free, paste your Klook activity URLs, choose a language and sort order, set Max reviews per activity, and hit Start.
  2. Choose an export format — download the dataset as JSON, CSV, Excel, HTML or RSS from the Storage tab.
  3. Via API — call the actor from any language with the Apify API/clients (see the Python and JavaScript snippets below).
  4. On a schedule — use Apify Schedules to re-run daily/weekly and track rating and review-count trends over time.
  5. Integrate — push results to Google Sheets, Make, Zapier, n8n, Airbyte, a database or a webhook to keep a live review pipeline.

Run via API (Python)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"startUrls": [
{"url": "https://www.klook.com/en-US/activity/73749-thsr-one-way-ticket-taipei/"}
],
"language": "en",
"sortBy": "most_relevant",
"maxReviewsPerActivity": 200,
"includeActivityInfo": True,
}
run = client.actor("haketa/klook-reviews-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["rating"], item["userName"], "|", item["reviewContent"][:80])

Run via API (JavaScript)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('haketa/klook-reviews-scraper').call({
startUrls: [{ url: 'https://www.klook.com/en-US/activity/73749-thsr-one-way-ticket-taipei/' }],
language: 'en',
maxReviewsPerActivity: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

💡 Tips

  • Want everything? Set maxReviewsPerActivity to 0 to paginate to the last page of an activity.
  • Keep runs fast & cheap? The default cap of 200 is a good sweet spot for monitoring; raise it only when you need deep history.
  • English is the widest output. Klook translates each review into the language you pick — the set of reviews collected is the same, so en gives the most readable text for most pipelines.
  • Freshest feedback first? Use sortBy: "most_recent" to watch for new complaints or praise as they land.
  • Batch a destination. Paste every competitor activity URL for a city into startUrls to benchmark a whole market in one run.
  • Stale or changed URL? Don't worry about the slug — Klook redirects an old slug to the current page, and the actor also falls back to the canonical ID-only URL for activity details.

❓ FAQ

Is it legal to scrape Klook reviews? This actor only collects publicly visible review content — the same information any visitor sees on an activity page without logging in. You are responsible for using the output lawfully and in line with Klook's Terms and applicable data-protection laws (see Legal & responsible use).

How many reviews can I get per activity, and how fast? All of them — set maxReviewsPerActivity to 0 and the actor paginates to the last page. Popular activities have tens of thousands of reviews. A fresh verification run collected 305 reviews across several activities in ~2.5 minutes on residential proxies.

Do I need proxies or a login? No login ever. You do need an Asia-Pacific residential proxy (Klook blocks datacenter and most US traffic) — it is required and enabled by default, with session rotation and retries built in.

Which export formats are supported? JSON, CSV, Excel, HTML and RSS, plus programmatic access via the Apify API and integrations (Google Sheets, Zapier, Make, n8n, Airbyte and more).

Is there a Klook API for reviews? Klook has no public reviews API, so this actor acts as your Klook API: it reads the same review data the activity page loads and returns it as clean, structured JSON/CSV you can call on demand or on a schedule.

How fresh is the Klook data? Every run fetches live reviews at run time — there is no cached snapshot. Each record carries a scrapedAt timestamp and the original reviewDate, so you always know how current the data is.

Can I get reviews in a specific language? Yes — set language to English, Chinese, Japanese, Korean, Thai, Vietnamese and more. Klook translates the review text; the set of reviews is the same either way.

Can I filter which reviews I collect? Yes — sort by Most relevant or Most recent, choose the review language, cap the count with maxReviewsPerActivity, and target exactly the activities you want by URL or ID.

Do reviews include photos and the booked package? Yes — every reviewer-uploaded image URL is in reviewImages with an imageCount, and each review is tagged with the exact packageName / packageId the traveler booked.

Why is the activity name sometimes empty? Only for rare legacy/merged activities whose standalone Klook page has been retired — the reviews still come through in full, and the total review count is backfilled from the review feed. For normal live activities, the name, city, score and category are all populated.

🌏 Languages & coverage

Klook operates across Asia-Pacific and globally. Reviews can be returned in any of these languages:

🇬🇧 English🇨🇳 Chinese (Simplified)🇹🇼 Chinese (Traditional)🇭🇰 Chinese (HK)
🇯🇵 Japanese🇰🇷 Korean🇹🇭 Thai🇻🇳 Vietnamese
🇮🇩 Indonesian🇲🇾 Malay🇪🇸 Spanish🇫🇷 French
🇩🇪 German🇷🇺 Russian

🔗 Integrations

Send results wherever you work: Google Sheets / Excel, Zapier · Make · n8n, Airbyte / databases / webhooks, and the Apify API for any language.

Building a cross-platform review or travel dataset? Pair the Klook scraper with these review and ratings extractors:


This actor collects publicly available review information — the same content any visitor can read on an activity page without logging in. It does not access private data and does not require any user account.

You are responsible for how you use the data. Please:

  • Use the output for lawful purposes such as research, analytics, reputation monitoring and benchmarking.
  • Respect the reviewed platform's Terms of Service and robots directives.
  • Comply with applicable data-protection laws (e.g. GDPR, CCPA) when handling personal data such as reviewer names — aggregate or anonymize where appropriate.
  • Do not republish scraped content in a way that infringes copyright or database rights.

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Klook. All product names, logos and brands are property of their respective owners.


🛟 Support

Need another language, an extra field, or hit an activity that won't parse? Open an issue from the actor's Issues tab and we'll take a look.

Ready to turn Klook reviews into data? Run the Klook Reviews Scraper and export your first dataset in minutes.