# Lazada Scraper: Products, Prices, Sold Counts and Reviews (`themineworks/lazada-scraper`) Actor

Scrape Lazada in Singapore, Malaysia, Thailand, Indonesia, the Philippines and Vietnam by keyword, category or product link: price, was price, discount, rating, review count, sold count, seller, brand and images, plus optional customer reviews. No login.

- **URL**: https://apify.com/themineworks/lazada-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.69 / 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, Prices, Sold Counts and Reviews

[![40 Lazada products with price, discount, rating, sold count and seller in 7 seconds](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/lazada-scraper-hero.png)](https://console.apify.com/actors/uFqtyZxLB925qdmZj/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

From **The Mine Works**, makers of [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral) and [Taobao Products Scraper](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), with over 245,000 runs across 280+ public actors.

Updated 26 Oct 2026: first release. Keyword search, tag and category links and product links on all six Lazada storefronts (Singapore, Malaysia, Thailand, Indonesia, the Philippines, Vietnam); price, price before discount, discount, rating, review count, sold count, seller, brand and ship-from location, optional product page details and optional customer reviews, one flat row each. Bookmark this Actor on its Store page so it is one click away next time.

### Why choose this actor?

- **The numbers a seller or a buyer compares, in columns.** `price`, `price_original`, `discount_percent`, `rating`, `review_count` and `sold_count` are separate fields in the storefront's own currency, next to `seller_name`, `brand` and `location` (where the product ships from). No text to clean before you sort a keyword by units sold or by discount.
- **Six countries from one input.** Pick Singapore, Malaysia, Thailand, Indonesia, the Philippines or Vietnam, type the keyword the way shoppers there type it (Thai and Vietnamese work), or paste a Lazada link from any of the six sites.
- **Reviews as rows.** Turn on `includeReviews` and every product gets its newest (or most relevant) reviews as extra rows: stars, text, date, variant bought, helpful votes and pictures. Filter by star rating.
- **Pay per product, nothing for a page Lazada will not serve.** A search page that stays blocked is skipped with an error row and no charge, the $0.003 run fee is charged only after the first page returned products, and duplicates, rows outside your price or rating range and the summary row are never charged. No Lazada account, cookies or API key.

[![Run it on Apify](https://api.apify.com/v2/key-value-stores/cUXz95yxflDho41nn/records/button-run.png)](https://console.apify.com/actors/uFqtyZxLB925qdmZj/input?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Part of The Mine Works E-commerce and marketplaces family:** [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [AliExpress Scraper](https://apify.com/themineworks/aliexpress-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral), [Kleinanzeigen.de Scraper](https://apify.com/themineworks/kleinanzeigen-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral).

Guide and FAQs: [Lazada Scraper on themineworks.com](https://themineworks.com/actors/lazada-scraper/).

### Before you run: Lazada's bot check

Lazada protects its search with a bot check (called Baxia). It answers a share of requests with a small challenge page, a slider, instead of the product data. This actor does not run a browser, does not solve the slider and does not log in. When it gets the challenge page, it drops that connection and asks again through a new IP, up to 40 times per page. Each try uses one of five sets of ordinary desktop browser headers (Safari, Edge, Firefox, Chrome) and one of four Apify Proxy pools (US residential, datacenter, residential from any country, residential from the storefront's own country), and the actor keeps using whichever is being answered. That matters: in our tests Singapore residential IPs were often refused on lazada.sg while US residential IPs on the same page were answered every time. Every challenge is counted in the run summary (`http_challenged`, `search_challenge_share`).

How often the challenge comes is not constant. In our tests of 26 Oct 2026 the share of search requests that were answered ran from about 5 percent to about 95 percent, changing from one minute to the next and from one country to another. A request that is answered is complete: 40 products with every field. So:

- A run usually finishes at full speed, but in a bad stretch it is slow, and a page that stays blocked after 40 tries is skipped. The run then records an error row for it (no charge) and goes on; three pages in a row that fail end the run, and the summary row says so.
- Failed tries are tiny (a few KB each), so a bad stretch costs time, not money. If a run comes back short, run it again a few minutes later.
- Reviews and product pages are not behind the same check and are answered almost every time.

### Try it in one minute

Paste this into the input (JSON view) and press Start. It returns the first 40 products for "phone case" on Lazada Singapore. It took 7 seconds in our test run:

```json
{
  "searchQueries": ["phone case"],
  "country": "SG",
  "maxItems": 40
}
```

Put several keywords on separate lines to run several searches at once, or paste a Lazada link into `startUrls`. A product that two of your searches find is delivered once.

Apify's free plan includes $5 of credit every month, which covers about 1,300 products at this actor's price.

#### Copy to your AI assistant

```text
themineworks/lazada-scraper on Apify. Reads Lazada (Singapore, Malaysia, Thailand, Indonesia, Philippines, Vietnam) by keyword, search, tag or category link, or product link, and returns one flat row per product with price, price before discount, discount, rating, review count, sold count, seller, brand and ship-from location, with no login. Optional customer reviews as extra rows. Call ApifyClient("TOKEN").actor("themineworks/lazada-scraper").call(run_input={"searchQueries": ["rice cooker"], "country": "SG", "maxItems": 100}), then client.dataset(run["defaultDatasetId"]).list_items().items. Give searchQueries (list of keywords, searched on the country storefront: SG, MY, TH, ID, PH or VN) and/or startUrls (list of lazada.sg, lazada.com.my, lazada.co.th, lazada.co.id, lazada.com.ph or lazada.vn search, tag, category or product links); up to 100 searches. Optional: maxItems (default 50, 1 to 5000, per search; Lazada serves at most 4080 per search), sortBy (popularity, priceasc, pricedesc), minPrice, maxPrice, minRating (1 to 5), includeDetails (default false; adds images, description, category_path, variant_options and on lazada.sg specifications and seller rating), includeReviews (default false), maxReviewsPerProduct (default 20, 1 to 1000), reviewSort (newest or relevance), reviewStars (0 for all, or 1 to 5). Product rows have record_type "product" and carry item_id, title, product_url, image_url, images, price, price_text, price_original, discount_percent, discount_text, currency, rating, review_count, sold_count, sold_text, seller_name, seller_id, brand, brand_id, location, in_stock, is_sponsored, badges, category_ids, keyword, position, search_page, total_results, country, marketplace, scraped_at, and with details on category_path, description, variant_options, sku_count and more. Review rows have record_type "review" and carry review_id, item_id, rating, content, review_time, review_date, buyer_name, sku_info, like_count, image_urls. Each run also writes one row with _type "summary", one with _type "info" when products were delivered, and a row with _type "error" for each input that could not be read; none of these is charged. Lazada's bot check blocks a share of requests: the summary has http_challenge_share. Full spec: GET https://api.apify.com/v2/acts/themineworks~lazada-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral
```

### Key features

- **Keyword, search link, tag, category or product link.** Type keywords, or paste a link such as `https://www.lazada.sg/catalog/?q=rice+cooker`, a tag page such as `https://www.lazada.vn/tag/ao-thun/`, a category page such as `https://www.lazada.co.id/shop-mobiles/`, or a product page ending in `.html`. Filters that are in a search link (price, brand, location) are kept.
- **40 products a page, up to 4,080 per search.** That is the most Lazada serves for any one search, however many results it reports (it said 34,927 for "phone case" on lazada.sg and served 4,080). To go further into a big keyword, run it with several keywords and with price ranges (`minPrice` and `maxPrice`), or with both price sorts.
- **Price, discount, rating, reviews and sold count from the search card.** One request returns 40 products with all of them, so a card-only export is fast and light: about 37 KB on the wire for a page of 40.
- **Sold count as a number.** Lazada shows `4.3K sold`; the row has `sold_count` 4300 and `sold_text` "4.3K sold". Lazada rounds it, so treat it as approximate above a thousand.
- **Product page details (optional).** `includeDetails` reads each product's own page for the full picture set, description, category path and variant options (colour, size). On lazada.sg the page also has the seller's positive rating, the specification table and the rating breakdown (5 stars to 1).
- **Product links work in every country.** A product link returns one row: price, rating and review count from the product's review summary, and sold count, price before discount, discount, brand and seller name from the search card the actor finds by searching the product's own title. If that search does not turn the product up, those fields stay empty (9 of 12 product links found it in our tests). Turn on `includeDetails` to add the product page details.
- **Customer reviews.** Newest first or most relevant, optionally one star count only, up to 1,000 per product, 50 a page, with masked buyer name, the variant bought, helpful votes, pictures and the seller's reply when there is one.
- **Stops cleanly.** Two pages in a row with nothing new end a search; three blocked pages in a row end the run; the run stops before its time limit and keeps every row it read. The summary row says why.

### How to use it

#### Basic: the first 200 results of a keyword

```json
{
  "searchQueries": ["wireless earbuds"],
  "country": "SG",
  "maxItems": 200
}
```

Five pages of results, one row per listing. Sort the rows by `sold_count` to see what actually sells, or by `discount_percent` to see the deepest deals.

#### Price monitoring: the same keyword every day

```json
{
  "searchQueries": ["samsung galaxy s25"],
  "country": "MY",
  "maxItems": 300,
  "sortBy": "pricedesc"
}
```

Schedule the run and compare the rows on `item_id` and `price`. `price_original` and `discount_percent` show when a product goes on promotion.

#### Competitor research in a price band

```json
{
  "searchQueries": ["rice cooker"],
  "country": "TH",
  "minPrice": 1000,
  "maxPrice": 3000,
  "minRating": 4,
  "maxItems": 500
}
```

Prices are in the storefront's currency (baht here). Lazada applies the price range itself; the actor checks it again on every row, so a row outside the range is never delivered or charged.

#### Category research from a link

```json
{
  "startUrls": ["https://www.lazada.co.id/shop-mobiles/"],
  "maxItems": 200
}
```

Tag and category links are read the same way as a search. A category link that Lazada's search front end does not serve as a product list gets an error row and no charge.

#### One country at a time, several keywords

```json
{
  "searchQueries": ["เครื่องซักผ้า", "พัดลม", "หม้อทอดไร้น้ำมัน"],
  "country": "TH",
  "maxItems": 100
}
```

Each keyword is its own search, labelled in `keyword`. For the same product in several countries, run once per country, or paste the search links of each country into `startUrls`.

#### Products with their pages and reviews

```json
{
  "searchQueries": ["air fryer"],
  "country": "SG",
  "maxItems": 30,
  "includeDetails": true,
  "includeReviews": true,
  "maxReviewsPerProduct": 20,
  "reviewStars": 1
}
```

Each of the 30 products gets its page read and up to 20 one-star reviews as extra rows (`record_type` is `review`). Use `reviewStars: 0` for all stars.

#### Specific products

```json
{
  "startUrls": [
    "https://www.lazada.sg/products/pdp-i2863110242.html",
    "https://www.lazada.com.my/products/pdp-i4799342542.html"
  ],
  "includeReviews": true,
  "maxReviewsPerProduct": 50
}
```

### Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
| `searchQueries` | array of strings | empty | Keywords, one search each, searched on the storefront of `country`. |
| `country` | string | `SG` | `SG`, `MY`, `TH`, `ID`, `PH` or `VN`. Links in `startUrls` keep their own country. |
| `startUrls` | array of strings | empty | Lazada search, tag, category or product links from any of the six storefronts. |
| `maxItems` | integer | `50` | Most products per search (per keyword or per link), 1 to 5,000; Lazada serves at most 4,080. Product links are not counted. |
| `sortBy` | string | `popularity` | `popularity` (best match), `priceasc` or `pricedesc`. |
| `minPrice`, `maxPrice` | number | none | Price range in the storefront's currency. |
| `minRating` | integer | none | Only products rated at least this many stars (1 to 5). Unrated products are kept. |
| `includeDetails` | boolean | `false` | Reads each product's page (for search rows and product links): all pictures, description, category path, variant options (and on lazada.sg the specifications and seller rating). |
| `includeReviews` | boolean | `false` | Delivers the reviews of each product as extra rows. |
| `maxReviewsPerProduct` | integer | `20` | 1 to 1,000. |
| `reviewSort` | string | `newest` | `newest` or `relevance`. |
| `reviewStars` | integer | `0` | `0` for all, or 1 to 5 for that star count only. |
| `proxyConfiguration` | object | Apify Proxy, mixed | Leave as is: the actor mixes four Apify Proxy pools and favours whichever Lazada answers. Pick a group or a country only to force that one pool, or give your own proxy URLs. |

Give `searchQueries`, `startUrls` or both. Up to 100 searches and 2,000 product links per run.

### What data do you get?

One row per product, and one row per review when reviews are on. Product rows have `record_type` "product", review rows "review"; the summary, info and error rows have a `_type` field instead, so a filter on either separates them.

| Field | What it is |
|---|---|
| `item_id`, `sku_id` | Lazada item id (from the product link) and the id of the default variant |
| `title`, `product_url` | Listing title and link |
| `image_url`, `images` | Main picture, and the picture links (the whole gallery with details on) |
| `price`, `price_text`, `currency` | Current price as a number, as Lazada shows it, and the currency code |
| `price_original`, `discount_percent`, `discount_text` | Price before discount, the discount in percent, and as shown (`42% Off`) |
| `rating`, `review_count` | Average stars (1 to 5) and the number of ratings |
| `sold_count`, `sold_text` | Units sold as a number and as shown (`4.3K sold`) |
| `seller_name`, `seller_id` | The store and its id |
| `brand`, `brand_id` | Brand; Lazada writes `No Brand` for unbranded products |
| `location` | Where the product ships from, e.g. `China`, `Singapore`, `Bangkok` |
| `in_stock`, `is_sponsored` | Stock flag, and whether the position is a paid placement |
| `badges` | Promotion labels on the card, e.g. `Voucher save 12%` |
| `category_ids` | Lazada category ids of the card, root first |
| `category_path`, `description`, `variant_options`, `sku_count`, `video_id` | From the product page (with `includeDetails`) |
| `specifications`, `rating_breakdown`, `seller_url`, `seller_positive_rating`, `store_sold_text`, `shop_id`, `max_order_quantity` | From the product page on lazada.sg (about 1 product in 3 there) |
| `details_scraped`, `details_error` | Whether the product page was read, and why not when it failed |
| `keyword`, `source_url`, `sort_by`, `position`, `search_page`, `total_results` | The search that found the product, its place in it, and the number of results Lazada reports (at most 4,080) |
| `country`, `marketplace`, `scraped_at` | Storefront country and host, and when the row was written |

Review rows: `review_id`, `item_id`, `product_url`, `product_title`, `rating` (stars of that review), `content`, `review_title`, `review_time` (as shown, e.g. `14 Feb 2026` or `5 days ago`), `review_date` (as `YYYY-MM-DD` when Lazada gives a date or a number of days or hours; empty for "2 weeks ago" style dates, use `bought_date_iso` then), `bought_date`, `bought_date_iso`, `buyer_name` (masked by Lazada, e.g. `P***e`), `is_verified_purchase`, `sku_info` (the variant bought), `like_count`, `image_urls`, `video_url`, `seller_reply`, `review_page`, `country`, `marketplace`, `scraped_at`.

**Summary row** (`_type: "summary"`, never charged): `searches_requested`, `searches_read`, `searches_failed`, `pages_read`, `products_found`, `products_delivered`, `reviews_delivered`, `charged_for`, `reviews_charged_for`, `duplicates_skipped`, `filtered_out`, `details_ok`, `details_failed`, `http_requests`, `http_challenged`, `http_challenge_share` (percent of requests Lazada's bot check answered with the challenge page), `search_challenge_share`, `header_sets` and `proxy_pools` (how each header set and proxy pool fared), `http_megabytes`, `ended_on_deadline`, `stopped_by_max_cost`, `stopped_by_block_guard`, `shortfall_reason` when fewer rows came back than asked, and `per_search`, one entry per search with `pages`, `products_found`, `products_delivered`, `total_results` and why it `stopped`. The same summary is saved as the `OUTPUT` record of the run.

**Error rows** (`_type: "error"`, never charged): one per input that could not be read, with `error_type` (`invalid_url`, `blocked`, `not_found`), `identifier`, `reason` and `http_status`.

#### Stable fields for automations

These were present in every product row of our test runs, and their names will not change:

| Field | What it is |
|---|---|
| `item_id` | The key to store and join on (with `country`) |
| `title` | Listing title |
| `product_url` | Link to the product |
| `price` | Current price |
| `currency` | Currency code |
| `country` | Storefront |
| `record_type` | `product` or `review` |
| `scraped_at` | When the row was written |

Optional, present only when Lazada shows a value: `price_original` and `discount_percent` (only on discounted products), `rating` and `review_count` (new products have none), `sold_count`, `seller_name`, `brand`, `location` (a few products have no ship-from), `badges`, and everything that comes from the product page.

#### Output examples

One product from the "phone case" search on Lazada Singapore (test run, 26 Oct 2026, trimmed):

```json
{
  "record_type": "product",
  "item_id": "2106281997",
  "title": "0.4mm Ultra Thin Camera Protect Matte Case for IPhone 18 17 Air 17 Pro Max 16 Pro Max 15 Pro Max iPhone 15 Plus 14 Plus 14 13 Pro Max 13 Mini 12 11 Pro X XS Max XR 8 7 Plus SE 2020 SE3 2022 Anti Fingerprint Soft PP Phone Case",
  "product_url": "https://www.lazada.sg/products/pdp-i2106281997.html",
  "image_url": "https://sg-live-01.slatic.net/p/b3c6e023cf1b33564115f49550e89885.jpg",
  "price": 2.6,
  "price_text": "$2.60",
  "price_original": 4.31,
  "discount_percent": 40,
  "discount_text": "40% Off",
  "currency": "SGD",
  "rating": 4.72,
  "review_count": 473,
  "sold_count": 2500,
  "sold_text": "2.5K sold",
  "seller_name": "Nugokanaly 3C Store",
  "seller_id": "1142514049",
  "brand": "No Brand",
  "location": "China",
  "in_stock": true,
  "is_sponsored": false,
  "badges": ["Coin save $0.13"],
  "keyword": "phone case",
  "position": 1,
  "search_page": 1,
  "total_results": 4080,
  "country": "SG",
  "marketplace": "www.lazada.sg"
}
```

A product from a product link in Malaysia, with `includeDetails` on (test run, 26 Oct 2026, trimmed):

```json
{
  "record_type": "product",
  "item_id": "14984794757",
  "title": "Luxury Magnetic Clear Phone Case for iPhone 18 17 Pro Max 16 15 14 13 Pro Max 18Pro 17Pro Camera Stand Holder Protection Cover",
  "product_url": "https://www.lazada.com.my/products/pdp-i14984794757.html",
  "price": 12.95,
  "price_text": "RM12.95",
  "price_original": 20.71,
  "discount_percent": 37,
  "currency": "MYR",
  "rating": 4.8,
  "review_count": 10,
  "sold_count": 55,
  "seller_name": "Ailinhe",
  "seller_id": "100100813",
  "location": "China",
  "category_path": ["Cases & Covers"],
  "variant_options": { "Color Family": ["Plum", "Blue", "Light Blue", "Orange", "Black", "Grey"] },
  "sku_count": 102,
  "details_scraped": true,
  "country": "MY"
}
```

A review row:

```json
{
  "record_type": "review",
  "review_id": "472320886594757",
  "item_id": "14984794757",
  "product_title": "Luxury Magnetic Clear Phone Case for iPhone 18 17 Pro Max 16 15 14 13 Pro Max 18Pro 17Pro Camera Stand Holder Protection Cover",
  "rating": 3,
  "content": "Reka bentuk xsama dgn gambar . Minta 17promax bagi 17pro",
  "review_time": "5 days ago",
  "review_date": "2026-10-21",
  "bought_date_iso": "2026-10-13",
  "buyer_name": "1***5",
  "is_verified_purchase": true,
  "sku_info": "Color Family:Black, Compatibility by Model:iPhone17 Pro Max",
  "like_count": 0,
  "country": "MY"
}
```

An error row for a link that is not a Lazada link (nothing charged):

```json
{ "_type": "error", "error_type": "invalid_url", "identifier": "https://example.com/not-lazada", "reason": "Not a Lazada link this actor can read. Use a search link such as https://www.lazada.sg/catalog/?q=phone+case, a tag or category link, or a product link ending in .html, from lazada.sg, lazada.com.my, lazada.co.th, lazada.co.id, lazada.com.ph or lazada.vn." }
```

### Pricing

Pay per event: you pay for the products you receive, plus a flat $0.003 per run, whatever memory you choose. Reading product pages costs nothing extra. Reviews are charged per review, only when you turn them on.

| Event | When it is charged | Free plan | Bronze (Starter) | Silver (Scale) | Gold (Business) |
|---|---|---|---|---|---|
| `product-scraped` | Once per product row stored in your dataset | $3.59 per 1,000 | $2.69 per 1,000 | $1.79 per 1,000 | $1.69 per 1,000 |
| `review-scraped` | Once per review row stored in your dataset (only with `includeReviews`) | $3.59 per 1,000 | $2.69 per 1,000 | $1.79 per 1,000 | $1.69 per 1,000 |
| `run-start` | Once per run, after the first results page returned products | $0.003 | $0.003 | $0.003 | $0.003 |

The price of one product is the price per 1,000 divided by 1,000.

Never charged:

- links that are not Lazada links (each gets an error row);
- a search page that Lazada's bot check kept blocked, and a product link whose page and review summary could not be loaded;
- a product that a second search of the same run finds again;
- products past your `maxItems`, and products outside your price or rating range;
- the summary, info and error rows;
- a run with no valid input, or one whose searches return no products: the start fee is charged only once a results page has returned products;
- anything past your "Max cost per run". The actor checks the budget before each batch of rows, reviews included, and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

### Run it on a schedule

1. Open the actor in Apify Console, set your input and click **Save as a new task**.
2. In the task, open **Schedules**, click **Add schedule** and pick how often (every day, every Monday at 08:00 and so on).
3. Compare runs on `item_id`, `price` and `sold_count` to see price changes, new promotions and which products are selling.
4. Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.

### FAQ

#### What does this actor read?

Lazada's public search, tag, category and product pages and the review list of each product, on the six storefronts, as anyone sees them without logging in. It does not log in, add anything to a cart or read account data. The robots.txt of the six storefronts (checked 26 Oct 2026) disallows only the login and sign-up paths and `/undefined` paths; the search, tag, category, product and review addresses this actor uses are not among them.

#### Do I need an account, cookies or a proxy?

No Lazada account and no cookies. The default is Apify Proxy, included: the actor mixes US residential, datacenter, any residential and local residential IPs and favours whichever Lazada is answering. Traffic is small: about 1 to 2 KB per product from the search pages (1.4 KB for 400 products in our test, with 79 percent of requests challenged), about 1 KB per review, and about 75 KB per product page when you turn on `includeDetails`. See "Before you run" above for what the bot check means for speed. See "Before you run" above for what the bot check means for speed.

#### How many products can I get?

Up to 4,080 per search (102 pages of 40) and 100 searches per run. That is the most Lazada serves for any one search, however many results it reports. A search ends when Lazada says there are no more pages, two pages in a row bring nothing new, or `maxItems` is reached.

#### Why did a run return fewer products than I asked for?

Most often because Lazada's bot check blocked a page for the whole 40 tries (the summary row shows `search_challenge_share`, and `per_search` shows `stopped: "blocked"`). Run it again a few minutes later. The other reasons are in `shortfall_reason`: the max cost was reached, the time limit came close, or the search simply had fewer results.

#### Why do some rows have no sold count, seller name or discount?

Rows from a search have all of them. A row from a product link takes its price, rating and review count from the product's review summary, and gets the sold count, price before discount, discount and seller name only if the search for the product's own title finds the product. `sold_count` is also empty for the few products that Lazada shows without a sold figure.

#### What is the difference between includeDetails on and off?

Off, each row comes from the search card: title, price, price before discount, discount, rating, reviews, sold count, seller, brand, location and a few pictures. On, the product page adds the full gallery, description, category path and variant options (and on lazada.sg, for about one product in three, the specification table and seller rating). On is slower and costs the same, for search rows and product links alike.

#### Can I get reviews?

Yes: `includeReviews`, up to 1,000 per product, newest first or most relevant, optionally one star count only. Buyer names are masked by Lazada. Reviews are charged per review, on top of the product.

#### How long does a run take?

In our tests of 27 Oct 2026: 7 seconds for the "Try it" input (40 products), 150 seconds for 400 products of one keyword while Lazada challenged 79 percent of requests, 578 seconds for 80 products in each of the six storefronts plus a category link, 113 seconds for 30 products with their pages and 252 reviews, and 145 seconds for 6 product links with 26 reviews. A run in a heavy bot check stretch takes several times longer, because each page needs more tries. The default time limit is 3,600 seconds; the actor stops before it and keeps every row.

#### Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has four ready views: Products, Prices and sales, Sellers and brands, and Reviews. In CSV and Excel, `variant_options` and `specifications` are flattened into columns such as `variant_options/Color Family/0`.

#### Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/lazada-scraper

- Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
- ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
- Cursor or VS Code: add it as an HTTP MCP server with that URL.
- Claude Code: `claude mcp add -t http lazada-scraper "https://mcp.apify.com/?tools=themineworks/lazada-scraper"`

#### Is it legal to scrape Lazada?

The actor reads only public listings and reviews that anyone can see without logging in. You are responsible for how you use the data, including Lazada's terms and data protection law such as GDPR and the Singapore PDPA. Buyer names on reviews are masked by Lazada; do not try to identify the people behind them. This is general information, not legal advice.

### Integrations

- **Google Sheets**: send each run's products to a sheet with Apify's Google Sheets integration; one row per product fits a sheet as is.
- **Make, Zapier and n8n**: start a run and read its dataset with the Apify apps and nodes, for example "price changes for our brand's keyword every Monday to Slack".
- **Webhooks**: have Apify call your URL when a run succeeds, then fetch the dataset.
- **API and SDKs**: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
- **MCP clients**: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

### More from The Mine Works

**E-commerce and marketplaces**

- [Ozon.ru Scraper](https://apify.com/themineworks/ozon-product-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [⭐ Amazon Reviews Scraper](https://apify.com/themineworks/amazon-reviews?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Amazon Product Scraper](https://apify.com/themineworks/amazon-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Etsy Listings Scraper](https://apify.com/themineworks/etsy-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [AliExpress Scraper](https://apify.com/themineworks/aliexpress-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Kleinanzeigen.de Scraper](https://apify.com/themineworks/kleinanzeigen-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Carsales.com.au Scraper](https://apify.com/themineworks/carsales-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [eBay Product Listings Scraper](https://apify.com/themineworks/ebay-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Shopify Store Scraper](https://apify.com/themineworks/shopify-store-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [🛒 TikTok Shop Scraper](https://apify.com/themineworks/tiktok-shop-products?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Walmart Product & Price Scraper](https://apify.com/themineworks/walmart-product-price-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Vinted Scraper](https://apify.com/themineworks/vinted-listings-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Social media and video**

- [Threads Scraper](https://apify.com/themineworks/threads-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Reddit Scraper](https://apify.com/themineworks/reddit-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Threads Search Scraper](https://apify.com/themineworks/threads-search-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Instagram Profile Scraper](https://apify.com/themineworks/instagram-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Leads and business directories**

- [B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Skip Trace Lookup](https://apify.com/themineworks/skip-trace-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Maps Email Scraper](https://apify.com/themineworks/maps-leads?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [2GIS Places Scraper](https://apify.com/themineworks/2gis-places-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Marketing, SEO and reviews**

- [Facebook Ad Library Scraper](https://apify.com/themineworks/meta-ad-library-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google Ads Transparency Scraper](https://apify.com/themineworks/google-ads-transparency?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Similarweb Scraper](https://apify.com/themineworks/similarweb-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Google News Scraper](https://apify.com/themineworks/google-news?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**LinkedIn**

- [LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [LinkedIn Profile Scraper](https://apify.com/themineworks/linkedin-profile-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Real estate**

- [Zillow Rentals Scraper](https://apify.com/themineworks/zillow-rental-listings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zillow Sold Comps Scraper](https://apify.com/themineworks/zillow-recently-sold?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Real Estate MCP](https://apify.com/themineworks/india-real-estate-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Housing.com Scraper](https://apify.com/themineworks/housing-com-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Science, health and government data**

- [Academic Research MCP](https://apify.com/themineworks/academic-research-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [CourtListener Scraper](https://apify.com/themineworks/courtlistener-court-records?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Socrata Open Data Scraper](https://apify.com/themineworks/socrata-open-data?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [OpenAlex Scraper](https://apify.com/themineworks/openalex-scholarly-works?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Jobs and hiring**

- [Foundit Monster India Jobs](https://apify.com/themineworks/foundit-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Hirist Jobs Scraper](https://apify.com/themineworks/hirist-jobs-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [India Jobs MCP](https://apify.com/themineworks/india-jobs-mcp?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naukri Jobs Scraper](https://apify.com/themineworks/naukri-jobs?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Company and business data**

- [Company Domain Finder](https://apify.com/themineworks/company-domain-finder?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GST Taxpayer Lookup](https://apify.com/themineworks/gst-taxpayer-lookup?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Company KYB Resolver](https://apify.com/themineworks/company-identity-resolver?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [SEC EDGAR Filings Scraper](https://apify.com/themineworks/sec-edgar-filings?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Food and local services**

- [NoBroker Scraper](https://apify.com/themineworks/nobroker-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Swiggy Restaurant Scraper](https://apify.com/themineworks/swiggy-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Zomato Scraper](https://apify.com/themineworks/zomato-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**Developer and AI tools**

- [Website to Markdown Crawler](https://apify.com/themineworks/rag-crawler?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Skill Finder](https://apify.com/themineworks/github-skill-discovery?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Repo Scraper](https://apify.com/themineworks/github-repo-intelligence?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [GitHub Trending Scraper](https://apify.com/themineworks/github-trending-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

**More tools**

- [G2 Reviews Scraper](https://apify.com/themineworks/g2-reviews-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Naver Blog Scraper](https://apify.com/themineworks/naver-blog-posts-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [WeChat Article Scraper 微信公众号文章](https://apify.com/themineworks/wechat-article-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)
- [Taobao Products Scraper 淘宝 天猫](https://apify.com/themineworks/taobao-products-scraper?fpr=ymnoit\&utm_source=apify-readme\&utm_medium=referral)

### Support

Found a keyword that returns fewer products than it should, or a field that comes back empty? Open an issue in the Issues tab with the input and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.

*Search Lazada by keyword in six countries and get one row per product, with price, discount, rating, sold count, seller, brand and ship-from location, and optional reviews, no login.*

# Actor input Schema

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

Search words, one per line, as you would type them in the Lazada search box in the country you pick below. Example: wireless earbuds, rice cooker, หูฟัง. Each keyword is one search. Up to 100 searches per run.

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

The Lazada storefront the keywords are searched on. Prices come back in that country's currency. Links in startUrls keep their own country.

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

Lazada links copied from your browser, from any of the six storefronts: a search link such as https://www.lazada.sg/catalog/?q=rice+cooker, a tag or category link such as https://www.lazada.co.id/shop-mobiles/ or https://www.lazada.vn/tag/ao-thun/, or a product link such as https://www.lazada.com.my/products/pdp-i4799342542.html. Filters in a search link are kept. A product link returns one row for that product.

## `maxItems` (type: `integer`):

The most products to return for each keyword or search link, 1 to 5,000. Lazada serves 40 products a page and no more than 4,080 per search; split a bigger search with price ranges. Product links are not counted here. Example: 200.

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

The order of the results, as in the sort menu on Lazada. Used for keywords and for links that do not already carry a sort.

## `minPrice` (type: `number`):

Lowest price, in the storefront's own currency (for example SGD, THB, IDR). Lazada applies it, and the actor checks it again on every row before it is delivered.

## `maxPrice` (type: `number`):

Highest price, in the storefront's own currency.

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

Only products rated at least this many stars, 1 to 5. Products with no rating yet are kept.

## `includeDetails` (type: `boolean`):

On: each product's own page is read too, for the full picture set, description, category path, variant options (colour, size) and, on lazada.sg, the seller rating and specifications. The page is requested the way a link preview (Facebook's crawler) requests it, the only way Lazada renders it on the server. Off: rows come from the search cards and, for product links, the review summary, which is faster. Same price either way.

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

On: the reviews of each product are delivered as extra rows with record_type review. Each review is charged as a review-scraped event on top of the product.

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

How many reviews to deliver for each product, 1 to 1,000. Used only when Include customer reviews is on.

## `reviewSort` (type: `string`):

Newest first, or Lazada's own relevance order. Used only when Include customer reviews is on.

## `reviewStars` (type: `integer`):

Only reviews with exactly this many stars, 1 to 5. Leave at 0 for all stars. Used only when Include customer reviews is on.

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

Leave as is: Lazada answers a share of requests with a bot check page, so the actor sends each try through a new IP and mixes four Apify Proxy pools (US residential, datacenter, residential from any country, residential from the storefront's country), favouring whichever is being answered. Choose a group or a country here only if you want that one pool. Traffic is small, about 1 to 5 KB per product.

## Actor input object example

```json
{
  "searchQueries": [
    "phone case"
  ],
  "country": "SG",
  "maxItems": 40,
  "sortBy": "popularity",
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "reviewSort": "newest",
  "reviewStars": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "searchQueries": [
        "phone case"
    ],
    "maxItems": 40,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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 case"],
    "maxItems": 40,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/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 case"
  ],
  "maxItems": 40,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call themineworks/lazada-scraper --silent --output-dataset

```

## MCP server setup

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