# TikTok Shop Reviews Scraper (`piotrv1001/tiktok-shop-reviews-scraper`) Actor

The TikTok Shop Reviews Scraper extracts customer reviews from TikTok Shop US product pages, capturing star ratings, review text, dates, purchased variants, photos, verified-purchase flags and per-product rating breakdowns — ideal for product research and review monitoring.

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

## Pricing

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

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 Scraper

Turn TikTok Shop product links into structured review data. The **TikTok Shop Reviews Scraper** collects customer reviews for any product on the US storefront — star rating, review text, date, purchased variant, photos and verified-purchase flags — plus a rating summary per product. Built for product research, review monitoring, sentiment analysis and competitor tracking.

### ✨ Features

- ⭐ **Full review records**: rating, text, review date, purchased variant (color, size, flavor), verified-purchase and incentivized flags, reviewer country, masked reviewer name and review photos.
- 📊 **Rating summary per product**: total review count, average rating and the 1–5 star breakdown.
- 🔗 **URLs or IDs**: paste product pages (`shop.tiktok.com/us/pdp/…`, `www.tiktok.com/shop/pdp/…`, `…/view/product/…`) or bare product IDs, in any mix.
- 🎚️ **Sort and filter**: most recent or recommended order; all reviews, a single star rating, reviews with photos or videos, or verified purchases only.
- 📚 **Deep collection**: TikTok Shop serves up to 3,000 reviews per sort and filter. Ask for more and the Actor combines several passes — typically 7,000–8,000 unique reviews on the largest products.
- 🧾 **Honest coverage numbers**: every product row reports how many reviews TikTok Shop states and how many were actually returned, so you always know what you got.
- ⚡ **Fast**: thousands of reviews per minute, many products in one run.

### 🛠️ How It Works

1. **Add products** – paste TikTok Shop US product URLs or product IDs.
2. **Set the limit** – choose how many reviews you want per product, the sort order and an optional filter.
3. **Run** – get one row per review and one summary row per product, ready to export as JSON, CSV or Excel or to pull through the API.

### ⚙️ Input

| Field                  | Description                                                           | Default     |
| ---------------------- | --------------------------------------------------------------------- | ----------- |
| `productUrls`          | TikTok Shop US product URLs or product IDs                            | —           |
| `maxReviewsPerProduct` | Maximum reviews to return for each product                            | `100`       |
| `sortBy`               | `recent` or `recommended`                                             | `recent`    |
| `reviewFilter`         | `all`, `5_stars` … `1_star`, `with_media`, `verified_purchase`        | `all`       |
| `proxyConfiguration`   | Proxy settings; pinned to the United States when no country is chosen | Apify Proxy |

```json
{
    "productUrls": ["https://shop.tiktok.com/us/pdp/x/1729587769570529799", "1731726912824578262"],
    "maxReviewsPerProduct": 200,
    "sortBy": "recent",
    "reviewFilter": "all"
}
```

### 📊 Sample Output Data

Rows have a `type`: `review` for each review and `product` for the per-product summary.

```json
[
    {
        "type": "review",
        "productId": "1729587769570529799",
        "productName": "3 Bottles of Goli Ashwagandha & Vitamin D Gummy - Mixed Berry, KSM-66, Vegan, Plant Based, Non-GMO, Gluten & Gelatin Free",
        "productUrl": "https://shop.tiktok.com/us/pdp/x/1729587769570529799",
        "reviewId": "7661003044570531597",
        "rating": 5,
        "text": "Son muy buenas las recomiendo demasiado 👌",
        "reviewedAt": "2026-07-10T14:44:51.705Z",
        "verifiedPurchase": true,
        "incentivized": false,
        "variant": "Default",
        "skuId": "1729587788239049223",
        "country": "US",
        "reviewerName": "G**a",
        "images": [
            "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/1b4d24bb37e043f6994e1eb8a9e163a0~tplv-fhlh96nyum-crop-webp:300:300.webp"
        ],
        "scrapedAt": "2026-09-20T11:41:34.396Z"
    },
    {
        "type": "product",
        "productId": "1729587769570529799",
        "productName": "3 Bottles of Goli Ashwagandha & Vitamin D Gummy - Mixed Berry, KSM-66, Vegan, Plant Based, Non-GMO, Gluten & Gelatin Free",
        "productUrl": "https://shop.tiktok.com/us/pdp/x/1729587769570529799",
        "status": "ok",
        "totalReviews": 71750,
        "ratingAverage": 4.67,
        "ratingHistogram": { "1": 3259, "2": 764, "3": 1816, "4": 4665, "5": 61246 },
        "matchingReviews": 71750,
        "returnedReviews": 200,
        "scrapedAt": "2026-09-20T11:41:34.396Z"
    }
]
```

### 💰 Pricing

Pay only for what you collect — no monthly rental.

| Event                  | Price                                    |
| ---------------------- | ---------------------------------------- |
| Review                 | **$0.0015** per review ($1.50 per 1,000) |
| Product rating summary | **$0.002** per product with reviews      |
| Actor start            | $0.00005 per run                         |

Products without reviews (or not listed on the US storefront) return a `no_reviews` row and are **free**. 1,000 reviews across 10 products cost $1.52.

### ℹ️ Good to Know

- **US storefront only.** Links to other regional storefronts are skipped with a warning.
- **Stated totals vs. returned reviews.** The review count TikTok Shop displays can be higher than the number of reviews it actually serves. `totalReviews` / `matchingReviews` are the stated numbers; `returnedReviews` is what you received.
- **Reviewer privacy.** Reviewer names arrive masked by TikTok Shop (for example `G**a`); account identifiers and avatars are not collected.
- **Photo links** are TikTok's own image URLs and may expire over time — download them soon after the run if you need the files.
- Rating-only reviews have `text: null`.

### 🔗 Related

Need the product itself — price, variants, stock, sold count and seller? Use the [TikTok Shop Product Scraper](https://apify.com/piotrv1001/tiktok-shop-product-scraper).

Understand what buyers really say with the **TikTok Shop Reviews Scraper** today! 🚀

# Actor input Schema

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

TikTok Shop US product pages (shop.tiktok.com/us/pdp/… or www.tiktok.com/shop/pdp/…) or bare product IDs.

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

Stop after this many reviews for each product. The rating summary is always returned. TikTok Shop serves up to 3,000 reviews per sort and filter; above that the Actor combines several passes (typically 7,000–8,000 unique reviews on the largest products).

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

Newest first, or TikTok Shop's recommended order.

## `reviewFilter` (type: `string`):

Keep all reviews, one star rating, reviews with photos or videos, or verified purchases.

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

The US storefront answers US visitors only; a proxy without a country is pinned to the United States.

## Actor input object example

```json
{
  "productUrls": [
    "https://shop.tiktok.com/us/pdp/x/1729587769570529799",
    "1731726912824578262"
  ],
  "maxReviewsPerProduct": 50,
  "sortBy": "recent",
  "reviewFilter": "all",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `reviews` (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 = {
    "productUrls": [
        "https://shop.tiktok.com/us/pdp/x/1729587769570529799",
        "1731726912824578262"
    ],
    "maxReviewsPerProduct": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/tiktok-shop-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 = {
    "productUrls": [
        "https://shop.tiktok.com/us/pdp/x/1729587769570529799",
        "1731726912824578262",
    ],
    "maxReviewsPerProduct": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/tiktok-shop-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 '{
  "productUrls": [
    "https://shop.tiktok.com/us/pdp/x/1729587769570529799",
    "1731726912824578262"
  ],
  "maxReviewsPerProduct": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call piotrv1001/tiktok-shop-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/tiktok-shop-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/ZpA5EKAdbpEAbXVzD/builds/94EkKyFiD43ycuSMP/openapi.json
