# Lazada TH Product Monitor (`tithonus/lazada-th-product-monitor`) Actor

Scrape product details (price, currency, stock, brand, seller ID, images) from Lazada Thailand product URLs.

- **URL**: https://apify.com/tithonus/lazada-th-product-monitor.md
- **Developed by:** [Nikita Thomas](https://apify.com/tithonus) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Lazada TH Product Monitor

Scrape product details — title, current price, currency, stock status, brand, seller ID, variant flag, images — from Lazada Thailand product URLs.

### What you get

Each product URL returns one JSON record. This is a real record from an actual run, not an illustration:

```json
{
  "url": "https://www.lazada.co.th/products/pdp-i736078-s848857.html",
  "title": "HI-Q 1PLUS PLAIN STAGE 3 2750G.",
  "price": 1359,
  "currency": "THB",
  "currencySign": "฿",
  "brand": "Hi-Q(ไฮคิว)",
  "brandUrl": "https://www.lazada.co.th/hiq/",
  "canonicalUrl": "https://www.lazada.co.th/products/hi-q-1plus-plain-stage-3-2750g-i736078-s848857.html",
  "itemId": "736078",
  "skuId": "848857",
  "sellerId": "1051",
  "categoryId": "4139",
  "inStock": true,
  "quantityMin": 1,
  "quantityMax": 5,
  "hasVariants": true,
  "imageUrls": ["https://th-test-11.slatic.net/p/35c81f7d5be8feac5ae8abe7e65b375a.jpg"],
  "scrapedAt": "2026-08-18T04:45:27.480Z"
}
```

### Use cases

- **Price tracking** — schedule daily runs to monitor price changes across competitors' SKUs
- **Stock monitoring** — get notified when a product goes out of stock
- **Multi-seller comparison** — same product across different Lazada sellers, keyed on `sellerId`
- **Dropshipping intel** — verify Lazada TH price + availability before listing on overseas marketplaces

### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `productUrls` | string\[] | yes | Lazada TH product URLs (`https://www.lazada.co.th/products/<slug>.html`) |
| `maxConcurrency` | int | no | Parallel pages, default 2, max 5 |
| `proxyCountry` | enum | no | Residential proxy routing, default `TH` |

### Limitations (v1)

Read this before subscribing — these are hard limits of what Lazada TH serves, not roadmap gaps.

**Not returned, because the data is not in the server-rendered page at all:**

- `rating` / `reviewCount` — injected by a client-side API call that does not complete in a headless browser
- `originalPrice` / `discountPercent` — only the current selling price is present; there is no strikethrough price in the payload
- `sellerName` — served empty by Lazada; use `sellerId` to key sellers instead

**Other limits:**

- Product detail URLs only — not category, search, or seller-shop URLs
- First-listed variant only — products with variants flag `hasVariants: true` but only the default variant is captured
- No built-in price history (each run is a snapshot; combine with scheduled runs for trends)
- Login-gated content not supported

### How it works

Lazada TH server-renders a JSON payload into the page and then hydrates it client-side. The hydration step does not complete under headless Chromium, so anything that only appears post-hydration (ratings, reviews, discount) is unavailable.

This actor reads the server-rendered payload instead:

1. Load the product page through a residential proxy, with a session warm-up on the homepage first
2. Wait for the SSR payload (`fields.product` + `fields.tracking`) — not for hydration, which never finishes
3. Extract structured fields from that payload, with a DOM-selector fallback
4. Push one record per URL to the dataset

### Built by

A Bangkok-based engineer. Issues, feature requests, and bug reports welcome — they directly shape the paid v2 spec.

# Actor input Schema

## `productUrls` (type: `array`):

One or more Lazada Thailand product detail page URLs. Must match https://www.lazada.co.th/products/<slug>.html

## `maxConcurrency` (type: `integer`):

How many product pages to scrape in parallel. Keep low (2-3) to avoid tripping Lazada rate limits.

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

Country routing for residential proxies. TH recommended for accurate Lazada TH pricing and locale.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.lazada.co.th/products/pdp-i736078-s848857.html"
  ],
  "maxConcurrency": 2,
  "proxyCountry": "TH"
}
```

# Actor output Schema

## `products` (type: `string`):

One record per input product URL — price, currency, stock, brand, seller ID and images.

# 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 = {
    "productUrls": [
        "https://www.lazada.co.th/products/pdp-i736078-s848857.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tithonus/lazada-th-product-monitor").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 = { "productUrls": ["https://www.lazada.co.th/products/pdp-i736078-s848857.html"] }

# Run the Actor and wait for it to finish
run = client.actor("tithonus/lazada-th-product-monitor").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 '{
  "productUrls": [
    "https://www.lazada.co.th/products/pdp-i736078-s848857.html"
  ]
}' |
apify call tithonus/lazada-th-product-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tithonus/lazada-th-product-monitor"
        }
    }
}

```

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/sKnG43JeNsQ6KPUNB/builds/Jx5bo7GzXUEP027wH/openapi.json
