{
  "openapi": "3.0.1",
  "info": {
    "title": "Watsons Product Scraper | PH HK TW TH Data",
    "description": "Scrape Watsons health and beauty products across the Philippines, Hong Kong, Taiwan, and Thailand. Extract guest prices, brands, EAN, ratings, and stock from search, category PLP, PDP, reviews, and brand listings. Export to Excel, CSV, or JSON. No login. Unofficial — not affiliated with A.S. Watson.",
    "version": "0.1",
    "x-build-id": "7dWL2SKxJ7DVoXvVf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lentic_clockss~watsons-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lentic_clockss-watsons-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/lentic_clockss~watsons-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lentic_clockss-watsons-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/lentic_clockss~watsons-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lentic_clockss-watsons-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",
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "category",
              "product",
              "reviews",
              "taxonomies",
              "brand",
              "stores",
              "basestores",
              "enumerate"
            ],
            "type": "string",
            "description": "What to collect. Search uses keyword. Category needs a market-specific /c/ code (do not reuse PH codes on TW/TH). Product needs BP_ code. Taxonomies dumps facet category codes. Brand needs Solr facet token brandCode (e.g. ANUA), not numeric masterBrand.code.",
            "default": "search"
          },
          "market": {
            "title": "Market",
            "enum": [
              "ph",
              "hk",
              "tw",
              "th",
              "sg",
              "my",
              "vn",
              "id"
            ],
            "type": "string",
            "description": "Watsons storefront. Category codes and default page size differ (TH=64, others=32).",
            "default": "ph"
          },
          "locale": {
            "title": "Locale",
            "type": "string",
            "description": "Optional. HK: en, zh-hk, or zh-cn. TH: th or en. PH: en. TW: zh-tw. Empty uses the market default."
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "One search input (HTML ?text=). Used in keyword search mode.",
            "default": "vitamin"
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Optional list of search inputs. Each query gets its own maxResults row budget and replaces the default keyword.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "categoryCode": {
            "title": "Category code",
            "type": "string",
            "description": "Required for category mode. One category code is one input. Examples: PH 031130 or 060809, HK 010102 / 310000 / 100404, TW 10410101 or 10450703, TH 010201 or 020106. Never reuse codes across markets. Not /lc/ codes."
          },
          "productCode": {
            "title": "Product code",
            "type": "string",
            "description": "Required for product/reviews mode. One product code is one input. Format BP_{digits}, e.g. BP_10098771."
          },
          "brandCode": {
            "title": "Brand code",
            "type": "string",
            "description": "Required for brand mode. One brand code is one input. Use the Solr facet token from /all-brands/b/{token}/{slug}, e.g. ANUA. Do not pass numeric masterBrand.code."
          },
          "kind": {
            "title": "Seed kind (enumerate only)",
            "enum": [
              "",
              "category",
              "brand",
              "product"
            ],
            "type": "string",
            "description": "Restrict enumerate to one seed type. Empty = all three (category, brand, product).",
            "default": ""
          },
          "maxSeeds": {
            "title": "Max seeds (enumerate only)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Cap on catalog+pool seeds per run, 1-50. Each seed walks the matching category/brand/product collector for up to maxResults rows.",
            "default": 10
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "",
              "mostRelevant",
              "bestSeller",
              "brand",
              "new",
              "topRated",
              "price-asc",
              "price-desc",
              "flashSaleQuota"
            ],
            "type": "string",
            "description": "Search default mostRelevant. Category default bestSeller.",
            "default": ""
          },
          "currentPage": {
            "title": "Start page (0-based)",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "OCC currentPage. 0 is the first page. Not ?page=.",
            "default": 0
          },
          "enrichReviews": {
            "title": "Include review rows",
            "type": "boolean",
            "description": "Also fetch guest reviews for the first few products. Each review is a separate billed row and shares that input's maxResults budget.",
            "default": false
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional Watsons page URLs (/search?text=, /c/{code}, /p/BP_…). Each URL gets its own maxResults row budget. /lc/ CMS shelves are rejected.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "Max results per input",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum Dataset rows for each search query, start URL, category, product, brand, reviews, or taxonomy input. Default 70; larger values are collected in parts of up to 70. Product, review, category, and brand row types share that input's budget. The run also stops at your maximum total charge. Free Apify plan: 200 rows per run and 10 runs.",
            "default": 70
          },
          "maxPages": {
            "title": "Max pages",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Legacy page cap. Entity-layout runs fill each unit across source pages until maxResults or exhaustion.",
            "default": 1
          },
          "proxyCountry": {
            "title": "Proxy country",
            "type": "string",
            "description": "ISO2 hint for worker egress. Defaults to the selected market (ph/hk/tw/th).",
            "default": ""
          },
          "workerBaseUrl": {
            "title": "Worker base URL (optional)",
            "type": "string",
            "description": "Override the worker origin for this run. Defaults to Actor env WORKER_BASE_URL.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}