Skip to main content

Lazada Scraper

Introduction

The Lazada scraper provides reliable access to Lazada’s backend APIs across Southeast Asia.

It allows you to invoke Lazada APIs directly without handling:

  • Anti-bot headers
  • Signature logic
  • Mobile vs desktop differences
  • Cookie management

Charted Sea continuously maintains this scraper against Lazada platform updates. No action is required on your side when Lazada changes internal APIs.

Usage

Submit tasks to:

POST /scraping-tasks/lazada/run

Example

curl --header "Content-Type: application/json" \
--header "Authorization: Bearer ${token}" \
--request POST \
--data '{"requests":[{"url":"https://www.lazada.vn/products/pdp-i2569427642.html"}]}' \
https://continuous-scraper.common.chartedapi.com/scraping-tasks/lazada/run

The Lazada API endpoint or page URL is specified inside the request body.

See the API Reference for full endpoint details.

Example Request Body

{
"requests": [
{ "url": "https://www.lazada.sg/shop-desktop-computer/" },
{ "url": "https://www.lazada.sg/catalog/?q=tshirt" },
{ "url": "https://www.lazada.sg/products/raspberry-pi-4-heat-sinks-1-copper-2-aluminium-3-piece-cooling-heatsink-heat-sink-accessories-i453778483.html" },
{ "url": "https://www.lazada.sg/shop/loreal-paris" }
]
}

Each request is processed independently and returns a structured JSON response.

What You Can Extract

The Lazada scraper interacts directly with Lazada’s backend APIs and supports:

  • Keyword product search
  • Category product listings
  • Product detail pages
  • Product reviews
  • Seller listing
  • Seller detail
  • Seller product listing
  • Category tree
  • Seller hot keywords

All data is returned in JSON format.

Common Configuration Options

The following parameters are supported:

  • requests — List of Lazada URLs to scrape.
  • cleanResponseBody (default: true) — Returns a cleaned, structured version of the Lazada response.
  • emulateMobileDevice (default: false) — Simulates web mobile traffic when enabled.
  • language (optional) — Sets the language header and cookie.

Supported language values:

  • en — English
  • id — Indonesian
  • ms — Malay
  • th — Thai
  • vi — Vietnamese

Example Response

{
"url": "https://www.lazada.com.my/catalog/?q=raspberry%20pi%205",
"enrichedUrl": "https://www.lazada.com.my/catalog/?q=raspberry%20pi%205",
"referrer": "https://lazada.com.my/",
"knownApi": "KEYWORD_PRODUCTS",
"responseStatus": 200,
"responseBody": {
"productTotal": 1309,
"products": [
{
"itemId": 4084035635,
"pageUrl": "https://www.lazada.com.my/products/raspberry-pi-5-bundle-8gbram32gb-noobsredwhite-case-with-fan-i4084035635.html",
"name": "Raspberry Pi 5 Bundle (8GBRAM/32GB NOOBS/Red/White Case with Fan)",
"imageUrl": "https://sg-test-11.slatic.net/p/c545e50e4305a33c6291a7021a1cc60a.png",
"categoryId": 10000493,
"location": "Wp Kuala Lumpur",
"originalPrice": 699,
"price": 618.9,
"isInStock": true,
"isAd": false,
"isSponsored": false,
"isLazMall": false,
"isLazGlobal": false,
"hasFreeShipping": false,
"reviewCount": 0,
"brandId": 32076,
"brandName": "Raspberry Pi",
"defaultSkuId": 23134383025,
"supplierId": 3335,
"shopId": 19295
}
// ... 59 other products
]
}
}

If you require the raw Lazada response:

{
"cleanResponseBody": false
}

Output Fields

Each scraping task returns:

  • url — Original requested URL
  • knownApi — Identifies the Lazada API invoked
  • responseStatus — HTTP status returned by Lazada
  • responseBody — Lazada API JSON response

Lazada vs Shopee

Lazada and Shopee are independent platforms with different anti-bot systems.

Scraping both platforms:

  • Reduces dependency on a single marketplace
  • Increases pipeline resilience
  • Enables cross-platform keyword and trend analysis

For Shopee documentation, see: Shopee Scraper

Supported APIs

Product Search by Keyword or Category or Seller

  • URL Path:
    • https://www.lazada.${tld}/catalog/?q=${keyword}
    • https://www.lazada.${tld}/${categorySlug}/
    • https://www.lazada.${tld}/${sellerSlug}/?q=All-Products&from=wangpu&langFlag=en&pageTypeId=2
warning

Avoid specifying the page parameter in the URL due to inefficiencies related to Lazada's pagination limitations. Sequential navigation from the first page is required, which can consume significant proxy traffic. For multi-page crawling, consider using the productListing_crawlNextPages parameter.

  • URL Parameters:

    • keyword: Search keyword, e.g., "tshirt".
    • categorySlug: Category slug, e.g. "shop-computers-laptops".
    • sellerSlug: Seller slug, e.g. "nike".
  • Scraper Input Parameters

    • cleanResponseBody (default = true): Indicates whether the response should be cleaned (true) or returned as received (false).
    • emulateMobileDevice (default = false): Simulates a mobile browser when set to true. This is particularly useful for this API, as it only provides consistent ordering in mobile mode.
    • productListing_crawlNextPages (default = false): Enables automatic crawling of subsequent pages.
    • productListing_crawlNextPages_maxPages (optional): Sets a cap on the number of pages to crawl.
    • productListing_crawlNextPages_maxUniqueProducts (optional): Limits the number of unique products to scrape. Products that appear multiple times are counted once.
    • productListing_crawlNextPages_stopWhenNewPageOnlyContainsDuplicates (default = true): Prevents infinite loops in pagination bugs by stopping when a page only contains previously listed products.
    • productListing_crawlNextPages_stopWhenNoMorePagesIsTrue (default = true): Stop crawling next pages if noMorePages equals true in the last response.
info

If productListing_crawlNextPages is set to true, all pages are scraped sequentially within a single scraping task. This is because Lazada requires products to be listed page by page within the same web browser session, from page 1. Direct access to a non-consecutive page (e.g., jumping straight to page 5) would cause Lazada to display results for the page 1.

In practice, this means that a single scraping task may require more than 10min to be processed, at it may involve more than 100 HTTP requests (note that a random delay is added between each scrape, to reduce bot detection).

The nature of this sequential crawling increases the susceptibility of the scraping task to being blocked, especially as successful completion depends on numerous uninterrupted requests. Although captchas can occasionally interrupt the session, they can be resolved; however, if no captcha is presented and the session is disrupted, the process need to restart from the first page.

  • Example Input:
{
"requests": [
// Search products with the "raspberry pi 5" keyword
{ "url": "https://www.lazada.com.my/catalog/?q=raspberry%20pi%205" },

// Search products in the "Computers / Laptops" category
{ "url": "https://www.lazada.com.my/shop-computers-laptops/" },

// Search products from Nike store
{ "url": "https://www.lazada.com.my/nike/?q=All-Products&from=wangpu&langFlag=en&pageTypeId=2" }
]
}

Product Details

  • URL Path:

    • https://www.lazada.${tld}/products/${productSlug}-i${productId}-s${sellerId}.html
  • URL Parameters:

    • productSlug: Product slug, e.g., "120ml-skintific-all-day-light-sunscreen-mist-spf50-pa-sunblock-spray-anti-uv-face-body-spray-120ml".
    • productId: Product ID (a.k.a. itemId), e.g. 3525761808.
    • sellerId: Seller ID, e.g. 22573296116.
  • Scraper Input Parameters

    • cleanResponseBody (default = true): Indicates whether the response should be cleaned (true) or returned as received (false).
    • emulateMobileDevice (default = false): Simulates a mobile browser when set to true. Some APIs may return different results in this mode.
  • Example Input:

{
"requests": [
{ "url": "https://www.lazada.com.my/products/120ml-skintific-all-day-light-sunscreen-mist-spf50-pa-sunblock-spray-anti-uv-face-body-spray-120ml-i3525761808-s22573296116.html" }
]
}

Product Reviews

  • URL Path:

    • https://my.lazada.${tld}/pdp/review/getReviewList?itemId=${productId}
  • URL Parameters:

    • productId: Product ID (a.k.a. itemId), e.g. 3525761808.
  • Scraper Input Parameters

    • cleanResponseBody (default = true): Indicates whether the response should be cleaned (true) or returned as received (false).
    • emulateMobileDevice (default = false): Simulates a mobile browser when set to true. Some APIs may return different results in this mode.
  • Example Input:

{
"requests": [
{ "url": "https://my.lazada.com.my/pdp/review/getReviewList?itemId=2932861112" }
]
}

Product Reviews V2

  • Request Method:

    • POST
  • URL Path:

    • https://acs-m.lazada.${tld}/h5/mtop.lazada.review.item.getpcreviewlist/1.0/
  • Request Body:

{
"itemId": 2770749450,
"pageSize": 5,
"pageNo": 1,
"ratingFilter": 0,
"sort": 0,
"tagId": 0
}
  • Parameters:

    • itemId: The unique identifier of the product.
    • pageSize (default = 5): Number of reviews.
    • pageNo (default = 1): Page number (starts from 1).
    • ratingFilter (min = 0, max = 5): 0 = all reviews, 1-5 = number of stars.
    • sort (default = 0): 0 = default, 1 = recent.
    • tagId (default = 0): 0 = all reviews, -1 = with images/videos, -3 = repeat customer. The response provides other values in the impressionTags field.
  • Scraper Input Parameters

    • emulateMobileDevice (default = false): Simulates a mobile browser when set to true. Some APIs may return different results in this mode.
  • Example Input:

{
"requests": [
{
"url": "https://acs-m.lazada.co.th/h5/mtop.lazada.review.item.getpcreviewlist/1.0/",
"method": "POST",
"payload": {
"itemId": 2770749450,
"pageSize": 5,
"pageNo": 1,
"ratingFilter": 0,
"sort": 0,
"tagId": 0
}
}
]
}

Category Tree

  • URL Path:

    • https://acs-m.lazada.${tld}/h5/mtop.lazada.guided.shopping.categories.categorieslpcommon/1.0/
  • Scraper Input Parameters

    • emulateMobileDevice (default = false): Simulates a mobile browser when set to true. Some APIs may return different results in this mode.
  • Example Input:

{
"requests": [
{ "url": "https://acs-m.lazada.com.my/h5/mtop.lazada.guided.shopping.categories.categorieslpcommon/1.0/" }
]
}

Seller Listing

  • URL Path:

    • https://www.lazada.${tld}/sitemap-sellers.xml?limit=${limit}&offset=${offset}
  • URL Parameters:

    • limit: Number of sub-sitemaps to load (better equals to or less than 30).
    • offset: Offset for results, typically a multiple of limit.
  • Example Input:

{
"requests": [
{ "url": "https://www.lazada.com.my/sitemap-sellers.xml" }
]
}

Seller Details

  • URL Path:

    • https://www.lazada.${tld}/shop/${sellerSlug}/
  • URL Parameters:

    • sellerSlug: Seller slug, e.g., "citemalaysia".
  • Scraper Input Parameters

    • cleanResponseBody (default = true): Indicates whether the response should be cleaned (true) or returned as received (false).
    • emulateMobileDevice (default = false): Simulates a mobile browser when set to true. Some APIs may return different results in this mode.
  • Example Input:

{
"requests": [
{ "url": "https://www.lazada.com.my/shop/citemalaysia/" }
]
}

Seller Promoted Products

  • URL Path:

    • https://www.lazada.${tld}/shop/site/api/shop/campaignTppProducts/query?shopId=${shopId}&sellerId=${sellerId}&itemId=${productId}
  • URL Parameters:

    • shopId: Shop ID, can be obtained from the Seller Details.
    • sellerId: Seller ID, can be obtained from the Seller Details.
    • productId: Any product ID from the seller.
  • Scraper Input Parameters

    • emulateMobileDevice (default = false): Simulates a mobile browser when set to true. Some APIs may return different results in this mode.
  • Example Input:

{
"requests": [
{ "url": "https://www.lazada.co.id/shop/site/api/shop/campaignTppProducts/query?shopId=3258813&sellerId=400611231032&itemId=7991896339" }
]
}

Keyword Listing

  • URL Path:

    • For ID, VN: https://www.lazada.${tld}/tag-order-last-30days-morethan0.xml?limit=${limit}&offset=${offset}
    • For PH, TH: https://www.lazada.${tld}/tag-order-last-60days-morethan0.xml?limit=${limit}&offset=${offset}
    • For MY, SG: https://www.lazada.${tld}/tag-order-last-90days-morethan0.xml?limit=${limit}&offset=${offset}
  • URL Parameters:

    • limit: Number of sub-sitemaps to load (better equals to or less than 30).
    • offset: Offset for results, typically a multiple of limit.
  • Example Input:

{
"requests": [
{ "url": "https://www.lazada.com.my/tag-order-last-90days-morethan0.xml?limit=30&offset=0" }
]
}

Operational Recommendations

  • Monitor success rate during high-traffic campaigns.
  • Expect stricter anti-bot protections during major sales events.
  • Automatically pause traffic if success rate drops significantly.