Lazada $1๐ฐ URL | Search | Products and Reviews Scraper
Pricing
from $1.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
57
Total users
18
Monthly active users
4 days ago
Last modified
Categories
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.detailblock 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")
| Field | Example |
|---|---|
type | "product" |
id / productId | "0000000001" |
url / productUrl | https://www.lazada.sg/products/sample-i0000000001.html |
productName | "Sample Product Title" |
currentPrice | 49.9 |
originalPrice | 99 |
discountPct | 50 |
isOnSpecial | true |
discountAmount | 49.1 |
promoLabel | "Flash Sale" |
specialsCategory | "flash-sale" |
currency | "SGD" |
country | "SG" |
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", ...] |
description | ["Bullet 1", "Bullet 2"] |
descriptionHtml | "<p>Full HTML description...</p>" |
skuList | [{ id: "0000", price: 49.9, stock: 10, color: "Black", size: "M" }, ...] |
skuCount | 4 |
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.serp | The original SERP card object |
raw.detail | The 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.
| Field | Example |
|---|---|
type | "review" |
id / reviewId | "0000000001" |
productId | "0000000001" |
productUrl | https://www.lazada.sg/products/sample-i0000000001.html |
buyerName | "j****e" |
rating | 5 |
reviewTime | "2026-01-01" |
reviewContent | "Great quality, fast shipping." |
skuInfo | "Color: Black, Size: M" |
likeCount | 12 |
media | [{ coverUrl: "https://...", videoUrl: "https://...", mediaType: 2, height: 1920, width: 1080 }] |
country | "SG" |
raw | The 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/discountAmountkey off the site's own strike-throughoriginalPrice, only ever populated when it genuinely exceedscurrentPrice. A full-price item getsoriginalPrice: null,isOnSpecial: false,discountAmount: nullโ no invented markdown.specialsCategory/promoLabelsurface 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. Leavequeriesempty to browse the whole feed, or add queries to search within it. Pasting a.../tag/flash-sale/URL inurlmode reaches the same feed with no extra input. - LazMall/Campaign badges are detected on ANY card regardless of
specialsOnlyโ a plain keyword search already returnsspecialsCategory: "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.
- Authorize a connector once under Apify โ Settings โ Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto 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
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | enum | search | search or url. |
country | enum | sg | One of sg, my, th, vn, ph, id. URL mode auto-detects from the first URL. |
queries | string[] | ["laptop"] | Search terms (search mode only). |
categoryId | string | Optional category id pin. | |
minPrice / maxPrice | int | Price range in local currency. | |
minRating | int (1-5) | Drop products under this rating. | |
freeShippingOnly | bool | false | Keep only free-shipping items. |
specialsOnly | bool | false | Walk Lazada's real Flash Sale feed (/tag/flash-sale/) instead of the plain catalog (search mode). |
sortBy | enum | popularity | popularity, priceAsc, priceDesc, ratingDesc, newest, bestSelling. |
urls | string[] | URLs (url mode). SERP, category, OR product pages. | |
reviewsOnly | bool | false | Emit reviews instead of products. |
fetchReviews | bool | false | Add reviews to each product record (only when reviewsOnly=false). |
maxReviewsPerProduct | int | 100 | Cap reviews per product. |
fetchDetails | bool | true | Hit the detail page for SKU table, vouchers, shipping, seller cluster. |
maxPages | int | Pages per query/URL. Leave empty to walk every result page (still bounded by maxListings). | |
maxListings | int | 20 | Hard cap across all starts. 0 = unlimited (still bounded by maxPages). |
resumeFromRunId | string | Paste 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. | |
proxy | object | Apify Residential | Lazada 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).