How it will work: 3 steps
- Follow us on ApifyThe tool is built and waits in the queue for the Apify Store. Apify is the cloud platform where our tools run.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
[]in Also search in. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Type a keyword, or paste a Lazada product, shop or category link, and get product rows with price, original price, discount, rating, sold count, seller and location. It works in Singapore, Malaysia, Thailand, the Philippines, Vietnam and Indonesia, with no login and no Lazada account.
- Products found by keyword, product link, product ID, or a search, tag, category or shop link.
- Product details: description, photo gallery, variants and category path.
- Reviews: stars, text, date, chosen variant, likes and review photos. It saves no buyer names.
- Price changes: new products, changed prices and the previous price between runs of one monitor.
- Status rows: a link that does not exist or an input that failed gets its own row, so a failure never looks like an empty result.
Good for
- You sell on Lazada and want a daily view of what rivals charge.
- You look for a new product to sell in one or several Southeast Asian markets.
- You want to find deals with a minimum discount, a price range or a minimum rating.
- You want to know what buyers say about a product before you stock it.
Not a good fit
- You want orders, the private figures of your shop or buyer contacts. Only public guest pages are read.
- You need product specifications, delivery options, warranty, or a price for each variant. These fields are not part of the output.
- You need a complete copy of a large category. Category pages without a keyword often repeat after a few pages.
Who uses it
Lazada sellers
Compare the prices of rival shops each day.
Product hunters
Find deals by discount, price range or rating.
Market researchers
Read what buyers say before you stock a product.
Price
Prices will be shown after release.
Questions
Do I need a Lazada account?
No. The tool reads public guest pages. It does not log in.
Does it give buyer names or private shop data?
No. Reviews have no buyer names. Orders and private shop figures are not available.
Why do two runs give different results?
Lazada search results change by region and by day.
Details
Step by step on Apify
- Go to the Input tab. Country should say
Thailand. - Search keywords should hold
power bank. - Expand Limits and order. Maximum products should be
10. - Click Start.
- After the run, go to Output and pick the Products view.
- Look at
price,originalPrice,currencyanddiscountPercent. - Look at
sellerandlocation.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Check rival prices every day | Keywords or shop links with a monitor name | Product row with change type | price, previousPrice, changeType, seller | Schedule, then a Slack summary |
| Find a product niche | Keywords in several countries | Product row | sold, rating, reviewsCount, price, country | CSV export to a spreadsheet |
| Find deals | Keyword with Minimum discount % | Product row | discountPercent, originalPrice, price, url | Webhook to your own system |
| Read what buyers say | Product links with Add reviews | Review row | rating, text, reviewTime, skuText | JSON export to your analysis tool |
| Fill a product sheet | Product links with Add product details | Detailed product row | description, variants, categoryPath, images | API read into your catalog |
Tips for better results
- Pick one country first. Singapore is blocked more often than others.
- Name a monitor to see new products and price changes between runs.
- Without a keyword, category pages often repeat after a few pages.
Limits and good to know
- Volume: 5000 products per run, 100 keywords, 1000 product links, 1000 product IDs, 100 listing links and 1000 reviews per product
- Time: the default run timeout is 300 seconds. The Actor stops about 25 seconds before the timeout, saves what it has and sets
stopReasontoDEADLINE. One run works for at most one hour - Run times from our tests: 10 products usually 2 to 30 seconds, 100 products 37 seconds, 1000 products 43 seconds, 5000 products about 4 minutes 40 seconds on an earlier version, 50 products with details 102 seconds. A run of 30 products with details and reviews in the Philippines did not finish in 300 seconds. When Lazada blocked the first requests, small runs of 5 or 6 products took up to about 2 minutes, at the same price for you. Network speed changes these numbers too
- Memory: 256 or 512 MB only. Other values stop the run with
UNSUPPORTED_MEMORY - Pages: up to page 102 of a listing. Some shops and categories without a keyword repeat the same page. The Actor then stops that source and warns you with
listing_repeats_pages - Region and time: search results depend on the region and change between runs. Two runs of the same keyword can differ
- Blocks: Lazada can refuse requests. Singapore does this more often than other markets. A run can fail with
SOURCE_BLOCKEDorSOURCE_ERROR, even when it is the only run. You then pay the start fee and any rows already saved. In one test of 7 runs started together, small runs took up to about 2 minutes. If that happens, start runs one by one or try again later. The Actor does not solve CAPTCHA and does not log in - Product pages: description, gallery, variants and category path are available. Specifications, delivery, warranty and prices per variant are not
Troubleshooting
| Symptom | Likely reason | Check | Action |
|---|---|---|---|
Run fails with SOURCE_BLOCKED | Lazada refused every route | Status row and RUN_SUMMARY.blocked | Try again later or use another market. You paid only the start fee and any saved rows. |
Run fails with INVALID_INPUT | No valid source, or a wrong value | Text in the run log | Add a keyword or fix the link format. |
No rows, warning no_products_after_filters | Filters hid every product | RUN_SUMMARY.filteredOut | Loosen the filters. |
No rows, warning no_products_found | Lazada has nothing for this input, or the shop link is empty | Open the same search in a browser | Change the keyword or the link. |
| Rows look unrelated | Lazada fills weak searches with similar goods | titleMatchesQuery | Turn on Titles must contain the keywords. |
Fewer rows than asked, LISTING_REPEATS | The listing repeats its pages | Warning listing_repeats_pages | Add a keyword to the search, or use several links. |
Partial run with DEADLINE | The timeout came first | RUN_SUMMARY.unprocessed | Raise the run timeout or lower the limits. |
Partial run with CHARGE_LIMIT | The cost cap was reached | Maximum cost in the run options | Raise the cap. |
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"recordType": "product",
"itemId": "4873645709",
"skuId": "20456603427",
"title": "Remax power bank w1501 15,000 mAh",
"brand": "Remax",
"price": 795,
"priceText": "฿795.00",
"originalPrice": 1599,
"currency": "THB",
"discountPercent": 50,
"rating": 4.98,
"reviewsCount": 5172,
"sold": 13000,
"soldText": "13.0K sold",
"seller": "REMAX TH",
"sellerId": "100391392479",
"location": "Nonthaburi",
"inStock": true,
"freeShipping": true,
"lazMall": true,
"voucherText": "Voucher save 50%",
"images": [
"https://th-live-01.slatic.net/p/ac4a7aeeeb74c69fb516ab7adc3fe9ae.png",
"https://th-live-01.slatic.net/p/d42ec1e252b3b27308bae50af025e464.png"
],
"url": "https://www.lazada.co.th/products/pdp-i4873645709.html",
"country": "th",
"query": "power bank",
"titleMatchesQuery": true,
"page": 1,
"position": 1,
"description": null,
"variants": null,
"categoryPath": null,
"ratingDistribution": null,
"changeType": null,
"previousPrice": null,
"source": "search",
"sourceUrl": "https://www.lazada.co.th/catalog/?ajax=true&isFirstRequest=true&q=power+bank&page=1",
"fetchedAt": "2026-11-07T09:39:46.869Z",
"status": "complete"
}Data fields (40)
| Field | Type | Meaning |
|---|---|---|
recordType | string | product, review or status. |
itemId | string | Lazada product ID. |
skuId | string | Variant ID shown in the results. |
title | string | Product title. |
brand | string | Brand as stated by Lazada, including No Brand. |
price | number | Current price in the local currency. Null when Lazada did not state it. |
priceText | string | The price as shown on Lazada. |
originalPrice | number | Price before the discount. Null when there is no discount. |
currency | string | ISO currency code. |
discountPercent | number | Discount stated by Lazada. Null when there is none. |
rating | number | Average rating from 1 to 5. Null when there are no ratings, never 0. |
reviewsCount | integer | Number of reviews. |
sold | integer | Units sold, rounded the way Lazada rounds it. |
soldText | string | Units sold as shown on Lazada. |
seller | string | Store name. |
sellerId | string | Lazada store ID. |
location | string | Where the product ships from. |
inStock | boolean | Availability stated by Lazada. |
freeShipping | boolean | True when the badge is shown. Null means no badge, not a paid delivery. |
lazMall | boolean | True when the LazMall badge is shown. Null means no badge. |
voucherText | string | Voucher badge text from the results. |
images | array | Image URLs. May be empty. |
url | string | Product page. |
country | string | Lazada market. |
query | string | Keyword that found this product. |
titleMatchesQuery | boolean | True when the title holds every keyword. Null outside keyword search. |
page | integer | Results page. |
position | integer | Place on the results page. |
description | string | Seller description, with details on. |
variants | array | Variant options, with details on. Prices per variant are not on the public page. |
categoryPath | array | Category path, with details on. |
ratingDistribution | object | Review counts by stars, with reviews on. |
changeType | string | new, changed or unchanged, in a monitor. |
previousPrice | number | Price in the previous monitor run. |
source | string | search, tag, category, shop, product, or input for a rejected entry. |
sourceUrl | string | The page this row came from. |
fetchedAt | string | ISO time the data was received. |
status | string | complete, partial, not_found or error. |
code | string | Reason for a status row. |
reviewId | string | Lazada review ID. |
Input settings (25)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Country | country | string | "th" |
| Also search in | extraCountries | array | [] |
| Search keywords | searchQueries | array | ["power bank"] |
| Product URLs | productUrls | array | |
| Product IDs | productIds | array | |
| Listing URLs | listingUrls | array | |
| Maximum products | maxItems | integer | 10 |
| Maximum products per source | maxItemsPerQuery | integer | |
| First results page | startPage | integer | 1 |
| Sort by | sort | string | "best" |
| Minimum price | minPrice | number | |
| Maximum price | maxPrice | number | |
| Minimum rating | minRating | number | |
| Minimum discount, % | minDiscount | number | |
| In stock only | inStockOnly | boolean | false |
| Free shipping badge only | freeShippingOnly | boolean | false |
| LazMall only | lazMallOnly | boolean | false |
| Titles must contain the keywords | onlyMatchingTitles | boolean | false |
| Add product details | includeDetails | boolean | false |
| Add reviews | includeReviews | boolean | false |
| Maximum reviews per product | maxReviewsPerProduct | integer | 20 |
| Review stars | reviewsRating | string | "all" |
| Monitor name | monitorName | string | |
| Also return unchanged products | emitUnchanged | boolean | false |
| Proxy | proxyConfiguration | object |



