Lazada Scraper avatar

Lazada Scraper

Pricing

from $1.80 / 1,000 catalogue rows

Go to Apify Store
Lazada Scraper

Lazada Scraper

Scrape Lazada products across all six marketplaces: Singapore, Malaysia, Indonesia, the Philippines, Thailand and Vietnam. Search by keyword, browse a category or read a single product, and get the price with its currency, the seller, the brand, the rating and the stock state on every row.

Pricing

from $1.80 / 1,000 catalogue rows

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

Read Lazada product data across all six Lazada marketplaces: Singapore, Malaysia, Indonesia, the Philippines, Thailand and Vietnam. Search by keyword, browse a category, or pull a single product in full detail. Every row comes back with the price, the currency that price is in, the marketplace country, the seller, the brand, the rating and the stock state.

Southeast Asia is six separate retail markets wearing one brand. The same search returns a different catalogue, different sellers and different prices in each one, and the prices are denominated in six different currencies. This Actor treats that as the main event rather than a footnote.

What you get

One row per unique product. Duplicates across pages are removed before anything is counted or billed.

FieldWhat it is
item_idLazada's product id, unique within a marketplace
sku_idThe specific variant the listed price belongs to
nameProduct title as the seller wrote it
urlCanonical product page
imageMain product image
priceCurrent selling price, as a number
price_currencyISO 4217 code for that price: SGD, MYR, IDR, PHP, THB or VND
price_displayThe price exactly as the marketplace renders it
original_pricePre-discount price when the product is on offer
discountThe discount the marketplace advertises, as text
ratingAverage customer rating out of 5
review_countHow many reviews sit behind that rating
sold_count_displayUnits sold, when the marketplace shows it
in_stockWhether the product is flagged available
is_sponsoredTrue when the product was placed as an ad, not earned by relevance
seller_id, seller_nameWho is selling it
brand_id, brand_nameBrand on the marketplace
ships_fromWhere it ships from, which is often not the marketplace country
market, market_countryWhich of the six marketplaces the row is from
matches_queryWhether a search row genuinely relates to your term
page, position_on_pageWhere it ranked, so you can rebuild the results
source, source_inputWhich term or URL produced the row
scraped_atUTC timestamp of the read

Product detail rows add the full seller description, the category path, the variant list, the availability statement and a currency code read from the product page itself.

Why price_currency is on every row

Lazada does not tell you what currency a price is in. The currency field on every product it returns is empty, and the only hint on the response is a bare symbol such as $ or RM. A dollar sign is not a currency. If you pool a Singapore catalogue with a Philippine one and both prices arrive as bare numbers, you now have a price history that is quietly wrong, and nothing in the data will ever tell you.

So this Actor derives the denomination from the marketplace itself, which is the one thing in the request that actually fixes it, and stamps price_currency on every single row. For product detail rows it goes further: the product page states a real currency code, and that code is compared against the marketplace. If the two ever disagree, the row says so in currency_agrees_with_host and the run summary lists the mismatch, rather than picking one and hoping.

Why a search sometimes returns nothing on purpose

This is the part most Lazada tooling gets wrong, and it is worth understanding before you build on the output.

When Lazada cannot match your search term, it does not return an empty page. It returns a full page of forty completely unrelated products, reports success, and prints a line claiming that thousands of items were found. There is no error code, no empty flag and no clue in the response. A scraper that trusts the response hands you forty rows of confident nonsense, under a run that reports success.

This Actor measures how much of each result page actually relates to what you asked for, by checking your search words against the product names, brands and sellers that came back. A genuine search scores close to 100 percent. An unmatched search scores zero. When a page falls below the threshold, the products are discarded and the search term is listed under noMatchQueries in the run summary, so you learn that the marketplace had nothing rather than inheriting its consolation prizes.

You can turn this off with Keep recommended products when a search has no real match. The products are then kept but flagged matches_query: false and is_recommendation_fallback: true, so they still cannot be mistaken for real results.

The same scepticism is applied to the marketplace's own result counts. Lazada reports the same total for every query, matched or not, because the number is a ceiling rather than a count. It is passed through as claimedMatchCountsUnverified and clearly labelled, never as a fact.

Read the run summary

The run summary is not a log, it is part of the output. It exists so that a run returning fewer rows than you expected tells you which of several very different things happened.

  • outcome — ok, partial, blocked, no_matches, empty or no_input
  • priceCurrency — the currency of the marketplace you selected
  • currenciesInOutput — the currencies actually present in the dataset, which is usually one and is the field to check before you sum a column
  • marketOverrides — any URL you pasted that belonged to a different marketplace than the one you selected. Those rows are priced in their own marketplace's currency, never the one from the dropdown
  • itemCount and billableCount — what you got and what you paid for
  • noMatchQueries — terms the marketplace could not match
  • paginationStops — why each term stopped, per term: reached your limit, ran out of pages, started repeating itself, or was refused
  • deadProducts — product URLs that still serve a page but no longer have a product on it
  • currencyMismatches — any row where the page and the marketplace disagreed
  • pagesFetched, requestAttempts, attemptsRefused — how much work the run did and how much of it was turned away

An empty dataset with outcome: no_matches means the marketplace genuinely has nothing for your term. An empty dataset with outcome: blocked means the run never got in and you should try again. Those are opposite conclusions and no Actor should let you confuse them.

Pagination

One page is 40 products. Set Pages per search term to walk deeper, up to 25 pages per term in a single run. Lazada itself serves at most 102 pages for any query, which is roughly four thousand products, and a run stops early and says so when the marketplace reports no further pages, when a page starts repeating products already returned, or when your product limit is reached.

Searching one term across several pages costs one request per page, so deep pagination is cheap. Product detail is one request per product and is the expensive half, which is why it is billed separately.

Inputs

  • Marketplace — which of the six, and therefore which currency
  • Search terms — keywords, one per line
  • Category URLs — copy them from your browser; filters in the URL are kept. A URL from another marketplace is read on its own marketplace and priced in its own currency, and the run summary tells you it did that
  • Product URLs or item IDs — full detail for specific products. A bare ID is read on the marketplace you selected; a full URL is read on its own
  • Maximum products — stop after this many unique products
  • Pages per search term — how deep to go
  • Sort results by — popularity, price ascending or descending, or newest
  • Minimum query relevance — the no-match threshold described above
  • Keep recommended products when a search has no real match
  • Attempts per page — how hard to retry a page the marketplace declines

Typical uses

Price monitoring across Southeast Asia. Run the same search term on all six marketplaces and compare, safely, because every row carries its own currency and country. Sponsored placements are flagged so they do not pollute a ranking study.

Competitor and seller research. seller_id, seller_name and ships_from show who is actually selling a category in each market and where the stock comes from. A surprising share of Southeast Asian listings ship cross-border, and ships_from is how you spot it.

Catalogue and assortment mapping. Walk a category several pages deep to see what a market actually stocks, and which brands hold shelf space.

Product research. Feed in item IDs you already care about and get the full description, the variants and the category path.

Market entry sizing. Rating and review counts across a category are a usable proxy for demand, and they differ sharply between the six markets.

Notes and limits

  • Six marketplaces. Lazada does not operate anywhere else.
  • Prices, sellers and stock are what the marketplace shows an anonymous visitor. Member-only and app-only prices are not visible and are not invented.
  • ships_from is the marketplace's own claim, not a verified origin.
  • A product id that no longer exists still serves a page. Those are reported under deadProducts rather than silently dropped.
  • Runs are paced deliberately. This is a courtesy to the marketplace and it is also what keeps the success rate high.

Free plan

Free Apify accounts receive up to 10 rows per run. The limit is applied before the first request rather than after the work is done, so a free run does not sit waiting for pages it will never receive. Paying accounts are not limited. Billing follows delivery: you are charged for the rows you actually received, never for rows the limit removed.