KKday Scraper icon

KKday Scraper

Scrape KKday travel activities by keyword, city or URL. Every row carries prices, discount, ratings, booking counts, destinations and images. Full…

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

KKday Scraper at a glance

KKday Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes id, name, url, minprice and maxprice, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.70 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
$2.00 per 1,000 results (Free plan), from $1.70 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
23 options
Run success
100.0% of completed public runs in the last 30 days

Scrape KKday travel activities by keyword, city or URL. Every row carries prices, discount, ratings, booking counts, destinations and images. Full details (description, address, coordinates, price tiers) are one toggle away, with recurring change tracking built in.

What KKday Scraper can do

  • Two ways to find activities. Search by keyword, or paste KKday links: individual activity pages or keyword search-result pages, which keep paging forward from wherever you pasted them.
  • Rich listing data out of the box. Price range, original price, discount percent, rating, review count, booking-demand count, destinations, tags and a cover image come straight from the search results, with no extra toggle needed.
  • Full activity detail on demand. Fetch activity details, on by default, adds the long description, meeting address, coordinates and the complete price-tier list, billed only for records it actually reaches and saves.
  • Availability calendar on demand. Turn on Include availability calendar to add, for every package of an activity, each date's lowest price and whether the date can be booked, for a window you choose (up to 180 days). Read-only and not billed as a separate event.
  • Language and currency control. Search mode reads result pages in the site language and currency you choose; pasted links are read exactly as pasted.
  • Built for schedules. Incremental monitoring tracks one search or URL set across recurring runs and returns only new and changed activities, so unchanged ones are not billed again; Resume skips activities already saved in a previous run or dataset.

Choose what to collect

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

Supported input fields
InputWhat it controls
modestring · requiredSearch KKday by keyword or read pasted KKday URLs.

Choices: search, url

querystringKeyword for activity search, such as a city, attraction or experience. Ignored in URL mode.
sortBystringOrder of search results (search mode and pasted results links that carry no sort of their own). Recommended is the site's default ranking.

Choices: prec, omdesc, sdesc, pasc

urlsarrayActivity pages (/product/-, or the id-only form /product/, for example https://www.kkday.com/en/product/133300-shibuya-sky-observatory-e-ticket-tokyo) or keyword search pages (/product/productlist?q=...). Search pages keep paging forward from the pasted page. Other KKday pages (city or destination pages, categories, home) are skipped with a warning.
languagestringSite language path, for example en or zh-tw. English pages are verified; other codes reuse the same layout.
currencystringThree-letter display currency applied in both search and URL modes, for example USD.
fetchDetailsbooleanAdd description, meeting address, coordinates and price tiers to each activity. An extra charge applies only to records actually enriched and saved (detail-enrichment).
Show 16 more inputs
More input fields
InputWhat it controls
maxItemsintegerMaximum number of records returned. This is the only cap that stops a run early by default.
maxPagesintegerMaximum search pages to read per search. Zero means no page limit.
includeAvailabilitybooleanAdds an availability list to each activity: one entry per package and date with the lowest price and whether the date can be booked.
availabilityDateFromstringFirst date to read, as YYYY-MM-DD. Leave empty to start today. Past dates are moved to today.
availabilityDaysintegerHow many days to read from the start date (1-180).
availabilityOnlyAvailablebooleanKeep only the dates that can be booked and drop sold-out or closed dates.
availabilityTimeSlotsbooleanAlso read, per package and date, the bookable time slots, the sold-out and discounted flags and the price of each ticket type (SKU). One extra read per package, so runs are slower.
resumeFromRunIdstringSkip activity IDs already present in a previous run or dataset. See Incremental monitoring for recurring runs.
incrementalModebooleanReturn only new or changed activities for the same state key. Cannot be combined with Resume from run when a baseline already exists.
stateKeystringName for shared recurring-run state. Leave empty to derive it from mode, query or URLs, language and currency.
emitUnchangedbooleanReturn records that have not changed during incremental monitoring. Unchanged rows are billed as dataset items.
emitExpiredbooleanOff by default. Turn on to return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked scope: not when Max items capped the run, and not when a pasted URL could not be read. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayField names (or dotted nested paths such as priceTiers.price) that never count as a change in incremental monitoring. Rows that differ only in these fields stay UNCHANGED and are not billed. Changing this list does not reset the baseline.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a page per record; other connectors get a best-effort write or digest. Each connector receives a condensed summary per record, not the full record; the complete record always stays in the dataset. Leave empty to skip; this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL or id of the Notion page under which record pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on records written to each connector per run. Does not affect the dataset.

Fields in the output

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

idid
namename
urlurl
minPriceminPrice
maxPricemaxPrice
officialPriceofficialPrice
currencycurrency
discountPercentdiscountPercent
ratingStarratingStar
ratingCountratingCount
bookedCountbookedCount
destinationsdestinations
Show 15 more fields
addressaddress
latitudelatitude
longitudelongitude
descriptiondescription
priceTierspriceTiers
displayTagsdisplayTags
imageUrlimageUrl
detailStatusdetailStatus
changeTypechangeType
changedFieldschangedFields
firstSeenAtfirstSeenAt
lastSeenAtlastSeenAt
scrapedAtscrapedAt
availabilityStatusavailabilityStatus
availabilityavailability

Example output

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

{
  "id": "20000001",
  "name": "Sample Harbor Sunset Cruise",
  "url": "https://www.kkday.com/en/product/20000001-sample-harbor-sunset-cruise",
  "minPrice": 24.5,
  "maxPrice": 89,
  "officialPrice": 29,
  "currency": "USD",
  "discountPercent": 15.5,
  "ratingStar": 4.7,
  "ratingCount": 1204,
  "bookedCount": "8K+",
  "destinations": [
    "Sample Harbor"
  ],
  "displayTags": [
    "Instant Confirmation"
  ],
  "imageUrl": "https://example.com/img/sample.jpg",
  "imageUrls": [
    "https://example.com/img/sample.jpg"
  ],
  "supplierName": "Sample Supplier",
  "introduction": "A relaxed evening cruise around the fictional Sample Harbor.",
  "address": "1 Sample Pier, Sample City, ST",
  "latitude": 25,
  "longitude": 121.5,
  "description": "A fictional sunset cruise with narration and drinks included, used here only as a placeholder.",
  "priceTiers": [
    {
      "price": 24.5,
      "currency": "USD",
      "name": "Adult"
    }
  ],
  "detailStatus": "complete",
  "changeType": "NEW",
  "changedFields": [],
  "firstSeenAt": "2026-01-01T00:00:00+00:00",
  "lastSeenAt": "2026-01-01T00:00:00+00:00",
  "scrapedAt": "2026-01-01T00:00:00+00:00"
}

Ways to use this data

  • Travel content and comparison sites: build destination pages with current activity prices, discounts and ratings.
  • Travel agencies and OTAs: enrich a curated list of activity URLs with full descriptions, coordinates and price tiers for repackaging.
  • Market and competitor researchers: track booking-demand counts, ratings and supplier names across a destination's activities over time.
  • Trip-planning tools and chatbots: feed activity search results, coordinates and price tiers into your own app or assistant.

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 KKday Scraper return?

The documented output for KKday Scraper includes id, name, url, minprice, maxprice, officialprice, currency and discountpercent. Availability of each field depends on the source page and the selected mode.

How much does KKday Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.70 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 activities on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental monitoring. Each run then returns only new and updated activities for the same state key, and unchanged ones are not billed unless you opt in with Emit unchanged.

Does Incremental monitoring flag an activity that disappeared and came back?

No. Activities are classified NEW, UPDATED or UNCHANGED, plus EXPIRED when Emit expired is on and a run fully scanned the tracked scope. An activity that vanishes and is later seen again is classified UPDATED or UNCHANGED the next time it is scanned, not as a separate reappeared state.

Why does a pasted activity URL return fewer fields than a search result?

KKday only publishes price range, discount, rating, review count, booking-demand count, destinations, tags and supplier name on its search-result pages, not on the activity page itself. Pasting a single activity link (or turning on Fetch activity details) still gets you the name, description, address, coordinates and price tiers, but those listing-only fields stay empty. To get both, search or paste a search-result URL with Fetch activity details on.

Can I use it with AI agents or MCP?

Yes. Call it through the Apify API, any Apify integration or an MCP client such as Apify's MCP server, and read the results from the dataset. The connector field for pushing results straight into Notion, Linear or Airtable is not active in the current build.

Ready to collect with KKday Scraper?

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