# Lazada $1💰 URL | Search | Products and Reviews Scraper (`abotapi/lazada-scraper`) Actor

Scrape Lazada products and reviews across SEA markets, including Malaysia, Singapore, Indonesia, Philippines, Thailand, and Vietnam. Extract structured data on pricing, inventory, ratings, sellers, media, and reviews. Ideal for cross-region analysis with consistent, analytics-ready output.

- **URL**: https://apify.com/abotapi/lazada-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Scraper

Pull product listings, full SKU variant tables, vouchers, shipping rules, seller ratings, and customer reviews from Lazada's six SE Asia country sites: Singapore, Malaysia, Thailand, Vietnam, Philippines, and Indonesia. Search by query or feed URLs directly. Toggle a single switch to flip the actor into reviews-only mode that emits one record per review (with media and SKU info). Records carry flat top-level fields (ready for CSVs and spreadsheets) AND a nested `raw` block preserving the complete source record, so downstream pipelines never lose information.

### Why this scraper?

- Six country sites in one actor, not six. One input field switches the run between SG, MY, TH, VN, PH, ID.
- Reviews mode walks every page (capped) instead of only the first 10. Default delivers ~10x the depth of typical scrapers.
- Detail enrichment includes the full SKU table (variant id, price, stock, attributes), every active voucher and promotion, shipping fee plus delivery ETA plus COD flag, warranty period, and the seller rating cluster (positive rate, shipping speed, chat response rate, follower count). All exposed as both flat fields AND a nested `raw.detail` block with the complete source record.
- Reviews-only runs against product URLs are dramatically cheaper and run in seconds at ~256 MB peak memory.
- Forward pagination with per-query budget split: when you scrape 3 queries with maxListings=15, each query gets 5, not query #1 takes all.

### Data you get

> Sample shape, values are illustrative placeholders, not from a live listing.

#### Product record (type = "product")

| Field | Example |
|---|---|
| `type` | `"product"` |
| `id` / `productId` | `"0000000001"` |
| `url` / `productUrl` | `https://www.lazada.sg/products/sample-i0000000001.html` |
| `productName` | `"Sample Product Title"` |
| `currentPrice` | `49.9` |
| `originalPrice` | `99` |
| `discountPct` | `50` |
| `currency` | `"SGD"` |
| `country` | `"SG"` |
| `ratingScore` | `4.6` |
| `reviewCount` | `1234` |
| `itemSold` | `"5K+ sold"` |
| `inStock` | `true` |
| `isSponsored` | `false` |
| `freeShipping` | `true` |
| `sellerName` | `"Sample Store"` |
| `sellerId` | `"0000000"` |
| `sellerLocation` | `"Singapore"` |
| `sellerRatingPositivePct` | `98` |
| `sellerShippingSpeed` | `"Fast"` |
| `sellerChatResponseRate` | `"95%"` |
| `sellerFollowerCount` | `1500` |
| `brandName` | `"Sample Brand"` |
| `brandId` | `"0000"` |
| `primaryImage` | `https://laz-img-cdn.alicdn.com/p/000000.jpg` |
| `imageGallery` | `["https://laz-img-cdn.alicdn.com/p/000001.jpg", ...]` |
| `description` | `["Bullet 1", "Bullet 2"]` |
| `descriptionHtml` | `"<p>Full HTML description...</p>"` |
| `skuList` | `[{ id: "0000", price: 49.9, stock: 10, color: "Black", size: "M" }, ...]` |
| `skuCount` | `4` |
| `vouchers` | `[{ amount: 5, minSpend: 30, code: "SAMPLE5" }, ...]` |
| `promotions` | `[{ type: "flash_sale", endsAt: "2026-01-01T00:00:00Z" }, ...]` |
| `shipping` | `{ fee: 0, eta: "2-3 days", cod: true }` |
| `warranty` | `{ type: "Manufacturer", periodMonths: 12 }` |
| `specifications` | `{ weight: "0.3kg", material: "ABS" }` |
| `breadcrumbs` | `["Electronics", "Audio", "Earphones"]` |
| `embeddedReviews` | `[ ... 10 review objects ... ]` (only when fetchReviews=true) |
| `raw.serp` | The original SERP card object |
| `raw.detail` | The original detail page module data |
| `fetchedAt` | `"2026-01-01T00:00:00.000Z"` |

#### Review record (type = "review")

> Sample shape, values are illustrative placeholders, not from a live review.

| Field | Example |
|---|---|
| `type` | `"review"` |
| `id` / `reviewId` | `"0000000001"` |
| `productId` | `"0000000001"` |
| `productUrl` | `https://www.lazada.sg/products/sample-i0000000001.html` |
| `buyerName` | `"j****e"` |
| `rating` | `5` |
| `reviewTime` | `"2026-01-01"` |
| `reviewContent` | `"Great quality, fast shipping."` |
| `skuInfo` | `"Color: Black, Size: M"` |
| `likeCount` | `12` |
| `media` | `[{ coverUrl: "https://...", videoUrl: "https://...", mediaType: 2, height: 1920, width: 1080 }]` |
| `country` | `"SG"` |
| `raw` | The complete source record for the review, every field included |
| `fetchedAt` | `"2026-01-01T00:00:00.000Z"` |

### How to use

#### Search by query

```json
{
  "mode": "search",
  "country": "sg",
  "queries": ["wireless earbuds"],
  "minPrice": 20,
  "maxPrice": 200,
  "minRating": 4,
  "sortBy": "ratingDesc",
  "maxPages": 5,
  "maxListings": 100,
  "fetchDetails": true
}
````

#### Walk SERP URLs

```json
{
  "mode": "url",
  "urls": [
    "https://www.lazada.com.my/catalog/?q=ipad",
    "https://www.lazada.co.th/shop-laptops/"
  ],
  "maxPages": 3,
  "maxListings": 60,
  "fetchDetails": true
}
```

#### Reviews only, from product URLs (fast, ~256 MB)

```json
{
  "mode": "url",
  "country": "sg",
  "urls": [
    "https://www.lazada.sg/products/sample-i0000000001.html",
    "https://www.lazada.sg/products/sample-i0000000002.html"
  ],
  "reviewsOnly": true,
  "maxReviewsPerProduct": 200
}
```

#### Products with embedded reviews

```json
{
  "mode": "search",
  "country": "ph",
  "queries": ["coffee maker"],
  "fetchReviews": true,
  "maxReviewsPerProduct": 30,
  "maxPages": 2,
  "maxListings": 40
}
```

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | enum | `search` | `search` or `url`. |
| `country` | enum | `sg` | One of `sg`, `my`, `th`, `vn`, `ph`, `id`. URL mode auto-detects from the first URL. |
| `queries` | string\[] | `["laptop"]` | Search terms (search mode only). |
| `categoryId` | string |  | Optional category id pin. |
| `minPrice` / `maxPrice` | int |  | Price range in local currency. |
| `minRating` | int (1-5) |  | Drop products under this rating. |
| `freeShippingOnly` | bool | `false` | Keep only free-shipping items. |
| `sortBy` | enum | `popularity` | `popularity`, `priceAsc`, `priceDesc`, `ratingDesc`, `newest`, `bestSelling`. |
| `urls` | string\[] |  | URLs (url mode). SERP, category, OR product pages. |
| `reviewsOnly` | bool | `false` | Emit reviews instead of products. |
| `fetchReviews` | bool | `false` | Add reviews to each product record (only when `reviewsOnly=false`). |
| `maxReviewsPerProduct` | int | `100` | Cap reviews per product. |
| `fetchDetails` | bool | `true` | Hit the detail page for SKU table, vouchers, shipping, seller cluster. |
| `maxPages` | int | `5` | Pages per query/URL. |
| `maxListings` | int | `100` | Hard cap across all starts. `0` = unlimited (still bounded by `maxPages`). |
| `proxy` | object | Apify Residential | Lazada requires SE Asia residential exits. |

### Plan requirement

Lazada serves SE Asia residential traffic. The actor REQUIRES Apify Residential proxy with the country pinned to your selected country. Free plan does not include Residential, so a free-tier run will return 0 items. Upgrade at https://apify.com/pricing (Starter or higher includes Residential).

For `reviewsOnly=true` runs where every input URL is a product URL, the actor takes a faster, cheaper path (still residential).

# Actor input Schema

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

Pick how to start. 'search' runs query + filters below. 'url' walks one or more SERP / category / product URLs. Reviews-only output is a separate toggle below (works in either mode).

## `country` (type: `string`):

Lazada has six country sites. The actor walks ONE country per run. Country also pins the residential proxy exit.

## `queries` (type: `array`):

One or more search terms. The actor runs a separate paginated walk for each query. Examples: 'laptop', 'iphone case', 'kopi'. Only used when mode = search.

## `categoryId` (type: `string`):

Optional: pin search to a Lazada category id (the digits at the end of a category URL slug, e.g. /shop-computers-laptops/ -> the trailing id in pageData). Leave empty for all categories.

## `minPrice` (type: `integer`):

Minimum price in the country's local currency (SGD/MYR/THB/VND/PHP/IDR). No bound when empty.

## `maxPrice` (type: `integer`):

Maximum price in local currency. No bound when empty.

## `minRating` (type: `integer`):

Drop products whose average rating is below this value (1 to 5). Applied client-side after the SERP fetch.

## `freeShippingOnly` (type: `boolean`):

Keep only items eligible for the country's free-shipping promotion. Applied client-side.

## `sortBy` (type: `string`):

Sort the search results.

## `urls` (type: `array`):

One or more URLs. SERP, category, and product URLs are all accepted. Multi-URL supported. Each URL is walked forward from its starting page. Filter-mode fields above are ignored in URL mode (the URL itself encodes the filters). Examples: https://www.lazada.sg/catalog/?q=iphone, https://www.lazada.sg/shop-laptops/, https://www.lazada.sg/products/some-slug-i123456.html.

## `reviewsOnly` (type: `boolean`):

When ON, the actor walks the SERP / URLs to discover product IDs but emits ONE record per review (type='review'), not one per product. Works in both search and URL modes. When mode = url AND every URL points at a /products/ page, the run is dramatically faster and ~10x cheaper.

## `fetchReviews` (type: `boolean`):

When ON and reviewsOnly is OFF, every product record additionally carries an embedded array of its top reviews (capped by maxReviewsPerProduct). Adds a small overhead per product.

## `maxReviewsPerProduct` (type: `integer`):

Hard cap on reviews fetched per product. The reviews API ships ~10 per page; the actor walks pages forward until cap or last page. Default 100 covers ~95% of products fully. Raise for review depth analysis.

## `fetchDetails` (type: `boolean`):

When ON, the actor fetches each product's detail page after the SERP. Adds full SKU variant table, shipping + warranty, seller cluster, image gallery, breadcrumbs. Adds ~3-5 seconds per product. When OFF (default), only SERP-card fields populate (id, title, price, rating, image, seller name) at much lower cost.

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

Stop after this many SERP pages per starting query/URL. Lazada's SERP serves ~40 cards per page. Set to 0 for unlimited (still bounded by maxListings).

## `maxListings` (type: `integer`):

Hard cap across all queries / URLs. Set to 0 for unlimited (still bounded by maxPages). When reviewsOnly = true, this caps DISCOVERED products, not reviews; total review records can be much higher.

## `proxy` (type: `object`):

Apify Residential is required for SE Asia residential exits. Country pin is forced to match the selected country site. Free-tier (Datacenter) is rejected by Lazada and the actor will warn at startup.

## Actor input object example

```json
{
  "mode": "search",
  "country": "sg",
  "queries": [
    "laptop"
  ],
  "freeShippingOnly": false,
  "sortBy": "popularity",
  "urls": [
    "https://www.lazada.sg/catalog/?q=earbuds"
  ],
  "reviewsOnly": false,
  "fetchReviews": false,
  "maxReviewsPerProduct": 100,
  "fetchDetails": false,
  "maxPages": 0,
  "maxListings": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SG"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "queries": [
        "laptop"
    ],
    "urls": [
        "https://www.lazada.sg/catalog/?q=earbuds"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "SG"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/lazada-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 = {
    "queries": ["laptop"],
    "urls": ["https://www.lazada.sg/catalog/?q=earbuds"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "SG",
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "queries": [
    "laptop"
  ],
  "urls": [
    "https://www.lazada.sg/catalog/?q=earbuds"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "SG"
  }
}' |
apify call abotapi/lazada-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=abotapi/lazada-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Lazada $1💰 URL | Search | Products and Reviews Scraper",
        "description": "Scrape Lazada products and reviews across SEA markets, including Malaysia, Singapore, Indonesia, Philippines, Thailand, and Vietnam. Extract structured data on pricing, inventory, ratings, sellers, media, and reviews. Ideal for cross-region analysis with consistent, analytics-ready output.",
        "version": "1.0",
        "x-build-id": "d0l9MpLTAEUSSpgkG"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~lazada-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-lazada-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~lazada-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-lazada-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~lazada-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-lazada-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": {
                    "mode": {
                        "title": "Run mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "Pick how to start. 'search' runs query + filters below. 'url' walks one or more SERP / category / product URLs. Reviews-only output is a separate toggle below (works in either mode).",
                        "default": "search"
                    },
                    "country": {
                        "title": "Country site",
                        "enum": [
                            "sg",
                            "my",
                            "th",
                            "vn",
                            "ph",
                            "id"
                        ],
                        "type": "string",
                        "description": "Lazada has six country sites. The actor walks ONE country per run. Country also pins the residential proxy exit.",
                        "default": "sg"
                    },
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "One or more search terms. The actor runs a separate paginated walk for each query. Examples: 'laptop', 'iphone case', 'kopi'. Only used when mode = search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "categoryId": {
                        "title": "Category ID (optional)",
                        "type": "string",
                        "description": "Optional: pin search to a Lazada category id (the digits at the end of a category URL slug, e.g. /shop-computers-laptops/ -> the trailing id in pageData). Leave empty for all categories."
                    },
                    "minPrice": {
                        "title": "Min price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price in the country's local currency (SGD/MYR/THB/VND/PHP/IDR). No bound when empty."
                    },
                    "maxPrice": {
                        "title": "Max price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price in local currency. No bound when empty."
                    },
                    "minRating": {
                        "title": "Minimum average rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Drop products whose average rating is below this value (1 to 5). Applied client-side after the SERP fetch."
                    },
                    "freeShippingOnly": {
                        "title": "Free shipping only",
                        "type": "boolean",
                        "description": "Keep only items eligible for the country's free-shipping promotion. Applied client-side.",
                        "default": false
                    },
                    "sortBy": {
                        "title": "Sort order",
                        "enum": [
                            "popularity",
                            "priceAsc",
                            "priceDesc",
                            "ratingDesc",
                            "newest",
                            "bestSelling"
                        ],
                        "type": "string",
                        "description": "Sort the search results.",
                        "default": "popularity"
                    },
                    "urls": {
                        "title": "URLs",
                        "type": "array",
                        "description": "One or more URLs. SERP, category, and product URLs are all accepted. Multi-URL supported. Each URL is walked forward from its starting page. Filter-mode fields above are ignored in URL mode (the URL itself encodes the filters). Examples: https://www.lazada.sg/catalog/?q=iphone, https://www.lazada.sg/shop-laptops/, https://www.lazada.sg/products/some-slug-i123456.html.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "reviewsOnly": {
                        "title": "Output reviews only (instead of products)",
                        "type": "boolean",
                        "description": "When ON, the actor walks the SERP / URLs to discover product IDs but emits ONE record per review (type='review'), not one per product. Works in both search and URL modes. When mode = url AND every URL points at a /products/ page, the run is dramatically faster and ~10x cheaper.",
                        "default": false
                    },
                    "fetchReviews": {
                        "title": "Include reviews on each product",
                        "type": "boolean",
                        "description": "When ON and reviewsOnly is OFF, every product record additionally carries an embedded array of its top reviews (capped by maxReviewsPerProduct). Adds a small overhead per product.",
                        "default": false
                    },
                    "maxReviewsPerProduct": {
                        "title": "Max reviews per product",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on reviews fetched per product. The reviews API ships ~10 per page; the actor walks pages forward until cap or last page. Default 100 covers ~95% of products fully. Raise for review depth analysis.",
                        "default": 100
                    },
                    "fetchDetails": {
                        "title": "Enrich each product with detail page data (slower)",
                        "type": "boolean",
                        "description": "When ON, the actor fetches each product's detail page after the SERP. Adds full SKU variant table, shipping + warranty, seller cluster, image gallery, breadcrumbs. Adds ~3-5 seconds per product. When OFF (default), only SERP-card fields populate (id, title, price, rating, image, seller name) at much lower cost.",
                        "default": false
                    },
                    "maxPages": {
                        "title": "Max SERP pages per query/URL",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Stop after this many SERP pages per starting query/URL. Lazada's SERP serves ~40 cards per page. Set to 0 for unlimited (still bounded by maxListings).",
                        "default": 0
                    },
                    "maxListings": {
                        "title": "Max products total",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap across all queries / URLs. Set to 0 for unlimited (still bounded by maxPages). When reviewsOnly = true, this caps DISCOVERED products, not reviews; total review records can be much higher.",
                        "default": 20
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Residential is required for SE Asia residential exits. Country pin is forced to match the selected country site. Free-tier (Datacenter) is rejected by Lazada and the actor will warn at startup."
                    }
                }
            },
            "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
                                    }
                                }
                            },
                            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
