# TikTok Shop Scraper: Reviews, Ratings & Product Data (`stanvanrooy6/tiktok-shop-scraper`) Actor

Scrape TikTok Shop reviews, star ratings and product data from any product URL. Deepest review history available: up to 5,000 reviews per star rating, 25,000 per product. No login, no cookies, no API key. JSON, CSV or Excel.

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

## Pricing

from $2.00 / 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: Full Review History, Ratings & Product Data 🛍️

The TikTok Shop Scraper extracts **customer reviews, star ratings and product details** from any TikTok Shop product URL or product ID, with **no login, no cookies and no third-party API key**. Paste a product link, pick a market, and download clean, structured review data as JSON, CSV or Excel, or pull it straight from the Apify API.

Built for competitor research, product validation, sentiment analysis and finding winning products on TikTok Shop.

**Up to 25,000 reviews per product**, where most TikTok Shop scrapers stop at about 2,000. A bestseller with 90,000 reviews gives you tens of thousands of individual reviews instead of a sample.

### 🚀 How to scrape TikTok Shop reviews

1. Paste one or more TikTok Shop product URLs (or bare product IDs).
2. Choose your market (US, UK, EU and more).
3. Click **Start**.

That is it. No TikTok account, no browser extension, no proxy setup on your side.

By default the scraper collects the full available review history for each product. Switch to **Product detail** mode if you only need the product info plus the star rating breakdown.

### 📊 What data can you scrape from TikTok Shop?

**Per review**

- Review ID, star rating (1 to 5), title and full review text
- Reviewer display name and country
- Verified purchase flag
- Review date (ISO 8601)
- Customer photo and video thumbnail URLs
- Purchased variant (SKU ID and specification)

**Per product**

- Product ID, seller ID and product title
- Total review count and average rating
- Exact 1 to 5 star rating histogram (the number most TikTok Shop scrapers cannot return)

Every row also carries the product ID, market and source URL, so you can join reviews back to products in your own pipeline.

### 📥 Input

| Field | Type | Notes |
|---|---|---|
| `urls` | array | TikTok Shop product URLs (`/view/product/<id>`, `/shop/pdp/<id>`, or `shop.tiktok.com/...`) or bare numeric product IDs. **Required.** |
| `mode` | string | `reviews` (default) for the full review history, or `product` for product detail plus the rating histogram only. |
| `region` | string | Marketplace and proxy country. Default `US`. |
| `maxReviews` | integer | Cap on reviews per product, or `0` for everything available (up to 25,000 per product). Default `200`. |
| `sort` | string | `relevant` (default) or `recent`. |
| `minRating` | integer | Keep only reviews rated this many stars or higher (for example, `4` keeps 4 and 5 star reviews). Set `minRating` and `maxRating` to the same value for a single star rating. |
| `maxRating` | integer | Keep only reviews rated this many stars or lower (for example, `2` keeps 1 and 2 star reviews). |
| `mediaOnly` | boolean | Only reviews that include photos or videos. Default `false`. |

Minimal input:

```json
{
  "urls": ["https://www.tiktok.com/view/product/1729527313880355335"],
  "mode": "reviews",
  "region": "US",
  "maxReviews": 500
}
```

### 🏆 Up to 25,000 reviews per product

Most TikTok Shop review scrapers stop at about 2,000 reviews per product. This one returns up to 5,000 reviews per star rating, up to 25,000 per product.

- **Complete for most products.** Anything under 5,000 reviews comes back in full.
- **Tens of thousands for bestsellers.** A US product with 94,646 reviews returned 19,920 distinct reviews in a single run, no duplicates, in 38 minutes (measured September 2026).
- **Filters at full depth.** `minRating: 1, maxRating: 1` gives you up to 5,000 one-star reviews, not the handful that happen to sit in a 2,000-review sample. Same for a rating range or `mediaOnly`.
- **Sized to your request.** 200 reviews take seconds. `maxReviews: 0` keeps going until TikTok has nothing left to show.

### 📤 Output

#### Reviews mode

One row per review. The schema is shared with my Shopify, Yotpo, Loox, Okendo and Judge.me review scrapers, so TikTok Shop reviews line up with your other review exports without remapping.

```json
{
  "review_id": "7505445725870786347",
  "author": "Alessandra D.",
  "rating": 5,
  "title": null,
  "body": "Love this product! Big difference in my energy and stress levels. Great taste, easy to add to my routine. 4th time purchasing, highly recommend.",
  "images": ["https://p16-oec-va.tiktokcdn.com/....jpg"],
  "verified": true,
  "date": "2025-05-17T00:00:00.000Z",
  "product_id": "1729527313880355335",
  "sku_id": "1729527314...",
  "sku_specification": "1 Bottle",
  "incentivized": null,
  "review_country": "United States",
  "platform": "tiktok_shop",
  "region": "US",
  "source_url": "https://www.tiktok.com/view/product/1729527313880355335"
}
```

#### Product detail mode

One row per product, including the complete star rating breakdown.

```json
{
  "product_id": "1729527313880355335",
  "seller_id": "7495...",
  "product_title": "Daily Greens Superfood Powder",
  "total_reviews": 94653,
  "overall_score": 4.8,
  "rating_breakdown": { "5": 84210, "4": 6120, "3": 2100, "2": 900, "1": 1323 },
  "region": "US",
  "platform": "tiktok_shop",
  "source_url": "https://www.tiktok.com/view/product/1729527313880355335"
}
```

#### Field descriptions

- `review_id`: Unique TikTok Shop review ID.
- `author`: Reviewer display name.
- `rating`: Star rating, 1 to 5.
- `title`: Review headline when present, otherwise null.
- `body`: Full review text.
- `images`: Customer photo and video thumbnail URLs.
- `verified`: True when the review is a verified purchase.
- `date`: Review date in ISO 8601.
- `product_id`: TikTok Shop product ID.
- `sku_id` and `sku_specification`: The purchased variant.
- `incentivized`: Reserved field, null on the native review feed.
- `review_country`: Reviewer country.
- `platform`: Always `tiktok_shop`.
- `region`: The market you requested.
- `source_url`: The product page the data came from.
- `overall_score`: Average product rating (product mode).
- `rating_breakdown`: Exact count of 1 to 5 star reviews (product mode).
- `total_reviews`: Total review count reported for the product (product mode).

### ✨ Why this TikTok Shop scraper

- **No login, no cookies, no API key.** The scraper creates its own anonymous session for every run. You never hand over a TikTok account, and there is no separate paid API subscription to buy.
- **Up to 25,000 reviews per product.** 5,000 per star rating, where other scrapers stop at about 2,000.
- **Exact rating histogram.** The 1 to 5 star counts for every product whose public page is reachable, in product detail mode.
- **Individual reviews in the US.** Full paginated review history for US products, the market TikTok exposes to anonymous clients. Product detail and the rating histogram work in the other supported markets.
- **Same schema as other review scrapers.** Output matches my Shopify, Yotpo, Loox, Okendo and Judge.me scrapers, so it drops straight into an existing review pipeline.
- **Filters that keep the depth.** A star rating, a range (for example 4 and up) or media-only reviews, thousands of them, not a filtered sample. Sort by relevant or recent.
- **Clean exports.** JSON, CSV or Excel from the Apify Console, or fetch results from the Apify API.
- **Pay per result.** $2.00 per 1,000 reviews, no monthly plan.

### 💡 Use cases

- **Competitor research:** See exactly what customers praise and complain about on rival products.
- **Product validation and sourcing:** Read real buyer feedback before you source, launch or dropship a product.
- **Sentiment analysis:** Feed thousands of TikTok Shop reviews into your own NLP, LLM or BI workflow.
- **Ad and content angles:** Mine review language for hooks, benefits and objections.
- **Market intelligence:** Track rating trends and review volume across a category or a seller.

### 🔌 TikTok Shop API alternative: run it from code

Every Apify Actor is also an API. If you need TikTok Shop review data inside your own app or notebook and do not want to apply for TikTok's official Partner API, call this scraper with the Apify client:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("stanvanrooy6/tiktok-shop-scraper").call(run_input={
    "urls": ["https://www.tiktok.com/view/product/1729527313880355335"],
    "mode": "reviews",
    "region": "US",
    "maxReviews": 1000,
})
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(review["rating"], review["body"])
```

The same works from JavaScript, cURL or any HTTP client. See the **API** tab above for ready-made snippets and the dataset endpoints.

### 🌍 Supported markets

`US, GB, DE, FR, ES, IT, IE, MX, BR, JP, TH, VN, MY, ID, PH, SG`

The region you pick drives both the TikTok Shop market and the residential proxy country, so you get the correct localized catalog and reviews. US is the most heavily tested market.

### ⚠️ Limits and good to know

- Products under 5,000 reviews return everything. Larger products return up to 5,000 reviews per star rating, up to 25,000 per product. The scraper stops cleanly when TikTok has nothing more to show.
- Deep pulls take longer: everything on a very large product is about 30 to 40 minutes. A few hundred reviews take seconds.
- If a product has no reviews yet, the run finishes successfully with zero review rows.
- Individual review pulls (reviews mode) currently work for the US market only. TikTok serves its anonymous native review feed to US-region clients, so a run with `region` set to a non-US market returns product detail but no individual reviews, with a clear message in the log. Product detail and the rating histogram (product mode) work wherever the public product page is reachable.
- Transient network errors are retried automatically, so long runs keep going.

### 💰 Pricing

This Actor uses **pay per event**, so there is no monthly subscription and you only pay for what you scrape.

- **Reviews:** $2.00 per 1,000 reviews ($0.002 each).
- **Products:** $10.00 per 1,000 products ($0.01 each) in product detail mode. Each row includes the exact 1 to 5 star histogram.
- **Run start:** $0.002 per GB of memory, under one cent for a default run.

Pulling 1,000 reviews costs about $2.00. Comparable TikTok Shop review scrapers charge $2.70 to $3.00 per 1,000, and product scrapers charge $15 to $25 per 1,000 for product rows without the histogram. New Apify accounts include monthly free usage credit, which is enough to try the scraper at no cost.

### 🎯 Example inputs

**Full review history for one product:**

```json
{
  "urls": ["https://www.tiktok.com/view/product/1729527313880355335"],
  "mode": "reviews",
  "region": "US",
  "maxReviews": 0
}
```

**Only 5 star reviews with photos or videos:**

```json
{
  "urls": ["1729527313880355335"],
  "mode": "reviews",
  "region": "US",
  "minRating": 5,
  "maxRating": 5,
  "mediaOnly": true,
  "maxReviews": 200
}
```

**Product detail and rating histogram only (UK market):**

```json
{
  "urls": ["https://shop.tiktok.com/view/product/1729527313880355335"],
  "mode": "product",
  "region": "GB"
}
```

### ❓ FAQ

#### Do I need a TikTok account or login?

No. The scraper runs fully anonymous and cookie free. You never share credentials.

#### Do I need a third-party API key?

No. Everything runs inside the Actor. Some competing TikTok Shop scrapers require you to bring a separate paid API key. This one does not.

#### Is there a free TikTok Shop scraper?

You can run this one for free within the monthly free usage credit that comes with every new Apify account. After that it is $2.00 per 1,000 reviews with no subscription.

#### How many reviews can I get per product?

Set `maxReviews` to any number, or `0` for everything. Products under 5,000 reviews come back complete. Larger products return up to 5,000 per star rating, so a product with 90,000 reviews returns close to 20,000 distinct reviews. Other TikTok Shop scrapers stop at about 2,000 per product.

#### Which markets are supported?

Product detail and the rating histogram are available across the supported markets listed above. Individual reviews (reviews mode) are US-only today, because TikTok exposes its anonymous review feed to US-region clients. Pick the region that matches the product you are scraping.

#### What format can I export?

JSON, CSV and Excel from the Apify Console, or straight from the Apify API and dataset endpoints.

#### Is it legal to scrape TikTok Shop reviews?

The scraper only collects publicly visible data that any anonymous visitor can see, and it does not log in or bypass access controls. Reviews contain reviewer display names, so handle the data in line with GDPR, CCPA and your own use case. If you are unsure, consult a lawyer.

#### Can you add a field or a market I need?

Yes, just reach out. I actively maintain this Actor and add requested fields, filters and markets.

### 🤝 Feedback and feature requests

I am actively maintaining this Actor and happy to add what you need, whether that is extra fields, filters or a new market.

📧 **stanvanrooy6@gmail.com**

### 🔗 Related review scrapers

Building a full review dataset across platforms? These use the same output schema:

- **[Universal Shopify Review Scraper](https://apify.com/stanvanrooy6/shopify-review-scraper)**: Auto detects the review app and extracts all reviews.
- **[Yotpo Reviews Scraper](https://apify.com/stanvanrooy6/yotpo-scraper)**: For Shopify stores using Yotpo.
- **[Judge.me Reviews Scraper](https://apify.com/stanvanrooy6/judge-me-scraper)**: For Shopify stores using Judge.me.
- **[Loox Reviews Scraper](https://apify.com/stanvanrooy6/loox-scraper)**: For Shopify stores using Loox.
- **[Okendo Reviews Scraper](https://apify.com/stanvanrooy6/okendo-scraper)**: For Shopify stores using Okendo.

***

Built with ❤️ for the Apify community

# Actor input Schema

## `urls` (type: `array`):

TikTok Shop product URLs (any of /view/product/<id>, /shop/pdp/<id>, shop.tiktok.com/...) or bare numeric product IDs.

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

Choose 'reviews' for the full paginated review history, or 'product' for product detail plus the star rating histogram only.

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

Marketplace region. Drives both the TikTok Shop market and the residential proxy country, so the correct localized catalog and reviews are served.

## `maxReviews` (type: `integer`):

Cap on reviews collected per product. Set to 0 for everything available: up to 5,000 per star rating, 25,000 per product.

## `sort` (type: `string`):

Review sort order: 'relevant' (default) or 'recent'.

## `minRating` (type: `integer`):

Keep only reviews rated this many stars or higher (for example, 4 keeps 4 and 5 star reviews). Set the minimum and maximum to the same value for a single star rating. Leave empty for no lower bound. A single star returns up to 5,000 reviews of that rating.

## `maxRating` (type: `integer`):

Keep only reviews rated this many stars or lower (for example, 2 keeps 1 and 2 star reviews). Leave empty for no upper bound.

## `mediaOnly` (type: `boolean`):

Keep only reviews that include photos or videos.

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

Alternative Apify request list input. Merged with the URLs field above.

## Actor input object example

```json
{
  "urls": [
    "https://www.tiktok.com/view/product/1729527313880355335"
  ],
  "mode": "reviews",
  "region": "US",
  "maxReviews": 200,
  "sort": "relevant",
  "mediaOnly": false
}
```

# Actor output Schema

## `reviews` (type: `string`):

All scraped rows (reviews or products) as JSON. Append ?format=csv or ?format=xlsx for other formats.

## `reviewsCsv` (type: `string`):

The same rows as a CSV download.

## `dataset` (type: `string`):

The default dataset of this run, with the Reviews and Products views.

# 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 = {
    "urls": [
        "https://www.tiktok.com/view/product/1729527313880355335"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("stanvanrooy6/tiktok-shop-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 = { "urls": ["https://www.tiktok.com/view/product/1729527313880355335"] }

# Run the Actor and wait for it to finish
run = client.actor("stanvanrooy6/tiktok-shop-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 '{
  "urls": [
    "https://www.tiktok.com/view/product/1729527313880355335"
  ]
}' |
apify call stanvanrooy6/tiktok-shop-scraper --silent --output-dataset

```

## MCP server setup

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