# TikTok Shop Review Scraper - All 16 Marketplaces (`zen-studio/tiktok-shop-review-scraper`) Actor

Extract every buyer review from any TikTok Shop product: star rating, full text, date, photos, the variant bought and verified-purchase flags. Works across all 16 marketplaces, not just the US, and adds a free product summary with price, shop data and the 1-5 star breakdown.

- **URL**: https://apify.com/zen-studio/tiktok-shop-review-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** E-commerce, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

[![TikTok Shop reviews. 16 markets. Buyer photos. Exact variants. Verified purchases.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/tiktok-shop-review-scraper-hero-5cb6adc6fedc.png)](https://console.apify.com/actors/PsVmeHsn8748GeSDv/input)

From **Zen Studio**, creators of [1688 Wholesale](https://apify.com/zen-studio/1688-wholesale-scraper), ranked #1 for “1688” in Apify Store search, alongside dedicated [Shopee](https://apify.com/zen-studio/shopee-product-scraper) and [Alibaba](https://apify.com/zen-studio/alibaba-scraper) actors.

### Why choose this actor?

**Buyer feedback across 16 markets.** Collect TikTok Shop reviews from the US, UK, Europe, Latin America and Asia using the same output format. Select the product’s marketplace and export its reviews in their original language, with duplicates removed before billing.

**Know exactly what the buyer reviewed.** Keep the purchased variant, buyer photos and verified-purchase flag alongside full review text, star rating and date. Compare feedback by color or model and inspect customer photos alongside written reviews. Photos and variant details are included when available.

**Start with a product or a keyword.** Paste product links or IDs, or enter a keyword to discover products and collect their reviews. For US products, optionally add product and shop details plus the 1–5-star rating breakdown when available, in a separate summary row.

<a href="https://console.apify.com/actors/PsVmeHsn8748GeSDv/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/tiktok-shop-review-scraper-cta-1b9695ad19bc.svg" width="244" height="48" alt="Collect your TikTok Shop product reviews"/></a>

### Try a product

Collect 20 reviews from a US product, with its product summary and optional star breakdown:

```json
{
  "productUrls": [
    "https://shop.tiktok.com/view/product/1731849567724278088"
  ],
  "region": "US",
  "maxReviewsPerProduct": 20,
  "includeProductSummary": true,
  "includeRatingBreakdown": true
}
```

[Open actor input](https://console.apify.com/actors/PsVmeHsn8748GeSDv/input), replace the product link and choose the matching marketplace. Export JSON, CSV or Excel; JSON preserves photo arrays and the rating breakdown. Reviews are billed per unique review delivered. The summary has no review charge; normal dataset-item charges apply.

Collection currently stops after 500 review pages per product, roughly 5,000 reviews before duplicates are removed. A lower review limit controls the size of your trial. Product/shop details and the optional star breakdown are US-only; the breakdown may be unavailable. See [pricing](https://apify.com/zen-studio/tiktok-shop-review-scraper/pricing).

<table><tr><td colspan="5" style="background:#FE2C55;color:#161823;padding:10px 14px;font-size:13px;font-weight:700">Zen Studio · Marketplace Data</td></tr><tr><td style="background:#FFDCE4;padding:10px 9px;border:1px solid #E7BFCB;vertical-align:top;width:20%;min-width:126px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-PsVmeHsn8748GeSDv-Ktzu3u1ZW9-icon.png" width="20" height="20" alt="" style="vertical-align:middle"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/tiktok-shop-review-scraper" style="color:#301822;text-decoration:none;font-weight:700;font-size:13px">TikTok Shop</a></span><br><span style="color:#653448;font-size:12px;white-space:nowrap">You are here</span></td><td style="background:#FFF0F4;padding:10px 9px;border:1px solid #E7BFCB;vertical-align:top;width:20%;min-width:126px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-ghXSMZcW3GxsCrkiR-5hnvsKv4Yt-1688-wholesale-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/1688-wholesale-scraper" style="color:#301822;text-decoration:none;font-weight:700;font-size:13px">1688</a></span><br><span style="color:#653448;font-size:12px;white-space:nowrap">Wholesale products</span></td><td style="background:#FFF0F4;padding:10px 9px;border:1px solid #E7BFCB;vertical-align:top;width:20%;min-width:126px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-FHLdQDoADvB14bAyA-r6ZrVkIHKi-shopee-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/shopee-product-scraper" style="color:#301822;text-decoration:none;font-weight:700;font-size:13px">Shopee</a></span><br><span style="color:#653448;font-size:12px;white-space:nowrap">Products & stock</span></td><td style="background:#FFF0F4;padding:10px 9px;border:1px solid #E7BFCB;vertical-align:top;width:20%;min-width:126px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-TASViBigl6dEv1GaH-RjnHoxkrmo-alibaba-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/alibaba-scraper" style="color:#301822;text-decoration:none;font-weight:700;font-size:13px">Alibaba</a></span><br><span style="color:#653448;font-size:12px;white-space:nowrap">Products & suppliers</span></td><td style="background:#FFF0F4;padding:10px 9px;border:1px solid #E7BFCB;vertical-align:top;width:20%;min-width:126px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-BoK3MbIR9v2fIf6Kc-8getWsTFqJ-xiaohongshu-search-scraper-logo-square.png" width="20" height="20" alt="" style="vertical-align:middle"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/rednote-product-reviews-scraper" style="color:#301822;text-decoration:none;font-weight:700;font-size:13px">RedNote</a></span><br><span style="color:#653448;font-size:12px;white-space:nowrap">Product reviews</span></td></tr></table>

#### Copy to your AI assistant

```text
zen-studio/tiktok-shop-review-scraper on Apify returns one row per TikTok Shop buyer review (rating, text, posted_at ISO 8601, images, variant, verified_purchase, incentivized, country) across 16 marketplaces. Input precedence is productUrls > productIds > searchKeyword; set region to the product's marketplace (default US) or the run finds nothing. Omit maxReviewsPerProduct to collect accessible reviews up to the 500-page ceiling (roughly 5000 before deduplication). For product title, price, sold_count, shop data and the 1-5 rating_breakdown, set includeProductSummary=true and includeRatingBreakdown=true; those enrichments are United States only and the summary row carries no review charge, only the dataset-item fee. reviewsFilter and reviewsSort apply only to the reviews a run collects, not the product's whole history, so rare filters can return fewer rows than requested. Charges: $0.005 per run start plus each unique review delivered, duplicates removed before billing. Full spec: https://api.apify.com/v2/actors/zen-studio~tiktok-shop-review-scraper/builds/default and current pricing: https://apify.com/zen-studio/tiktok-shop-review-scraper
```

### How to scrape TikTok Shop reviews

Give the actor a product URL. Everything else is optional.

```json
{
  "productUrls": ["https://shop.tiktok.com/view/product/1731849567724278088"],
  "maxReviewsPerProduct": 20,
  "includeRatingBreakdown": true
}
```

You can also scrape by product ID, or let the actor find products for you:

```json
{
  "searchKeyword": "wireless earbuds",
  "maxProductsFromSearch": 5,
  "maxReviewsPerProduct": 50,
  "region": "MY"
}
```

#### Input options

| Parameter | Type | Default | Meaning |
|---|---|---|---|
| `productUrls` | array | none | Product pages to collect reviews from. Wins over the other two inputs. |
| `productIds` | array | none | Numeric product IDs. Used when no URLs are given. |
| `searchKeyword` | string | none | Finds products by keyword. Used when no URLs or IDs are given. |
| `maxProductsFromSearch` | integer | 5 | How many matching products to collect reviews for. |
| `region` | string | `US` | Which of the 16 marketplaces the products belong to. |
| `maxReviewsPerProduct` | integer | no user-set limit | Leave empty to collect accessible reviews up to the 500-page collection ceiling. |
| `reviewsFilter` | string | `all` | Keep only 5/4/3/2/1-star reviews, reviews with photos, or verified purchases. |
| `reviewsSort` | string | `recommended` | Recommended, most recent, highest or lowest rating. |
| `includeProductSummary` | boolean | `true` | Adds the per-product row and fills product titles into review rows. |
| `includeRatingBreakdown` | boolean | `false` | Adds the 1-5 star distribution to that summary row. |

Product URLs work in any of their shapes: `shop.tiktok.com/view/product/<id>`, `tiktok.com/shop/pdp/<slug>/<id>` or a bare product ID.

### What data can you extract from TikTok Shop?

One row per review, plus one optional summary row per product.

**Review rows** carry the rating, the full review text, an ISO 8601 date, the reviewer's display name and avatar, whether it was a verified purchase, whether it was incentivized, every review photo, the exact variant bought, and the reviewer's country.

```json
{
  "type": "review",
  "review_id": "7574564812835915575",
  "product_id": "1731849567724278088",
  "product_name": "JBL Vibe Beam 2, True Wireless Noise Cancelling Earbuds",
  "region": "US",
  "rating": 5,
  "text": "Probably one of the best types of wireless earbuds, long battery life, very high sound quality, noise cancellation works perfectly, 10/10",
  "posted_at": "2025-11-19T22:20:43.013000+00:00",
  "reviewer_name": "i**a",
  "reviewer_id": null,
  "reviewer_avatar_url": null,
  "verified_purchase": true,
  "incentivized": false,
  "images": ["https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/8ad45cd1..."],
  "image_count": 1,
  "variant": "Item: Black",
  "country": "US",
  "product_url": "https://shop.tiktok.com/view/product/1731849567724278088"
}
```

**Product summary row** (one per product, no review charge):

```json
{
  "type": "product",
  "product_id": "1731849567724278088",
  "product_name": "JBL Vibe Beam 2, True Wireless Noise Cancelling Earbuds",
  "region": "US",
  "rating_average": 4.5,
  "review_count": 1673,
  "reviews_collected": 20,
  "price": "$77.94",
  "price_amount": 77.94,
  "price_currency": "USD",
  "sold_count": 13667,
  "shop_name": "JBL",
  "shop_rating": "4.7",
  "shop_followers": 487311,
  "rating_breakdown": { "1": 100, "2": 28, "3": 69, "4": 138, "5": 1338 },
  "product_url": "https://shop.tiktok.com/view/product/1731849567724278088"
}
```

TikTok anonymises reviewer names (`i**a`), and some reviews carry no reviewer ID or avatar, so those fields can be `null`. Export to JSON to keep `images` and `rating_breakdown` nested; CSV and Excel flatten them.

Product details, price, shop data and the star breakdown are available for the **United States** marketplace. In other marketplaces, collected reviews still include rating, text, date and available photos, variant and flags.

### Pricing

| Event | When charged | Price |
|---|---|---|
| Actor start | Once per run | $0.005 |
| Review | Each unique review written to the dataset | from $0.79 per 1,000 |
| Dataset item | Each row written, including the product summary row | $0.01 per 1,000 |

Reviews are $1.99 per 1,000 on the free plan and drop by plan, down to $0.79 per 1,000. **Duplicate reviews are removed before you are charged**, so you never pay twice for the same review. The product summary row carries no review charge, only the $0.01-per-1,000 dataset-item fee.

A run collecting 1,000 reviews costs about $0.80 to $2.00 depending on your plan, plus $0.01 in dataset items and the $0.005 start.

### FAQ

**Can I get every review for a product?**
Leave `maxReviewsPerProduct` empty to collect accessible reviews until the source ends or the 500-page collection ceiling is reached. That is roughly 5,000 reviews before duplicates are removed, so larger review histories may be incomplete.

**Which marketplaces are supported?**
Sixteen: US, GB, DE, FR, IT, ES, IE, BR, MX, JP, ID, MY, PH, SG, TH and VN. Reviews come back in the language buyers wrote them in.

**Why did a filtered run return fewer reviews than I asked for?**
Filtering happens across the reviews the run reads, and rare filters (1-star, for example, is often under 10% of a product's reviews) can exhaust the page budget before finding enough matches. You are only charged for the reviews you actually receive.

**Does "most recent" sort the product's whole history?**
No. Sorting applies to the reviews the run collects, not to every review the product has ever received.

**Is the star breakdown always returned?**
It is an optional extra for US products. When it cannot be read the summary row simply omits it, and the review rows are unaffected.

**Do I need a TikTok account or cookies?**
No. No login, no cookies, no browser setup.

**What happens if one product ID is wrong?**
That product is skipped with a warning and the rest of the run continues. You are not charged for it.

**Is there a free tier?**
Free-plan users get 5 runs and up to 50 reviews to try the actor before upgrading.

### Support

Report issues or request features on the **Issues** tab of this actor. Use the collected data responsibly and in line with applicable law and TikTok's terms.

# Actor input Schema

## `productUrls` (type: `array`):

TikTok Shop product pages to collect reviews from. Takes precedence over Product IDs and Search keyword.

## `productIds` (type: `array`):

Numeric product IDs, if you already have them. Used when no Product URLs are given.

## `searchKeyword` (type: `string`):

Find products by keyword and collect reviews for the matches. Used only when no Product URLs or Product IDs are given.

## `maxProductsFromSearch` (type: `integer`):

How many matching products to collect reviews for. Only used when you scrape by search keyword.

## `region` (type: `string`):

Which TikTok Shop marketplace the products belong to. Reviews are written in that market's language.

## `maxReviewsPerProduct` (type: `integer`):

Upper limit of reviews collected per product. Leave empty to collect every review available. You are charged per review returned, so this is also your cost control.

## `reviewsFilter` (type: `string`):

Keep only reviews matching this condition. Filtered runs scan more pages to find matches and may return fewer reviews than the maximum.

## `reviewsSort` (type: `string`):

Order of the collected reviews. Sorting is applied to the reviews this run collects, not to the product's entire review history.

## `includeProductSummary` (type: `boolean`):

Adds one free row per product with its title, price, average rating, total review count and shop details, and fills the product title in on every review row. Product and shop details are available for the United States marketplace.

## `includeRatingBreakdown` (type: `boolean`):

Adds the full 1-5 star distribution to the product summary row. Adds a few seconds per product and is skipped silently if unavailable.

## Actor input object example

```json
{
  "productUrls": [
    "https://shop.tiktok.com/view/product/1731849567724278088"
  ],
  "maxProductsFromSearch": 5,
  "region": "US",
  "maxReviewsPerProduct": 100,
  "reviewsFilter": "all",
  "reviewsSort": "recommended",
  "includeProductSummary": true,
  "includeRatingBreakdown": false
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset of collected product reviews.

# 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 = {
    "productUrls": [
        "https://shop.tiktok.com/view/product/1731849567724278088"
    ],
    "maxProductsFromSearch": 5,
    "region": "US",
    "maxReviewsPerProduct": 100,
    "reviewsFilter": "all",
    "reviewsSort": "recommended"
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/tiktok-shop-review-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 = {
    "productUrls": ["https://shop.tiktok.com/view/product/1731849567724278088"],
    "maxProductsFromSearch": 5,
    "region": "US",
    "maxReviewsPerProduct": 100,
    "reviewsFilter": "all",
    "reviewsSort": "recommended",
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/tiktok-shop-review-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 '{
  "productUrls": [
    "https://shop.tiktok.com/view/product/1731849567724278088"
  ],
  "maxProductsFromSearch": 5,
  "region": "US",
  "maxReviewsPerProduct": 100,
  "reviewsFilter": "all",
  "reviewsSort": "recommended"
}' |
apify call zen-studio/tiktok-shop-review-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/tiktok-shop-review-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/PsVmeHsn8748GeSDv/builds/HCbVi6DuivpQGClW2/openapi.json
