# Lazada Reviews Scraper: Newest First, Sub-Ratings & Photos (`luzivanlt/lazada-reviews-scraper`) Actor

The newest reviews of any Lazada product first, with separate stars for product, seller and delivery. $1 per 1,000 reviews. Purchase date, photos. Vietnam, Singapore, Malaysia.

- **URL**: https://apify.com/luzivanlt/lazada-reviews-scraper.md
- **Developed by:** [Luzi](https://apify.com/luzivanlt) (community)
- **Categories:** E-commerce, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Lazada Reviews Scraper: Newest First, Sub-Ratings & Photos

Get the newest reviews of any Lazada product first, each with the buyer's
separate stars for the product, the seller and the delivery, the date they
bought it, and the product's own rating summary on every row. Works on Lazada
Vietnam, Singapore and Malaysia; links from Lazada Thailand, Indonesia and the
Philippines are accepted too, but those stores have been tested less. No
Lazada account, login or cookies needed.

Tested daily. Latest large run: 2,054 reviews of four products from Vietnam,
Singapore and Malaysia, each read to the last review Lazada shows.

### What does this Actor do?

You give it links to Lazada product pages. For each product it reads the
written reviews, newest first (or in Lazada's relevance order), and saves one
row per review until it reaches your limit or the last review Lazada shows.

Each review comes with:

- the star rating, and the buyer's separate stars for the product, the seller
  and the delivery
- the review text, and the parts written under Lazada's prompts
  ("Design: …") when the buyer used them
- the date it was written and the date the buyer bought the product
- the reviewer's display name and Lazada id, and whether they posted
  anonymously
- the variant bought (colour, size, …) and whether the purchase is verified
- likes, dislikes and views
- links to the reviewer's photos (and video, when there is one)
- the seller's reply, when there is one
- the product's title, image, category and price, and its rating summary:
  average stars, how many ratings and reviews it has, the count for each star,
  and how many reviews Lazada hides

### Why use it?

- **Watch what buyers say now.** Newest first, so a small daily run picks up
  the latest reviews: track complaints and praise on your own products, or a
  competitor's.
- **See where a bad review comes from.** The separate product, seller and
  delivery stars tell a faulty product from a slow courier.
- **No second scraper for the summary.** Every row carries the product's
  rating summary, so you can chart a product's average and star counts from
  the same data.
- **Use the data anywhere.** Download as JSON, CSV or Excel, or send it to
  your own tools through Apify's API and integrations.

### How to use it

1. Paste one or more product links into **Product links**.
2. Optionally, set **Max reviews per product**, the **Order** and a **Star
   rating**.
3. Click **Start**. When the run ends, open the **Output** tab to view the
   reviews or download them.

Run it with no input to see a sample: up to 50 reviews each of two products, one
in Singapore and one in Vietnam, charged as usual.

#### Links that work

| Store       | Looks like                                                            |
| ----------- | --------------------------------------------------------------------- |
| Vietnam     | `https://www.lazada.vn/products/<name>-i2212465644.html`              |
| Singapore   | `https://www.lazada.sg/products/<name>-i3349769802-s22409913565.html` |
| Malaysia    | `https://www.lazada.com.my/products/<name>-i3525761808.html`          |
| Philippines | `https://www.lazada.com.ph/products/<name>-i<number>.html`            |
| Thailand    | `https://www.lazada.co.th/products/<name>-i<number>.html`             |
| Indonesia   | `https://www.lazada.co.id/products/<name>-i<number>.html`             |

The link must be a product page: the number after `i` (`-i2212465644`) is the
product. Links
with tracking parameters work, and a product pasted twice is read once. Shop,
category and search links are not supported. Paste the links into the list:
uploading a file of links is not supported yet.

### Input

| Field                                                | What it does                                                    | Default  |
| ---------------------------------------------------- | --------------------------------------------------------------- | -------- |
| **Product links** (`startUrls`)                      | The products to read. Required.                                 | —        |
| **Max reviews per product** (`maxReviewsPerProduct`) | Stop reading a product after this many reviews, from 1 to 1,000 | `100`    |
| **Order** (`sortBy`)                                 | `newest` or `relevance`                                         | `newest` |
| **Star rating** (`starRating`)                       | `all`, or `1` to `5` for only reviews with that many stars      | `all`    |

Example input:

```json
{
  "startUrls": [{ "url": "https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html" }],
  "maxReviewsPerProduct": 200,
  "sortBy": "newest",
  "starRating": "all"
}
```

### Output

One row per review. An example, with made-up values:

```json
{
  "review_id": "197901036769802",
  "product_id": "3349769802",
  "product_url": "https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html",
  "marketplace": "lazada.sg",
  "product_title": "Magnetic Power Bank 10000mAh",
  "product_image": "https://…/product.jpg",
  "category_id": "10001",
  "category_name": "Portable Chargers",
  "root_category_id": "3000",
  "root_category_name": "Mobile Accessories",
  "product_price_text": "$15.90",
  "product_status": 1,
  "rating": 5,
  "product_stars": 5,
  "seller_stars": 5,
  "delivery_stars": 4,
  "review_text": "Design: Slim case. Battery life: Lasts two days.",
  "review_aspects": [
    { "aspect": "Design", "text": "Slim case." },
    { "aspect": "Battery life", "text": "Lasts two days." }
  ],
  "review_tags": [],
  "review_date": "2026-06-09",
  "review_time_text": "09 Jun 2026",
  "purchase_date": "2026-06-02",
  "purchase_time_text": "02 Jun 2026",
  "reviewer_name": "J***n",
  "reviewer_id": "1000000001",
  "reviewer_anonymous": false,
  "reviewer_avatar": null,
  "verified_purchase": true,
  "variant": "Color Family:Black",
  "sku_id": "22409913565",
  "likes": 2,
  "dislikes": 0,
  "views": 5,
  "comment_count": 0,
  "relevance_score": 55.1,
  "images": ["https://…/photo.jpg"],
  "video_url": null,
  "video_cover_url": null,
  "follow_ups": [],
  "seller_reply": "Thank you for your support!",
  "seller_reply_time_text": "1 week ago",
  "seller_reply_likes": 0,
  "seller_id": "1100000000",
  "product_rating_average": 4.7,
  "product_rating_count": 420,
  "product_review_count": 420,
  "product_star_counts": { "1": 12, "2": 5, "3": 10, "4": 33, "5": 360 },
  "product_hidden_review_count": 150,
  "product_local_review_count": 420,
  "product_reviews_with_photos": 90,
  "product_reviews_with_videos": 12,
  "product_reviews_with_media": 95,
  "product_photo_count": 140,
  "product_video_count": 12,
  "product_media_count": 152,
  "list_total": 420
}
```

Fields marked *when present* are empty on most reviews.

| Field                                                                                      | What it holds                                                                                           |
| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
| `review_id`                                                                                | Lazada's id for the review                                                                              |
| `product_id`                                                                               | The product's id (the number after `i` in its link)                                                     |
| `product_url`                                                                              | The product link the review was read from, without tracking parameters                                  |
| `marketplace`                                                                              | The store: `lazada.vn`, `lazada.sg`, `lazada.com.my`, …                                                 |
| `product_title`, `product_image`                                                           | The product's title and picture as the review shows them                                                |
| `category_id`, `category_name`                                                             | The product's category                                                                                  |
| `root_category_id`, `root_category_name`                                                   | The top-level category it sits under                                                                    |
| `product_price_text`                                                                       | The product's price now, as Lazada shows it (`$15.90`). *When present*: empty for a product not on sale |
| `product_status`                                                                           | Lazada's status code for the product: `1` for a product on sale                                         |
| `rating`                                                                                   | Stars, 1 to 5                                                                                           |
| `product_stars`, `seller_stars`, `delivery_stars`                                          | The buyer's separate stars for the product, the seller and the delivery                                 |
| `review_text`                                                                              | The review's text. Empty for a review with stars only                                                   |
| `review_aspects`                                                                           | *When present*: the parts written under Lazada's prompts, as `{aspect, text}`                           |
| `review_tags`                                                                              | *When present*: the tags the buyer picked ("Does not match description")                                |
| `review_date`                                                                              | The date it was written (`YYYY-MM-DD`). Empty when Lazada shows only "2 weeks ago"                      |
| `review_time_text`                                                                         | The date exactly as Lazada shows it                                                                     |
| `purchase_date`, `purchase_time_text`                                                      | The date the buyer bought the product (`YYYY-MM-DD`), and as Lazada shows it                            |
| `reviewer_name`                                                                            | The reviewer's display name, often partly hidden by Lazada (`J***n`)                                    |
| `reviewer_id`                                                                              | Lazada's id for the reviewer                                                                            |
| `reviewer_anonymous`                                                                       | Whether the reviewer posted anonymously                                                                 |
| `reviewer_avatar`                                                                          | *When present*: a link to the reviewer's profile photo                                                  |
| `verified_purchase`                                                                        | Whether Lazada marks the review as from a buyer                                                         |
| `variant`, `sku_id`                                                                        | The variant the reviewer bought                                                                         |
| `likes`, `dislikes`                                                                        | How many people marked the review helpful, or not                                                       |
| `views`                                                                                    | How many times the review was viewed, as Lazada counts it                                               |
| `comment_count`                                                                            | How many comments the review has                                                                        |
| `relevance_score`                                                                          | Lazada's relevance score for the review (what the relevance order sorts by)                             |
| `images`                                                                                   | Links to the reviewer's photos                                                                          |
| `video_url`, `video_cover_url`                                                             | *When present*: the reviewer's video and its cover picture                                              |
| `follow_ups`                                                                               | *When present*: the buyer's later review of the same purchase, as `{text, days_after_use}`              |
| `seller_reply`                                                                             | *When present*: the seller's reply                                                                      |
| `seller_reply_time_text`, `seller_reply_likes`                                             | *When present*: when the seller replied, as Lazada shows it ("3 years ago"), and the reply's likes      |
| `seller_id`                                                                                | Lazada's id for the seller                                                                              |
| `product_rating_average`                                                                   | The product's average stars                                                                             |
| `product_rating_count`, `product_review_count`                                             | How many ratings and reviews the product has                                                            |
| `product_star_counts`                                                                      | How many ratings the product has at each star, `"1"` to `"5"`                                           |
| `product_hidden_review_count`                                                              | How many of them Lazada hides from everyone                                                             |
| `product_local_review_count`                                                               | How many were written on this country's store                                                           |
| `product_reviews_with_photos`, `product_reviews_with_videos`, `product_reviews_with_media` | How many reviews of the product have photos, videos, or either                                          |
| `product_photo_count`, `product_video_count`, `product_media_count`                        | The product's review photos, videos and media, as Lazada counts them                                    |
| `list_total`                                                                               | How many reviews Lazada says the product has for the star rating you chose, hidden ones included        |

Not included: the product's full details (description, specifications,
stock), and other buyers' comments on a review (only their count).

### How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

You pay for what you get:

- **$1 per 1,000 reviews** ($0.001 a review). Each review is charged once per run.
- No start fee, and nothing per product.

So 200 reviews from each of 5 products cost $1. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every review saved so far.

### How long does a run take?

Expect a few hundred reviews a minute. In testing, 2,054 reviews of four
products took about 6 minutes.

### Good to know

- **Lazada shows at most 1,000 reviews of a product in one order**, and often
  fewer than the count on the product page: some reviews are hidden from
  everyone. On a product with 885 ratings, 483 reviews could be read, the
  same 483 newest first, by relevance and one star rating at a time.
- **A product with more than 1,000 visible reviews:** read it once in each
  order and remove repeats by `review_id`. On a product with 3,801 ratings,
  each order stopped at 1,000 and the two together reached 1,309 different
  reviews.
- **Check your links first.** A link that is not a Lazada product link stops
  the run before anything is read, and the message names it.
- **One product that cannot be read does not stop the run.** The other
  products carry on, and the run's status lists the products that could not
  be read. The run fails only when no product could be read.
- **No reviews is not an error.** A product with no written reviews saves
  nothing.
- **Running it daily?** Remove repeats by `review_id`.

### More Actors from us

- [AliExpress Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/aliexpress-products-scraper): Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- [Amazon Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/amazon-products-scraper): Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- [App Store Reviews Scraper: All Reviews, Not 500](https://apify.com/luzivanlt/app-store-reviews-scraper): Every written App Store review of an app, not just the newest 500.
- [Facebook Ads Library Scraper: Meta Ads by Keyword or Page](https://apify.com/luzivanlt/facebook-ads-library-scraper): Meta Ad Library ads by keyword, Page or Ad Library link, with text, images, videos and dates.
- [Facebook Comments Scraper: With Replies](https://apify.com/luzivanlt/facebook-comments-scraper): Comments and replies from public Facebook posts, reels and videos, with reactions by type.
- [Facebook Pages Scraper: Contacts, Followers & Ratings](https://apify.com/luzivanlt/facebook-pages-scraper): Facebook Page details from links: exact follower count, phone, email, address, websites.

### Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with `POST /v2/acts/…/runs` and read its dataset):

```text
POST https://api.apify.com/v2/acts/luzivanlt~lazada-reviews-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
```

With the sample input as its JSON body:

```json
{
  "startUrls": [
    {
      "url": "https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html"
    },
    {
      "url": "https://www.lazada.vn/products/-i2212465644-s10571847460.html"
    }
  ],
  "maxReviewsPerProduct": 50,
  "sortBy": "newest",
  "starRating": "all"
}
```

Its inputs, in the order of the input form:

| Input                                            | What it takes                                                                                                                                                                                                      | Default    |
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- |
| `startUrls` (Product links)                      | Links to Lazada product pages, from any of the six stores (lazada.vn, lazada.sg, lazada.com.my, lazada.com.ph, lazada.co.th, lazada.co.id), e.g. https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html. | —          |
| `maxReviewsPerProduct` (Max reviews per product) | Stop reading a product after this many reviews, from 1 to 1,000; default 100 (the form starts at 50).                                                                                                              | `100`      |
| `sortBy` (Order)                                 | Newest reviews first, or Lazada's own relevance order, e.g. newest (the default).                                                                                                                                  | `"newest"` |
| `starRating` (Star rating)                       | Only reviews with this many stars, or all reviews: all, 1, 2, 3, 4 or 5; default all.                                                                                                                              | `"all"`    |

Apify's MCP server, `https://mcp.apify.com`, lists it as `luzivanlt/lazada-reviews-scraper`. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=luzivanlt/lazada-reviews-scraper"
    }
  }
}
```

The client signs in with OAuth, or add `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }`.

Charged per review delivered; the sample input above costs at most $0.10.

### FAQ

**Do I need a Lazada account or cookies?**
No. The Actor reads the reviews anyone can see on the product page.

**Can I get product details or prices?**
Each review row carries the product's title, category, rating summary and,
when Lazada shows one, its current price. For full product details, this
Actor is not the tool: it reads reviews only.

**Can I run it from my own code, on a schedule, or with other apps?**
Yes. Like any Apify Actor, you can start it through the Apify API, run it on a
schedule, and connect it to other apps with Apify's integrations and webhooks.

### Is it legal to scrape Lazada?

This Actor reads only reviews that anyone can see without logging in. The
results include reviewers' display names, Lazada ids and profile photos,
which can be personal data protected by laws such as the GDPR or Singapore's
PDPA. Only collect personal data when you have a legitimate reason to, and
check Lazada's terms and the laws that apply to you. If you are unsure, ask a
lawyer.

### Support

Found a problem or missing a feature? Open an issue on the **Issues** tab and
include the run's link.

***

This Actor is not affiliated with, endorsed by or sponsored by Lazada.

# Changelog

This Actor's version history is a separate document: https://apify.com/luzivanlt/lazada-reviews-scraper/changelog.md

# Actor input Schema

## `startUrls` (type: `array`):

Links to Lazada product pages, from any of the six stores (lazada.vn, lazada.sg, lazada.com.my, lazada.com.ph, lazada.co.th, lazada.co.id), e.g. https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html. Required. The number after -i is the product; an itemId= link works too, and tracking parameters are fine. Shop, category and search links are refused.

## `maxReviewsPerProduct` (type: `integer`):

Stop reading a product after this many reviews, from 1 to 1,000; default 100 (the form starts at 50). Lazada shows at most 1,000 reviews of a product in one order. Each review is charged once per run ($1 per 1,000 reviews), so this caps each product's cost. Example: 200 reviews cost at most $0.20.

## `sortBy` (type: `string`):

Newest reviews first, or Lazada's own relevance order, e.g. newest (the default). For a product with more than 1,000 visible reviews, read it once in each order and remove repeats by review_id.

## `starRating` (type: `string`):

Only reviews with this many stars, or all reviews: all, 1, 2, 3, 4 or 5; default all. It applies to every product in the run. e.g. 1 for one-star reviews only. No reviews is not an error: a product with none to read saves nothing.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html"
    },
    {
      "url": "https://www.lazada.vn/products/-i2212465644-s10571847460.html"
    }
  ],
  "maxReviewsPerProduct": 50,
  "sortBy": "newest",
  "starRating": "all"
}
```

# Actor output Schema

## `reviews` (type: `string`):

Every review the run saved, one row per review.

## `allFields` (type: `string`):

The same rows with every field.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html"
        },
        {
            "url": "https://www.lazada.vn/products/-i2212465644-s10571847460.html"
        }
    ],
    "maxReviewsPerProduct": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("luzivanlt/lazada-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [
        { "url": "https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html" },
        { "url": "https://www.lazada.vn/products/-i2212465644-s10571847460.html" },
    ],
    "maxReviewsPerProduct": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("luzivanlt/lazada-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.lazada.sg/products/pdp-i3349769802-s22409913565.html"
    },
    {
      "url": "https://www.lazada.vn/products/-i2212465644-s10571847460.html"
    }
  ],
  "maxReviewsPerProduct": 50
}' |
apify call luzivanlt/lazada-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,luzivanlt/lazada-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/V0K5pQi7p0SyKSzCI/builds/RneAHHqWHklFAYCgx/openapi.json
