# Watsons Product Scraper | PH HK TW TH Data (`lentic_clockss/watsons-scraper`) Actor

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.

- **URL**: https://apify.com/lentic\_clockss/watsons-scraper.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.20 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Watsons Product Scraper — PH · HK · TW · TH

**Scrape Watsons health and beauty products from the Philippines, Hong Kong, Taiwan, and Thailand — then download prices, brands, ratings, and stock as Excel, CSV, or JSON.**

Use this Actor as a practical **Watsons data API** for multi-market product discovery, price monitoring, category research, brand listings, and guest review snapshots. Pick a market and a mode, then get Dataset rows with `BP_*` product codes, titles, guest list prices, EAN, ratings, and product URLs.

- Scrape **keyword search**, **category PLP** (`/c/{code}`), **product detail (PDP)**, **guest reviews**, **brand listings**, and **category / brand facet dumps**
- Cover **four Watsons storefronts**: Philippines (`watsons.com.ph`), Hong Kong (`watsons.com.hk` with `/en/`, `/zh-hk/`, `/zh-cn/`), Taiwan (`watsons.com.tw`), Thailand (`watsons.co.th` with Thai and `/en/`)
- Extract **productCode**, title, URL, brand, EAN, price / old price, currency, stock status, rating, review count, pharmacy / adult-only flags when present
- Export to **Excel / CSV / JSON**, or connect Make, n8n, Zapier, Python, or the Apify API
- **Pay per event** — Actor start + each Dataset result; **platform usage is included** (you do not pay separate Apify compute on top)

> **Unofficial tool.** This Actor is not affiliated with, endorsed by, or sponsored by A.S. Watson Group or Watsons. It collects **guest** (public) listing data and does **not** log in, checkout, or return member / loyalty prices. **Malaysia, Singapore, and Indonesia are out of scope** until separately verified. Do **not** pass `/lc/` CMS shelf URLs — those are not a full product listing.

Compared with Watsons Actors that cover **MY / SG / TH URL dumps** or **SG / MY / HK only**, this Actor focuses on **PH + HK (three locales) + TW + TH**, with market-correct category codes, Thailand’s **64**-item page size, brand facet listings, reviews, and taxonomy dumps in one input form.

***

### Need a dedicated scraper for one website?

This Actor is the general tool for protected public pages. If you already have **one specific site** and a field list, a dedicated scraper is faster and more stable: listing + detail, your export format, delivered to your Apify account or as a standalone runnable client.

I confirm the tier before you pay. The clock starts after that confirmation.

**Start here:** [Submit a custom scraper request](https://custom-scraper-intake-977720205770.us-central1.run.app/)

| | Starter **$50** | Dedicated **$100** | Hard target **$200–999** |
| --- | --- | --- | --- |
| Site | 1 simple anti-bot public site | 1 medium anti-bot public site | Cloudflare / aggressive anti-bot / custom parser |
| Scope | Full listing + detail fields | Listing + detail + pagination, your field list | Agreed fields, repeatable runs |
| Delivery | CSV/JSON · Apify Actor **or** standalone runnable client (script/CLI) | Same, plus a sample run and short instructions | Feasibility first, then build |
| Time | **24 hours** after we confirm the URL is in scope | **48 hours** after confirmation | Quoted after feasibility |
| Fixes | 30 days for small public-layout changes | 30 days | Scoped in the quote |

Hard-target sites are not a 100% uptime promise. You get a dedicated parser that can be re-run on the agreed fields. If the URL is not feasible, you get a refund or pay an assessment fee only — you will know before the build starts.

Not in Starter/Dedicated: login-walled data, native APK / Windows installer / full web apps, or two-year maintenance. Those are a separate quote.

***

### What is Watsons Product Scraper?

Watsons Product Scraper lets you **extract structured product data from Watsons PH, HK, TW, and TH** without operating your own anti-bot browser fleet. Give it a market and a mode (for example `search`, `category`, or `product`), then start a run.

Under the hood, the Actor:

1. Validates your input (mode, market, keyword / category code / `BP_*` product code, max results)
2. Enforces free-tier caps when you are on a free Apify plan
3. Collects public Watsons listing surfaces through a managed scrape backend with residential egress
4. Parses search, category PLP, PDP, reviews, and brand facets into normalized Dataset records
5. Writes `INPUT_ECHO`, `RUN_SUMMARY` (and `ERROR_SUMMARY` on failure) to the key-value store

You run it like any other Apify Actor — schedule it, call it from the API, or plug it into automations.

Watsons is **not** one `.com` catalog. Each market has its own host, `siteId`, currency, default page size, and `/c/` category codes. Reusing a Philippines category code on Taiwan or Thailand returns the wrong (or empty) shelf.

***

### What Watsons data can I extract?

| Data | Search | Category `/c/` | Product (PDP) | Reviews | Brand | Taxonomies |
| --- | :---: | :---: | :---: | :---: | :---: | :---: |
| Product code `BP_*` / URL | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| Title / name | ✅ | ✅ | ✅ | — | ✅ | — |
| Brand / brand URL | ✅\* | ✅\* | ✅\* | — | ✅ | ✅\* |
| Guest price / old price / currency | ✅\* | ✅\* | ✅\* | — | ✅\* | — |
| EAN / default variant | ✅\* | ✅\* | ✅\* | — | ✅\* | — |
| Stock / purchasable | ✅\* | ✅\* | ✅\* | — | ✅\* | — |
| Rating / review count | ✅\* | ✅\* | ✅\* | — | ✅\* | — |
| Pharmacy / adult-only / classifications | ✅\* | ✅\* | ✅\* | — | ✅\* | — |
| Review headline / rating / comment | — | — | —† | ✅ | — | — |
| Digit `/c/` category codes | — | — | — | — | — | ✅ |

\*When present on the guest OCC payload. †Turn on `enrichReviews` on product / search / category to attach a few review pages.

Identity key: `market` + `productCode` (`BP_*`). Currency follows the storefront: PHP, HKD, TWD, THB.

***

### Why scrape Watsons products?

Watsons is one of Asia’s largest health and beauty retailers. Teams scrape Watsons to:

- Monitor **guest list prices** and markdowns for vitamins, skincare, hair, oral care, and pet
- Compare **brand presence** (for example ANUA) across PH / HK / TW / TH
- Map **category trees** with live digit `/c/` codes (`mode=taxonomies`) instead of guessing slugs
- Snapshot **Hong Kong Simplified Chinese** (`/zh-cn/`) as its own catalog, not a translation of `/zh-hk/`
- Pull **guest reviews** for a `BP_*` product without logging in
- Seed CRM / research workflows with product URLs and EAN

***

### More Actors like this

Need marketplace or health-and-beauty data outside Watsons PH / HK / TW / TH, or a different vertical? Use a **dedicated Actor** below for structured fields. Use this Actor for **Watsons products** on those four storefronts.

#### Similar e-commerce scrapers

- [Costco Product Scraper](https://apify.com/lentic_clockss/costco-scraper) — Costco product search & listings
- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper) — Walmart products
- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector) — Amazon search results
- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper) — Shopee search
- [Lazada Scraper](https://apify.com/lentic_clockss/lazada-ph-search-results-collector) — Lazada listings
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper) — SHEIN products
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper) — Temu products
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper) — Target products
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper) — Etsy listings
- [ASOS Product Scraper](https://apify.com/lentic_clockss/asos-scraper) — ASOS products
- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper) — generic protected pages (prefer a dedicated Actor when one exists)

#### Prefer another specialized scraper?

If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.

**Jobs & Freelance**

- [LinkedIn Jobs Scraper](https://apify.com/lentic_clockss/linkedin-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/lentic_clockss/indeed-jobs-scraper)
- [Upwork Jobs Scraper](https://apify.com/lentic_clockss/upwork-jobs-scraper)
- [Glassdoor Scraper](https://apify.com/lentic_clockss/glassdoor-scraper)
- [Fiverr Gigs Scraper](https://apify.com/lentic_clockss/fiverr-programming-tech-gigs-scraper)
- [Bayt Jobs Scraper](https://apify.com/lentic_clockss/bayt-scraper)

**Real Estate**

- [Zillow & Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper)
- [Apartments.com Rental Scraper](https://apify.com/lentic_clockss/apartments-com-rental-scraper)
- [Rightmove Scraper](https://apify.com/lentic_clockss/rightmove-property-scraper)
- [Idealista Scraper](https://apify.com/lentic_clockss/idealista-scraper)
- [realestate.com.au Scraper](https://apify.com/lentic_clockss/realestate-com-au-scraper)

**E-commerce**

- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector)
- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper)
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper)
- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper)
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper)
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper)
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
- [Allegro Scraper](https://apify.com/lentic_clockss/allegro-scraper)

**Social & Content**

- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)
- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)

**Ads Intelligence**

- [Facebook Ad Library Scraper](https://apify.com/lentic_clockss/facebook-ad-library-scraper)
- [TikTok Ads Scraper](https://apify.com/lentic_clockss/tiktok-ads-top-ads-actor)

**General Tools**

- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper)
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator)
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence)

→ See the full catalog in [Related Actors](#related-actors) below, or browse [apify.com/lentic\_clockss](https://apify.com/lentic_clockss).

***

### How to scrape Watsons products (no code required)

1. Create a free [Apify](https://apify.com/) account
2. Open [Watsons Product Scraper](https://apify.com/lentic_clockss/watsons-scraper)
3. Choose a **mode**: `search`, `category`, `product`, `reviews`, `brand`, or `taxonomies`
4. Choose a **market**: `ph`, `hk`, `tw`, or `th`
5. Enter a **keyword**, **categoryCode**, **productCode** (`BP_…`), **brandCode**, or **startUrls**
6. *(Optional)* Set `locale` (HK: `en` / `zh-hk` / `zh-cn`; TH: `th` / `en`), `sort`, `maxResults`, `enrichReviews`
7. Click **Start** and download the Dataset as JSON, CSV, Excel, or JSONL

Start with `maxResults: 5–10` to verify the query, then scale up.

#### 1. Watch sunscreen prices in the Philippines

**In plain English:** run a keyword search on a schedule → see which SKUs are still listed and at what guest price.

**You give:** market `ph`, keyword `sunscreen`, `maxResults` `20`.

**You get back:**

| Title | Brand | Price | Currency | Product code |
| --- | --- | ---: | --- | --- |
| Example Sunscreen SPF50 | Example Brand | 599.00 | PHP | BP\_10098771 |

#### 2. Pull a Taiwan oral-care category

**In plain English:** pick Taiwan and a digit `/c/` code → get a table of toothpaste SKUs ready for Excel.

**You give:** `mode=category`, `market=tw`, `categoryCode=10450703`.

Do **not** copy a PH or TH code onto TW.

#### 3. Read Hong Kong Simplified Chinese as its own catalog

**In plain English:** set `market=hk` and `locale=zh-cn` → titles come from the `/zh-cn/` storefront (`lang=zh_CN`), not a machine translation of `/zh-hk/`.

#### 4. List a brand without guessing numeric IDs

**In plain English:** set `mode=brand` and `brandCode=ANUA` (the Solr **facet token** from `/all-brands/b/…`). Do **not** pass numeric `masterBrand.code` — that query returns unrelated SKUs.

#### 5. Feed AI agents and automations

**In plain English:** start the Actor from Make, n8n, Zapier, LangChain, or the Apify API → Dataset rows are structured JSON (`title`, `price`, `brand`, `url`, `productCode`).

***

### What Watsons data do I get back?

Every product row typically includes:

- **productCode** — Watsons code, for example `BP_10098771`
- **title** / **name** — guest display name for the selected locale
- **url** — absolute product URL on that market’s host
- **brand**, **brandCode**, **brandUrl**
- **price**, **priceFormatted**, **oldPrice**, **currency** (PHP / HKD / TWD / THB)
- **ean**, **defaultVariantCode**
- **stockStatus**, **purchasable**
- **averageRating**, **reviewCount**
- **pharmacy**, **elabIsAdultOnly**, **classifications** when the payload has them
- **paginationPageSize** — `32` on PH / HK / TW, **`64` on TH**
- **uid** — `{market}:{productCode}`

Review rows (`mode=reviews` or `enrichReviews`) add `reviewId`, `headline`, `rating`, and comment text.

Taxonomy rows dump digit `/c/` codes and brand facet tokens so you can drive later category / brand runs.

***

### How much does it cost to scrape Watsons?

This Actor uses **pay-per-event** pricing. You are charged for:

| Event | Price |
| --- | --- |
| Actor Start (`apify-actor-start`) | **$0.005** per start |
| Result (`apify-default-dataset-item`) | **$3.00 / 1,000** results (**$0.003** each on FREE/BRONZE) |

**Platform usage costs are included** — you do **not** pay separate Apify compute/proxy usage for this Actor on top of the event prices above (`User pays platform usage costs = No`).

#### Store tier pricing (results)

| Tier | $/1,000 | per result |
| --- | --- | --- |
| FREE\* | $3.00 | $0.003 |
| BRONZE | $3.00 | $0.003 |
| SILVER | $2.60 | $0.0026 |
| GOLD | $2.20 | $0.0022 |
| PLATINUM | $2.00 | $0.002 |
| DIAMOND | $1.60 | $0.0016 |

\*Store tier discounts apply to paying Apify customers on higher tiers.

#### Example cost estimates

| Results collected | Approx. event cost\* |
| --- | ---: |
| 100 | ~$0.31 |
| 1,000 | ~$3.01 |
| 10,000 | ~$30.01 |

\*Assumes one Actor start at default memory billing for start events, plus `$0.003` per Dataset item on FREE/BRONZE. Exact start billing can scale with allocated memory (one start event per GB, minimum one).

Free Apify trial credit can cover a small test run — try `maxResults: 5` first.

#### Free Apify plan limits (Actor-enforced)

| Cap | Free Apify plan | Paying |
| --- | --- | --- |
| Runs of this Actor | **10** total | Unlimited |
| Results per run | **200** | Schema max |

Limits are set by the Actor developer, not Apify. Quota hits return `SUCCEEDED` with `RUN_SUMMARY.status=FREE_TIER_LIMIT`. Empty `{}` searches `vitamin` on the PH store so a first Console test succeeds.

***

### Input examples

#### Keyword search (Philippines)

```json
{
  "mode": "search",
  "market": "ph",
  "keyword": "sunscreen",
  "maxResults": 20
}
```

#### Category PLP (Thailand hair care)

```json
{
  "mode": "category",
  "market": "th",
  "locale": "th",
  "categoryCode": "020106",
  "maxResults": 20
}
```

#### Hong Kong Simplified Chinese search

```json
{
  "mode": "search",
  "market": "hk",
  "locale": "zh-cn",
  "keyword": "serum",
  "maxResults": 15
}
```

#### Product detail (Taiwan)

```json
{
  "mode": "product",
  "market": "tw",
  "productCode": "BP_112900",
  "maxResults": 1
}
```

#### Brand listing (Philippines)

```json
{
  "mode": "brand",
  "market": "ph",
  "brandCode": "ANUA",
  "maxResults": 20
}
```

#### Start URLs

```json
{
  "startUrls": [
    { "url": "https://www.watsons.com.ph/search?text=moisturizer" },
    { "url": "https://www.watsons.com.hk/en/c/010102" }
  ],
  "maxResults": 20
}
```

Do **not** pass `/lc/` URLs. Do **not** reuse a PH category code on TW or TH.

***

### Connect to your tools

Use this Actor from your existing stack:

| Platform | How to connect |
| --- | --- |
| Make.com | Search “Apify” → “Run Actor” → Actor ID `lentic_clockss/watsons-scraper` |
| n8n | Add Apify node → “Run Actor” → same Actor ID |
| Zapier | Apify integration → “Run Actor” |
| LangChain | `ApifyDatasetLoader` / Actor run tool with the same Actor ID |
| Python / Node.js | Apify SDK or direct HTTPS call |

#### API call example

```bash
curl "https://api.apify.com/v2/acts/lentic_clockss~watsons-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"mode":"search","market":"ph","keyword":"sunscreen","maxResults":10}'
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("lentic_clockss/watsons-scraper").call(
    run_input={
        "mode": "search",
        "market": "ph",
        "keyword": "sunscreen",
        "maxResults": 20,
    }
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

Results come back via the Dataset API:

`GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json`

***

### FAQ

#### Is it legal to scrape Watsons?

This Actor collects **publicly reachable guest listing data**. It does not log in, bypass paywalls, or scrape private member prices. You are responsible for how you use the data (robots.txt, terms, local law). This is **not** an official Watsons or A.S. Watson product.

#### Which Watsons countries does this Actor cover?

**Philippines, Hong Kong, Taiwan, and Thailand.** Hong Kong supports `en`, `zh-hk`, and `zh-cn`. Thailand supports Thai and `/en/`. Malaysia, Singapore, and Indonesia are **not** included.

#### How is this different from other Watsons scrapers on Apify?

Other Store Actors often target **MY / SG / TH URL dumps** (80+ raw OCC fields) or **SG / MY / HK** only. This Actor is built for **PH + HK three locales + TW + TH**, rejects `/lc/` CMS shelves, uses **TH pageSize 64**, and adds **brand facet** + **taxonomy dump** + **paginated reviews**.

#### Why did my category run return nothing?

Category codes are **per market**. PH `031130` is not TW `10410101`. Use `mode=taxonomies` to dump live digit `/c/` codes, then run `mode=category`. Never use `/lc/` slugs.

#### Why did brand mode return unrelated products?

Pass the **facet token** from the brand URL (for example `ANUA`), not the numeric `masterBrand.code`. Numeric codes are a different Solr field and mix unrelated SKUs.

#### Do I need my own proxies?

No for normal runs. Residential egress is provided by the scrape worker. Optional `proxyCountry` is an ISO2 hint (`ph` / `hk` / `tw` / `th`).

#### Can I get member / Watsons Card prices?

No. Guest list price and strikethrough `oldPrice` only. Login and checkout are out of scope.

#### What is `/lc/` and why is it rejected?

`/lc/` is a CMS shelf, not a full PLP. The Actor rejects those URLs so you do not pay for an incomplete listing.

#### How many products per page does Watsons return?

PH / HK / TW: **32**. Thailand: **64**. The Actor paginates with OCC `currentPage` (0-based), not `?page=`.

#### Is scraping Watsons free?

You can try it with Apify trial credit. After that, pay-per-event applies (start + each Dataset row). Free Apify-plan users of this Actor are capped at **10 runs / 200 results**.

***

### Input reference

| Field | Notes |
| --- | --- |
| `mode` | `search` (default) · `category` · `product` · `reviews` · `taxonomies` · `brand` |
| `market` | `ph` `hk` `tw` `th` |
| `locale` | Optional. HK: `en` / `zh-hk` / `zh-cn`. TH: `th` / `en`. PH: `en`. TW: `zh-tw`. |
| `keyword` | Search text. Default `vitamin` so empty `{}` succeeds |
| `categoryCode` | Required for category. Examples: PH `031130` / `060809`, HK `010102` / `310000` / `100404`, TW `10410101` / `10450703`, TH `010201` / `020106` |
| `productCode` | Required for product / reviews. Format `BP_{digits}` |
| `brandCode` | Required for brand. Solr facet token (e.g. `ANUA`), **not** numeric `masterBrand.code` |
| `sort` | Search default `mostRelevant`. Category default `bestSeller` |
| `startUrls` | Optional `/search?text=`, `/c/{code}`, `/p/BP_…`, `/all-brands/b/{code}` |
| `maxResults` | Default 15, max 500 |
| `maxPages` | Max OCC pages, default 3 |
| `enrichReviews` | Attach paginated reviews for the first few product codes |

Full output schema is in the Dataset tab.

***

### Coverage

| Market | Host | Search | Category `/c/` | PDP | Extra locale |
| --- | --- | --- | --- | --- | --- |
| PH | watsons.com.ph | opened | `031130`, `060809` | opened | — |
| HK | watsons.com.hk | opened | `010102`, `310000`, `100404` | opened | `zh-hk`, `zh-cn` opened |
| TW | watsons.com.tw | opened | `10410101`, `10450703` | opened | — |
| TH | watsons.co.th | opened | `010201`, `020106` (pageSize 64) | opened | `/en/` opened |
| MY / SG / ID | — | 未验证 | 未验证 | 未验证 | — |

Store-finder is **未验证**. Brand listing is opened on PH (`ANUA`).

***

### Related Actors

All public Actors from [lentic\_clockss](https://apify.com/lentic_clockss). Click a name to open the Store detail page.

#### E-commerce

- [Watsons Product Scraper](https://apify.com/lentic_clockss/watsons-scraper) — Watsons PH / HK / TW / TH (this Actor)
- [Shopee Search Scraper](https://apify.com/lentic_clockss/shopee-search-scraper)
- [E-commerce Scraper](https://apify.com/lentic_clockss/ecommerce-scraper)
- [1688 Global Product Search Scraper](https://apify.com/lentic_clockss/1688-global-scraper)
- [Allegro Scraper](https://apify.com/lentic_clockss/allegro-scraper)
- [Amazon Search Scraper](https://apify.com/lentic_clockss/amazon-search-results-collector)
- [ASOS Product Scraper](https://apify.com/lentic_clockss/asos-scraper)
- [Cdiscount Product Scraper](https://apify.com/lentic_clockss/cdiscount-scraper)
- [Costco Product Scraper](https://apify.com/lentic_clockss/costco-scraper)
- [Coupang Product Scraper](https://apify.com/lentic_clockss/coupang-scraper)
- [Etsy Scraper](https://apify.com/lentic_clockss/etsy-scraper)
- [Lazada Scraper](https://apify.com/lentic_clockss/lazada-ph-search-results-collector)
- [MercadoLibre Scraper](https://apify.com/lentic_clockss/mercadolibre-scraper)
- [Mercari Japan Scraper](https://apify.com/lentic_clockss/mercari-scraper)
- [Rakuten Japan Scraper](https://apify.com/lentic_clockss/rakuten-scraper)
- [SHEIN Product Scraper](https://apify.com/lentic_clockss/shein-scraper)
- [Target Product Scraper](https://apify.com/lentic_clockss/target-scraper)
- [Temu Product Scraper](https://apify.com/lentic_clockss/temu-scraper)
- [Walmart Product Scraper](https://apify.com/lentic_clockss/walmart-scraper)

#### Food Delivery

- [Grab Scraper](https://apify.com/lentic_clockss/grab-scraper) — GrabFood / GrabMart SEA
- [Foodpanda Scraper](https://apify.com/lentic_clockss/foodpanda-scraper) — Foodpanda APAC
- [Foodora Scraper](https://apify.com/lentic_clockss/foodora-scraper) — Foodora NO / SE / AT / HU / CZ
- [Uber Eats Scraper](https://apify.com/lentic_clockss/ubereats-scraper) — multi-locale Uber Eats
- [Deliveroo Scraper](https://apify.com/lentic_clockss/deliveroo-scraper) — Deliveroo markets
- [DoorDash Scraper](https://apify.com/lentic_clockss/doordash-scraper) — DoorDash stores & menus
- [Wolt Scraper](https://apify.com/lentic_clockss/wolt-scraper) — Wolt restaurants & cities

#### Jobs & Freelance

- [Job Seek Career Jobs Monitor](https://apify.com/lentic_clockss/jseek-scraper)
- [LinkedIn Jobs Scraper](https://apify.com/lentic_clockss/linkedin-jobs-scraper)
- [Bayt Jobs Scraper](https://apify.com/lentic_clockss/bayt-scraper)
- [Fiverr Gigs Scraper](https://apify.com/lentic_clockss/fiverr-programming-tech-gigs-scraper)
- [Freelancer.com Scraper](https://apify.com/lentic_clockss/freelancer-scraper)
- [Glassdoor Scraper](https://apify.com/lentic_clockss/glassdoor-scraper)
- [Himalayas Jobs Scraper](https://apify.com/lentic_clockss/himalayas-jobs-scraper)
- [Indeed Jobs Scraper](https://apify.com/lentic_clockss/indeed-jobs-scraper)
- [Jobicy Remote Jobs Scraper](https://apify.com/lentic_clockss/jobicy-remote-jobs-scraper)
- [RemoteOK Jobs Scraper](https://apify.com/lentic_clockss/remoteok-all-jobs-scraper)
- [SEEK Jobs Scraper](https://apify.com/lentic_clockss/seek-scraper)
- [Upwork Jobs Scraper](https://apify.com/lentic_clockss/upwork-jobs-scraper)

#### Real Estate

- [Zillow & Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper)
- [99.co Scraper](https://apify.com/lentic_clockss/ninetynine-co-sg-scraper)
- [Realtor.com Agents Scraper](https://apify.com/lentic_clockss/realtor-com-agents-scraper)
- [Apartments.com Rental Scraper](https://apify.com/lentic_clockss/apartments-com-rental-scraper)
- [Bayut Scraper](https://apify.com/lentic_clockss/bayut-uae-scraper)
- [Craigslist Housing Scraper](https://apify.com/lentic_clockss/craigslist-housing-scraper)
- [Daft.ie Scraper](https://apify.com/lentic_clockss/daft-property-scraper)
- [Dot Property Scraper](https://apify.com/lentic_clockss/dot-property-th-scraper)
- [FINN.no Scraper](https://apify.com/lentic_clockss/finn-scraper)
- [Funda Scraper](https://apify.com/lentic_clockss/funda-scraper)
- [Hepsiemlak Scraper](https://apify.com/lentic_clockss/hepsiemlak-scraper)
- [Idealista Scraper](https://apify.com/lentic_clockss/idealista-scraper)
- [Immobiliare.it Scraper](https://apify.com/lentic_clockss/immobiliare-property-scraper)
- [ImmoScout24 Scraper](https://apify.com/lentic_clockss/immobilienscout24-scraper)
- [Naver Land Scraper](https://apify.com/lentic_clockss/naver-land-scraper)
- [OpenSooq Scraper](https://apify.com/lentic_clockss/opensooq-real-estate-scraper)
- [Otodom Scraper](https://apify.com/lentic_clockss/otodom-scraper)
- [Property Finder Scraper](https://apify.com/lentic_clockss/property-finder-uae-scraper)
- [PropertyGuru Scraper](https://apify.com/lentic_clockss/propertyguru-sg-scraper)
- [realestate.com.au Scraper](https://apify.com/lentic_clockss/realestate-com-au-scraper)
- [Realtor.ca Scraper](https://apify.com/lentic_clockss/realtor-ca-scraper)
- [Rightmove Scraper](https://apify.com/lentic_clockss/rightmove-property-scraper)
- [SeLoger Scraper](https://apify.com/lentic_clockss/seloger-property-scraper)
- [SUUMO Scraper](https://apify.com/lentic_clockss/suumo-property-scraper)
- [Zillow Group Scraper](https://apify.com/lentic_clockss/zillow-group-scraper)

#### Travel & Stays

- [Booking.com & Airbnb Scraper](https://apify.com/lentic_clockss/booking-airbnb-scraper)
- [Agoda Scraper](https://apify.com/lentic_clockss/agoda-scraper)
- [Airbnb Listings Scraper](https://apify.com/lentic_clockss/airbnb-listings-scraper)
- [Booking.com Hotels Scraper](https://apify.com/lentic_clockss/booking-hotels-scraper)
- [Despegar Scraper](https://apify.com/lentic_clockss/despegar-scraper)
- [Expedia Scraper](https://apify.com/lentic_clockss/expedia-scraper)
- [Traveloka Scraper](https://apify.com/lentic_clockss/traveloka-scraper)
- [Travelstart Flights Scraper](https://apify.com/lentic_clockss/travelstart-scraper)
- [Trip.com Scraper](https://apify.com/lentic_clockss/trip-com-scraper)
- [TripAdvisor Scraper](https://apify.com/lentic_clockss/tripadvisor-scraper)

#### Social & Content

- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)
- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)
- [Hacker News Scraper](https://apify.com/lentic_clockss/hacker-news-scraper)

#### Ads Intelligence

- [Facebook Ad Library Scraper](https://apify.com/lentic_clockss/facebook-ad-library-scraper)
- [Google Ads Transparency VN](https://apify.com/lentic_clockss/google-ads-transparency-center-vn)
- [TikTok Ads Scraper](https://apify.com/lentic_clockss/tiktok-ads-top-ads-actor)

#### Local & Maps

- [Google Maps Scraper](https://apify.com/lentic_clockss/google-maps-scraper)

#### General Tools

- [Stealth Web Scraper](https://apify.com/lentic_clockss/stealth-web-scraper)
- [Email Risk Validator](https://apify.com/lentic_clockss/email-risk-validator)
- [Phone Number Intelligence](https://apify.com/lentic_clockss/phone-number-intelligence)

→ Browse the full profile: [apify.com/lentic\_clockss](https://apify.com/lentic_clockss)

***

### Changelog

- **0.1** — PH / HK / TW / TH search, category PLP, PDP, reviews, brand facet, taxonomies. Guest fields only. Pay per event.

# Actor input Schema

## `mode` (type: `string`):

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.

## `market` (type: `string`):

Watsons storefront. Category codes and default page size differ (TH=64, others=32).

## `locale` (type: `string`):

Optional. HK: en, zh-hk, or zh-cn. TH: th or en. PH: en. TW: zh-tw. Empty uses the market default.

## `keyword` (type: `string`):

Search text (HTML ?text=). Used in keyword search mode.

## `categoryCode` (type: `string`):

Required for category mode. 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` (type: `string`):

Required for product/reviews mode. Format BP\_{digits}, e.g. BP\_10098771.

## `brandCode` (type: `string`):

Required for brand mode. Solr facet token from /all-brands/b/{token}/{slug}, e.g. ANUA. Do not pass numeric masterBrand.code.

## `sort` (type: `string`):

Search default mostRelevant. Category default bestSeller.

## `currentPage` (type: `integer`):

OCC currentPage. 0 is the first page. Not ?page=.

## `enrichReviews` (type: `boolean`):

Also fetch paginatedReviews for the first few product codes (guest).

## `startUrls` (type: `array`):

Optional Watsons page URLs (/search?text=, /c/{code}, /p/BP\_…). /lc/ CMS shelves are rejected.

## `maxResults` (type: `integer`):

Cap Dataset rows.

## `maxPages` (type: `integer`):

Max OCC currentPage fetches.

## `proxyCountry` (type: `string`):

ISO2 hint for worker egress. Defaults to the selected market (ph/hk/tw/th).

## `workerBaseUrl` (type: `string`):

Override the worker origin for this run. Defaults to Actor env WORKER\_BASE\_URL.

## Actor input object example

```json
{
  "mode": "search",
  "market": "ph",
  "keyword": "vitamin",
  "sort": "",
  "currentPage": 0,
  "enrichReviews": false,
  "maxResults": 15,
  "maxPages": 3,
  "proxyCountry": "",
  "workerBaseUrl": ""
}
```

# Actor output Schema

## `results` (type: `string`):

Normalized Watsons product rows from the default dataset.

## `runSummary` (type: `string`):

Structured summary record stored in the default key-value store.

## `inputEcho` (type: `string`):

Normalized input saved at run start.

## `errorSummary` (type: `string`):

Present when a failed run stores structured terminal error information.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "market": "ph",
    "keyword": "vitamin",
    "sort": "",
    "currentPage": 0,
    "enrichReviews": false,
    "maxResults": 15,
    "maxPages": 3,
    "proxyCountry": "",
    "workerBaseUrl": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/watsons-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "market": "ph",
    "keyword": "vitamin",
    "sort": "",
    "currentPage": 0,
    "enrichReviews": False,
    "maxResults": 15,
    "maxPages": 3,
    "proxyCountry": "",
    "workerBaseUrl": "",
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/watsons-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "market": "ph",
  "keyword": "vitamin",
  "sort": "",
  "currentPage": 0,
  "enrichReviews": false,
  "maxResults": 15,
  "maxPages": 3,
  "proxyCountry": "",
  "workerBaseUrl": ""
}' |
apify call lentic_clockss/watsons-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lentic_clockss/watsons-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cAVZTgmc5pApDFpZp/builds/re57n1TrGjQiloEKb/openapi.json
