Klook Scraper icon

Klook Scraper

Scrape Klook activities, tours, attractions and travel experiences from search pages or activity URLs. Extract structured data for destinations,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Klook Scraper at a glance

Klook Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes id, recordtype, operation, activityid and title, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.90 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Web data
Pricing
$1.90 per 1,000 results (Free plan), from $1.20 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
32 options

Scrape Klook activities, tours, attractions and travel experiences from search pages or activity URLs. Extract structured data for destinations, prices, ratings, availability, images, package details and more.

What Klook Scraper can do

  • Search and URL modes. Discover activities by keyword or collect several selected activities in one run.
  • Activity details. Add descriptions, addresses, images and cancellation information when available.
  • Public reviews. Collect review text, available translations, dates and publicly displayed author names.
  • Hotels for your stay. Search destinations and hotel URLs with dates, guests, rooms and offer filters. Categories, destinations and suggestions also provide discovery links.
  • Themed searches. Find eSIM, dining, car rental, airport transfer and promotional listings.
  • Recurring collection. Skip previously collected records or return new and changed records across runs.

Choose what to collect

These inputs let you configure Klook Scraper - Activities, Tours & Attractions. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredSearch by keyword or read pasted Klook URLs. Reviews always use the activity URLs, regardless of this setting.

Choices: search, url

operationstringChoose activities, public reviews, catalog navigation, suggestions, or a themed listing search. Home returns homepage links; deals returns listings with promotions or reduced prices. Car rentals and airport transfers return discovery listings, not date-specific quotes. Reviews always use the activity URLs; no mode change is needed. Hotels searches properties for your selected stay and guests.

Choices: activities, categories, home, destinations, reviews, deals, esim, car_rentals, airport_transfers, dining, suggestions, hotels

querystringKeyword for activity search and suggestions, or a hotel city, area or property name. Ignored in URL mode and for categories, destinations and home.
searchQueriesarrayRun several keyword searches in one run (overrides "Search query" when set). Results are de-duplicated across queries.
cityIdsarrayKeep only activities in these Klook city IDs (the number after /city/ in a Klook city page link). Applied to the pages read, so combine with a keyword that matches the city.
sortBystringKlook search has no sort option, so results are ordered after the pages (up to Max pages) are read.

Choices: default, most_reviewed, price_low_high, price_high_low, rating

currencystringThree-letter display currency when supported by the page.
Show 25 more inputs
More input fields
InputWhat it controls
languagestringLocale for titles and text, for example en_US, ja_JP, zh_CN, ko_KR.
urlsarrayActivity, keyword search or city page URLs. City pages are read as a keyword search for the city name. Reviews require an activity URL. Search URLs preserve the query and start page; other URL filters are not supported. Hotels accepts hotel property, hotel city and hotel search URLs. Hotel stay dates and guests in a URL take precedence over form values.
checkInstringHotels only. YYYY-MM-DD or a relative value such as 30 days. Defaults to 30 days from today.
checkOutstringHotels only. Leave empty for two nights after check-in. A stay must be 1-30 nights.
adultsintegerHotels only. Total adult guests across all rooms, with at least one adult per room.
roomsintegerHotels only. Number of rooms needed for the guest party.
childrenAgesarrayHotels only. One age from 0 to 17 per child, up to 10 children. The child count comes from this list.
hotelSortstringHotels only. Use Klook's hotel sort order. Live quoted prices may not be strictly ordered.

Choices: recommended, priceAsc, priceDesc, rating, popular

starRatingsarrayHotels only. Leave empty for all star ratings.
minHotelRatingstringHotels only. Minimum guest review score on the 0-5 scale.

Choices: 0, 3, 3.5, 4, 4.5

minNightlyPriceintegerHotels only. Minimum price in the selected currency, including taxes and fees. Zero means no minimum.
maxNightlyPriceintegerHotels only. Maximum price in the selected currency, including taxes and fees. Zero means no maximum.
freeCancellationbooleanHotels only. Request offers matching the free-cancellation filter. Deadlines and terms vary by offer.
breakfastIncludedbooleanHotels only. Request offers that include breakfast.
fetchDetailsbooleanAdd description, address, images and cancellation information to activity listings. Does not apply to reviews or catalog navigation. An additional charge applies only to successfully enriched records saved in the dataset.
maxItemsintegerMaximum number of records returned. Applies to every operation.
maxPagesintegerMaximum search pages to read. Empty or 0 uses the built-in hard limit of 50 pages per source; stops earlier at Max items or the end of results.
resumeFromRunIdstringSkip activity IDs already present in a previous run or dataset.
incrementalModebooleanReturn only new or changed records for the same state key. Compared: every output field (price, rating, review count, availability, title, location, hotel rates and so on). Excluded by default (kept in the output, never make a row UPDATED): detailStatus, sourceMode, operation, booked, image URL lists, and scraped_at; the snake_case twin fields (activity_id, activity_url, sell_price, price_from, price_to, city_name, country_name, image_url, review_count, booked_count) because the source fields they copy (price, marketPrice, reviewCount, url, location, country) are compared; and latitude, longitude and cityId as derived or volatile values. UPDATED rows list the differing fields in changedFields.
stateKeystringName for shared recurring-run state. Leave empty to derive it from operation, query or URLs, and currency.
emitUnchangedbooleanReturn records that have not changed during incremental monitoring.
ignoreFieldsForChangesarrayExtra field names to leave out when deciding whether a record changed, matched at any depth (for example reviewCount). Added to the built-in excluded fields. Only applies when incremental monitoring is on.
mcpConnectorsarrayOptional connector names for downstream export.
notionParentPageUrlstringOptional parent page for Notion export.
maxNotifyListingsintegerMaximum records sent to each optional connector.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

idid
recordTyperecordType
operationoperation
activityIdactivityId
titletitle
urlurl
descriptiondescription
priceprice
marketPricemarketPrice
currencycurrency
ratingrating
reviewCountreviewCount
Show 34 more fields
locationlocation
countrycountry
addressaddress
categorycategory
imageUrlsimageUrls
cancellationPolicycancellationPolicy
promotionspromotions
authorauthor
datedate
languagelanguage
translatedTexttranslatedText
sourceModesourceMode
changeTypechangeType
changedFieldschangedFields
detailStatusdetailStatus
hotelIdhotelId
starRatingstarRating
priceDisplaypriceDisplay
priceDescriptionpriceDescription
priceConditionpriceCondition
ratingMaxratingMax
reviewCountTextreviewCountText
locationDescriptionlocationDescription
latitudelatitude
longitudelongitude
availableavailable
availabilityTextavailabilityText
featuresfeatures
checkIncheckIn
checkOutcheckOut
adultsadults
roomsrooms
childrenAgeschildrenAges
activity_idactivity_id

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "id": "000000",
  "activityId": "000000",
  "recordType": "activity",
  "title": "Example observation deck admission",
  "url": "https://www.klook.com/en-US/activity/000000-example/",
  "price": 25,
  "currency": "USD",
  "marketPrice": 30,
  "rating": 4.5,
  "reviewCount": 100,
  "location": "Example city",
  "country": "Example country",
  "address": "100 Example Street",
  "category": "Attractions",
  "description": "Example admission description.",
  "cancellationPolicy": "Example cancellation terms.",
  "imageUrls": [
    "https://example.com/activity.jpg"
  ],
  "promotions": [
    "Example offer"
  ],
  "booked": "100+ booked",
  "detailStatus": "complete",
  "operation": "activities",
  "sourceMode": "search",
  "changeType": "NEW"
}

Ways to use this data

  • Travel content and comparison sites: pull activity and hotel listings with prices, ratings and images to power itinerary pages or comparison tables.
  • Rate and availability monitoring: track a specific activity or hotel stay with incremental mode so recurring runs return only new or changed offers.
  • Review and reputation research: collect public review text, ratings and languages for an activity to study traveler sentiment.
  • Destination and catalog mapping: walk Klook's categories, destinations, home feed and search suggestions to see how a market is organized.
  • Themed listing research: gather eSIM, dining, car rental, airport transfer and promotional listings for a destination.
  • App and workflow automation: export a condensed summary of matched records into Notion or another connected app while the full record stays in the dataset.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Klook Scraper return?

The documented output for Klook Scraper includes id, recordtype, operation, activityid, title, url, description and price. Availability of each field depends on the source page and the selected mode.

How much does Klook Scraper cost?

It costs $1.90 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed records on a schedule?

Yes. Schedule the actor from the Schedules tab, turn on Incremental monitoring, and keep the same operation, mode, query or URLs, currency and detail setting between runs, or set a State key to name the campaign yourself. New and updated records are returned by default; turn on Emit unchanged to also receive records that matched the saved state.

Why does Reviews still need an activity URL if Mode is set to Search?

Reviews always read the pasted activity URLs, no matter what Mode is set to; a keyword typed into Search mode is ignored for this operation. Paste one or more activity URLs into the URLs field when collecting reviews.

Why did my run fail instead of returning an empty dataset?

If every source returned zero records, the run fails with a clear message so "no results" is never confused with "nothing could be read". Resume and incremental runs can still legitimately return zero new records when everything inspected was already collected or unchanged.

What are the dataset views?

The Output tab offers Results (all records), Activities, Reviews, Hotels, Catalog and discovery (categories, destinations, home and suggestions), and Changes (incremental), which lists the changeType and changedFields of NEW and UPDATED rows.

Ready to collect with Klook Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.