Lazada Scraper icon

Lazada Scraper

Scrape Lazada products and reviews across SEA markets, including Malaysia, Singapore, Indonesia, Philippines, Thailand, and Vietnam. Extract structured…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Lazada Scraper at a glance

Lazada Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes type, id, url, title and price, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.40 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Ecommerce, Automation, Developer Tools
Pricing
$2.40 per 1,000 results (Free plan), from $1.50 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
27 options

Scrape Lazada products and reviews across SEA markets, including Malaysia, Singapore, Indonesia, Philippines, Thailand, and Vietnam. Extract structured data on pricing, inventory, ratings, sellers, media, and reviews. Ideal for cross-region analysis with consistent, analytics-ready output.

What Lazada Scraper can do

  • Six Southeast Asia storefronts in one actor. One country field switches searches between Singapore, Malaysia, Thailand, Vietnam, the Philippines and Indonesia, and in URL mode (including reviews-only runs on product URLs) each URL's own host picks its storefront, so one run can mix them.
  • Two ways to find products. Run a keyword search with price, rating and free shipping filters, or feed it search result, category or product URLs directly.
  • Full product depth on demand. Turn on detail page enrichment for the complete SKU variant table (price, stock and attributes per variant), every active voucher and promotion, shipping fee and delivery window, warranty period, and the seller rating cluster.
  • Reviews at real depth. Reviews only mode walks every review page for a product, capped by a limit you set, not just the first page, and each review carries its rating, content, buyer handle and any photo or video media.
  • Real specials, never invented. isOnSpecial, discountAmount, promoLabel and specialsCategory key off Lazada's own strike-through price and badges, or its real Flash Sale campaign feed, never a synthesized markdown.
  • Built for monitoring. Resume one interrupted run without re-collecting what it already found, or turn on Incremental mode to schedule the same search and get only new, updated and expired products on every recurring run.

Choose what to collect

These inputs let you configure Lazada Scraper - Products, Prices, Sellers & Reviews. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredPick how to start. 'search' runs query + filters below. 'url' walks one or more SERP / category / product URLs. Reviews-only output is a separate toggle below (works in either mode).

Choices: search, url

countrystringLazada has six country sites. In search mode this picks the one site searched. In URL mode each URL's own host decides its site, so one run can mix sites, and this field is only the fallback for URLs on an unknown host. The connection's exit country always follows the site being fetched.

Choices: sg, my, th, vn, ph, id

queriesarrayOne or more search terms. The actor runs a separate paginated walk for each query. Examples: 'laptop', 'iphone case', 'kopi'. Only used when mode = search. Defaults to ['laptop'], so a run that omits the field still scrapes.
categoryIdstringDeprecated: retired 2026-09-04 (#1553 audit). Lazada does not expose a numeric category id as a search-endpoint facet - live probes proved this field has no effect on results (a filtered run's item set was indistinguishable from the unfiltered baseline, and none of the returned items carried this id in their own category metadata). Lazada's real category browsing is a distinct URL per category (e.g. https://www.lazada.sg/shop-laptops/) - use mode = url and paste that category page's URL instead. Kept hidden for backward compatibility with existing saved tasks; has no effect either way, leave empty.
minPriceintegerMinimum price in the country's local currency (SGD/MYR/THB/VND/PHP/IDR). No bound when empty.
maxPriceintegerMaximum price in local currency. No bound when empty.
specialsOnlybooleanWhen ON, walks Lazada's real Flash Sale campaign feed (/tag/flash-sale/) instead of the plain catalog, a genuinely different, curated set of products with real strike-through prices, not a client-side filter. Leave queries empty to browse the whole Flash Sale grid, or set queries to search within it. Every record also carries isOnSpecial/discountAmount/promoLabel/specialsCategory regardless of this toggle (LazMall and Campaign badges are detected on any card).
Show 20 more inputs
More input fields
InputWhat it controls
sortBystringSort the search results. Lazada's own SERP only exposes 3 real sort options (verified live 2026-09-04, #1553 audit): Best match, Price low to high, Price high to low. The last three entries in this list (rating, newest, best selling) are RETIRED: Lazada silently ignores those tokens and returns default-order results, so the actor now runs them as Best match. They are kept in the list only so existing saved tasks and schedules that still pass them keep starting; pick one of the first three for a new run.

Choices: popularity, priceAsc, priceDesc, ratingDesc, newest, bestSelling

urlsarrayOne or more URLs. Accepted shapes: keyword search, filtered/sorted/paginated search, category (/shop-/) and paginated category, Flash Sale feed (/tag/flash-sale/), tag landing page, product detail (slug and pdp-i forms), and a store homepage (skipped with a warning, it has no listing). Each URL's country site is detected from its own host. Search filters above (price, sort, specials) are baked into the URL you paste. The rating filter below still applies in URL mode, and so does the free shipping filter beside it. Left untouched, URL mode scrapes one example of each shape.
minRatingintegerDrop products whose average rating is below this value (1 to 5). Applied client-side after the SERP fetch.
freeShippingOnlybooleanKeep only items eligible for the country's free-shipping promotion, matched on each card's own Free Shipping badge. Applied client-side after the SERP fetch, so it narrows a keyword search AND a pasted search or category URL (in search mode the actor also asks Lazada's own free-shipping facet for the first pass).
localLanguagebooleanOff by default. Lazada Vietnam search pages come back in English with the seller location reduced to the country ("Vietnam"). Turn this on to read them in Vietnamese instead: the seller location becomes the province or city (for example "Hà Nội" or "Thành phố Hồ Chí Minh") and titles are in Vietnamese. On Lazada Thailand it switches titles and the city name to Thai script. Other storefronts are unchanged. Applies to a keyword search and to a pasted search or category URL (a URL that already has its own lang keeps it). Switching it starts a new Incremental baseline, since titles change.
reviewsOnlybooleanWhen ON, the actor walks the SERP / URLs to discover product IDs but emits ONE record per review (type='review'), not one per product. Works in both search and URL modes. When mode = url AND every URL points at a /products/ page, the run is dramatically faster and ~10x cheaper.
fetchReviewsbooleanWhen ON and reviewsOnly is OFF, every product record additionally carries an embedded array of its newest reviews (capped by maxReviewsPerProduct). Billed on the detail-enrichment event in blocks of 10 reviews returned per product (the first block is covered by the unit for a product page read); see the Pricing tab for the rate.
fetchDetailsbooleanWhen ON, the actor fetches each product's detail page after the SERP. Adds full SKU variant table, shipping + warranty, seller cluster, image gallery, breadcrumbs. Adds ~3-5 seconds per product. When OFF (default), only SERP-card fields populate (id, title, price, rating, image, seller name) at much lower cost.
detailModestringRetired and ignored. Product pages are always read in full when "Enrich each product with detail page data" is on. The field is kept only so saved tasks and API calls that still send it keep working.
maxPagesintegerOptional bound on SERP pages walked per starting query/URL. Lazada's SERP serves ~40 cards per page. Leave empty to walk result pages until maxListings is reached; a hard cap of 100 pages per query/URL always applies.
maxListingsintegerHard cap across all queries / URLs. Set to 0 for unlimited (still bounded by maxPages). When reviewsOnly = true, this caps DISCOVERED products, not reviews; total review records can be much higher.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a full-catalogue walk without returning or charging for products already collected there (matched by product id). Use this after an interrupted run, or to keep extending one walk-all pull across separate runs. For recurring daily/weekly monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. Each product is compared on every output field (price, discount, stock, rating, review count, sold count, seller, images, SKU list, vouchers and so on); fetchedAt and the raw card passthrough are always excluded, and you can exclude more with the ignore-fields option below. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. Turn on "Emit unchanged" or "Emit expired" only when you also want those products returned (and billed). State is kept separately per mode + search/URL/filter configuration; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the mode + search/URL/filter settings, different searches then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max products total capped it, when Resume was used, or in reviews-only mode. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional. Output field names that must NOT make a product count as UPDATED, e.g. reviewCount or itemSold. Dotted paths reach inside lists (e.g. skuList.stock). The fields stay in the output and are only left out of the comparison and of changedFields. fetchedAt and raw are always ignored. Needs Incremental changes for scheduled runs turned on.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

typeType (text)
idID (text)
urlURL (link)
productNameTitle (text)
currentPricePrice (number)
originalPriceWas (number)
discountPct% off (number)
isOnSpecialOn special (boolean)
discountAmountSave (number)
promoLabelPromo (text)
specialsCategorySpecials type (text)
currencyCCY (text)
Show 49 more fields
ratingScoreProduct rating (number)
reviewCount# reviews (number)
itemSoldSold (text)
sellerNameSeller (text)
sellerLocationFrom (text)
brandNameBrand (text)
primaryImagePhoto (image)
inStockIn stock (boolean)
freeShippingFree shipping (boolean)
productIdProduct ID (text)
productUrlProduct URL (link)
reviewIdReview ID (text)
buyerNameBuyer (text)
ratingReview rating (number)
reviewTimeWhen (text)
reviewContentReview (text)
skuInfoVariant (text)
likeCountLikes (number)
countryCountry (text)
fetchedAtFetched (date)
changeTypeChange (incremental mode) (text)
changedFieldsChanged fields (text)
firstSeenAtFirst seen (date)
lastSeenAtLast seen (date)
isSponsoredSponsored (boolean)
skuIdskuId
languagelanguage
canonicalUrlcanonicalUrl
stockStatusstockStatus
badgesbadges
enrichmentStatusenrichmentStatus
isMeLikeisMeLike
skuCount# SKUs (number)
skuListSKU table
skuPropertiesVariant options
highlightsHighlights
minQuantityMin qty (number)
maxQuantityMax qty (number)
vouchersVouchers
promotionsPromotions
shippingShipping
warrantyWarranty
sellerIdsellerId
sellerRatingPositivePctSeller positive % (number)
sellerShippingSpeedSeller shipping speed (text)
sellerChatResponseRateChat response (text)
sellerFollowerCountFollowers (number)
categoryPathCategory
embeddedReviewsembeddedReviews

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "type": "product",
  "id": "0000000001",
  "url": "https://www.lazada.sg/products/sample-i0000000001.html",
  "productName": "Sample Wireless Earbuds",
  "productId": "0000000001",
  "productUrl": "https://www.lazada.sg/products/sample-i0000000001.html",
  "sourceUrl": "https://www.lazada.sg/catalog/?q=wireless+earbuds",
  "seedType": "query",
  "seedValue": "wireless earbuds",
  "country": "SG",
  "currency": "SGD",
  "currentPrice": 49.9,
  "originalPrice": 99,
  "discountPct": 50,
  "isOnSpecial": true,
  "discountAmount": 49.1,
  "promoLabel": "Flash Sale",
  "specialsCategory": "flash-sale",
  "ratingScore": 4.6,
  "reviewCount": 1234,
  "itemSold": "5K+ sold",
  "inStock": true,
  "isSponsored": false,
  "freeShipping": true,
  "sellerName": "Sample Store",
  "sellerId": "0000000",
  "sellerLocation": "Singapore",
  "sellerRatingPositivePct": 98,
  "sellerShippingSpeed": "Fast",
  "sellerChatResponseRate": "95%",
  "sellerFollowerCount": 1500,
  "brandName": "Sample Brand",
  "brandId": "0000",
  "primaryImage": "https://laz-img-cdn.alicdn.com/p/000000.jpg",
  "imageGallery": [
    "https://laz-img-cdn.alicdn.com/p/000001.jpg"
  ],
  "skuList": [
    {
      "id": "0000",
      "price": 49.9,
      "stock": 10,
      "color": "Black"
    }
  ],
  "skuCount": 4,
  "vouchers": [
    {
      "amount": 5,
      "minSpend": 30,
      "code": "SAMPLE5"
    }
  ],
  "shipping": {
    "fee": 0,
    "eta": "2-3 days",
    "cod": true
  },
  "warranty": {
    "type": "Manufacturer",
    "periodMonths": 12
  },
  "breadcrumbs": [
    "Electronics",
    "Audio",
    "Earphones"
  ],
  "raw": {
    "serp": {},
    "detail": {}
  },
  "fetchedAt": "2026-01-01T00:00:00.000Z"
}

Ways to use this data

  • Price and catalogue monitoring: track prices, stock and voucher changes across SG, MY, TH, VN, PH and ID with scheduled, incremental runs.
  • Marketplace research and competitor tracking: pull seller ratings, item sold counts and SKU-level pricing to benchmark sellers and brands.
  • Review mining and sentiment analysis: collect every review, with photos and videos, for a product line to spot quality issues or standout features.
  • Deal and Flash Sale tracking: walk the real Flash Sale feed for strike-through prices, discount amounts, and LazMall or Campaign badges.
  • Catalogue and content enrichment: feed product titles, images, descriptions and specifications into a PIM, comparison site or shopping assistant.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Lazada Scraper return?

The documented output for Lazada Scraper includes type, id, url, title, price, was, % off and on special. Availability of each field depends on the source page and the selected mode.

How much does Lazada Scraper cost?

It costs $2.40 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I monitor a search or URL and get only new or changed products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared products, unchanged ones are not billed unless you turn on Emit unchanged, and expired products are only reported once a run has scanned the full tracked search without a cap.

What is the difference between Resume from a previous run and Incremental mode?

Resume (resumeFromRunId) continues one specific interrupted or very large run, skipping products a prior run already collected. Incremental mode remembers state itself across separate scheduled runs of the same search or URL configuration, classifying every product as new, updated, unchanged, reappeared or expired. Use Resume to finish or extend one walk, and Incremental mode for recurring monitoring.

Why did my run fail instead of returning an empty dataset?

A run fails when Resume from a previous run points at a run or dataset id this account cannot read, when Incremental mode conflicts with existing saved state for the same search, or when the site could not be reached at all on any connection. A run instead succeeds with an empty or smaller than expected dataset when no search queries or URLs were provided, when the country site and filters genuinely matched nothing, or when every page came back blocked after one retry, since a blocked page is treated as the end of that search rather than a fatal error. If detail enrichment is on but product pages are not reachable on the connection, the run still succeeds and returns listing-level fields only.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push a summary of each result into Notion, Linear or Airtable.

Ready to collect with Lazada Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.