# Shopee Reviews Scraper ⭐ Photos, Videos & Star-Rating Filters (`dz_omar/shopee-reviews-scraper`) Actor

Get Shopee reviews from any shop or product URL in 8 markets: star rating, review text, quality/seller/delivery sub-ratings, photos, videos, variation, reviewer and seller reply. Filter by stars, text or media. No Shopee account needed.

- **URL**: https://apify.com/dz_omar/shopee-reviews-scraper.md
- **Developed by:** [FlowExtract API](https://apify.com/dz_omar) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 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

## ⭐ Shopee Reviews Scraper — Ratings, Text, Photos & Videos from Any Shop or Product

**[Shopee Reviews Scraper](https://apify.com/dz_omar/shopee-reviews-scraper?fpr=smcx63)** extracts Shopee product and shop reviews into clean, structured rows: the star rating, the written review, the quality / seller / delivery sub-ratings, every photo and video, the variation the buyer ordered, the reviewer and the seller's reply. Paste a shop URL or a product URL from any of 8 Shopee markets and get every review Shopee shows for it — no Shopee account, no cookies, no setup.

Perfect for **e-commerce sellers**, **brand and market researchers**, and **data teams** who need Shopee review data at scale without copying it by hand.

***

### Why scrape Shopee reviews?

Shopee is the largest online marketplace in Southeast Asia and one of the biggest in Brazil and Taiwan, with millions of buyer reviews written every day. Those reviews are the most honest signal of how a product and a seller actually perform — and they are spread across thousands of product pages.

Here are some of the most common use cases:

- **Competitor monitoring**: track what buyers praise and complain about in a rival shop, week after week.
- **Product research**: read the 1-star and 2-star reviews of a product before you source or stock it.
- **Seller reputation**: measure seller service and delivery sub-ratings across a shop's whole catalogue.
- **Sentiment analysis and AI**: feed thousands of real, labelled reviews (text + stars) into your models.
- **Visual quality checks**: collect buyer photos and videos to see what customers actually received.

***

### 🌏 Supported markets

Each market below was confirmed with a real shop's reviews before this listing was published.

| Market | Storefront | Status |
|---|---|---|
| 🇸🇬 Singapore | shopee.sg | ✅ confirmed |
| 🇲🇾 Malaysia | shopee.com.my | ✅ confirmed |
| 🇮🇩 Indonesia | shopee.co.id | ✅ confirmed |
| 🇵🇭 Philippines | shopee.ph | ✅ confirmed |
| 🇹🇭 Thailand | shopee.co.th | ✅ confirmed |
| 🇻🇳 Vietnam | shopee.vn | ✅ confirmed |
| 🇹🇼 Taiwan | shopee.tw | ✅ confirmed |
| 🇧🇷 Brazil | shopee.com.br | ✅ confirmed |

URLs from Mexico, Colombia, Chile and Argentina are accepted, but those markets are not confirmed yet. You can mix URLs from different markets in one run — the market is read from each URL.

***

### What data can Shopee Reviews Scraper extract?

#### ⭐ Rating

- `rating` — the star rating, 1 to 5
- `productQuality`, `sellerService`, `deliveryService` — the three sub-ratings, 1 to 5
- `lowRatingReasons` — the reasons a buyer picked for a low rating (e.g. "Poor quality")
- `reviewTags` — the topic tags a buyer picked (e.g. "Design", "Material")

#### 📝 Review

- `text` — the written review (empty for star-only reviews), and `hasText`
- `imageUrls` — full-size URLs of every photo the buyer attached
- `videoUrls` — URLs of every video the buyer attached (MP4)
- `sellerReply`, `sellerReplyAt` — the seller's public reply, when there is one
- `likeCount` — how many shoppers found the review helpful
- `isHidden` — whether Shopee has hidden the review's text

#### 🛍️ Product & order

- `productId`, `productName`, `productUrl` — the product the review is about
- `variation` — the variation the buyer ordered (colour, size, …)
- `orderId`, `currency`, `isRepeatPurchase`

#### 👤 Reviewer

- `reviewerName` — masked by Shopee when the review is anonymous, and `isAnonymous`
- `reviewerAvatarUrl`
- `buyerRegion`, `isOverseas`

#### 🏪 Shop

- `shopId`, `shopUrl`, `country`

#### 📅 Time

- `createdAt`, `updatedAt` — ISO 8601, UTC

#### 📊 Summary row (one per URL, optional)

- `reviewsCollected`, `reviewsScanned`, `reviewsByStar`, `coverage` — what was read and returned, and whether Shopee's depth limit was reached

***

### ⚙️ How to use Shopee Reviews Scraper

#### Input options

##### `startUrls` — Shopee shop or product URLs

| URL you paste | What you get |
|---|---|
| `https://shopee.sg/shop/276679244` | Every review of the shop, across all its products |
| `https://shopee.com.my/Product-Name-i.345524236.26828374105` | The reviews of that one product |
| `https://shopee.com.br/product/316479116/5055406617` | The reviews of that one product (short form) |

Shopee shows reviews per shop, so for a product URL the Actor reads the shop's reviews and keeps that product's. Several products from the same shop are read in one pass, so adding more products from one shop costs no extra time.

A shop link that uses the shop's name instead of its number (for example `shopee.com.br/carrefour`) is not supported yet — open any of the shop's products and paste that product URL, or use the `/shop/<number>` link.

##### `maxReviewsPerShop` (Integer)

- **Default**: `100`
- Most reviews returned for each URL. `0` returns everything Shopee shows.

##### `starRatings` (Array)

- **Default**: empty (every rating, newest first)
- Only return reviews with these star ratings, e.g. `["1", "2"]` for complaints only.
- Shopee shows roughly the 1,000 most recent reviews per shop. Each star rating you select is read separately and reaches about 1,000 deep on its own, so **selecting all five star ratings reaches up to about 5,000 reviews per shop**.

##### `onlyWithText` / `onlyWithMedia` (Boolean)

- **Default**: `false`
- Skip star-only reviews, or reviews without a photo or video.

##### `includeShopSummary` (Boolean)

- **Default**: `true`
- Adds one summary row per URL with what was scanned and collected.

```json
{
    "startUrls": [
        { "url": "https://shopee.sg/shop/276679244" },
        { "url": "https://shopee.com.my/LABER-LEE-Unisex-Leisure-Shoulder-Bag-Multi-Pocket-Messenger-Shoulder-Bag-Large-Capacity-Nylon-Tablet-Netbook-Umbrella-i.345524236.26828374105" }
    ],
    "maxReviewsPerShop": 500,
    "starRatings": ["1", "2", "3"],
    "onlyWithText": true
}
```

#### 🔐 Authentication

None. The Actor reads the same reviews any shopper sees on Shopee — you never need a Shopee account, a login or cookies.

***

### 💰 Pricing

How much does it cost to scrape Shopee reviews? You pay per review delivered, plus a small fee per run.

| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Review delivered | $0.0030 | $0.0027 | $0.0024 | $0.0021 |
| Run start (per GB of memory) | $0.005 | $0.004 | $0.0035 | $0.003 |

Summary rows and guidance rows are never charged.

**Cost estimate examples:**

- **1,000 reviews** on the FREE plan: ~$3.00 + $0.005 run start
- **1,000 reviews** on the GOLD plan: ~$2.10 + $0.003 run start

> 💡 Tip: set `maxReviewsPerShop` to `10` first to check your URLs before a full run. You can also set a maximum cost per run in the run options — the Actor stops before it goes over.

***

### 📊 Sample output

A real review row (Singapore):

```json
{
    "type": "review",
    "reviewId": "2729298164",
    "country": "SG",
    "shopId": "276679244",
    "shopUrl": "https://shopee.sg/shop/276679244",
    "productId": "3152884068",
    "productName": "Creative Outlier Air Wireless Earbuds (Local Singapore Warranty)",
    "productUrl": "https://shopee.sg/product/276679244/3152884068",
    "variation": "Black",
    "rating": 5,
    "text": "Works well and worth the price, usage as stated for the product",
    "hasText": true,
    "imageUrls": ["https://down-sg.img.susercontent.com/file/25720e19cdfe75d7cb9f615ae08c9925"],
    "videoUrls": [],
    "reviewerName": "mazlinteo",
    "isAnonymous": false,
    "createdAt": "2020-07-23T08:43:28.000Z",
    "sellerReply": null,
    "buyerRegion": "SG",
    "orderId": "47750438544185",
    "currency": "SGD",
    "reviewTags": [],
    "lowRatingReasons": []
}
```

The summary row for a product URL:

```json
{
    "type": "shop-summary",
    "country": "MY",
    "shopId": "345524236",
    "productId": "26828374105",
    "reviewsCollected": 13,
    "reviewsScanned": 1000,
    "reviewsByStar": { "5": 13 },
    "coverage": "Hit Shopee's ~1,000-review limit on the all-stars feed; choose star ratings to reach older reviews.",
    "note": "Product URL: Shopee publishes no per-product feed, so these are the reviews for this product found in the shop-wide feed."
}
```

***

### ❓ Frequently Asked Questions

**Do I need a Shopee account to use this Actor?**
No. It reads the reviews Shopee shows to every visitor. No login, no cookies.

**How much do 1,000 Shopee reviews cost?**
About $3.00 on the FREE plan and $2.10 on GOLD, plus one run-start fee — see the pricing table above. Apify's monthly platform credit covers roughly 1,600 reviews.

**How many reviews can I get per shop?**
Shopee shows about the 1,000 most recent reviews per shop. Select star ratings in `starRatings` to read each star separately — all five together reach up to about 5,000 reviews per shop.

**Can I get the reviews of a single product?**
Yes. Paste the product URL. The summary row tells you how many of the shop's reviews were read to find them.

**Can I scrape several shops or countries in one run?**
Yes. Add as many URLs as you like, from any of the supported markets, in one run.

**Can I get only negative reviews?**
Yes. Set `starRatings` to `["1", "2"]`. Add `onlyWithText: true` to skip star-only ratings.

**Why is a review's text empty?**
Either the buyer left stars only (`hasText: false`), or Shopee has hidden the review (`isHidden: true`).

**What happens with a URL I typed wrong?**
The run does not fail. The URL is skipped, the reason is logged, and the rest of your URLs are still scraped. If no URL is usable, you get one row explaining how to fix the input.

***

### Support

- 🌐 **Website:** [flowextractapi.com](https://flowextractapi.com)
- 📧 **Email:** <flowextractapi@outlook.com>
- 💬 **GitHub:** [FlowExtractAPI](https://github.com/FlowExtractAPI)
- 💼 **LinkedIn:** [flowextract-api](https://www.linkedin.com/in/flowextract-api/)
- 🐦 **X (Twitter):** [@FlowExtractAPI](https://x.com/FlowExtractAPI)
- 📱 **Facebook:** [flowextractapi](https://www.facebook.com/flowextractapi)
- 🎵 **TikTok:** [@flowextractapi](https://www.tiktok.com/@flowextractapi)

### Legal & compliance

- **Public data only** — processes publicly available data.
- **Rate limiting** — respects source-service limits and terms of use.
- **Data protection** — no storage of personal information or unauthorized data collection.
- **Commercial use** — suitable for business intelligence and research.
- No affiliation with or endorsement by Shopee is implied.

***

*Shopee Reviews Scraper — by FlowExtract API. Turn any website into structured data.*

# Changelog

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

# Actor input Schema

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

One URL per line. Confirmed markets: shopee.sg, shopee.com.my, shopee.co.id, shopee.ph, shopee.co.th, shopee.vn, shopee.tw and shopee.com.br. URLs from shopee.com.mx, shopee.com.co, shopee.cl and shopee.com.ar are accepted but not yet confirmed.<br><b>Shop URL</b> (https://shopee.sg/shop/\<shop_id>) returns the shop's reviews across all its products.<br><b>Product URL</b> (the long name form ending in -i.\<shop>.\<item>, or /product/\<shop>/\<item>) returns that product's reviews. Shopee has no per-product review feed, so the Actor scans the shop's feed and keeps the product's reviews; several products from the same shop share one scan.

## `maxReviewsPerShop` (type: `integer`):

Most reviews returned for each shop or product URL. 0 = everything Shopee serves (up to about 1,000 per star rating, so about 5,000 with all five stars selected). The run also stops early if the run's maximum charge is reached first.

## `starRatings` (type: `array`):

Only return reviews with these star ratings. Leave empty for every rating, newest first (Shopee serves about the 1,000 most recent). Each star selected is scanned separately and reaches about 1,000 reviews deep, so selecting all five reaches the deepest history.

## `onlyWithText` (type: `boolean`):

Skip star-only reviews that have no written comment.

## `onlyWithMedia` (type: `boolean`):

Skip reviews that have no photo and no video.

## `includeShopSummary` (type: `boolean`):

Adds one row per URL (type = shop-summary) with how many reviews were scanned and collected, the count per star, and whether Shopee's depth limit was reached.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://shopee.com.my/LABER-LEE-Unisex-Leisure-Shoulder-Bag-Multi-Pocket-Messenger-Shoulder-Bag-Large-Capacity-Nylon-Tablet-Netbook-Umbrella-i.345524236.26828374105"
    }
  ],
  "maxReviewsPerShop": 100,
  "starRatings": [],
  "onlyWithText": false,
  "onlyWithMedia": false,
  "includeShopSummary": true
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://shopee.com.my/LABER-LEE-Unisex-Leisure-Shoulder-Bag-Multi-Pocket-Messenger-Shoulder-Bag-Large-Capacity-Nylon-Tablet-Netbook-Umbrella-i.345524236.26828374105"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dz_omar/shopee-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://shopee.com.my/LABER-LEE-Unisex-Leisure-Shoulder-Bag-Multi-Pocket-Messenger-Shoulder-Bag-Large-Capacity-Nylon-Tablet-Netbook-Umbrella-i.345524236.26828374105" }] }

# Run the Actor and wait for it to finish
run = client.actor("dz_omar/shopee-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://shopee.com.my/LABER-LEE-Unisex-Leisure-Shoulder-Bag-Multi-Pocket-Messenger-Shoulder-Bag-Large-Capacity-Nylon-Tablet-Netbook-Umbrella-i.345524236.26828374105"
    }
  ]
}' |
apify call dz_omar/shopee-reviews-scraper --silent --output-dataset

```

## MCP server setup

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