# Lazada Product Reviews Scraper (`apt_marble/lazada-product-reviews-scraper`) Actor

Export customer reviews for any Lazada product in six countries: stars, text, date, variant, helpful votes, photos and seller replies. Paste product links or item IDs. No login, no cookies.

- **URL**: https://apify.com/apt_marble/lazada-product-reviews-scraper.md
- **Developed by:** [Hamza](https://apify.com/apt_marble) (community)
- **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 Product Reviews Scraper

Read what buyers really say about any Lazada product. Paste product links or item IDs and get one row per review with the stars, the text, the date, the variant bought, helpful votes, photos and the seller's reply.

**No login. No cookies. No browser.** Results can be downloaded as JSON, CSV, Excel or HTML, or read through the Apify API.

### What you can do with it

- Find recurring complaints in the 1 and 2 star reviews.
- Quote real buyer language from 5 star reviews for your listings.
- Compare competitor products by what customers praise and dislike.
- Monitor new reviews on your own products.
- Feed review text into sentiment and quality analysis.

### Supported marketplaces

| Code | Country |
|---|---|
| SG | Singapore |
| MY | Malaysia |
| TH | Thailand |
| PH | Philippines |
| ID | Indonesia |
| VN | Vietnam |

### How to use it

1. Open the **Input** tab and fill in the first field. The rest is optional and already prefilled.
2. Click **Start**.
3. Open the **Output** tab. The first column is a thumbnail. Export the table or connect it to your tools.

### Input

| Field | Required | What it does |
|---|---|---|
| Products (`products`) | Yes | Product links or item IDs, one per line. Country is read from a full link. |
| Country (`country`) | No, default SG | One of SG, MY, TH, PH, ID, VN. Used for plain item IDs. |
| Star filter (`stars`) | No, default all | `all`, `5`, `4`, `3`, `2` or `1`. |
| Sort by (`sort`) | No, default relevant | `relevant` or `recent`. |
| Maximum reviews per product (`maxReviews`) | No, default 20 | Up to 5000 per product. |

#### Example input

```json
{
  "products": [
    "https://www.lazada.sg/products/pdp-i3070541264.html"
  ],
  "stars": "all",
  "sort": "recent",
  "maxReviews": 50
}
```

#### Another example

```json
{
  "products": [
    "5133872551",
    "https://www.lazada.co.id/products/pdp-i5133872551.html"
  ],
  "country": "ID",
  "stars": "1",
  "maxReviews": 100
}
```

### Output

Every review is one row. Fields Lazada does not provide are left out of that row instead of being filled with empty values.

| Field | Meaning |
|---|---|
| `image` | First photo the reviewer attached (shown as a thumbnail). Left out when there is no photo. |
| `reviewId` | Lazada review ID. |
| `itemId` | Lazada item ID of the reviewed product. |
| `productUrl` | Link to the product page on Lazada. |
| `rating` | Stars given, 1 to 5. |
| `title` | Review headline, when the reviewer wrote one. |
| `text` | Review text. |
| `reviewedAt` | When the review was written (ISO time). |
| `purchasedAt` | When the reviewer bought the item, when shown. |
| `reviewerName` | Reviewer display name as shown by Lazada. |
| `reviewerId` | Reviewer ID, when provided. |
| `verifiedPurchase` | True when Lazada marks it as a verified purchase. |
| `variant` | Product variant the reviewer bought, for example "Color: Black". |
| `helpfulVotes` | How many people marked the review helpful. |
| `images` | All photos attached to the review. |
| `videos` | Videos attached to the review. |
| `sellerReply` | The seller's reply with its text and date, when there is one. |
| `totalReviews` | How many reviews Lazada lists for this product (with the selected filter). |
| `country` | Marketplace country code. |
| `page` | Review page the record came from. |
| `scrapedAt` | When the record was collected (ISO time). |
| `otherData` | Any further fields Lazada returned for this review, kept as received. |

#### Example output

```json
{
  "image": "https://sg-live.slatic.net/p/review-photo.jpg",
  "reviewId": "123456789",
  "itemId": "3070541264",
  "productUrl": "https://www.lazada.sg/products/pdp-i3070541264.html",
  "rating": 5,
  "text": "Good quality, fast delivery. Exactly as described.",
  "reviewedAt": "2026-07-23T17:00:00.000Z",
  "reviewerName": "J***n",
  "verifiedPurchase": true,
  "variant": "Color: Black",
  "helpfulVotes": 3,
  "images": [
    "https://sg-live.slatic.net/p/review-photo.jpg"
  ],
  "sellerReply": {
    "text": "Thank you for your support!",
    "repliedAt": "2026-07-24T02:00:00.000Z"
  },
  "totalReviews": 613,
  "country": "SG",
  "page": 1,
  "scrapedAt": "2026-10-08T20:00:00.000Z"
}
```

### What happens when something is off

The actor is built to finish cleanly. Problems are explained in the run status message, the log and the `RUN_SUMMARY` record instead of crashing the run.

| Situation | What you get |
|---|---|
| No product link or ID, or one that cannot be read | The run succeeds with no rows and a message with a working example. |
| A product has no reviews or does not exist | That product is skipped with a note in the log and run summary. Other products continue. |
| Values out of range | The value is adjusted to the nearest allowed one and noted in the log. |
| A page fails part way | The run succeeds with the reviews collected so far and a warning. |
| Lazada is temporarily unavailable on the first request | The run ends with a clear explanation. Try again in a few minutes. |

### Good to know

- Lazada returns about 5 reviews per page; the actor reads several pages at the same time to stay fast.
- Reviews are in the language the reviewer wrote them in.
- Reviewer names are shown the way Lazada shows them, usually partly masked.
- Only publicly visible reviews are collected.
- Use the actor responsibly and in line with Lazada's terms and local laws. Only publicly visible data is collected.

# Actor input Schema

## `products` (type: `array`):

Lazada product links or item IDs, one per line. The item ID is the number after "-i" in the product link, for example 3070541264.

## `country` (type: `string`):

Which Lazada marketplace to read. Ignored when you paste a full Lazada link that already shows the country.

## `stars` (type: `string`):

Only collect reviews with this many stars.

## `sort` (type: `string`):

Order of the reviews.

## `maxReviews` (type: `integer`):

Stop after this many reviews for each product. A product may have fewer.

## Actor input object example

```json
{
  "products": [
    "https://www.lazada.sg/products/pdp-i13746727315.html"
  ],
  "country": "SG",
  "stars": "all",
  "sort": "relevant",
  "maxReviews": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (type: `string`):

No description

# 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 = {
    "products": [
        "https://www.lazada.sg/products/pdp-i13746727315.html"
    ],
    "country": "SG",
    "maxReviews": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("apt_marble/lazada-product-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 = {
    "products": ["https://www.lazada.sg/products/pdp-i13746727315.html"],
    "country": "SG",
    "maxReviews": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("apt_marble/lazada-product-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 '{
  "products": [
    "https://www.lazada.sg/products/pdp-i13746727315.html"
  ],
  "country": "SG",
  "maxReviews": 20
}' |
apify call apt_marble/lazada-product-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apt_marble/lazada-product-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/bbFlx2EjMbumy43gB/builds/nCGftFnRSgOZHmCje/openapi.json
