Klook Scraper — Activities, Prices & Reviews avatar

Klook Scraper — Activities, Prices & Reviews

Pricing

from $2.50 / 1,000 activities

Go to Apify Store
Klook Scraper — Activities, Prices & Reviews

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

Trevor Ortega

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

11 hours ago

Last modified

Categories

Security

Limited permissions

Share

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):

FieldDescription
activityIdKlook activity ID (the number in the URL)
titleActivity title
urlActivity URL on klook.com (with the language prefix of the run, e.g. /zh-TW/)
productTypeactivity for tours, tickets and experiences; search results can also hold airport_transfer, hotel, car_rental, … (those get no details or reviews)
pricePrice shown on the card, number (null when the card says "Free Voucher")
originalPriceStruck-through price when the activity is on sale, else null
currencyISO code of the prices (the Currency input)
priceTextPrice exactly as displayed, e.g. US$ 47.05
discountPercentDiscount in percent, from the two prices or the "30% off" deal tag
ratingAverage rating 0-5
reviewCountNumber of reviews
bookedCount, bookedTextParticipants so far, exact number and the label Klook shows ("300K+ booked")
categoryKlook category ("Day trips", "Theme parks", "Museums", …)
city, cityId, countryIdWhere the activity is
departureFromDeparture city for tours ("Tokyo" for a Mt. Fuji day trip)
latitude, longitudeActivity location
durationDuration tag ("Up to 3 hrs", "5-7 hrs")
instantConfirmation, freeCancellation, hotelPickup, privateTour, smallGroup, isBestseller, isKlookChoice, soldOutBooleans from the card's tags and badges (language-independent)
guideLanguagesGuide language codes from the tags, e.g. ["en"]
tagsCard tags as shown: "Instant confirmation", "Free cancellation", "English guided", "Book now for tomorrow", …
badgesPromotion badges: "Klook's choice", …
dealsDeal labels: "30% off", "Sale", "Freebies", "1GB eSIM worth JPY600", …
imagesCover image URL (plus every activity image with details)
languageSite language of the run
searchQuery, sourceUrl, scrapedAtThe search that produced the item, its klook.com search page and the run timestamp
changeType, previousValuesOnly 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:

FieldDescription
subtitle, shortDescription, descriptionSubtitle, meta description and the full description (Markdown)
highlightsHighlight bullet points
goodToKnow, sections"Good to know" notes as a list, and every info section as {title, text}
operatorNoticeThe operator's current notice (closures, traffic, …)
categoryPath, templateNameFull category path ("Tours & experiences" > "Tours" > "Day trips") and product template
countryCountry name
address, latitude, longitude, placeIdMeeting point / venue with coordinates and Google place ID
priceFrom, priceTo, lowestUnitPricePrice range across packages and the cheapest unit
confirmationType, cancellationPolicy, freeCancellation, voucherUsage, ticketTypeBooking policies as texts and flag
bestPriceGuaranteeKlook's best-price badge
optionsBooking option groups, e.g. {"name": "Tour type", "values": [...]}
packagesEvery bookable package: packageId, name, price, originalPrice, priceFrom, priceTo, instantConfirmation, hasStock, availableDate, minPax, maxPax, confirmationType, cancellationPolicy, ticketType, voucherUsage
labelsAward and campaign labels ("2026 Best Attractions in Japan", …)
videoUrl, lastUpdated, publishedMedia and freshness

With Max reviews per activity above 0 (or Only reviews newer than set), reviews are saved as separate items with type: "review":

FieldDescription
activityId, activityTitle, activityUrlThe activity the review belongs to
reviewIdKlook review ID
ratingStars 1-5
textReview text in the reviewer's language
translatedTextKlook's translation into the site language, when the review is in another language
languageLanguage of the review, e.g. ko-KR
reviewerNameReviewer's name exactly as Klook shows it publicly ("Dominic ******" or "Klook User"); Klook itself masks surnames
publishedAtDate and time of the review
visitDateDate of the visit / tour
packageNamePackage the reviewer booked
helpfulVotes"Helpful" votes
imagesReviewer photo URLs
ownerResponseThe operator's public reply, when there is one

Reviewer avatars and account IDs are not collected.

How to scrape Klook activities

  1. Type one or more Destinations ("Tokyo", "Bali", "Japan") and/or Search terms ("sunset cruise", "universal studios singapore"), or paste Klook URLs into Start URLs.
  2. 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.
  3. Optionally pick Sort by (Recommended, Lowest price, Most booked, Recently added, Top rated), Currency and Language, and switch on Include activity details.
  4. 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 filters city_id, country_id, front_id (category), start_time, price_from, price_to and instant are 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.

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.

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.