Klook Reviews Scraper - Activity Ratings, Photos & Text
Pricing
from $2.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Security
Limited permissionsShare
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.
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_listendpoint (10 reviews/page), walkingpage=1, 2, 3, …until the last page — hundreds to thousands of reviews per activity. - ✅ Rich review fields captured verbatim:
reviewId, 0–5rating,ratingDesclabel (e.g. Fantastic), ISOreviewDate, originalreviewContent, itstranslatedContent,likedCount,hasReply, the revieweruserNameanduserAvatar. - ✅ Reviewer photos — every uploaded image URL in
reviewImages(|-separated) plus animageCount. - ✅ Package-level attribution —
packageNameandpackageIdfor the exact option the review is about. - ✅ Activity summary on every row (optional):
activityName,activityCity,activityCountry,activityCategory,activityScoreandactivityReviewCount. - ✅ 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 set0for everything). - ✅ Resilient fetching — Asia-Pacific residential proxy with session rotation and retry/back-off, so transient
403 / 429 / 590blocks 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.
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | – | 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. |
activityIds | array | – | (Advanced) Numeric activity IDs — the number right after /activity/ in the URL (e.g. 73749). |
language | enum | 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. Klook translates reviews into the chosen language. |
sortBy | enum | most_relevant | Review order: most_relevant or most_recent. |
maxReviewsPerActivity | integer | 200 | Max reviews per activity. Set 0 for all available (popular activities can have tens of thousands). |
includeActivityInfo | boolean | true | Attach activity name, city, country, category, overall score and total review count to every review. |
proxyConfiguration | object | Residential | Proxy 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
- Open klook.com and choose any activity, tour, ticket or experience.
- Copy the address-bar URL — it looks like
.../activity/73749-thsr-one-way-ticket-taipei/. - 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
| Field | Description |
|---|---|
reviewId | Unique Klook review identifier (natural dedup key). |
userName · userAvatar | Reviewer display name and avatar URL. |
rating · ratingDesc | ⭐ Score out of 5 and its label (e.g. Fantastic). |
reviewDate | Review timestamp (ISO 8601). |
reviewContent | Original review text. |
translatedContent | Translated text, present when Klook's translation differs from the original. |
likedCount | 👍 How many users found the review helpful. |
hasReply | true/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)
| Field | Description |
|---|---|
activityId · activityName | Activity identifier and name. |
activityCity · activityCountry | Where the activity takes place. |
activityCategory | Top category (Transport, Tours & experiences, Attractions…). |
activityScore | Activity overall score out of 5. |
activityReviewCount | Total reviews for the activity. |
activityUrl · language · scrapedAt | Source 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
maxReviewsPerActivityto0. - 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 (default200) to keep runs fast and predictable, or set0to 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/ upstream590) are retried on a fresh IP rather than failing the run.
⚙️ How to use
- 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.
- Choose an export format — download the dataset as JSON, CSV, Excel, HTML or RSS from the Storage tab.
- Via API — call the actor from any language with the Apify API/clients (see the Python and JavaScript snippets below).
- On a schedule — use Apify Schedules to re-run daily/weekly and track rating and review-count trends over time.
- 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 ApifyClientclient = 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
maxReviewsPerActivityto0to paginate to the last page of an activity. - Keep runs fast & cheap? The default cap of
200is 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
engives 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
startUrlsto 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.
🔗 Related scrapers
Building a cross-platform review or travel dataset? Pair the Klook scraper with these review and ratings extractors:
- Trip.com & Ctrip Reviews Scraper — hotel ratings, review text and traveler details across Trip.com and Ctrip.
- Despegar Hotel Reviews Scraper — hotel reviews with pros, cons and category scores for Latin America.
- Trustpilot Reviews Scraper — business ratings, reviews and company replies from Trustpilot.
- G2 Reviews Scraper — software reviews, star ratings and reviewer profiles from G2.
- Meesho Reviews Scraper — product ratings, comments, photos and author details from Meesho.
- RepVue Scraper — sales-org ratings, overall score and employee reviews from RepVue.
⚖️ Legal & responsible use
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.