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

5

Total users

1

Monthly active users

20 hours ago

Last modified

Features

Limited permissions

Share

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

Apify Actor Maintenance Data Format Pagination Proxy Support

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.

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.


⚡ At a glance

FeatureDetails
Target Websiteklook.com (Global & Asia-Pacific)
Input MethodsActivity URLs (any locale /en-US/, /zh-CN/, etc.) or numeric Activity IDs
Pagination Limit1,000+ Unlocked (set maxReviewsPerActivity to 0 for all available reviews)
Data FieldsStar rating, review text, translated text, photos, package name, reviewer name, date
Activity MetadataCity, country, category, overall score, total review count attached to each row
Language Support14 languages supported (English, Chinese, Japanese, Korean, Thai, Spanish, etc.)
Proxy RequirementAsia-Pacific Residential Proxy (Apify Proxy included by default)
Output FormatsJSON, CSV, Excel (XLSX), XML, HTML Table, RSS

🔎 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 uniquely detailed: 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 provides no public download button or open review API.

Collecting it manually is tedious and slow. Reviews are paginated 10 at a time behind dynamic endpoints, photos are nested within individual records, and the site actively blocks plain datacenter connections with DataDome protection.

This Klook reviews scraper solves the protocol and formatting hurdles. 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 business intelligence pipelines.

Common reasons people scrape Klook:

  • 🎟️ Reputation monitoring — track feedback on your own Klook tours, tickets, and travel experiences to catch recurring complaints early.
  • 📊 Competitor benchmarking — compare competitor activities, pricing packages, and guest ratings side by side across any Asian city.
  • 💬 Sentiment & NLP analysis — feed review text and star ratings into LLMs and sentiment models for deep voice-of-customer intelligence.
  • 📈 Market & OTA research — analyze which attractions and tours delight or disappoint international travelers in key APAC markets.
  • 📸 UGC photo extraction — download high-resolution traveler photos at scale for visual-quality audits and marketing research.
  • 🤖 Machine learning datasets — build multi-lingual labeled training sets for rating prediction, translation quality, and aspect extraction.
  • ⭐ Longitudinal trend analysis — schedule recurring runs to measure changes in review velocity and satisfaction scores 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.
  • ✅ Deep automatic pagination through Klook's review endpoint (10 reviews/page), walking page=1, 2, 3, … until the last page — 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.
  • ✅ Multi-activity processing — pass dozens of URLs or IDs in a single run and export unified datasets.

🎯 Use cases

  • 🎟️ Activity & tour operators — monitor your Klook reputation, surface recurring praise and complaints, and inspect traveler photos to improve on-the-ground operations.
  • 📊 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 parameters

Paste one or more Klook activity URLs (or numeric IDs), pick a language and sort order, set your cap, and run.

ParameterTypeDefaultDescription
startUrlsArray["https://.../activity/73749-..."]Klook activity/experience page URLs. Works with any Klook language path (/en-US/, /zh-CN/, /ja-JP/, etc.).
activityIdsArray[]Optional. Direct numeric activity IDs (the number right after /activity/ in the URL, e.g. 73749).
languageSelect"en"Language the review text is returned in: en, zh_CN, zh_TW, zh_HK, ja, ko, th, vi, id, ms, es, fr, de, ru.
sortBySelect"most_relevant"Review sort order: most_relevant or most_recent.
maxReviewsPerActivityInteger0 (unlimited)Max reviews per activity. Set 0 for all available reviews. Prefill is set to 60 for fast initial testing.
maxItemsInteger0 (unlimited)Global maximum total reviews to collect across all activities combined. Set 0 for no global limit.
includeActivityInfoBooleantrueAttach activity name, city, country, category, overall score and total review count to every review record.
proxyConfigurationObject{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }Asia-Pacific residential proxy configuration required for anti-bot bypass.

Example input configuration

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

📤 Output dataset

Every review is exported as one clean, normalized row.

Sample output item

{
"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-10T12:45:00.000Z"
}

Field reference

⭐ Review item fields
FieldTypeCoverageDescription
reviewIdString🟢 High (100%)Unique Klook review identifier (natural dedup key).
userNameString🟢 High (100%)Reviewer display name (often masked for privacy e.g. Lee *****).
userAvatarString🟡 Conditional (70%)Profile photo URL of the reviewer on Klook CDN.
ratingString🟢 High (100%)Guest rating score out of 5 (e.g. 5.0, 4.0).
ratingDescString🟢 High (100%)Rating sentiment label (e.g. Fantastic, Good, Average).
reviewDateString🟢 High (100%)ISO 8601 timestamp when the review was submitted.
reviewContentString🟢 High (100%)Full original review text submitted by the guest.
translatedContentString🟡 Conditional (45%)Translated review text when Klook provides automatic translation.
likedCountString🟢 High (100%)Count of helpful votes received from other travelers.
hasReplyString🟢 High (100%)Boolean string (true/false) indicating merchant reply.
imageCountString🟢 High (100%)Number of traveler photos attached to the review.
reviewImagesString🟡 Conditional (30%)Pipe-delimited list of traveler photo URLs on Klook CDN.
packageNameString🟢 High (95%)Specific package or option name booked by the reviewer.
packageIdString🟢 High (95%)Identifier of the specific package selected.
🏙️ Activity metadata fields
FieldTypeCoverageDescription
activityIdString🟢 High (100%)Klook numeric activity identifier.
activityNameString🟢 High (99%)Title of the tour, ticket, or experience.
activityCityString🟢 High (95%)Primary destination city of the activity.
activityCountryString🟢 High (95%)Destination country or territory.
activityScoreString🟢 High (95%)Aggregate rating score of the activity out of 5.
activityReviewCountString🟢 High (100%)Total review count reported on the activity.
activityCategoryString🟢 High (90%)Primary activity category (e.g. Transport, Tours).
activityUrlString🟢 High (100%)Canonical link to the activity page on Klook.
languageString🟢 High (100%)Klook locale code used for translation (e.g. en_US).
scrapedAtString🟢 High (100%)UTC ISO timestamp when the record was extracted.

📊 Comparison: Why use this Actor?

FeatureManual Copy-PasteCustom Puppeteer ScriptKlook Reviews Scraper
DataDome Anti-Bot BypassManual browsing onlyBlocks immediately (403)Built-in got-scraping + Residential
Max Reviews per Activity10 per page clickStalls after few pages1,000+ Unlocked (auto-paginated)
Reviewer Photos ExtractionRight-click saveComplex DOM parsingDirect CDN URLs in CSV/JSON
Package AttributionOften missedHigh error rateVerified package name & ID
Multi-Language TranslationManual Google TranslateSingle language14 Native Klook languages
Activity Context AttachmentManual spreadsheet joinMultiple requests neededAuto-enriched on every row

💻 Developer & API integrations

Integrate Klook review data directly into your analytical stack using Apify's API clients.

Python integration

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

Node.js integration

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const input = {
startUrls: ['https://www.klook.com/en-US/activity/73749-thsr-one-way-ticket-taipei/'],
language: 'en',
maxReviewsPerActivity: 100,
};
const run = await client.actor('haketa/klook-reviews-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Extracted ${items.length} reviews from Klook.`);
items.forEach(r => console.log(`${r.ratingDesc} (${r.rating}/5) by ${r.userName}`));

cURL API call

curl "https://api.apify.com/v2/acts/haketa~klook-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": ["https://www.klook.com/en-US/activity/73749-thsr-one-way-ticket-taipei/"],
"maxReviewsPerActivity": 50,
"language": "en"
}'

Analyzing Klook reviews with Python & pandas

import pandas as pd
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
dataset_items = client.dataset("DATASET_ID").list_items().items
df = pd.DataFrame(dataset_items)
# Convert ratings to float
df['rating'] = pd.to_numeric(df['rating'], errors='coerce')
# Rating summary & sentiment distribution
print("Average rating:", df['rating'].mean())
print("\nRatings breakdown:")
print(df['ratingDesc'].value_counts())
# Review photo analysis
has_photos = df[df['imageCount'].astype(int) > 0]
print(f"\nReviews with traveler photos: {len(has_photos)} ({len(has_photos)/len(df)*100:.1f}%)")

⚙️ How to use Klook Reviews Scraper

  1. Open the Actor in Apify Console: Navigate to haketa/klook-reviews-scraper on the Apify Store or Console.
  2. Input Activity Targets: Paste one or more Klook activity URLs in startUrls, or input numeric IDs directly in activityIds.
  3. Configure Language & Sort: Choose the target review translation language (e.g., en, ja, zh_TW) and sorting preference (most_relevant or most_recent).
  4. Set Pagination Limits: Use the default 60 for a fast initial test, or change maxReviewsPerActivity to 0 to scrape thousands of historical reviews.
  5. Click Start: Monitor real-time extraction progress in the live log and console status message.
  6. Export Your Dataset: Download the structured results in CSV, Excel, JSON, or connect via Apify API webhooks to your cloud database or BI tool.

🔁 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 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 with 0 duplicates.
  • Controlled by maxReviewsPerActivity. Cap each activity 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 sequentially, 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.

💡 Pro tips for best results

  • Unlock deep pagination — Set maxReviewsPerActivity to 0 to collect the entire historical backlog of guest feedback for an attraction.
  • Fast monitoring runs — Setting maxReviewsPerActivity: 50 or 100 provides an ideal sample size for regular weekly sentiment audits.
  • Sort by most recent — Use sortBy: "most_recent" to detect emerging service issues or seasonal changes in tour quality.
  • English covers all reviews — Klook provides unified automated translations. Selecting language: "en" translates all multi-lingual guest feedback into English automatically.
  • Stale URLs are supported — Even if Klook renames an activity URL slug, the scraper automatically handles redirects and extracts from the underlying numeric ID.

⚠️ Limitations & considerations

  • Residential Proxy Required: Klook's web servers strictly enforce anti-bot challenges on datacenter IP addresses. Apify residential proxies are pre-configured to ensure reliable access.
  • Masked Reviewer Identities: In compliance with platform privacy policies, Klook masks middle characters in guest names (e.g. John D****).
  • Retired Activity Pages: In rare cases where an older activity was merged or discontinued, its review feed may remain accessible while the landing page metadata is partial.

❓ Frequently Asked Questions

How many reviews can I get per activity? All of them — set maxReviewsPerActivity to 0 and the actor paginates until no more pages exist. Top activities with 20,000+ reviews can be fully extracted.

Do I need a Klook login or API key? No account or API credentials are required. The scraper collects publicly displayed guest feedback.

Do I need proxies? Yes. An Asia-Pacific residential proxy is required to pass Klook's network safeguards and is pre-configured by default.

Which export formats are supported? JSON, CSV, Excel (XLSX), XML, and RSS feeds, plus direct programmatic integration with Google Sheets, Airtable, webhooks, and Apify REST APIs.

Do reviews include traveler photos? Yes. All traveler photo URLs are captured in reviewImages alongside the total imageCount.

Can I get reviews translated into my preferred language? Yes. Select any of the 14 supported languages in the input settings. Klook automatically translates the review text into your chosen language.



📋 Changelog

Version 1.2 (2026-11)

  • Unlocked 1,000+ Pagination: Verified deep pagination across 100+ review pages with maxReviewsPerActivity: 0.
  • Fast Prefill Execution: Optimized prefill configuration (60 reviews) for verification runs in under 60 seconds.
  • Enhanced Anti-Bot Resilience: Strengthened residential proxy session rotation for handling transient upstream HTTP 590 errors.
  • Refined Schema Standards: Added full coverage indicators and verified 0 duplicate review ID tracking across pages.

Version 1.1 (2026-09)

  • Added automatic fallback to canonical activity URLs for legacy activity slugs.
  • Added support for 14 translation languages.

Version 1.0 (2026-08)

  • Initial release with activity metadata, guest ratings, review text, translations, and photos.
⌂ 换网址