# Shopee Products Scraper — Brazil & Indonesia (`ione_labs/shopee-products-scraper`) Actor

Extract Shopee prices, stock, sales, ratings, images and variations from Brazil & Indonesia. Paste product URLs; no login or cookies needed. Pay $3.77 per 1,000 successful results, plus platform and proxy usage.

- **URL**: https://apify.com/ione\_labs/shopee-products-scraper.md
- **Developed by:** [ione labs](https://apify.com/ione_labs) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 3 total users, 2 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.77 / 1,000 successful product details

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Shopee Products Scraper — Brazil & Indonesia

**From Shopee product URLs to actionable product data: prices, stock, sales, ratings, images, variations, and shop information for Brazil and Indonesia.**

Monitor prices, compare competitors, spot stock changes, and build product research datasets without copying product pages by hand. Choose a country and paste one URL or a batch of known product links; download structured results as JSON, CSV, or Excel.

**Two tested markets. No customer login or cookie setup. One result per unique product. Pay per successful result.**

**$3.77 per 1,000 successfully saved products ($0.00377 per product), plus Apify platform and proxy usage.**

You pay the Actor event fee only for successfully saved products. There is no minimum batch size and no separate Actor start fee. See the **Pricing** tab for the current pricing configuration.

### Why choose this Shopee Product Scraper?

- **Simple input.** Use the same three fields for one product or a batch: `mode`, `country`, and `product`.

- **Brazil and Indonesia support.** The Actor is currently optimized and tested for `shopee.com.br` and `shopee.co.id`.

- **No customer cookie setup.** The Actor manages the sessions required for supported Indonesian and Brazilian product extraction. You do not need to provide Shopee credentials or export browser cookies.

- **Exact-product validation.** Shop ID and item ID are validated against the requested product before a result is accepted.

- **Pay only for successfully saved products.** Failed products do not generate a `product` event fee. Duplicate URLs pointing to the same product are removed within a run.

- **Structured and transparent data.** Prices use normal currency units, unavailable values remain `null`, and `missingFields` and `warnings` help identify incomplete results.

- **Automatic proxy selection.** All cloud runs automatically select a residential proxy for the chosen `country`, for both one product and batches. Proxy usage is billed separately by Apify.

- **API and automation ready.** Run the Actor manually, call it through the Apify API, or use Apify Schedules for recurring product monitoring.

### Quick start

Choose `country: "BR"` or `country: "ID"` and add product URL objects to `product`. The same input format works for one product and batches.

#### Brazil

```json
{
  "mode": "url",
  "country": "BR",
  "product": [
    {
      "url": "https://shopee.com.br/product/1006215031/24207180138"
    }
  ]
}
```

#### Indonesia

```json
{
  "mode": "url",
  "country": "ID",
  "product": [
    {
      "url": "https://shopee.co.id/product/919692407/51864967214"
    }
  ]
}
```

Full Shopee product links ending in `-i.SHOP_ID.ITEM_ID` are also supported.

Tracking parameters are ignored.

Search pages, category pages, shop catalogs, and shortened links are currently not supported.

### What data can be extracted?

The exact fields available depend on the product and Shopee's response.

| Data category | Fields, when available |
| --- | --- |
| Product identity | Product name, product URL, item ID, shop ID, market, currency |
| Pricing | Current price, price range, original price, discount percentage |
| Inventory & demand | Stock, sold count, historical sold count |
| Ratings | Average rating, rating count, rating breakdown, comment count |
| Media | Main image, image gallery, available product videos |
| Shop | Shop name, seller information and available seller flags |
| Variations | Variation names and available options |
| Data quality | Collection timestamp, missing fields, warnings |

For the currently managed Brazil and Indonesia extraction route, **full product descriptions, per-model prices, and review text may not be available**.

A successful product means the requested product was matched and a valid product result was saved. It does **not** mean every optional field is available.

A successfully saved partial result still generates the normal `product` event fee.

### Supported Shopee markets

| Market | Status |
| --- | --- |
| 🇧🇷 Brazil — `shopee.com.br` | Supported and tested |
| 🇮🇩 Indonesia — `shopee.co.id` | Supported and tested |

The Actor is currently optimized for Shopee Brazil and Shopee Indonesia.

Other Shopee markets may be recognized by the URL parser, but they should not be considered officially supported until live extraction has been verified.

Shopee may occasionally request login verification or other session validation. During such periods, extraction can be temporarily unavailable while the managed session is refreshed.

### Example results — complete JSON

Below are complete product records from successful Apify cloud runs on September 23, 2026: one Brazil result and one Indonesia result. Every field and nested array from each saved dataset record is included, without omitted fields or shortened lists. These are the Actor's normalized JSON results, not raw Shopee network responses.

Values are historical snapshots and will change. `null`, empty arrays, `missingFields`, and `warnings` are included exactly as returned so you can see both the available data and the source limitations.

#### Brazil (BRL)

```json
{
  "schemaVersion": 1,
  "productKey": "BR:1006215031:24207180138",
  "itemId": "24207180138",
  "shopId": "1006215031",
  "url": "https://shopee.com.br/product/1006215031/24207180138",
  "market": "BR",
  "currency": "BRL",
  "name": "Relógio Digital LED Quadrado Moderno e Elegante, Pulseira de Borracha para Estudantes, Adultos e Casais Versáteis",
  "description": null,
  "brand": "",
  "categoryId": "100534",
  "categoryBreadcrumb": [],
  "image": "https://down-br.img.susercontent.com/file/sg-11134201-7raux-ma9naw8xorr9a3",
  "images": [
    "https://down-br.img.susercontent.com/file/sg-11134201-7raux-ma9naw8xorr9a3",
    "https://down-br.img.susercontent.com/file/sg-11134201-7qvdj-lf962li7eenj6c",
    "https://down-br.img.susercontent.com/file/sg-11134301-7rdwl-lxcfk84ee8v45c",
    "https://down-br.img.susercontent.com/file/sg-11134201-7qvdu-lf962i4oc9df75",
    "https://down-br.img.susercontent.com/file/sg-11134201-7qvg1-lf962htauawf2e",
    "https://down-br.img.susercontent.com/file/sg-11134201-7qvg0-lf962m8ubfe675",
    "https://down-br.img.susercontent.com/file/sg-11134201-7qvf8-lg4ufo4m7j7qa8",
    "https://down-br.img.susercontent.com/file/sg-11134201-7qvd3-lf962l73unozdc",
    "https://down-br.img.susercontent.com/file/sg-11134301-7rdwu-lxlzkto3fcxgc9"
  ],
  "price": 7.11,
  "priceMin": 7.11,
  "priceMax": 7.11,
  "priceBeforeDiscount": 38.37,
  "discountPercent": 81,
  "stock": 313,
  "sold": 1000,
  "historicalSold": 20000,
  "rating": 4.596882898062342,
  "ratingCount": 9496,
  "ratingBreakdown": [
    421,
    215,
    453,
    593,
    7814
  ],
  "commentCount": 8607,
  "likedCount": 13578,
  "shopName": "Choice Oficial",
  "shopLocation": "",
  "isOfficialShop": false,
  "isPreferredSeller": false,
  "condition": null,
  "createdAt": "2024-01-08T06:33:38Z",
  "tierVariations": [
    {
      "name": "Cor",
      "options": [
        "Preto - Vermelho",
        "Lança preta",
        "Ouro preto",
        "Platina",
        "Ouro branco",
        "Preto - Azul",
        "Preto - prata",
        "Branco - Prata"
      ],
      "images": [
        "https://down-br.img.susercontent.com/file/sg-11134301-7rd4a-lv2srmev0l9f19",
        "https://down-br.img.susercontent.com/file/sg-11134301-7rdye-lxcfkj7y5k9689",
        "https://down-br.img.susercontent.com/file/sg-11134301-7rd5o-lv2srtuw5r4942",
        "https://down-br.img.susercontent.com/file/sg-11134201-7qvdj-lf962li7eenj6c",
        "https://down-br.img.susercontent.com/file/sg-11134301-7rdxc-lxkx19qw1z8ff5",
        "https://down-br.img.susercontent.com/file/sg-11134301-7rd4e-lv2ss1ucfp341c",
        "https://down-br.img.susercontent.com/file/sg-11134301-7rd6l-lv2ss5n4wxc0e4",
        "https://down-br.img.susercontent.com/file/sg-11134201-7qve5-lf962pfzmxbq53"
      ]
    }
  ],
  "models": [],
  "attributes": [],
  "videos": [],
  "enriched": false,
  "scrapedAt": "2026-09-23T09:29:28.584Z",
  "reviews": [],
  "reviewsFetched": 0,
  "reviewStatus": "not-requested",
  "warnings": [
    "Affiliate product card: full description, model prices and review text are not provided by this source."
  ],
  "missingFields": [
    "description"
  ]
}
```

#### Indonesia (IDR)

```json
{
  "schemaVersion": 1,
  "productKey": "ID:919692407:51864967214",
  "itemId": "51864967214",
  "shopId": "919692407",
  "url": "https://shopee.co.id/product/919692407/51864967214",
  "market": "ID",
  "currency": "IDR",
  "name": "ADVAN V11 Tablet AI Gemini 11\" FHD IPS | RAM 6+6GB ROM 128GB | Keyboard Detachable | 4G LTE Dual SIM | Baterai 7200mAh",
  "description": null,
  "brand": "",
  "categoryId": "100013",
  "categoryBreadcrumb": [],
  "image": "https://down-id.img.susercontent.com/file/id-11134207-81zth-msyy8ykswzk88e",
  "images": [
    "https://down-id.img.susercontent.com/file/id-11134207-81zth-msyy8ykswzk88e",
    "https://down-id.img.susercontent.com/file/id-11134207-81ztd-mr6yvl2amznoa8",
    "https://down-id.img.susercontent.com/file/id-11134207-81ztg-mr6yvl2lwxs1ee",
    "https://down-id.img.susercontent.com/file/id-11134207-81zti-mr6yvl2lycch07",
    "https://down-id.img.susercontent.com/file/id-11134207-81zth-mr6yvl2lzqwx65",
    "https://down-id.img.susercontent.com/file/id-11134207-81zth-mr6yvl2m3ym946",
    "https://down-id.img.susercontent.com/file/id-11134207-81zth-mr6yvl2m2k1ted",
    "https://down-id.img.susercontent.com/file/id-11134207-81zth-mr6yvl2m5d6p35",
    "https://down-id.img.susercontent.com/file/id-11134207-81ztq-msdzkmpvwidh70"
  ],
  "price": 2599000,
  "priceMin": 2599000,
  "priceMax": 2599000,
  "priceBeforeDiscount": 9999000,
  "discountPercent": 0,
  "stock": 169,
  "sold": 830,
  "historicalSold": 1000,
  "rating": 4.856893542757417,
  "ratingCount": 573,
  "ratingBreakdown": [
    10,
    3,
    8,
    17,
    535
  ],
  "commentCount": 573,
  "likedCount": 4418,
  "shopName": "Advan Notebook Official Store ",
  "shopLocation": "KAB. TANGERANG",
  "isOfficialShop": true,
  "isPreferredSeller": false,
  "condition": null,
  "createdAt": "2026-07-28T06:27:15Z",
  "tierVariations": [
    {
      "name": "Unit",
      "options": [
        "TABLET"
      ],
      "images": [
        "https://down-id.img.susercontent.com/file/id-11134207-81ztg-mrguepxbrytedd"
      ]
    }
  ],
  "models": [],
  "attributes": [],
  "videos": [
    {
      "id": "api/v4/11110105/mms/id-11110105-6vfep-mrl3a6ayll3582.16000081786074521.mp4",
      "url": "https://mms.vod.susercontent.com/api/v4/11110105/mms/id-11110105-6vfep-mrl3a6ayll3582.default.mp4",
      "duration": 35,
      "thumbnail": "https://down-id.img.susercontent.com/file/id-11110105-6vfep-mrl3a6ayll3582_cover"
    }
  ],
  "enriched": false,
  "scrapedAt": "2026-09-23T09:24:02.059Z",
  "reviews": [],
  "reviewsFetched": 0,
  "reviewStatus": "not-requested",
  "warnings": [
    "Affiliate product card: full description, model prices and review text are not provided by this source."
  ],
  "missingFields": [
    "description"
  ]
}
```

The default dataset contains **one row per successfully saved product**.

Export the dataset as:

- JSON
- CSV
- Excel
- XML
- other formats supported by Apify

JSON is recommended when you want to preserve nested arrays such as images and variations. CSV or Excel can be convenient for spreadsheet analysis.

`OUTPUT` contains run totals and information about unprocessed URLs.

`ERRORS` contains information about invalid URLs and products that could not be extracted.

If no product can be successfully extracted, the run reports the failure instead of presenting an empty result as a successful extraction.

### Pricing

This Actor uses **pay-per-event pricing**.

| Successfully saved products | Actor event fee |
| ---: | ---: |
| 1 | $0.00377 |
| 100 | $0.377 |
| 1,000 | $3.77 |
| 10,000 | $37.70 |

**You are charged the Actor event fee only when a product is successfully saved.**

Failed products do not generate the `product` event fee.

#### Additional Apify usage

The prices above represent the **Actor event fee only**.

Apify platform usage is charged separately and may include:

- compute
- storage
- data transfer
- Apify Proxy usage

Custom proxies, when used, are billed according to the proxy provider's pricing.

Failed attempts and retries may still consume Apify platform or proxy resources even when no `product` event fee is generated.

There is **no separate Actor start fee**.

Re-running the same product in a new Actor run creates a new product snapshot. A successfully saved product in the new run generates a new `product` event fee.

For larger jobs, consider setting an appropriate product limit and run budget before starting the Actor.

### Batch product collection

Use one country per run. Add each product as an object in `product`:

```json
{
  "mode": "url",
  "country": "BR",
  "product": [
    {
      "url": "https://shopee.com.br/product/1006215031/24207180138"
    },
    {
      "url": "https://shopee.com.br/product/123/456"
    }
  ]
}
```

The second URL demonstrates the format; replace it with an active Brazil product URL.

- `country: "ID"` selects an Indonesia residential proxy and the managed Indonesia session.
- `country: "BR"` selects a Brazil residential proxy and the managed Brazil session.
- Matching valid URLs are processed in input order. Duplicate product URLs are removed within the run.
- URLs from another country, unrelated domains, and invalid product links are skipped before browser navigation. They appear in `ERRORS` with a zero-based `inputIndex`, error code, and reason. A mismatch uses `COUNTRY_MISMATCH`.
- Skipped URLs generate no product event fee. Valid products continue even when another URL is skipped.
- If all URLs are skipped, the run fails before proxy setup or browser startup and saves the reasons in `ERRORS`.

`OUTPUT.savedProducts` counts saved results, `failedProducts` counts extraction failures, and `skippedProducts` counts rejected input entries. `skippedByLimit` reports products beyond the processing limit.

Proxy and session are managed automatically; do not include `proxyConfiguration`, `market`, `url`, or `startUrls` in this input. Session renewal is handled by the Actor owner when required. Each run has its own queue and dataset. Products run sequentially using the crawler browser pool; a batch does not start a separate Actor run for each URL.

### Batch size and processing time

The default processing limit is **1,000 unique valid products**, with at most **10,000 input URLs**. Split larger jobs into batches of up to 1,000 products; `skippedByLimit` reports valid products beyond the processing limit.

Processing time depends on several factors, including:

- Shopee response time
- residential proxy performance
- page loading time
- retries
- session verification
- temporary marketplace restrictions

Products are currently processed sequentially within a run.

For this reason, large batches can take significantly longer than the theoretical request-rate limit.

If processing speed is important, start with a smaller batch to measure the current performance for your target market before launching thousands of product URLs.

### Practical use cases

#### Price monitoring

Collect product snapshots periodically and compare prices over time.

#### Competitor product research

Track known competitor product URLs and compare prices, stock, sales signals, ratings, and other available information.

#### Product sourcing

Create structured datasets from products you are considering for sourcing or resale.

#### Catalog research

Turn a known list of Shopee product URLs into structured JSON, CSV, or Excel data.

#### Product availability monitoring

Schedule repeated runs to monitor stock and product availability.

#### E-commerce data pipelines

Use the Apify API to send structured Shopee product data to your own backend, database, analytics system, or automation workflow.

### Using the Actor through API

This Actor can be integrated into applications through the Apify API.

A typical workflow is:

```text
Your application
      ↓
Apify API
      ↓
Shopee Products Scraper
      ↓
Shopee product
      ↓
Structured dataset
      ↓
Your application / database
```

This makes the Actor suitable for scheduled jobs, backend services, data pipelines, and other automated workflows.

### Data quality

Marketplace data is dynamic.

Prices, stock, ratings, sales figures, seller information, and product availability can change at any time.

When a field cannot be reliably extracted, the Actor prefers returning `null` or reporting the issue through `missingFields` / `warnings` instead of inventing a value.

Always treat marketplace data as a snapshot collected at the reported collection time.

### Frequently asked questions

#### Do I need a Shopee login?

No customer login is required for the managed Brazil and Indonesia extraction route.

You do not need to provide your Shopee username, password, or browser cookies.

The Actor's managed session can still expire or occasionally require verification.

#### Do I need to configure a proxy?

No manual proxy configuration is needed. Both single-product and batch cloud runs use a residential proxy matching `country`. The managed session follows that same country. Proxy usage is charged separately by Apify.

#### Am I charged when a product fails?

There is no `product` event fee when the product is not successfully saved.

However, the attempt may still consume Apify compute, proxy traffic, storage, or other platform resources.

#### Are duplicate URLs charged multiple times?

Duplicate URLs referring to the same product are removed within the same run.

Running the same product again in a separate run is considered a new extraction and can generate a new event fee when successfully saved.

#### Does the Actor return the final checkout price?

No.

The returned product price represents marketplace product data available during extraction.

The final checkout amount can differ because of vouchers, shipping costs, taxes, payment discounts, account-specific promotions, or other Shopee adjustments.

#### Can I extract product reviews?

The managed Brazil and Indonesia route does not currently provide full review text.

Some other product-page routes may expose additional review information on a best-effort basis, but review availability is not guaranteed.

#### Why did my product URL fail?

Common reasons include:

- the product is unavailable
- the URL format is unsupported
- the product has been removed
- Shopee requires login or verification
- the managed session temporarily requires refresh
- the proxy or marketplace request failed

Check `ERRORS`, `warnings`, and `missingFields` for additional information.

Using a proxy does not guarantee marketplace access, and this Actor does not automatically solve CAPTCHAs.

### Responsible usage

Use this Actor only for lawful purposes and in accordance with applicable laws, Shopee's terms, and Apify's platform policies.

Do not use the Actor to collect or process data that you are not legally permitted to access or use.

### Support

If you encounter an issue, open an issue from this Actor's **Issues** tab.

For faster troubleshooting, include:

- the Actor run ID
- the affected product URL
- the target market (Brazil or Indonesia)
- a short description of the problem

**Never include passwords, Shopee cookies, API tokens, proxy credentials, or other secrets in an issue.**

# Changelog

This Actor's version history is a separate document: https://apify.com/ione\_labs/shopee-products-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Extract products from full Shopee product URLs.

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

Select one country for the entire run. This selects the residential proxy country and managed session.

## `product` (type: `array`):

Add one or more objects with a url. Only full Shopee product URLs matching country are processed. Other URLs are skipped and recorded in ERRORS. Up to 10,000 input URLs; default processing limit is 1,000 unique valid products.

## Actor input object example

```json
{
  "mode": "url",
  "country": "ID",
  "product": [
    {
      "url": "https://shopee.co.id/product/919692407/51864967214"
    }
  ]
}
```

# Actor output Schema

## `products` (type: `string`):

No description

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

No description

## `errors` (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 = {
    "country": "ID",
    "product": [
        {
            "url": "https://shopee.co.id/product/919692407/51864967214"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ione_labs/shopee-products-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 = {
    "country": "ID",
    "product": [{ "url": "https://shopee.co.id/product/919692407/51864967214" }],
}

# Run the Actor and wait for it to finish
run = client.actor("ione_labs/shopee-products-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 '{
  "country": "ID",
  "product": [
    {
      "url": "https://shopee.co.id/product/919692407/51864967214"
    }
  ]
}' |
apify call ione_labs/shopee-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ione_labs/shopee-products-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/f42ExGhP45VonIdMo/builds/ioPfniUNETrAanhVH/openapi.json
