Klook Scraper — Activities, Prices & Reviews
Pricing
from $2.50 / 1,000 activities
Klook Scraper — Activities, Prices & Reviews
Scrape Klook activities, tours and attraction tickets by destination, keyword or URL: title, price, currency, rating, review count, category, location, highlights and URL, plus optional full details (policies, packages, images) and Klook reviews.
Pricing
from $2.50 / 1,000 activities
Rating
0.0
(0)
Developer
Trevor Ortega
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
11 hours ago
Last modified
Categories
Security
Limited permissionsShare
Klook Scraper: Activities, Prices & Reviews
Scrape Klook activities, tours and attraction tickets by destination, keyword or URL: title, price, original price, discount, currency, rating, review count, bookings, category, city, coordinates, duration, tags, badges, image and URL for every search result, with optional full details (description, highlights, good-to-know notes, policies, booking options, packages with prices, all images) and Klook reviews (rating, text, English translation, reviewer name as shown, date, visit date, package, photos).
Built for reliability: it reads the same JSON that klook.com's own pages load for anonymous visitors, through plain HTTP with browser TLS fingerprinting. No headless browser, no login, no CAPTCHA solving. You pay only for the activities and reviews you get.
See also: Viator Scraper and GetYourGuide Scraper, the companion Actors with the same shape for the other two big tours-and-activities marketplaces.
What data does Klook Scraper extract?
Every activity from a search (destination, search term, search / city / country URL):
| Field | Description |
|---|---|
activityId | Klook activity ID (the number in the URL) |
title | Activity title |
url | Activity URL on klook.com (with the language prefix of the run, e.g. /zh-TW/) |
productType | activity for tours, tickets and experiences; search results can also hold airport_transfer, hotel, car_rental, … (those get no details or reviews) |
price | Price shown on the card, number (null when the card says "Free Voucher") |
originalPrice | Struck-through price when the activity is on sale, else null |
currency | ISO code of the prices (the Currency input) |
priceText | Price exactly as displayed, e.g. US$ 47.05 |
discountPercent | Discount in percent, from the two prices or the "30% off" deal tag |
rating | Average rating 0-5 |
reviewCount | Number of reviews |
bookedCount, bookedText | Participants so far, exact number and the label Klook shows ("300K+ booked") |
category | Klook category ("Day trips", "Theme parks", "Museums", …) |
city, cityId, countryId | Where the activity is |
departureFrom | Departure city for tours ("Tokyo" for a Mt. Fuji day trip) |
latitude, longitude | Activity location |
duration | Duration tag ("Up to 3 hrs", "5-7 hrs") |
instantConfirmation, freeCancellation, hotelPickup, privateTour, smallGroup, isBestseller, isKlookChoice, soldOut | Booleans from the card's tags and badges (language-independent) |
guideLanguages | Guide language codes from the tags, e.g. ["en"] |
tags | Card tags as shown: "Instant confirmation", "Free cancellation", "English guided", "Book now for tomorrow", … |
badges | Promotion badges: "Klook's choice", … |
deals | Deal labels: "30% off", "Sale", "Freebies", "1GB eSIM worth JPY600", … |
images | Cover image URL (plus every activity image with details) |
language | Site language of the run |
searchQuery, sourceUrl, scrapedAt | The search that produced the item, its klook.com search page and the run timestamp |
changeType, previousValues | Only with Only new or changed items on: new or changed, and for changed activities the old values of the fields that changed |
With Include activity details on (or for an activity URL given as input), each activity also gets:
| Field | Description |
|---|---|
subtitle, shortDescription, description | Subtitle, meta description and the full description (Markdown) |
highlights | Highlight bullet points |
goodToKnow, sections | "Good to know" notes as a list, and every info section as {title, text} |
operatorNotice | The operator's current notice (closures, traffic, …) |
categoryPath, templateName | Full category path ("Tours & experiences" > "Tours" > "Day trips") and product template |
country | Country name |
address, latitude, longitude, placeId | Meeting point / venue with coordinates and Google place ID |
priceFrom, priceTo, lowestUnitPrice | Price range across packages and the cheapest unit |
confirmationType, cancellationPolicy, freeCancellation, voucherUsage, ticketType | Booking policies as texts and flag |
bestPriceGuarantee | Klook's best-price badge |
options | Booking option groups, e.g. {"name": "Tour type", "values": [...]} |
packages | Every bookable package: packageId, name, price, originalPrice, priceFrom, priceTo, instantConfirmation, hasStock, availableDate, minPax, maxPax, confirmationType, cancellationPolicy, ticketType, voucherUsage |
labels | Award and campaign labels ("2026 Best Attractions in Japan", …) |
videoUrl, lastUpdated, published | Media and freshness |
With Max reviews per activity above 0 (or Only reviews newer than set), reviews are saved as separate items with type: "review":
| Field | Description |
|---|---|
activityId, activityTitle, activityUrl | The activity the review belongs to |
reviewId | Klook review ID |
rating | Stars 1-5 |
text | Review text in the reviewer's language |
translatedText | Klook's translation into the site language, when the review is in another language |
language | Language of the review, e.g. ko-KR |
reviewerName | Reviewer's name exactly as Klook shows it publicly ("Dominic ******" or "Klook User"); Klook itself masks surnames |
publishedAt | Date and time of the review |
visitDate | Date of the visit / tour |
packageName | Package the reviewer booked |
helpfulVotes | "Helpful" votes |
images | Reviewer photo URLs |
ownerResponse | The operator's public reply, when there is one |
Reviewer avatars and account IDs are not collected.
How to scrape Klook activities
- Type one or more Destinations ("Tokyo", "Bali", "Japan") and/or Search terms ("sunset cruise", "universal studios singapore"), or paste Klook URLs into Start URLs.
- Set Max activities and Max pages per search to cap the run (and the cost). Each search page holds 20 activities; Klook stops at 1,000 results per search.
- Optionally pick Sort by (Recommended, Lowest price, Most booked, Recently added, Top rated), Currency and Language, and switch on Include activity details.
- Click Start. Results appear in the Dataset tab; export as JSON, CSV or Excel, or read them through the API.
Input example
{"destinations": ["Tokyo", "Kyoto"],"searchTerms": ["mount fuji day trip"],"startUrls": [{ "url": "https://www.klook.com/search/result/?query=tokyo&sort=price&front_id=3" },{ "url": "https://www.klook.com/activity/70672-shibuya-sky-tokyo/" }],"maxItems": 200,"maxPagesPerSearch": 5,"currency": "USD","language": "en","includeDetails": true,"maxReviewsPerActivity": 10}
Output example
{"type": "activity","activityId": 93901,"title": "Mt. Fuji Instagram-worthy spots day trip: Ladder Town, Oshino Hakkai, Lake Kawaguchi, Lawson convenience store (departing from Tokyo Station or Shinjuku Station)","url": "https://www.klook.com/en-US/activity/93901-mtfuji-one-day-tour-tokyo/","productType": "activity","price": 47.05,"originalPrice": null,"currency": "USD","priceText": "US$ 47.05","discountPercent": 30,"rating": 4.8,"reviewCount": 36492,"bookedCount": 357569,"bookedText": "300K+ booked","category": "Day trips","city": "Fujinomiya","countryId": 12,"departureFrom": "Tokyo","latitude": 35.3606255,"longitude": 138.7273634,"duration": null,"instantConfirmation": true,"freeCancellation": false,"hotelPickup": true,"isKlookChoice": true,"soldOut": false,"tags": ["Hotel pick-up", "Instant confirmation"],"badges": ["Klook's choice"],"deals": ["30% off", "Sale"],"images": ["https://res.klook.com/image/upload/activities/o4x2nesz8ry9tnmzo1md.jpg"],"categoryPath": ["Tours & experiences", "Tours", "Day trips"],"country": "Japan","address": "Mount Fuji","priceFrom": 67.19,"priceTo": 725.29,"confirmationType": "Instant confirmation/24-hour confirmation","cancellationPolicy": "Free cancellation (24 hours notice)/Conditional cancellation","highlights": ["Chosen by 300,000+ Travelers | Popular Choice for Mount Fuji Instagram-Worthy Routes: …", "…"],"options": [{ "name": "Driver/guide language", "values": ["English", "Chinese"] }, { "name": "Tour type", "values": ["Gather at the designated assembly point", "Private chartered car tour", "…"] }],"packages": [{ "packageId": 315236, "name": "Chinese · Gather at the designated assembly point", "price": 67.19, "originalPrice": 70.75, "instantConfirmation": true, "hasStock": true, "availableDate": "2026-11-03", "cancellationPolicy": "Free cancellation (24 hours notice)", "ticketType": "Fixed date booking" }, "…"]}
Review item:
{"type": "review","activityId": 70672,"activityTitle": "SHIBUYA SKY Ticket","activityUrl": "https://www.klook.com/activity/70672-shibuya-sky-tokyo/","reviewId": 19473250,"rating": 5.0,"text": "시부야스카이는 반드시 오전10시 첫타임을, 반드시 사전 예약해서 갈 것을 강추합니다. …","translatedText": "I highly recommend booking Shibuya Sky in advance for the very first 10 a.m. slot. …","language": "ko-KR","reviewerName": "Klook User","publishedAt": "2026-10-04T16:23:12","visitDate": "2026-10-04","packageName": "입장권","helpfulVotes": 0,"images": ["https://cdn.klook.com/user_review/product/…/….1200*0.jpeg"],"ownerResponse": null}
How much does it cost?
Pay per result: $0.0025 per activity from the search results, plus $0.001 per activity when Include activity details is on (one extra request each; an activity URL as input always counts as a detailed activity), plus $0.001 per review. No subscription; Apify's free plan is enough to try it. 1,000 activities cost $2.50, or $3.50 with details.
Proxy note: the Actor defaults to Apify's Unblocker proxy group. Klook's bot protection (DataDome) blocked datacenter IPs from the start, and on 2026-11-05 it started denying Apify's RESIDENTIAL group too (every request 403), so Unblocker is now the default. Unblocker is billed per request attempt, about $0.0015 (10 units) on the free plan, including failed attempts; one search request returns a full page of up to 20 activities, so proxy cost stays well under the per-activity price. Unblocker picks its own exit country, so the proxy country can no longer be pinned in Proxy; Klook still prices activities by the visitor's country shown in the results. Plain datacenter or RESIDENTIAL proxies are cheaper if you want to try them again later.
How to scrape Klook reviews
Set Max reviews per activity (for example 20) and the Actor saves the newest reviews of every activity as separate dataset items with type: "review", linked to the activity by activityId. Use the Reviews view of the dataset, or filter by type. Each review carries the stars, the text in the reviewer's language, Klook's translation when there is one, the reviewer's name exactly as Klook displays it, the review date, the visit date and the package booked. Reviews are read 20 per request, newest first; Klook serves at most 2,000 per activity. To get only recent reviews, set Only reviews newer than to a date or a period such as 7 days.
Which Klook URLs work
- Activity pages:
https://www.klook.com/activity/70672-shibuya-sky-tokyo/(with or without a language prefix such as/en-US/). Returns that activity with full details. - Search pages:
https://www.klook.com/search/result/?query=tokyo&sort=price&front_id=3. The query, the sort order and the filterscity_id,country_id,front_id(category),start_time,price_from,price_toandinstantare kept, so you can build any filtered listing on klook.com and paste its URL. - City and country pages:
https://www.klook.com/city/28-tokyo-things-to-do/,https://www.klook.com/country/12-japan-things-to-do/. The destination is searched with its city / country filter.
Anything else (blog posts, hotel search, the home page) is reported in the run's SUMMARY and skipped. Hotels, car rentals and eSIMs that show up among the search results are saved as cards with their productType, without details or reviews.
Does it need a login?
No. All data comes from the public JSON endpoints that klook.com itself loads for anonymous visitors: search results, activity details and reviews. No account, cookies, headless browser or CAPTCHA solving is involved. Note that Klook does not show one price per activity: prices differ a little by the visitor's country (market), and each request is answered from one of several price buckets, with or without a platform promo (5-10 % apart) and occasionally with the activity's cheapest unit (a one-way fare, a child ticket) instead of its main price. price and priceText are exactly what Klook showed in that answer. The Actor fixes the proxy country to the US unless you choose one yourself; keep one proxy country, one Language and one Currency when you compare prices, and switch on Include activity details to get the stable package prices (priceFrom, priceTo, packages).
Monitor Klook prices on a schedule
Turn on Only new or changed items and the Actor remembers what earlier runs of the same input returned: each run outputs only activities that are new in the watched window or whose price, rating or sold-out status changed. Unchanged activities are dropped before any detail or review request is made, so they are not charged. Max activities becomes the window that is checked on every run (for example the top 40 of a destination), so a run with nothing new costs only the search pages. With reviews on, only reviews not seen before are saved, also for unchanged activities, and reviews are requested only for activities whose review count moved. Save the input as a task, then add a Schedule to it in Apify Console (Schedules → Create new, for example daily). Every output activity carries changeType (new or changed); changed ones carry previousValues, e.g. {"price": 52.5} for a tour that now costs 49.
One Klook particularity: the site answers each request from one of several price buckets (the same ticket comes back as US$ 18.75 or US$ 17.15 depending on whether a platform promo is applied, and occasionally as its cheapest unit, e.g. a one-way instead of a round-trip fare), and no setting pins the bucket. The Actor therefore remembers every price it has seen for an activity and reports changed only for a price Klook never showed before (beyond 1 %, which absorbs exchange-rate drift); a price that flips back to a known value is not a change. Expect a few such reports in the first two or three runs while the buckets are learned, then only real changes. Rating moves under 0.05 are ignored, and every run uses the same proxy country (US unless you set one). Use Monitoring key to keep several schedules on the same input separate.
Integrations and API
Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python/Node with the Apify client. See the API tab for ready-made snippets. Schedule it to track prices, discounts, new activities or new reviews in a destination.
Is it legal to scrape Klook?
This Actor collects only data that Klook shows publicly to logged-out visitors: activity listings, prices, ratings, booking counts, descriptions, policies, review texts and the reviewer's name exactly as Klook displays it (Klook itself masks surnames, e.g. "Dominic ******", and shows "Klook User" for many reviewers). It does not collect avatars, account IDs, contact details or anything behind a login. Reviewer names are personal data under GDPR and similar laws: make sure you have a lawful basis for processing them, and do not use them to contact or profile individuals. You are responsible for how you use the data and for complying with Klook's terms and applicable law.
Support
Found a bug or need a field added? Open an issue in the Issues tab; it is usually answered within a day.
Related scrapers
- Tripadvisor Scraper: Reviews, Hotels, Restaurants, Attractions
- OpenTable Scraper: Restaurants, Availability & Reviews
- Eventbrite Scraper: Events, Tickets & Organizers
- Viator Scraper: Tours, Prices, Ratings & Reviews
- GetYourGuide Scraper: Tours, Prices & Ratings
Found it useful?
A ★ review on this Actor's Apify Store page helps other users find it and tells us what to improve. Issues and feature requests are welcome in the Actor's Issues tab.