# Lazada Product Search Scraper (`apt_marble/lazada-product-search-scraper`) Actor

Search Lazada in Singapore, Malaysia, Thailand, the Philippines, Indonesia or Vietnam. Get prices, discounts, ratings, sellers, locations and every product image. No login, no cookies.

- **URL**: https://apify.com/apt_marble/lazada-product-search-scraper.md
- **Developed by:** [Hamza](https://apify.com/apt_marble) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.20 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Search Scraper

Search Lazada the way a shopper does and export the results as clean, structured data. Choose a country, a keyword, a sort order and an optional price range. Each result comes with its price, discount, rating, seller, location and images.

**No login. No cookies. No browser.** Runs finish in seconds and results can be downloaded as JSON, CSV, Excel or HTML, or read through the Apify API.

### What you can do with it

- Track prices and discounts across Southeast Asia, including mega-sale days.
- Find the cheapest listings for any product or accessory.
- Research sellers, brands and best-sellers before entering a market.
- Build product catalogs and comparison sites.
- Feed price data into spreadsheets, databases and dashboards.

### Supported marketplaces

| Code | Country | Currency |
|---|---|---|
| SG | Singapore | SGD |
| MY | Malaysia | MYR |
| TH | Thailand | THB |
| PH | Philippines | PHP |
| ID | Indonesia | IDR |
| VN | Vietnam | VND |

### How to use it

1. Open the **Input** tab. Type a keyword and pick a country. Everything else is optional.
2. Click **Start**.
3. Open the **Output** tab. The first column is a product thumbnail. Export the table or connect it to your tools.

### Input

| Field | Required | What it does |
|---|---|---|
| Search keyword (`query`) | Yes | What to search for, for example `laptop`. A Lazada search link works too. |
| Country (`country`) | No, default SG | One of SG, MY, TH, PH, ID, VN. Country names such as "Malaysia" also work. |
| Sort by (`sort`) | No, default best | `best`, `price-asc` or `price-desc`. |
| Minimum price / Maximum price (`minPrice`, `maxPrice`) | No | Price range in the local currency. |
| Maximum products (`maxItems`) | No, default 40 | Stop after this many unique products (up to 4000). |

#### Example input

```json
{
  "query": "laptop",
  "country": "SG",
  "sort": "price-asc",
  "maxItems": 40
}
```

#### Another example

```json
{
  "query": "running shoes",
  "country": "MY",
  "sort": "price-asc",
  "minPrice": 50,
  "maxPrice": 300,
  "maxItems": 100
}
```

### Output

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

| Field | Meaning |
|---|---|
| `image` | Main product image (shown as a thumbnail). |
| `id` | Lazada item ID, unique per product. |
| `title` | Product name. |
| `url` | Link to the product page on Lazada. |
| `price` | Current price as a number in the local currency. |
| `priceDisplay` | Price exactly as Lazada shows it. |
| `currency` | Currency code of the marketplace. |
| `originalPrice` | Price before discount, when discounted. |
| `originalPriceDisplay` | Original price as Lazada shows it. |
| `discount` | Discount label, for example "32% Off". |
| `rating` | Average rating out of 5. |
| `reviewCount` | Number of reviews. |
| `soldText` | Units sold label, for example "11 sold". |
| `seller` | Seller or store name. |
| `sellerId` | Lazada seller ID. |
| `sellerUrl` | Link to the seller store. |
| `brand` | Brand name. |
| `brandId` | Lazada brand ID. |
| `location` | Where the item ships from. |
| `inStock` | True when the item is in stock. |
| `sponsored` | True when the result is a paid ad placement. |
| `skuId` | Lazada SKU ID of the listed variant. |
| `images` | All product image links returned by the search. |
| `badges` | Labels such as LazMall or free shipping icons. |
| `highlights` | Short highlight lines shown on the product card. |
| `installment` | Installment offer details, when shown. |
| `sellingPoints` | Selling point labels, when shown. |
| `categories` | Category information, when provided. |
| `otherData` | Any further fields Lazada returned for this product, kept as received. |
| `country` | Marketplace country code. |
| `page` | Result page the product came from. |
| `scrapedAt` | When the record was collected (ISO time). |

#### Example output

```json
{
  "image": "https://filebroker-cdn.lazada.sg/kf/S763e3f42a3ed4122a03d5a474382fea3l.png",
  "id": "13684858525",
  "title": "LYNLIX | Hard Cover Stylish A5 Notebook with Buckle Closure",
  "url": "https://www.lazada.sg/products/pdp-i13684858525.html",
  "price": 7.67,
  "priceDisplay": "$7.67",
  "currency": "SGD",
  "originalPrice": 8.91,
  "discount": "14% Off",
  "rating": 4.8,
  "reviewCount": 30,
  "soldText": "11 sold",
  "seller": "LYNLIX",
  "sellerId": "1767872514",
  "brand": "LYNLIX",
  "location": "China",
  "inStock": true,
  "skuId": "124518627554",
  "country": "SG",
  "page": 1,
  "scrapedAt": "2026-10-02T01:31:39.054Z"
}
```

### 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 |
|---|---|
| Empty keyword or unknown country | The run succeeds with no rows and a message that includes a working example input. |
| No products match | The run succeeds with no rows and a message suggesting what to change. |
| Values out of range, such as too many results | The value is adjusted to the nearest allowed one and the run notes it. |
| A later page fails | The run succeeds with the products collected so far and a warning. |
| Lazada is temporarily unavailable on the first page | The run ends with a clear explanation. Try again in a few minutes. |

### Good to know

- Lazada shows up to about 40 products per page. The actor reads pages until it reaches your limit or the results end.
- Combine price ranges to go deeper than the paging depth Lazada allows for a single search.
- Prices are in the local currency of the chosen country.
- Duplicates are removed automatically.
- Use the actor responsibly and in line with Lazada's terms and local laws. Only publicly visible product data is collected.

# Actor input Schema

## `query` (type: `string`):

What to search for on Lazada, for example "laptop" or "running shoes". A Lazada search link also works.

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

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

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

Order of the results.

## `minPrice` (type: `integer`):

Only products priced at or above this amount, in the local currency. Leave empty for no limit.

## `maxPrice` (type: `integer`):

Only products priced at or below this amount, in the local currency. Leave empty for no limit.

## `maxItems` (type: `integer`):

Stop after this many unique products. Lazada may have fewer to show.

## Actor input object example

```json
{
  "query": "laptop",
  "country": "SG",
  "sort": "best",
  "maxItems": 40
}
```

# 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 = {
    "query": "laptop",
    "country": "SG",
    "maxItems": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("apt_marble/lazada-product-search-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 = {
    "query": "laptop",
    "country": "SG",
    "maxItems": 40,
}

# Run the Actor and wait for it to finish
run = client.actor("apt_marble/lazada-product-search-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 '{
  "query": "laptop",
  "country": "SG",
  "maxItems": 40
}' |
apify call apt_marble/lazada-product-search-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-search-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/0J32WNZ0hz8ukuNag/builds/8ZqaGJoCr4oUnhLQl/openapi.json
