# Lazada Scraper - Products, Units Sold & Reviews, 6 Countries (`webdata_labs/lazada-scraper`) Actor

\[$1.50 / 1K products] Scrape Lazada search results in Singapore, Malaysia, Thailand, Philippines, Indonesia and Vietnam: price, discount, units sold, rating, seller and location, plus reviews. No start fee.

- **URL**: https://apify.com/webdata\_labs/lazada-scraper.md
- **Developed by:** [WebData Labs](https://apify.com/webdata_labs) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper - Products, Units Sold & Reviews, 6 Countries

**Search Lazada in Singapore, Malaysia, Thailand, the Philippines, Indonesia and Vietnam in one run and get price, discount, units sold, rating and seller for every product, plus reviews, at $1.50 per 1,000 products.**

Lazada is where Southeast Asia shops alongside Shopee, and the numbers that matter for product research sit right on its search results: how many units a listing has sold, how deep the discount is, who sells it and from where. Collecting them by hand across six country sites is slow, and Lazada refuses automated traffic often enough that a naive scraper returns half a run. This Actor searches every country you pick, retries on fresh residential IPs whenever Lazada refuses a page, and returns clean rows with the units-sold label turned into a number you can sort by.

### ✅ What you get / ❌ what this isn't

| ✅ What you get | ❌ What this isn't |
|---|---|
| Units sold as a number (`37.6K sold` becomes 37,600) plus the original label | Not a text label you have to parse |
| Price, original price and discount percent on every row | Not just the current price |
| All six Lazada countries, one keyword searched in each, in a single run | Not one marketplace per run |
| Your own Lazada search URLs with their filters kept (price, rating, brand, location) | Not keyword-only input |
| Customer reviews with rating, text, date, variant bought and photos | Not listings only |
| Refused pages retried on fresh IPs, and a summary that says if one never came back | Not a silent half-empty run |
| $1.50 per 1,000 products, $0.50 per 1,000 reviews, no start fee | Not $4 or more per 1,000 plus a start fee |

### 🔎 Why use this Actor

- **Units sold, as a number.** Lazada shows sales as `1.2K sold` or `Đã bán 1,2k`. Every row carries `soldCount` as a plain number and `soldText` as shown, so you can sort a category by what actually sells.
- **Six countries in one run.** Pick any of Singapore, Malaysia, Thailand, the Philippines, Indonesia and Vietnam; each keyword is searched in each, with the country and currency on every row. That makes cross-market price comparison a single run.
- **Your filters, kept.** Filter on Lazada (price range, rating, brand, shipped-from location), copy the search URL and paste it in; the Actor fetches exactly that search. Or use the price, rating and sort fields in the form.
- **Reviews when you want them.** Switch on reviews to get each product's reviews with star rating, text, date, the variant the buyer bought and photos.
- **Built for Lazada's refusals.** Lazada answers a share of automated requests with a "verify you are human" page. The Actor detects it, switches to a fresh residential IP and retries, so a run finishes with the pages you asked for. Proxy rotation is handled for you and included in the price.

### 👥 Who it's for

E-commerce sellers and brands in Southeast Asia, product researchers and dropshippers, market analysts, and agencies tracking competitors on Lazada.

- Find the best-selling products for a keyword in each country, ranked by units sold.
- Compare a product's price and discount across all six Lazada markets.
- Watch a competitor's listings, prices and ratings in a category over time.
- Read reviews in bulk to see what buyers complain about before you source a product.
- Build a seller list for a category, with where each seller ships from.

### ⚙️ How to scrape Lazada

1. Enter one or more **Search keywords**, for example `air fryer`.
2. Pick the **Countries** to search. Local-language keywords (`sepatu running` in Indonesia, `nồi chiên không dầu` in Vietnam) return the most results.
3. Set **Maximum products per search** (`0` = everything Lazada serves, up to about 4,000).
4. Optionally set a price range, minimum rating or sort order, or paste Lazada search URLs instead.
5. Switch on **Include reviews** if you want them.
6. Click **Start**, then open the **Output** tab or export JSON, CSV or Excel.

#### Track a category every week

Save your input as a task and schedule it weekly. Each run records price, discount, rating and units sold with a timestamp, so a series of runs shows which listings are gaining sales and which sellers are cutting prices.

### 📥 Input

```json
{
  "searchQueries": ["air fryer"],
  "countries": ["sg", "my", "th"],
  "maxProductsPerSearch": 100,
  "sortBy": "popularity",
  "minRating": 4,
  "includeReviews": true,
  "maxReviewsPerProduct": 20
}
```

- `searchQueries` - product keywords. Each one is searched in every chosen country.
- `countries` - any of `sg`, `my`, `th`, `ph`, `id`, `vn`. Default `my`.
- `startUrls` - Lazada search-result URLs (with `?q=`), filters kept. Category landing pages are not supported; search the category name instead.
- `maxProductsPerSearch` - per keyword and country, or per URL. Default `100`; `0` for all.
- `sortBy` - `popularity` (default), `priceasc`, `pricedesc`.
- `minPrice`, `maxPrice` - in each country's local currency.
- `minRating` - 1 to 5 stars.
- `includeReviews` / `maxReviewsPerProduct` - off by default; default cap 20 reviews per product.

`queries`, `keywords`, `country`, `urls`, `limit`, `maxResults`, `getReviews` and `maxReviews` are accepted as aliases, so input written for another Lazada Actor usually runs as is.

### 📤 Output

| name | price | originalPrice | discountPercent | soldCount | rating | sellerName | country |
|---|---|---|---|---|---|---|---|
| UGREEN Car Windscreen Phone Holder Gravity Stand in the Car  | 29.81 | 49.99 | 40 | 30,500 | 4.9 | UGREEN Official Store | my |
| Wtd Airfryer Fried Chicken, High Capacity 16L, Oil-Free Frye | 561.19 | 1,090 | 49 | 34,100 | 5.0 | wasteed | th |
| Sports and Street Shoes Running Shoes, Sneakers, Gymnastic S | 109,900 | 244,590 | 55 | 4,300 | 4.7 | arienstore | id |

Rows have a `type` of `product` or `review`, and the Output tab has a table for each.

#### All output fields

| Field | Row type | What it is |
|---|---|---|
| `type` | both | `product` or `review` |
| `country` | both | `sg`, `my`, `th`, `ph`, `id` or `vn` |
| `searchQuery`, `searchUrl`, `position` | product | Which search found it, and its rank |
| `itemId`, `skuId` | product | Lazada ids |
| `name`, `url`, `imageUrl` | product | Title, product page, main image |
| `price`, `originalPrice`, `discountPercent`, `currency` | product | Pricing in local currency |
| `soldCount`, `soldText` | product | Units sold, as a number and as shown |
| `rating`, `reviewCount` | product | Average stars and number of ratings |
| `sellerName`, `sellerId`, `sellerLocation` | product | Seller and where it ships from |
| `brandName` | product | Brand (empty for "No Brand") |
| `inStock`, `isSponsored` | product | Stock flag and paid placement |
| `itemId`, `productName`, `productUrl` | review | The product reviewed |
| `reviewId`, `rating`, `title`, `text`, `reviewDate` | review | The review |
| `buyerName`, `variant`, `likes`, `imageUrls` | review | Reviewer (as Lazada masks it), variant bought, likes, photos |
| `scrapedAt` | both | Collection time |

### 💵 How much does it cost?

| Row | Charge event | Price per 1,000 (Free plan) |
|---|---|---|
| Product | `product-scraped` | $1.50 |
| Review | `review-scraped` | $0.50 |

Higher Apify plans get up to 20% off. There is **no start fee**, so a keyword that finds nothing costs nothing. The default run (40 products for one keyword in one country) costs $0.06. Reviews are off by default and capped per product.

### 🔁 Run it on the Apify platform

Schedule any saved input daily or weekly, call it from the Apify API, and export JSON, CSV, Excel or XML. Webhooks and the Make, Zapier and n8n integrations can push results into a sheet, a database or a Slack channel.

#### Use with AI agents via MCP

Add Apify's MCP server to Claude Code, Claude Desktop or Cursor and ask the agent to run `webdata_labs/lazada-scraper` for a product in several countries, then compare median price, discount and units sold per market, or summarize the most common complaints in the reviews. Keep your Apify token in the client's secret settings, not in a prompt.

#### Use this Actor in n8n

Call the Actor's run endpoint from an HTTP Request node (or `run-sync-get-dataset-items` for small runs), store the Apify token in n8n credentials, and map the dataset items onward. A typical flow: a weekly schedule, a run over your category keywords in your countries, and a sheet that tracks each listing's `soldCount` and `price` week over week.

### ⚠️ Limits and caveats

- **About 4,000 results per search.** Lazada serves at most around 102 pages of 40 for one keyword; narrow with price ranges or more specific keywords to go further.
- **Units sold is Lazada's own rounded label.** `37.6K sold` becomes 37,600; it is not an exact count, and listings without a label have an empty `soldCount`.
- **Category landing pages are not supported.** They are rendered in the browser without the data this Actor reads. Search the category name, or use a search URL.
- **Refusals.** Lazada refuses some automated requests; the Actor retries each page up to six times on fresh IPs. If a page is still refused, the run keeps what it collected and the summary names the search and page.
- **Reviews are Lazada's default order** and reviewer names are masked the way Lazada shows them.
- **Prices are in local currency** without conversion; `currency` holds the symbol Lazada uses.

### 🧩 Related Actors

- **[Shopee Scraper](https://apify.com/webdata_labs/shopee-scraper)** - the same products on Lazada's biggest rival across Southeast Asia.
- **[TikTok Shop Scraper](https://apify.com/webdata_labs/tiktok-shop-scraper)** - see whether a product is also selling through TikTok Shop.
- **[1688 Product Scraper](https://apify.com/webdata_labs/1688-scraper)** - find the Chinese wholesale source and margin for a product that sells well on Lazada.
- **[Amazon Bestsellers Scraper](https://apify.com/webdata_labs/amazon-bestsellers-scraper)** - compare with what leads the same category on Amazon.
- **[Google Shopping Scraper](https://apify.com/webdata_labs/google-shopping-scraper)** - price the same product across other retailers.

### ❓ FAQ

#### Which countries are supported?

- Singapore (lazada.sg)
- Malaysia (lazada.com.my)
- Thailand (lazada.co.th)
- Philippines (lazada.com.ph)
- Indonesia (lazada.co.id)
- Vietnam (lazada.vn)

#### Do I need a Lazada account or proxy?

No. Nothing here needs a login, and proxy rotation is handled for you and included in the price.

#### Am I charged when a search finds nothing?

No. There is no start fee and only returned rows are charged.

#### How do I compare prices across countries?

Pick several countries and use one keyword. Every row carries `country` and `currency`, so you can group by country and compare.

#### I have input from another Lazada Actor. Will it work?

Usually: `queries`, `keywords`, `country`, `urls`, `limit`, `maxResults`, `getReviews` and `maxReviews` are accepted as aliases.

#### Is it legal to scrape Lazada?

Scraping public data can be lawful in many situations, but it depends on your jurisdiction, purpose and Lazada's terms. This Actor reads only what Lazada shows any logged-out shopper and does not log in. Reviews contain user-generated content, so handle them under the privacy law that applies to you, and get legal advice for high-risk use.

#### Is this a Lazada API?

Effectively yes: run it over the Apify API and read structured JSON, CSV or Excel with stable field names.

### Changelog

- **2026-09-26** - First release: keyword search across all six Lazada countries, search URLs with filters, price and rating filters and sort, units sold as a number, reviews, automatic retry on fresh IPs when Lazada refuses a page, and per-row pricing with no start fee.

### 🛠️ Support

Something wrong or missing? Open an Actor issue with the run URL, the input you used and what you expected. That is the fastest route to a fix.

### ⭐ Rate this Actor

If this saved you time, please leave a rating on the **Reviews** tab. Review count is the main trust signal buyers have on the Store, and reviews decide which Actors get improved next. If something is broken, please open an issue first so it can be fixed.

# Actor input Schema

## `searchQueries` (type: `array`):

Product keywords to search on Lazada, for example "iphone case" or "air fryer". Each keyword is searched in every country you pick.

## `countries` (type: `array`):

Lazada marketplaces to search. Pick several to compare the same product across Southeast Asia in one run.

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

Optional: paste Lazada search-result URLs (they contain ?q=) to keep the filters you set on the site, such as price range, rating, location or brand.

## `maxProductsPerSearch` (type: `integer`):

How many products to return for each keyword and country (or URL). Set 0 for every result Lazada serves, up to about 4,000.

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

Order of search results.

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

Only products at or above this price, in the local currency of each country.

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

Only products at or below this price, in the local currency of each country.

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

Only products rated at least this many stars (1-5).

## `includeReviews` (type: `boolean`):

Also return customer reviews for every product found: rating, text, date, variant bought and photos. Each review is a billed row.

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

Caps the review rows for each product, newest-relevant first as Lazada orders them.

## Actor input object example

```json
{
  "searchQueries": [
    "phone holder"
  ],
  "countries": [
    "my"
  ],
  "startUrls": [],
  "maxProductsPerSearch": 40,
  "sortBy": "popularity",
  "includeReviews": false,
  "maxReviewsPerProduct": 20
}
```

# Actor output Schema

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

One row per product with price, discount, units sold, rating and seller.

## `reviews` (type: `string`):

Customer reviews, when reviews are switched on.

## `summary` (type: `string`):

Per search: results on Lazada, products returned and anything refused.

# 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 = {
    "searchQueries": [
        "phone holder"
    ],
    "countries": [
        "my"
    ],
    "maxProductsPerSearch": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/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 = {
    "searchQueries": ["phone holder"],
    "countries": ["my"],
    "maxProductsPerSearch": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("webdata_labs/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 '{
  "searchQueries": [
    "phone holder"
  ],
  "countries": [
    "my"
  ],
  "maxProductsPerSearch": 40
}' |
apify call webdata_labs/lazada-scraper --silent --output-dataset

```

## MCP server setup

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