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

Extract the buyer reviews of US TikTok Shop products without logging in: star rating, review text, photos, variant bought, verified purchase flag, review date and reviewer, plus the product's rating breakdown. Sort and filter like the product page.

- **URL**: https://apify.com/logical\_scrapers/tiktok-shop-reviews-scraper.md
- **Developed by:** [Goldmine](https://apify.com/logical_scrapers) (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 $1.70 / 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 Scraper — Extract TikTok Shop Product Reviews with Ratings, Photos and Variants

This **TikTok Shop reviews scraper** collects the buyer reviews of any US [TikTok Shop](https://shop.tiktok.com/us) product and turns them into structured data. Each review comes with its star rating, review text, photos, the variant that was bought, the verified purchase flag, the review date and the reviewer. Each product also gets its overall rating and how many reviews it has at each star rating. People use these TikTok Shop product reviews for competitor research, product sourcing, sentiment analysis and tracking what buyers say about a brand.

Give it TikTok Shop product URLs and get back every review as JSON, CSV or Excel. No TikTok account, cookies or API key needed.

***

### 🚀 Key Features

- 🔎 **Any product link** — `shop.tiktok.com/us/pdp/…` URLs, `www.tiktok.com/shop/pdp/…` and `www.tiktok.com/view/product/…` links, or bare product ids
- 🧾 **Full review records** — star rating, text, review photos, variant (color and size), verified purchase and incentivized review flags, review date, reviewer name and avatar
- ⭐ **Product rating summary** — overall rating, total review count and the count of reviews at each star rating, for every product
- 🎛️ **Same sorting and filters as the product page** — Recommended or Newest first; all reviews, one star rating, reviews with photos or videos, or verified purchases only
- 📑 **Automatic pagination** — `maxItems` sets the number of reviews **per product**; the Actor pages through until it reaches it or the reviews run out
- 🛡️ **No login** — public product pages only; US residential proxies are set by default
- 📤 **Multiple export formats** — JSON, CSV, Excel, XML via the Apify dataset
- 🔁 **Schedulable runs** — run it daily with "Newest first" to track new reviews on your own or a competitor's products

***

### 👥 Who Is This Actor For?

- **TikTok Shop sellers and brands** — read what buyers say about your products and your competitors' products, per variant
- **Product researchers and dropshippers** — check the review quality behind a trending product before sourcing it
- **E-commerce and market analysts** — compare ratings, complaint themes and photo-review share across a category
- **Agencies** — monitor client and competitor reviews on a schedule
- 🤖 **AI builders** — feed review text into sentiment analysis, topic extraction or a RAG pipeline about products

### 💡 Common Use Cases

- Export all TikTok Shop reviews of a product to CSV or Excel
- Pull only the 1-star and 2-star reviews of a competitor product to find its weak points
- Track new TikTok Shop product reviews every day with Newest first
- Collect review photos to see how a product looks in buyers' hands
- Compare which variants (colors, sizes) get the most complaints
- Build a sentiment dataset from TikTok Shop reviews

***

### 🔗 Supported URL Types

| URL Type | Example |
| -------- | ------- |
| **Product page** | `https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447` |
| **Product page without the name** | `https://shop.tiktok.com/us/pdp/1729643276986913447` |
| **TikTok shop link** | `https://www.tiktok.com/shop/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447` |
| **Shared product link** | `https://www.tiktok.com/view/product/1732294968126050510` |
| **Product id** | `1729643276986913447` |

Only US TikTok Shop products are supported. Links to other regions (for example `shop.tiktok.com/gb/…`) are skipped with a warning.

***

### 📥 Input

| Field | Type | Description | Default |
| ----- | ---- | ----------- | ------- |
| `startUrls` | Array | US TikTok Shop products whose reviews to scrape: product URLs or bare product ids, one entry per product. | Required |
| `maxItems` | Integer | Maximum number of reviews to scrape **per product** (start URL). | `20` |
| `sortBy` | String | `recommended` (the product page's default) or `newest` (newest first). | `recommended` |
| `reviewFilter` | String | Which reviews to scrape: `all`, one star rating (`5`, `4`, `3`, `2`, `1`), `withMedia` (with photos or videos) or `verified` (verified purchases). | `all` |
| `proxyConfiguration` | Object | TikTok Shop shows US product pages to US IP addresses only, so US residential proxies are used by default. When an Apify proxy has no country set, the US is used. | Residential, US |

#### Example Input

```json
{
  "startUrls": [
    "https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447"
  ],
  "maxItems": 100,
  "sortBy": "newest",
  "reviewFilter": "all",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

***

### 📤 Output

Each dataset item is one review:

| Field | Type | Description |
| ----- | ---- | ----------- |
| `reviewId` | String | TikTok Shop's id of the review |
| `rating` | Number | Star rating, 1 to 5 |
| `reviewText` | String | The review text; `null` for rating-only reviews |
| `reviewImages` | Array | URLs of the photos attached to the review |
| `reviewedAt` | String | When the review was posted (ISO 8601) |
| `variant` | String | The variant the reviewer bought, e.g. `Grey, S` |
| `skuId` | String | Id of that variant |
| `isVerifiedPurchase` | Boolean | TikTok Shop marks the review as a verified purchase |
| `isIncentivizedReview` | Boolean | TikTok Shop marks the review as incentivized |
| `reviewCountry` | String | Country of the reviewer |
| `reviewerId` | String | Id of the reviewer; `null` when TikTok Shop hides it |
| `reviewerName` | String | Reviewer name as TikTok Shop shows it (partly masked, e.g. `L**`) |
| `reviewerAvatarUrl` | String | Reviewer's profile picture |
| `productId` | String | TikTok Shop product id |
| `productName` | String | Product title |
| `productUrl` | String | Product page URL |
| `productRating` | Number | The product's overall rating |
| `productReviewCount` | Number | The product's total review count on TikTok Shop |
| `sourceUrl` | String | The start URL or id as you entered it |

#### Example Output

```json
{
  "reviewId": "7483244016584197934",
  "rating": 5,
  "reviewText": "Very good fit and good material. It is 100% polyester but still feels like cotton. Good packaging too",
  "reviewImages": [
    "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/5a627749b79d46efaf8b5c2c42921d60~tplv-fhlh96nyum-crop-webp:300:300.webp?…",
    "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/1c39b178b8ca42179d8402a1e95626a9~tplv-fhlh96nyum-crop-webp:300:300.webp?…"
  ],
  "reviewedAt": "2025-03-18T20:09:05.992Z",
  "variant": "Grey, S",
  "skuId": "1729643276986978983",
  "isVerifiedPurchase": true,
  "isIncentivizedReview": false,
  "reviewCountry": "US",
  "reviewerId": "6825994849897382917",
  "reviewerName": "L**",
  "reviewerAvatarUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/f749bbf5f3ba9615b64e862942075b4b~tplv-tiktokx-cropcenter:100:100.jpg?…",
  "productId": "1729643276986913447",
  "productName": "Men's Regular Fit Solid Adjustable Drawstring Waist Sweatpants, Casual Pocket Design Pants for Fall & Winter, Men's Trousers for Daily Wear, Everyday Sweatpants",
  "productUrl": "https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447",
  "productRating": 4.5,
  "productReviewCount": 9884,
  "sourceUrl": "https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447"
}
```

#### Product rating summaries

The run also saves one summary per product in its key-value store, under the key `PRODUCTS`:

```json
{
  "productId": "1732294968126050510",
  "productName": "Pure Herbal Portable Aromatic Diffuser Stick",
  "productUrl": "https://shop.tiktok.com/us/pdp/pure-herbal-aromatic-diffuser-stick-promotes-restful-sleep-900-uses-travel-friendly/1732294968126050510",
  "rating": 4.1,
  "reviewCount": 249,
  "ratingBreakdown": { "1": 38, "2": 10, "3": 13, "4": 25, "5": 163 },
  "reviewsScraped": 246,
  "sourceUrl": "1732294968126050510"
}
```

You can export the dataset as **JSON, CSV, Excel, XML, RSS, or HTML** from the Apify Console or
via the [Apify API](https://docs.apify.com/api/v2).

***

### 💰 Pricing

This Actor is **pay per event** (you pay per result): each review saved costs **$0.002 on the free plan, so 1,000 reviews cost $2.00**, falling to $0.0017 per review ($1.70 per 1,000) on Gold and higher Apify plans. Each run also has a $0.005 start fee per GB of memory, which is $0.01 at the default 2 GB. The US residential proxy traffic is included in these prices. A free Apify account is enough to try it.

***

### ❓ FAQ

#### What is the TikTok Shop Reviews Scraper?

It is a TikTok Shop reviews scraper that exports the buyer reviews of US TikTok Shop products as structured data: rating, text, photos, variant, verified purchase flag, date and reviewer. You give it product URLs and it returns the TikTok Shop product reviews as JSON, CSV or Excel.

#### Do I need an account, cookies or an API key?

No. The Actor reads the reviews that TikTok Shop shows on public product pages, without logging in.

#### Do I need a proxy?

Yes, a US one. TikTok Shop only shows US product pages to US IP addresses, so the Actor uses Apify's US residential proxies by default. If you choose an Apify proxy group without a country, the US is used.

#### Which countries are supported?

US TikTok Shop products only. Links to other TikTok Shop regions are skipped with a warning in the log.

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

Up to `maxItems` per product (start URL). TikTok Shop lists a limited number of reviews in any one view, often around 1,000 to 2,000. When you ask for more and choose "All reviews", the Actor continues through the reviews of each star rating to reach more of them. For products with many thousands of reviews, the total you can reach can still be lower than the count shown on TikTok Shop.

#### Why do I get slightly fewer reviews than the product's review count?

TikTok Shop's review count includes a few reviews it never lists, for example ones that were hidden or removed. On a product with 249 reviews, 246 were listed.

#### Why is `reviewText` empty on some reviews?

Buyers can leave a star rating without writing anything. Those reviews have `reviewText: null`.

#### Can I get only the negative reviews, or only reviews with photos?

Yes. Set `reviewFilter` to `1` or `2` for one star rating, `withMedia` for reviews with photos or videos, or `verified` for verified purchases. With `withMedia`, a review that has only a video comes back with an empty `reviewImages` list, since the output holds photo links only.

#### Does it handle pagination automatically?

Yes. The Actor pages through the reviews until it reaches `maxItems` for the product or TikTok Shop has no more to show.

#### Can I schedule it or integrate it with my app?

Yes — every Apify Actor exposes a REST API, webhooks, and integrations with Zapier, Make, Google
Sheets and Slack, and can be called from an AI agent via the Apify MCP server.

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

This Actor accesses only publicly available pages. You are responsible for making sure your use
complies with TikTok's terms of service and the laws in your jurisdiction. Reviewer names are
partly masked by TikTok Shop; treat reviewer data as personal data where your laws require it.

#### What if TikTok Shop changes and the Actor breaks?

Open an issue on the Actor's **Issues** tab and include the product URL.

***

### 🧩 Part of the TikTok Scraper Suite

Goldmine's TikTok Scraper Suite covers search results, posts, comments, video files and now TikTok Shop reviews. Also try:

- [TikTok Comments Scraper](https://apify.com/logical_scrapers/tiktok-comments-api) — comments on TikTok videos, with author and likes
- [TikTok Search Scraper](https://apify.com/logical_scrapers/tiktok-search-scraper) — find TikTok videos by keyword, with full stats per result
- [TikTok Post Scraper](https://apify.com/logical_scrapers/tiktok-post-scraper) — views, likes, shares, hashtags and author for TikTok posts
- [TikTok Video Downloader](https://apify.com/logical_scrapers/tiktok-video-downloader) — download TikTok videos as MP4 files
- [TikTok Transcript Scraper](https://apify.com/logical_scrapers/tiktok-transcript-scraper) — transcripts and timed subtitles of TikTok videos, with their language
- [Scrape TikTok Post Details](https://apify.com/logical_scrapers/tiktok-realtime-post-details-scraper) — likes, plays, comments, cover and video links for TikTok posts

See every Goldmine Actor at [apify.com/logical\_scrapers](https://apify.com/logical_scrapers).

***

### 📬 Contact & Support

- **Issues & feature requests**: use the Issues tab on this Actor's page — that is the quickest way to get a fix.
- **Email**: `coredev.dan@gmail.com`
- **If this Actor saved you time, please leave a ⭐ rating on the Apify Store.** It helps us keep it maintained.

# Actor input Schema

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

US TikTok Shop products whose reviews to scrape. Paste a product URL such as https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447, a www.tiktok.com/shop/pdp/… or www.tiktok.com/view/product/… link, or a bare product id. One entry per product, and as many products as you like.

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

Maximum number of reviews to scrape from each product (start URL).

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

The order TikTok Shop lists the reviews in: Recommended (the product page's default) or Newest first.

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

Which reviews to scrape, matching the filters on the product page: all reviews, one star rating, only reviews with photos or videos, or only verified purchases.

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

TikTok Shop shows US product pages to US IP addresses only, so US residential proxies are used by default. When an Apify proxy has no country set, the US is used.

## Actor input object example

```json
{
  "startUrls": [
    "https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447"
  ],
  "maxItems": 20,
  "sortBy": "recommended",
  "reviewFilter": "all",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `products` (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": [
        "https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logical_scrapers/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 = {
    "startUrls": ["https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logical_scrapers/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 '{
  "startUrls": [
    "https://shop.tiktok.com/us/pdp/sweatpants-mens-regular-fit-casual-drawstring-waist-with-pockets/1729643276986913447"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call logical_scrapers/tiktok-shop-reviews-scraper --silent --output-dataset

```

## MCP server setup

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