{
  "openapi": "3.0.1",
  "info": {
    "title": "Klook Scraper - Activities, Tours & Attractions",
    "description": "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.",
    "version": "0.1",
    "x-build-id": "LNG5Prnlw3uXVCDlq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~klook-activities-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-klook-activities-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~klook-activities-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-klook-activities-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~klook-activities-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-klook-activities-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "operation": {
            "title": "Klook data type",
            "enum": [
              "activities",
              "categories",
              "home",
              "destinations",
              "reviews",
              "deals",
              "esim",
              "car_rentals",
              "airport_transfers",
              "dining",
              "suggestions",
              "hotels"
            ],
            "type": "string",
            "description": "Choose 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.",
            "default": "activities"
          },
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search by keyword or read pasted Klook URLs. Reviews always use the activity URLs, regardless of this setting.",
            "default": "search"
          },
          "query": {
            "title": "Search query",
            "type": "string",
            "description": "Keyword for activity search and suggestions, or a hotel city, area or property name. Ignored in URL mode and for categories, destinations and home.",
            "default": "Tokyo"
          },
          "searchQueries": {
            "title": "Multiple search queries",
            "type": "array",
            "description": "Run several keyword searches in one run (overrides \"Search query\" when set). Results are de-duplicated across queries.",
            "items": {
              "type": "string"
            }
          },
          "cityIds": {
            "title": "City IDs filter",
            "type": "array",
            "description": "Keep 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.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort activities",
            "enum": [
              "default",
              "most_reviewed",
              "price_low_high",
              "price_high_low",
              "rating"
            ],
            "type": "string",
            "description": "Klook search has no sort option, so results are ordered after the pages (up to Max pages) are read.",
            "default": "default"
          },
          "currency": {
            "title": "Currency",
            "type": "string",
            "description": "Three-letter display currency when supported by the page.",
            "default": "USD"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Locale for titles and text, for example en_US, ja_JP, zh_CN, ko_KR.",
            "default": "en_US"
          },
          "urls": {
            "title": "Klook URLs",
            "type": "array",
            "description": "Activity, 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.",
            "default": [
              "https://www.klook.com/en-US/activity/41352-tokyo-skytree/",
              "https://www.klook.com/en-US/search/?query=tokyo",
              "https://www.klook.com/en-US/city/28-tokyo-things-to-do/"
            ],
            "items": {
              "type": "string"
            }
          },
          "checkIn": {
            "title": "Check-in date",
            "type": "string",
            "description": "Hotels only. YYYY-MM-DD or a relative value such as 30 days. Defaults to 30 days from today.",
            "default": "30 days"
          },
          "checkOut": {
            "title": "Check-out date",
            "type": "string",
            "description": "Hotels only. Leave empty for two nights after check-in. A stay must be 1-30 nights."
          },
          "adults": {
            "title": "Adults",
            "minimum": 1,
            "maximum": 30,
            "type": "integer",
            "description": "Hotels only. Total adult guests across all rooms, with at least one adult per room.",
            "default": 2
          },
          "rooms": {
            "title": "Rooms",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "Hotels only. Number of rooms needed for the guest party.",
            "default": 1
          },
          "childrenAges": {
            "title": "Children ages",
            "type": "array",
            "description": "Hotels only. One age from 0 to 17 per child, up to 10 children. The child count comes from this list.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "hotelSort": {
            "title": "Sort hotels by",
            "enum": [
              "recommended",
              "priceAsc",
              "priceDesc",
              "rating",
              "popular"
            ],
            "type": "string",
            "description": "Hotels only. Use Klook's hotel sort order. Live quoted prices may not be strictly ordered.",
            "default": "recommended"
          },
          "starRatings": {
            "title": "Hotel star ratings",
            "type": "array",
            "description": "Hotels only. Leave empty for all star ratings.",
            "items": {
              "type": "string",
              "enum": [
                "2",
                "3",
                "4",
                "5"
              ],
              "enumTitles": [
                "2 stars or fewer",
                "3 stars",
                "4 stars",
                "5 stars"
              ]
            },
            "default": []
          },
          "minHotelRating": {
            "title": "Minimum hotel review score",
            "enum": [
              "0",
              "3",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Hotels only. Minimum guest review score on the 0-5 scale.",
            "default": "0"
          },
          "minNightlyPrice": {
            "title": "Minimum nightly price",
            "minimum": 0,
            "type": "integer",
            "description": "Hotels only. Minimum price in the selected currency, including taxes and fees. Zero means no minimum.",
            "default": 0
          },
          "maxNightlyPrice": {
            "title": "Maximum nightly price",
            "minimum": 0,
            "type": "integer",
            "description": "Hotels only. Maximum price in the selected currency, including taxes and fees. Zero means no maximum.",
            "default": 0
          },
          "freeCancellation": {
            "title": "Free cancellation",
            "type": "boolean",
            "description": "Hotels only. Request offers matching the free-cancellation filter. Deadlines and terms vary by offer.",
            "default": false
          },
          "breakfastIncluded": {
            "title": "Breakfast included",
            "type": "boolean",
            "description": "Hotels only. Request offers that include breakfast.",
            "default": false
          },
          "fetchDetails": {
            "title": "Fetch activity details",
            "type": "boolean",
            "description": "Add 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.",
            "default": true
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum number of records returned. Applies to every operation.",
            "default": 20
          },
          "maxPages": {
            "title": "Max search pages",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum 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."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings used for Klook requests."
          },
          "resumeFromRunId": {
            "title": "Resume from run or dataset",
            "type": "string",
            "description": "Skip activity IDs already present in a previous run or dataset."
          },
          "incrementalMode": {
            "title": "Incremental monitoring",
            "type": "boolean",
            "description": "Return 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.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Name for shared recurring-run state. Leave empty to derive it from operation, query or URLs, and currency."
          },
          "emitUnchanged": {
            "title": "Emit unchanged",
            "type": "boolean",
            "description": "Return records that have not changed during incremental monitoring.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Extra 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.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "MCP connectors",
            "type": "array",
            "description": "Optional connector names for downstream export."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page",
            "type": "string",
            "description": "Optional parent page for Notion export."
          },
          "maxNotifyListings": {
            "title": "Max connector exports",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum records sent to each optional connector.",
            "default": 50
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}