# Lazada & Daraz Search Scraper (11 countries) (`tamnt67/lazada-search-scraper`) Actor

Scrape Lazada and Daraz search, category and brand pages in 11 countries (VN, TH, SG, MY, PH, ID, PK, BD, LK, NP, MM). Get product name, price, discount, rating, review count, sold count, seller, brand and image as clean JSON, CSV or Excel.

- **URL**: https://apify.com/tamnt67/lazada-search-scraper.md
- **Developed by:** [Tam Ng.](https://apify.com/tamnt67) (community)
- **Categories:** E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 product scrapeds

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 & Daraz Search Scraper (VN, TH, SG, MY, PH, ID, PK, BD, LK, NP, MM)

Extract product listings from **Lazada and Daraz search results, category pages and brand pages** in 11 countries: Lazada in Vietnam, Thailand, Singapore, Malaysia, Philippines and Indonesia, plus Daraz (Lazada's sister marketplace) in Pakistan, Bangladesh, Sri Lanka, Nepal and Myanmar (shop.com.mm). Give it keywords or Lazada URLs and get clean, structured product data: price, discount, rating, review count, sold count, seller, brand and image.

Use it for price monitoring, competitor research, finding best-selling products, dropshipping research, market sizing or feeding product data into your own tools.

### What you get for each product

| Field | Example |
|-------|---------|
| `name` | Goojodoq J237 TWS 5.3 Wireless Bluetooth Headphones |
| `price` / `currency` | 122500 / VND (PKR, BDT, LKR, NPR, MMK for Daraz) |
| `originalPrice` / `discount` | 200000 / 39% Off |
| `ratingScore` / `reviewCount` | 4.9 / 163 |
| `soldCount` / `soldCountShow` | 672 / "672 sold" |
| `sellerName` / `sellerId` / `location` | goojodoqstore.vn / 200232915812 / Vietnam |
| `brandName` / `brandId` | GOOJODOQ / 56990 |
| `inStock` / `isSponsored` | true / false |
| `url` / `image` / `thumbs` | product URL, main image, extra images |
| `itemId` / `skuId` / `categories` | 3265827913 / 15767082336 / \[10100387, 5009, 11412] |
| `country` / `query` / `scrapedAt` | vn / keyword "tai nghe bluetooth" (vn) / ISO timestamp |

Download results as JSON, CSV, Excel or XML, or read them through the Apify API.

### How to use

1. Enter one or more **keywords** and pick a **country** (Lazada or Daraz), or paste full **Lazada or Daraz URLs** such as https://www.daraz.pk/catalog/?q=earphones, search pages, category pages such as `https://www.lazada.sg/shop-headphones/`, or brand pages such as `https://www.lazada.vn/goojodoq-123394872/` to get every product of a brand. You can mix them.
2. Optionally choose **sort order** (best match, top sales, price, newest) and a **price range**.
3. Set **max products per keyword or URL**. Lazada returns 40 products per page, so 120 means 3 pages.
4. Run. Results appear in the dataset as they are scraped.

#### Example input

```json
{
  "keywords": ["wireless earbuds", "mechanical keyboard"],
  "country": "sg",
  "sortBy": "popularity",
  "maxItemsPerQuery": 200,
  "minPrice": 20,
  "maxPrice": 150
}
```

#### Example output

```json
{
  "itemId": "3265827913",
  "name": "Goojodoq J237 TWS 5.3 Wireless Bluetooth Headphones",
  "price": 122500,
  "priceShow": "₫122,500",
  "currency": "VND",
  "originalPrice": 200000,
  "discount": "39% Off",
  "ratingScore": 4.9,
  "reviewCount": 163,
  "soldCount": 672,
  "soldCountShow": "672 sold",
  "inStock": true,
  "brandName": "GOOJODOQ",
  "sellerName": "goojodoqstore.vn",
  "sellerId": "200232915812",
  "location": "Vietnam",
  "isSponsored": false,
  "url": "https://www.lazada.vn/products/pdp-i3265827913.html",
  "image": "https://vn-live-01.slatic.net/p/9fb526813254ccb36f981d9882fc1277.jpg",
  "country": "vn",
  "query": "keyword \"tai nghe bluetooth\" (vn)",
  "scrapedAt": "2026-11-05T09:12:44.000Z"
}
```

### Pricing

You pay per product scraped. There are no extra platform usage charges on top of the event price. Set a maximum total charge per run in the run options if you want a hard cap.

### Tips

- **Top sales** sort is the fastest way to find best sellers in a niche.
- Keep `maxItemsPerQuery` at or below what you need. Lazada caps most searches at about 100 pages.
- Keep the default **residential proxy**. Lazada answers datacenter IPs with captcha pages, so other proxy settings usually return nothing. Proxy traffic is already included in the per-product price.
- Schedule the Actor to run daily and connect it to Google Sheets or a webhook to build a price tracker.

### Limitations

- Only listing data is returned. Product detail pages (variants, full description, all reviews) are not scraped.
- Sponsored listings are included and flagged with `isSponsored: true`.
- Lazada can change its site at any time. If the Actor stops returning data, report an issue and it will be fixed quickly.

### Integrations

Works with every Apify integration: API, webhooks, Zapier, Make, Google Sheets, Slack, n8n, LangChain and the Apify MCP server.

# Actor input Schema

## `keywords` (type: `array`):

One or more search terms, e.g. "wireless earbuds". Each keyword is searched separately.

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

Optional. Paste full Lazada URLs: a search page like https://www.lazada.vn/catalog/?q=tai+nghe, a category page like https://www.lazada.sg/shop-headphones/, or a brand page like https://www.lazada.vn/goojodoq-123394872/. The country is taken from the URL.

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

Which Lazada site to search for the keywords above.

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

Order of results, same options as the Lazada website.

## `maxItemsPerQuery` (type: `integer`):

Stop after this many products for each keyword or URL. Lazada returns 40 products per page.

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

Optional lower price bound in local currency (e.g. 100000 for VND).

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

Optional upper price bound in local currency.

## `proxyConfiguration` (type: `object`):

Keep the default (Apify residential proxy). Lazada blocks datacenter IPs with captcha pages, so datacenter proxies or no proxy will usually return nothing.

## Actor input object example

```json
{
  "keywords": [
    "wireless earbuds"
  ],
  "startUrls": [],
  "country": "vn",
  "sortBy": "relevance",
  "maxItemsPerQuery": 120,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset with one record per product: name, price, currency, original price, discount, rating, review count, sold count, seller, brand, URL, images, country, query.

## `productsCsv` (type: `string`):

The same dataset exported as CSV.

# 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 = {
    "keywords": [
        "wireless earbuds"
    ],
    "maxItemsPerQuery": 120,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tamnt67/lazada-search-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 = {
    "keywords": ["wireless earbuds"],
    "maxItemsPerQuery": 120,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tamnt67/lazada-search-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 '{
  "keywords": [
    "wireless earbuds"
  ],
  "maxItemsPerQuery": 120,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call tamnt67/lazada-search-scraper --silent --output-dataset

```

## MCP server setup

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