Klook Reviews Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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, andzh-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?
| Field | Description |
|---|---|
sourceType | activity or hotel |
pageId | Klook activity or hotel ID |
pageUrl | Normalized source URL |
reviewId | Klook review ID or deterministic hotel-review fingerprint |
reviewTime | Review date or timestamp |
contentOriginal | Original traveler review |
contentTranslated | Klook-provided translation, when available |
score | Numeric review score |
scoreLabel | Human-readable rating label |
reviewerName | Public masked display name |
reviewerAvatarUrl | Public avatar image URL |
images | Traveler-uploaded image URLs |
likeCount | Activity review likes |
packageId / packageName | Activity package context |
checkInInfo | Hotel room, guests, and stay context |
originalLanguage | Hotel review source language |
translatedLanguage | Hotel translation language |
hasReply | Whether an activity review has a reply |
scrapedAt | UTC extraction timestamp |
Input options
| Input | Type | Default | Purpose |
|---|---|---|---|
startUrls | array | required | Activity and hotel detail URLs |
maxReviewsPerUrl | integer | 20 | Per-page review cap |
maxItems | integer | 50 | Overall dataset cap |
sortBy | string | newest | Activity review order |
language | string | en-US | Locale for translated content |
cutoffDate | date | empty | Exclude older reviews |
proxyConfiguration | object | empty | Optional 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
- Open Klook Reviews Scraper on Apify.
- Add one or more activity or hotel detail URLs.
- Choose small per-URL and overall review limits.
- Select an activity sort order and Klook language.
- Optionally add a date cutoff or proxy configuration.
- Click Start.
- Preview or export the default dataset.
Sorting and date cutoffs
Activity pages support:
sort_most_relevantsort_review_time_descsort_score_high_to_lowsort_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 osfrom apify_client import ApifyClientclient = 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().itemsprint(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:
- Run daily or weekly.
- Store the latest review IDs in your destination system.
- Ignore IDs already processed.
- Alert only on new low-score reviews.
- 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.
Is it legal to scrape Klook reviews?
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.
Related travel scrapers
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.