# Lazada Product Scraper (`herus13/lazada-scraper`) Actor

Search Lazada across Southeast Asia and extract products from Singapore, Malaysia, Vietnam, Thailand, Philippines and Indonesia. Rows carry title, price, price_original, currency, rating, review_count, sold_count, seller_name and product_url. Export JSON, CSV or Excel.

- **URL**: https://apify.com/herus13/lazada-scraper.md
- **Developed by:** [herus13](https://apify.com/herus13) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 55 total users, 25 monthly users, 97.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Lazada Product Scraper extracts products from [Lazada](https://www.lazada.com) by keyword search across six Southeast Asian markets — Singapore, Malaysia, Vietnam, Thailand, Philippines and Indonesia. Every row carries title, price, original price, currency, rating, review count, sold count, seller, location and brand.

### 中文说明

Lazada 东南亚商品数据抓取工具，按关键词搜索采集商品，覆盖新加坡、马来西亚、越南、泰国、菲律宾、印尼六个站点。

每条数据包含标题 `title`、售价 `price`、原价 `price_original`、币种 `currency`、评分 `rating`、评价数 `review_count`、销量 `sold_count`、卖家 `seller_name`、发货地 `location`、品牌 `brand` 和商品链接 `product_url`。字段命名与我们的 Shopee 采集工具一致，两个平台的数据可直接合并比价。

运行自带住宅代理，无需自行配置。在 Apify Console 填好关键词与国家点击 Start 即可，也可以通过 Apify API 提交同样的 JSON。结果支持导出 JSON、CSV 或 Excel。

### What you get

One dataset row per product. Export as JSON, CSV or Excel.

```json
{
  "title": "ATTACK SHARK | Wireless Esports Mouse 1000Hz",
  "price": 208000,
  "price_original": 410000,
  "currency": "VND",
  "rating": 4.92,
  "review_count": 1243,
  "sold_count": 5700,
  "seller_name": "Brand Super Deal",
  "brand": "ATTACK SHARK",
  "product_url": "https://www.lazada.vn/products/pdp-i13394425519.html",
  "region": "vn",
  "_meta": {"author": "https://apify.com/herus13", "status": "ok", "message": null}
}
```

`_meta` is run metadata, not scraped data. A target that fails appears as a row with only `_meta` (status `failed`, the reason in `message`); those rows are never charged.

Rows also carry `location` — where the seller ships from — and `scraped_at`. Field names match the Shopee scrapers in this account, so Lazada and Shopee results merge into one comparison table without a mapping layer in between.

### What it costs

| Event | Price |
|---|---|
| Product (`product-result`) | $0.005 |

You pay per product, not per minute: $0.005 for each product returned, and there is no per-run start fee. A hundred products is about $0.50 and a thousand about $5.00, with the residential proxy included in that price. A run asks for at least 10 products, so the smallest run is about $0.05 — less when a search has fewer than 10 matches.

### Input

| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
| `search_terms` | array | no | — | Keywords to search on Lazada, one per entry — for example iphone 15 case, or air fryer. Each term is paged through until the run reaches max_results, and every matching product comes back with its price, original price, rating, review and sold counts, seller, location and brand. Give at least one term: leave empty and the run stops with an input error before anything is charged. |
| `region` | string | no | `"sg"` | Lazada country site to search. It decides which products exist, the language of the listings and the currency of every price. Default sg. Supported: sg Singapore, my Malaysia, vn Vietnam, th Thailand, ph Philippines, id Indonesia. One run covers one country, so comparing markets means running the same search terms once per region. |
| `max_results` | integer | no | `40` | Most products a run returns in total, counted across every search term. Default 40, minimum 1, maximum 4000, and a value below 10 is raised to 10. Raise it to sweep a category and keep it low for a quick price check. A single keyword usually runs out of new products well before 4000, so wider coverage comes from more search terms rather than a higher cap. |
| `proxyUrls` | array | no | — | Leave empty: the run uses the residential proxy this actor ships with, included in the price of the run. To route the run through your own provider instead, add one gateway URL per entry, for example http://user:pass@host:port — works with any provider that issues URLs. When set, the run uses these first and switches to the included proxy if they stop working, so a broken proxy never fails the run. |

### How to run it

1. Open the actor on Apify Console.
2. Enter one or more search terms.
3. Pick the region, set **Max results**, then Run. Export JSON, CSV or Excel from the dataset.

```json
{
  "search_terms": ["iphone 15 case", "wireless mouse"],
  "region": "vn",
  "max_results": 100
}
```

Minimal input:

```json
{
  "search_terms": ["iphone 15 case"]
}
```

Available as the MCP tool `herus13--lazada-scraper` on mcp.apify.com and through the Apify API; send the same JSON.

### Why this scraper

- **Comparison-ready across marketplaces** — field names match the Shopee scrapers, so a Lazada export and a Shopee export stack into one price table with no remapping.
- **Six markets, one input** — Singapore, Malaysia, Vietnam, Thailand, Philippines and Indonesia all answer the same JSON, each with its own currency in the `currency` field.
- **The discount, not just the price** — `price` next to `price_original` gives the real markdown, which is the number a promotion actually competes on.
- **Demand signals included** — `sold_count` and `review_count` separate the products that move from the ones that merely rank well.
- **Nothing to set up** — no account, no cookies, no proxy configuration; a residential proxy is included in the price of the run.

### Use cases

- **Southeast Asian price comparison** — Six countries with a schema shared with the Shopee scrapers, so both marketplaces normalise into one dataset and a per-country price index falls straight out of it.
- **Discount and promotion monitoring** — `price` against `price_original` gives the discount depth, and `sold_count` shows whether the promotion is moving units — the two numbers that say whether a competitor's sale is working.
- **Seller and brand intelligence** — Seller, location and brand arrive on every row, so you can see which sellers hold a category in a given country and where they ship from.
- **Affiliate catalogue building** — Product URLs in every row are what a link generator needs, and the shared schema lets one catalogue span several marketplaces.
- **Assortment and gap analysis** — Sweep the same keywords in two countries and compare what is listed, at what price, before deciding where to launch a product.

### FAQ

**Which countries are covered?** Six Lazada sites: Singapore, Malaysia, Vietnam, Thailand, Philippines and Indonesia. One run covers one country; run the same search terms once per region to compare markets.

**Can I compare prices with Shopee?** Yes. Output field names match the Shopee scrapers in this account, so both feed one comparison dataset without a translation layer.

**How many products can one run return?** Up to 4000 across all search terms, set by `max_results`. A single keyword usually runs out of new products well before that, so a wide sweep means more search terms rather than a higher cap.

**Which currency are prices in?** The currency of the region you picked — SGD, MYR, VND, THB, PHP or IDR — and every row states it in `currency`, so a multi-country dataset is never ambiguous.

**Is a proxy included?** A residential proxy is included in the price of the run. To use your own, paste gateway URLs into **Your own proxy URLs**.

**What happens if my input is wrong?** The run stops before it scrapes anything, so no results are charged. Its status and log name each field that is wrong and say what to change — fix the input and run again.

**Is scraping Lazada legal?** This actor collects only publicly available product data from public search results — no login and no paywall bypass. You are responsible for complying with Lazada's terms and applicable laws.

### Related actors

Southeast Asia marketplace data — Singapore, Malaysia, Vietnam, Thailand, Philippines, Indonesia:

- [Shopee Official Shop Scraper](https://apify.com/herus13/shopee-shop-scraper) — the official brand shops in a Shopee category.
- [Shopee Category Lister](https://apify.com/herus13/shopee-category-lister) — one country's full Shopee category tree.
- [TikTok Shop Scraper](https://apify.com/herus13/tiktok-shop-scraper) — one TikTok Shop product row, across seven storefronts.
- [Amazon Scraper](https://apify.com/herus13/amazon-scraper) — one product row, including Amazon Singapore.

More scrapers by this author: [apify.com/herus13](https://apify.com/herus13)

# Actor input Schema

## `search_terms` (type: `array`):

Keywords to search on Lazada, one per entry — for example iphone 15 case, or air fryer. Each term is paged through until the run reaches max_results, and every matching product comes back with its price, original price, rating, review and sold counts, seller, location and brand. Give at least one term: leave empty and the run stops with an input error before anything is charged.

## `region` (type: `string`):

Lazada country site to search. It decides which products exist, the language of the listings and the currency of every price. Default sg. Supported: sg Singapore, my Malaysia, vn Vietnam, th Thailand, ph Philippines, id Indonesia. One run covers one country, so comparing markets means running the same search terms once per region.

## `max_results` (type: `integer`):

Most products a run returns in total, counted across every search term. Default 40, minimum 1, maximum 4000, and a value below 10 is raised to 10. Raise it to sweep a category and keep it low for a quick price check. A single keyword usually runs out of new products well before 4000, so wider coverage comes from more search terms rather than a higher cap.

## `proxyUrls` (type: `array`):

Leave empty: the run uses the residential proxy this actor ships with, included in the price of the run. To route the run through your own provider instead, add one gateway URL per entry, for example http://user:pass@host:port — works with any provider that issues URLs. When set, the run uses these first and switches to the included proxy if they stop working, so a broken proxy never fails the run.

## Actor input object example

```json
{
  "search_terms": [
    "iphone 15 case"
  ],
  "region": "sg",
  "max_results": 40
}
```

# Actor output Schema

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

Products from search — title, price, original price, currency, rating, review/sold counts, seller, location, brand, image, product URL, region, scraped_at. Each row also carries `_meta`: run metadata, not scraped data.

# 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 = {
    "search_terms": [
        "iphone 15 case"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("herus13/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 = { "search_terms": ["iphone 15 case"] }

# Run the Actor and wait for it to finish
run = client.actor("herus13/lazada-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 '{
  "search_terms": [
    "iphone 15 case"
  ]
}' |
apify call herus13/lazada-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,herus13/lazada-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/VLmL1IQk7oiUnuCr3/builds/abav4yc6RlLfxOwCP/openapi.json
