# Shopee Scraper (`lergassy/shopee-scraper`) Actor

Extract Shopee product data from all 11 marketplaces without a browser: prices, discounts, ratings, units sold, shipping location, sellers and shops in Indonesia, Vietnam, Thailand, Brazil and more. Export data, run via API, schedule runs, or integrate with AI workflows.

- **URL**: https://apify.com/lergassy/shopee-scraper.md
- **Developed by:** [Matvey](https://apify.com/lergassy) (community)
- **Categories:** E-commerce, Automation, AI
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.80 / 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.
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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

**Shopee Scraper** extracts public **Shopee product data** from all **11 Shopee marketplaces** — Indonesia, Singapore, Malaysia, Philippines, Thailand, Vietnam, Taiwan, Brazil, Mexico, Colombia and Chile — without the official API and **without running a browser**. Get product cards from any keyword search, category or shop, plus full product detail: **description, brand, price, discount, rating, image gallery, category path and seller reputation**. No login, no API key, no Shopee developer account. Export to JSON, CSV or Excel, call it from the API, schedule runs, or plug it into n8n, Make, Zapier, Google Sheets or an AI agent through MCP.

### What is Shopee Scraper?

Shopee is the largest e-commerce marketplace in Southeast Asia and one of the fastest growing in Latin America. It has no public product API, and in mid-2026 Shopee moved every product page to a client-rendered app whose internal API is guarded by a JavaScript-signed token. Because of that, most Shopee scrapers today return only what a product card shows and report description, brand and gallery as "browser only".

This Actor takes the other route: it reads the **server-rendered version of the page** that Shopee returns to crawlers. Listing pages carry the full product card — title, price, original price, discount, rating, units sold, shipping location and badges — over plain HTTP, with no browser and no token, so a run of 40 products costs a fraction of a cent and finishes in under a minute.

| Mode | What you get | Input |
|---|---|---|
| 🔍 **Products from search** | Product cards: title, price, original price, discount %, rating, units sold, shipping location, badges, image, position | keywords, search URLs, category URLs |
| 📦 **Product details** | Category path, gallery size and, when Shopee serves its structured record, description, brand, price, availability, rating count and the seller with rating and response rate | product URLs or `shopId/itemId` |
| 🏪 **Shop** | Shop profile (name, username, rating, rating count, product count, logo) and the products on its page | shop URL or username |

Every row carries `country`, `marketplace`, `currency`, `shopId` and `itemId`, so a single dataset can hold several countries at once.

### Supported Shopee marketplaces

| Country | Code | Domain | Currency |
|---|---|---|---|
| 🇮🇩 Indonesia | `ID` | shopee.co.id | IDR |
| 🇸🇬 Singapore | `SG` | shopee.sg | SGD |
| 🇲🇾 Malaysia | `MY` | shopee.com.my | MYR |
| 🇵🇭 Philippines | `PH` | shopee.ph | PHP |
| 🇹🇭 Thailand | `TH` | shopee.co.th | THB |
| 🇻🇳 Vietnam | `VN` | shopee.vn | VND |
| 🇹🇼 Taiwan | `TW` | shopee.tw | TWD |
| 🇧🇷 Brazil | `BR` | shopee.com.br | BRL |
| 🇲🇽 Mexico | `MX` | shopee.com.mx | MXN |
| 🇨🇴 Colombia | `CO` | shopee.com.co | COP |
| 🇨🇱 Chile | `CL` | shopee.cl | CLP |

Prices are returned in the marketplace's own currency and are never converted.

### What data can Shopee Scraper extract?

#### 🔍 Product cards

| Field | Example |
|---|---|
| `title` | `Apple iPhone 15 128GB, Pink` |
| `price` / `originalPrice` / `discountPercent` | `12499000` / `14499000` / `14` |
| `currency` | `IDR` |
| `rating` | `4.9` |
| `soldQuantity` | `10000` |
| `location` | `Jakarta Barat` |
| `labels` | `["Murah Mantap", "Garansi Harga Terbaik"]` |
| `shopId` / `itemId` | `241308147` / `22982495280` |
| `url` / `imageUrl` | product link, main picture |
| `position` / `page` / `searchTerm` | `1` / `0` / `iphone 15` |
| `country` / `marketplace` | `ID` / `Indonesia` |

#### 📦 Product details

When Shopee serves the structured product record for a page, the row carries `description` (the full seller description, thousands of characters), `brand`, `price`, `originalPrice`, `availability`, `condition`, `rating`, `ratingCount`, `images`, `imageCount`, `breadcrumb`, `categoryPath` and a `seller` object with `name`, `username`, `url`, `logo`, `rating`, `ratingCount`, `productCount`, `chatResponse` and `location`.

Shopee serves that record only part of the time, and the Actor retries each page from several IP addresses before giving up. When it still does not arrive, the row comes back with `partial: true` and whatever the page does carry — title, category path and gallery size — plus a `note` explaining what is missing, so a run never silently drops a product. **For prices and ratings at scale, use search, category or shop mode: product cards always carry them.**

#### 🏪 Shops

`name`, `username`, `url`, `rating`, `ratingCount`, `productCount`, `logo`, `country`, plus the products listed on the shop page as normal product rows.

### How much does it cost to scrape Shopee?

The Actor uses Apify's **pay-per-event** pricing, so you pay for results and nothing per page or per proxy gigabyte.

| Event | Price | Per 1,000 |
|---|---|---|
| Product (search card, category, shop) | $0.002 | **$2** |
| Product detail (product page) | $0.004 | **$4** |

Because no browser is involved, a run of 40 products finishes in well under a minute and costs a fraction of a cent in platform usage. The **Apify Free plan** ($5 monthly credit) is enough for roughly 2,500 product cards or 1,250 full product records every month.

### How to scrape Shopee

1. Open **Shopee Scraper** on Apify and click **Try for free**.
2. Choose **What to scrape** — for example *Products from search*.
3. Pick the **Country** (Indonesia by default).
4. Enter **Search keywords**, or paste **Shopee URLs**: product links, search results, category pages or shops. Links from different countries can be mixed in one run.
5. Set **Max products**, optionally turn on **Fetch full product details**, and click **Start**.
6. Open the **Output** tab and download the dataset as JSON, CSV, Excel or XML, or read it through the API.

### ⬇️ Input

![Shopee Scraper input form: mode, country, search keywords, Shopee URLs, max products, sorting](https://raw.githubusercontent.com/lergassy/apify-actor-assets/main/shopee/shopee-scraper-input-form.png)

Search Indonesia for two keywords, best selling first:

```json
{
  "mode": "search",
  "country": "ID",
  "searchTerms": ["iphone 15", "samsung s24"],
  "sortBy": "sales",
  "maxItems": 200
}
```

Full detail for specific products (any country, product URL or `/product/shopId/itemId`):

```json
{
  "mode": "product",
  "startUrls": [
    "https://shopee.co.id/Apple-iPhone-15-256GB-Pink-i.241308147.23982497018",
    "https://shopee.com.br/product/1163374404/24096063243"
  ]
}
```

A category page in Vietnam and a shop in Singapore in one run:

```json
{
  "startUrls": [
    "https://shopee.vn/Điện-Thoại-cat.84",
    "https://shopee.sg/shopeeofficial"
  ],
  "maxItems": 100
}
```

Search plus enrichment, where every card is opened for its full record:

```json
{
  "country": "MY",
  "searchTerms": ["air fryer"],
  "maxItems": 50,
  "enrichProducts": true
}
```

#### Search filters

`sortBy` (`relevancy`, `sales`, `latest`, `price_asc`, `price_desc`), `minPrice` and `maxPrice` in the marketplace currency. They apply to keyword searches and to listing URLs you paste.

### ⬆️ Output

![Shopee Scraper output table: product, price, previous price, discount, rating, shipping location, country, item ID](https://raw.githubusercontent.com/lergassy/apify-actor-assets/main/shopee/shopee-scraper-output-table.png)

One product card:

```json
{
  "type": "product",
  "title": "Apple iPhone 15 128GB, Pink",
  "url": "https://shopee.co.id/Apple-iPhone-15-128GB-Pink-i.241308147.22982495280",
  "shopId": "241308147",
  "itemId": "22982495280",
  "country": "ID",
  "marketplace": "Indonesia",
  "currency": "IDR",
  "price": 12499000,
  "originalPrice": 14499000,
  "discountPercent": 14,
  "rating": 4.9,
  "soldQuantity": 10000,
  "location": "Jakarta Barat",
  "labels": ["Garansi Harga Terbaik"],
  "imageUrl": "https://down-id.img.susercontent.com/file/id-11134207-7ra0n-mdr868y1rkmn6a",
  "position": 1,
  "searchTerm": "iphone 15",
  "scrapedAt": "2026-09-03T06:28:11.026Z"
}
```

One product detail (description shortened here):

```json
{
  "type": "product_detail",
  "itemId": "23982497018",
  "shopId": "241308147",
  "title": "Apple iPhone 15 256GB, Pink",
  "brand": "Apple",
  "description": "iPhone 15 menghadirkan Dynamic Island, kamera Utama 48 MP, dan USB-C …",
  "currency": "IDR",
  "price": 14749000,
  "originalPrice": 17499000,
  "discountPercent": 16,
  "availability": "InStock",
  "condition": "NewCondition",
  "rating": 4.95,
  "ratingCount": 701,
  "imageCount": 11,
  "breadcrumb": ["Shopee", "Handphone & Aksesoris", "Handphone", "Apple", "Apple iPhone 15 256GB, Pink"],
  "seller": {
    "name": "iBox Official Shop",
    "username": "iboxofficial",
    "rating": 4.94,
    "ratingCount": 442537,
    "chatResponse": 100,
    "location": "KOTA JAKARTA BARAT"
  }
}
```

Rows carry a `type` (`product`, `product_detail`, `shop`, `error`), so one dataset can be filtered in a spreadsheet or in code. Pages that fail are written as `error` rows with the URL and the reason instead of disappearing silently.

### Use cases for Shopee data

#### Price monitoring and repricing

Track `price`, `originalPrice` and `discountPercent` for your own listings and your competitors' on a daily schedule, and feed the dataset into Sheets or your repricing tool.

#### Market research in Southeast Asia

Search a category across Indonesia, Vietnam, Thailand and the Philippines in one run and compare price levels, discount depth, ratings and units sold per market.

#### Product research and sourcing

Units sold on category pages plus rating counts show what actually moves. Full product detail adds the description and brand, so you can shortlist suppliers before contacting them.

#### Seller and shop intelligence

Shop mode returns the shop rating, the number of ratings and the product count, so you can size up a competitor or qualify a supplier.

#### Catalog enrichment

Description, brand, breadcrumb and the image gallery are enough to build product pages or enrich an existing catalog.

#### AI agents and RAG

Flat rows, literal field names and only optional inputs make this Actor easy to call from an agent through the Apify MCP server.

### Integrations

- **API** — start a run and read the dataset with any HTTP client:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lergassy/shopee-scraper").call(run_input={
    "country": "ID", "searchTerms": ["air fryer"], "maxItems": 100
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"], item["currency"])
```

- **JavaScript** — `npm i apify-client`, then `client.actor('lergassy/shopee-scraper').call(input)`.
- **n8n, Make, Zapier, Google Sheets, Airtable, Slack, webhooks** — through the standard Apify integrations.
- **MCP** — add the Apify MCP server to Claude, ChatGPT or Cursor and let the agent call `lergassy/shopee-scraper` with a keyword and a country.

### Errors and troubleshooting

| What you see | What it means | Fix |
|---|---|---|
| `partial: true` on a product row | Shopee did not serve its structured record for that page | Re-run the URL later, or take price and rating from search mode |
| `error` rows for some URLs | The page stayed unavailable after retries | Re-run those URLs; the Actor rotates proxies and usually succeeds on a second attempt |
| `soldQuantity` is null in search mode | Shopee shows units sold on category and shop pages, not on every search card | Use a category URL for units sold |
| `rating` is null on a category page | Category cards omit the star rating | Enable enrichment, or scrape the same product by URL |
| Fewer results than **Max products** | Shopee returns about 40 cards per search page and repeats items across pages | Use several narrower keywords, or a category URL |
| Empty result for a shop | The shop page shows only its featured products | Paste the shop's listing URL, or search with the shop name |

### 🤖 For AI Agents & LLM Apps

Compact reference for agents calling this Actor through the [Apify MCP server](https://mcp.apify.com) or the Apify API (`lergassy/shopee-scraper`).

**Purpose:** returns Shopee listings across nine South-East Asian and Latin
American marketplaces — by search term, by shop or by product URL — with price,
discount, rating, units sold and seller location. Use it to answer "what does this
product cost in Indonesia right now", "who are the top sellers for this query" and
"how did this listing's price move".

**Minimal input:**

```json
{ "searchTerms": ["iphone 15"], "country": "ID", "maxItems": 40 }
```

**Output:** one row per listing — `type`, `partial`, `itemId`, `shopId`, `title`,
`url`, `country`, `marketplace`, `currency`, `price`, `originalPrice`,
`discountPercent`, `rating`, `soldQuantity`, `location`, `imageUrl`,
`categoryPath`, `scrapedAt`. With `enrichProducts` on, rows also carry `brand`,
`description`, `availability`, `ratingCount`, `imageCount` and a `seller` object.
Pages that could not be read arrive as `type: "error"` rows with `error` and `kind`
rather than being dropped silently.

**Behaviors an agent should know:**

- `mode` defaults to `auto`: search terms trigger search mode, URLs trigger product
  or shop mode. Set it explicitly only to override that.
- `country` selects the marketplace and therefore the currency. Prices are always in
  the marketplace's own currency — never compare `price` across countries without
  converting.
- `maxItems` (default 40) caps rows per search term. `enrichProducts` costs one extra
  page fetch per product, so leave it off when the listing fields are enough.
- Rows with `partial: true` carry only what search results expose. That is not an
  error; it is the cheap path.
- `soldQuantity` is Shopee's own lifetime counter, not sales in a period.
- Anti-bot pressure is real on Shopee: a run may return `error` rows for some pages
  while succeeding on the rest. Check `type` before treating the dataset as complete.

### ❓ FAQ

#### Is it legal to scrape Shopee?

The Actor reads only pages that Shopee publishes to anyone, including the version it serves to search-engine and social-media crawlers. It does not log in, does not touch buyer accounts and collects no personal data. You remain responsible for using the data in line with local law and Shopee's terms; consult a lawyer for your specific case.

#### Do I need a Shopee API key or an account?

No. Shopee has no public product API, and this Actor never authenticates.

#### Does it use a browser?

No. That is why it is fast and cheap. Everything is plain HTTP against the server-rendered pages.

#### Why is product detail sometimes partial?

Since mid-2026 Shopee renders product pages in the browser and guards the internal API with a JavaScript-signed token. The crawler version of the page carries the structured product record only part of the time. This Actor retries from several IP addresses and, if the record still does not arrive, returns what the page does carry with `partial: true` instead of failing. Product cards from search, category and shop pages are unaffected and always carry price, rating and discount.

#### Can I scrape several countries in one run?

Yes. Keyword searches use the selected country, and every URL keeps its own marketplace. Each row records `country`, `marketplace` and `currency`.

#### How many products can one search return?

Shopee serves about 40 cards per search page and reshuffles results between pages, so a single keyword realistically yields a few hundred unique products. Category URLs and several narrower keywords go deeper.

#### Does it return customer reviews?

Not today. Reviews load from the token-signed internal API and are out of scope for a browserless scraper. Ratings and rating counts are included for both products and shops.

#### Can I get per-variant prices and stock?

Shopee does not expose per-variant data on the crawler page. You get the product price, the original price, the discount and availability.

#### Can I use it with the Apify API, MCP or n8n?

Yes, see Integrations. The input is plain JSON and `startUrls` accepts product, search, category and shop links.

### Your feedback

Missing a field, a country or a page type? Open an issue in the **Issues** tab or leave a review — user requests decide what ships next.

### You might also like

| Actor | What it does |
|---|---|
| [Tokopedia Reviews Scraper](https://apify.com/lergassy/tokopedia-reviews-scraper) | Shop reviews from Indonesia's Tokopedia |
| [Mercado Libre Scraper](https://apify.com/lergassy/mercadolibre-scraper) | Products, prices, reviews and deals across 18 Latin American marketplaces |
| [Agoda Reviews Scraper](https://apify.com/lergassy/agoda-reviews-scraper) | Hotel reviews from Agoda and Booking.com |
| [Google Flights Scraper](https://apify.com/lergassy/google-flights-scraper) | Flight prices, airlines and price insights |
| [Email & Phone Verifier](https://apify.com/lergassy/email-phone-verifier) | Checks e-mails and phone numbers in bulk: deliverability, throwaway and role flags, numbering plan, US state and time zone |

# Actor input Schema

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

Choose the data type. <b>Products from search</b> – product cards from keyword search, category or listing URLs. <b>Product details</b> – full product pages with description, brand, gallery and seller. <b>Shop</b> – shop profile and its products. <b>Auto</b> decides by the URL you paste.

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

Shopee marketplace for keyword searches. URLs keep their own country.

## `searchTerms` (type: `array`):

Products to search for, one per line, e.g. <code>iphone 15</code>. Each keyword is searched in the selected marketplace.

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

Any Shopee links: product pages (<code>.../Name-i.123.456</code>), search results, category pages (<code>...-cat.11044458</code>) or shops (<code>shopee.co.id/shopname</code>).

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

Stop after this many products per keyword or URL.

## `enrichProducts` (type: `boolean`):

Open each product page for description, brand, image gallery, category path and seller reputation. Slower and billed per product detail.

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

Order of search results.

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

Minimum price in the marketplace's own currency.

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

Maximum price in the marketplace's own currency.

## `proxyConfiguration` (type: `object`):

Shopee serves pages per region. Residential proxies in the marketplace country give the most stable results.

## `maxConcurrency` (type: `integer`):

Parallel requests.

## Actor input object example

```json
{
  "mode": "auto",
  "country": "ID",
  "searchTerms": [
    "iphone 15"
  ],
  "startUrls": [],
  "maxItems": 40,
  "enrichProducts": false,
  "sortBy": "relevancy",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "maxConcurrency": 3
}
```

# Actor output Schema

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

One row per Shopee listing: title, price, original price and discount, currency, rating, units sold, seller location, category path and image. Enriched rows add brand, description, stock and the seller block; shop rows summarise a store.

## `csv` (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 = {
    "searchTerms": [
        "iphone 15"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/shopee-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 = {
    "searchTerms": ["iphone 15"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("lergassy/shopee-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 '{
  "searchTerms": [
    "iphone 15"
  ],
  "startUrls": []
}' |
apify call lergassy/shopee-scraper --silent --output-dataset

```

## MCP server setup

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