Piotr VassevPiotr Vassev

How to Scrape Lazada Listings Across Southeast Asia

Lazada's homepage flash sale, category grid, and product detail page answer different questions. Choosing the cheapest collection mode is useful only if it returns the fields your comparison needs.

The Lazada Listings Scraper supports six country storefronts and several discovery modes. I maintain it. This guide collects a small Singapore mobile-phone category sample, then explains when to inspect individual products.

How to Scrape Lazada Listings Across Southeast Asia

Pick a country and a data depth

An Actor is a tool run on Apify. This one supports sg, my, th, ph, vn, and id, which select different domains and currencies. Use a matching domain when supplying explicit URLs; do not combine Singapore and Malaysian prices into one unconverted comparison.

categories accepts slugs such as mobiles, while searchQueries accepts keywords. startUrls accepts objects containing product, search, or category URLs. homepageOnly: true is a separate flash-sale snapshot, typically around thirty items; it is not a sample of the whole catalog.

In Input, choose JSON:

{
  "country": "sg",
  "categories": ["mobiles"],
  "homepageOnly": false,
  "searchStartPage": 2,
  "searchEndPage": 2,
  "maxItems": 20
}

Page 2 is intentional. Lazada often uses page 1 for a promotional module instead of the normal grid, so the Actor starts at page 2 by default. searchEndPage is inclusive. This example requests one page and caps the whole run at twenty products. Zero removes the item cap; it does not remove the page range.

Click Start, open the dataset, and check countryCode, currency, and source. A category result should not be described as a full product-detail record.

Use the card to decide what needs checking

A shortened historical category sample contains:

{
  "itemId": "3179771414",
  "skuId": "21628177316",
  "countryCode": "sg",
  "title": "Google Pixel XL Original Unlocked 4GB RAM 32GB ROM Android 4G LTE Phone",
  "price": 118.84,
  "currency": "SGD",
  "discountPercent": 20,
  "soldCount": 5,
  "reviewCount": 1,
  "ratingAverage": 5,
  "source": "category"
}

A five-star average based on one review is different evidence from the same average across hundreds of reviews. Keep reviewCount beside ratingAverage. The title also identifies an older model and a specific memory configuration; it should not enter a price comparison for a different Pixel generation.

Lazada product dataset with country and source fields

Historical Lazada output illustrates the difference between listing and detail records.

Export CSV with itemId, skuId, url, countryCode, title, price, currency, rating and count fields, source, and scrapedAt. Group exact models and storage sizes, and separate new, used, or refurbished offers only when the listing supports those classifications. Treat voucher-applied card prices as conditional until you check the offer.

Fetch details for the uncertain products

For selected products, copy their url values into startUrls and clear unrelated discovery inputs. Explicit product URLs return detail records with fields such as brand, breadcrumbs, variants, seller, and the image gallery.

Use JSON for this output. A detail record can list variant SKUs and options without giving you a verified final price for every possible option. Match itemId and skuId where available, inspect the exact selection on Lazada, and preserve unknown values instead of borrowing one variant's price for all variants.

A useful comparison sheet includes an eligibility note for vouchers, shipping assumptions, and the checked package contents. A displayed soldCount is source-reported activity, not proof of sales during your monitoring interval.

Budget by mode

Pricing as of September 6, 2026: homepage items cost $0.0005 each, search/category listings $0.003 each, and direct product details $0.01 each. The twenty-category-item example costs $0.06 in row fees. A separate five-product detail run adds $0.05 in detail fees. Each run also has a $0.00005 start event per GB of allocated memory, minimum one event. See live pricing.

If search yields a promotional page or few results, check the page range and try the relevant category. If a detail field is absent on a category record, changing export format will not add it; use a product URL. Keep direct product snapshots for repeat comparisons, since a limited category page can change membership between runs.

For a different resale context in the region, see the Carousell guide. Keep its secondhand observations separate from Lazada retail offers.

The Node.js example shows how to run this Actor from code and retrieve its dataset.

Frequently asked questions

Why does the example begin at page 2?

Lazada often serves a promotional landing module on page 1. The Actor defaults to page 2 for search and category grids, and searchEndPage is inclusive.

Does a category row include the full variant and seller data?

No. Use explicit product URLs in startUrls for detail records. Preserve the variants array and verify the chosen offer before assigning a price to a specific SKU.

Piotr Vassev

Piotr Vassev

Founder of FalconScrape. Building production-grade web scraping systems and data automation pipelines for businesses worldwide.

Connect on LinkedIn