Lazada $1๐Ÿ’ฐ URL | Search | Products and Reviews Scraper avatar

Lazada $1๐Ÿ’ฐ URL | Search | Products and Reviews Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Lazada $1๐Ÿ’ฐ URL | Search | Products and Reviews Scraper

Lazada $1๐Ÿ’ฐ URL | Search | Products and Reviews Scraper

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.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

57

Total users

18

Monthly active users

4 days ago

Last modified

Share

Lazada Scraper

Pull product listings, full SKU variant tables, vouchers, shipping rules, seller ratings, and customer reviews from Lazada's six SE Asia country sites: Singapore, Malaysia, Thailand, Vietnam, Philippines, and Indonesia. Search by query or feed URLs directly. Toggle a single switch to flip the actor into reviews-only mode that emits one record per review (with media and SKU info). Records carry flat top-level fields (ready for CSVs and spreadsheets) AND a nested raw block preserving the complete source record, so downstream pipelines never lose information.

Why this scraper?

  • Six country sites in one actor, not six. One input field switches the run between SG, MY, TH, VN, PH, ID.
  • Reviews mode walks every page (capped) instead of only the first 10. Default delivers ~10x the depth of typical scrapers.
  • Detail enrichment includes the full SKU table (variant id, price, stock, attributes), every active voucher and promotion, shipping fee plus delivery ETA plus COD flag, warranty period, and the seller rating cluster (positive rate, shipping speed, chat response rate, follower count). All exposed as both flat fields AND a nested raw.detail block with the complete source record.
  • Reviews-only runs against product URLs are dramatically cheaper and run in seconds at ~256 MB peak memory.
  • Forward pagination with per-query budget split: when you scrape 3 queries with maxListings=15, each query gets 5, not query #1 takes all.

Data you get

Sample shape, values are illustrative placeholders, not from a live listing.

Product record (type = "product")

FieldExample
type"product"
id / productId"0000000001"
url / productUrlhttps://www.lazada.sg/products/sample-i0000000001.html
productName"Sample Product Title"
currentPrice49.9
originalPrice99
discountPct50
isOnSpecialtrue
discountAmount49.1
promoLabel"Flash Sale"
specialsCategory"flash-sale"
currency"SGD"
country"SG"
ratingScore4.6
reviewCount1234
itemSold"5K+ sold"
inStocktrue
isSponsoredfalse
freeShippingtrue
sellerName"Sample Store"
sellerId"0000000"
sellerLocation"Singapore"
sellerRatingPositivePct98
sellerShippingSpeed"Fast"
sellerChatResponseRate"95%"
sellerFollowerCount1500
brandName"Sample Brand"
brandId"0000"
primaryImagehttps://laz-img-cdn.alicdn.com/p/000000.jpg
imageGallery["https://laz-img-cdn.alicdn.com/p/000001.jpg", ...]
description["Bullet 1", "Bullet 2"]
descriptionHtml"<p>Full HTML description...</p>"
skuList[{ id: "0000", price: 49.9, stock: 10, color: "Black", size: "M" }, ...]
skuCount4
vouchers[{ amount: 5, minSpend: 30, code: "SAMPLE5" }, ...]
promotions[{ type: "flash_sale", endsAt: "2026-01-01T00:00:00Z" }, ...]
shipping{ fee: 0, eta: "2-3 days", cod: true }
warranty{ type: "Manufacturer", periodMonths: 12 }
specifications{ weight: "0.3kg", material: "ABS" }
breadcrumbs["Electronics", "Audio", "Earphones"]
embeddedReviews[ ... 10 review objects ... ] (only when fetchReviews=true)
raw.serpThe original SERP card object
raw.detailThe original detail page module data
fetchedAt"2026-01-01T00:00:00.000Z"

Review record (type = "review")

Sample shape, values are illustrative placeholders, not from a live review.

FieldExample
type"review"
id / reviewId"0000000001"
productId"0000000001"
productUrlhttps://www.lazada.sg/products/sample-i0000000001.html
buyerName"j****e"
rating5
reviewTime"2026-01-01"
reviewContent"Great quality, fast shipping."
skuInfo"Color: Black, Size: M"
likeCount12
media[{ coverUrl: "https://...", videoUrl: "https://...", mediaType: 2, height: 1920, width: 1080 }]
country"SG"
rawThe complete source record for the review, every field included
fetchedAt"2026-01-01T00:00:00.000Z"

Specials, was-price & discount

Every product record carries isOnSpecial (real strike-through present), discountAmount (originalPrice - currentPrice), promoLabel, and specialsCategory โ€” never fabricated:

  • isOnSpecial/originalPrice/discountAmount key off the site's own strike-through originalPrice, only ever populated when it genuinely exceeds currentPrice. A full-price item gets originalPrice: null, isOnSpecial: false, discountAmount: null โ€” no invented markdown.
  • specialsCategory/promoLabel surface the site's own classification, one of "flash-sale" (record came from the Flash Sale campaign feed below), "lazmall" or "campaign" (the card carries that exact badge in Lazada's own listing), or absent when none apply. Generic perks (free shipping, coin/voucher cashback) are not specials and are never mapped to these fields.
  • Set specialsOnly: true (search mode) to walk Lazada's real Flash Sale campaign feed (/tag/flash-sale/) instead of the plain catalog โ€” a genuinely different, curated product set, not a client-side filter over ordinary results. Leave queries empty to browse the whole feed, or add queries to search within it. Pasting a .../tag/flash-sale/ URL in url mode reaches the same feed with no extra input.
  • LazMall/Campaign badges are detected on ANY card regardless of specialsOnly โ€” a plain keyword search already returns specialsCategory: "lazmall" for LazMall-badged listings.

How to use

Search by query

{
"mode": "search",
"country": "sg",
"queries": ["wireless earbuds"],
"minPrice": 20,
"maxPrice": 200,
"minRating": 4,
"sortBy": "ratingDesc",
"maxPages": 5,
"maxListings": 100,
"fetchDetails": true
}

Walk SERP URLs

{
"mode": "url",
"urls": [
"https://www.lazada.com.my/catalog/?q=ipad",
"https://www.lazada.co.th/shop-laptops/"
],
"maxPages": 3,
"maxListings": 60,
"fetchDetails": true
}

Reviews only, from product URLs (fast, ~256 MB)

{
"mode": "url",
"country": "sg",
"urls": [
"https://www.lazada.sg/products/sample-i0000000001.html",
"https://www.lazada.sg/products/sample-i0000000002.html"
],
"reviewsOnly": true,
"maxReviewsPerProduct": 200
}

Products with embedded reviews

{
"mode": "search",
"country": "ph",
"queries": ["coffee maker"],
"fetchReviews": true,
"maxReviewsPerProduct": 30,
"maxPages": 2,
"maxListings": 40
}

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape โ€” the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record โ€” not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify โ†’ Settings โ†’ Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input parameters

ParameterTypeDefaultDescription
modeenumsearchsearch or url.
countryenumsgOne of sg, my, th, vn, ph, id. URL mode auto-detects from the first URL.
queriesstring[]["laptop"]Search terms (search mode only).
categoryIdstringOptional category id pin.
minPrice / maxPriceintPrice range in local currency.
minRatingint (1-5)Drop products under this rating.
freeShippingOnlyboolfalseKeep only free-shipping items.
specialsOnlyboolfalseWalk Lazada's real Flash Sale feed (/tag/flash-sale/) instead of the plain catalog (search mode).
sortByenumpopularitypopularity, priceAsc, priceDesc, ratingDesc, newest, bestSelling.
urlsstring[]URLs (url mode). SERP, category, OR product pages.
reviewsOnlyboolfalseEmit reviews instead of products.
fetchReviewsboolfalseAdd reviews to each product record (only when reviewsOnly=false).
maxReviewsPerProductint100Cap reviews per product.
fetchDetailsbooltrueHit the detail page for SKU table, vouchers, shipping, seller cluster.
maxPagesintPages per query/URL. Leave empty to walk every result page (still bounded by maxListings).
maxListingsint20Hard cap across all starts. 0 = unlimited (still bounded by maxPages).
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a full-catalogue walk across separate runs. Products already collected there (matched by productId) are skipped.
proxyobjectApify ResidentialLazada requires SE Asia residential exits.

Full-catalogue walks and resuming

maxPages has no upper bound: leave it empty (or 0) to walk every SERP page Lazada serves for a query/URL, stopped only by an empty page, Lazada's own result-count signal, and maxListings. To split a very large catalogue across multiple runs (or to continue one interrupted by a platform migration or a Resurrect), set resumeFromRunId to a prior run's id โ€” the new run reads that run's dataset, skips every productId already collected, and only appends new products. The run also checkpoints its own progress periodically to its default key-value store, so a migrated/resurrected run of the SAME input resumes automatically without any input change.

Plan requirement

Lazada serves SE Asia residential traffic. The actor REQUIRES Apify Residential proxy with the country pinned to your selected country. Free plan does not include Residential, so a free-tier run will return 0 items. Upgrade at https://apify.com/pricing (Starter or higher includes Residential).

For reviewsOnly=true runs where every input URL is a product URL, the actor takes a faster, cheaper path (still residential).