# TikTok Shop Reviews Scraper | $1/1K · Ratings & Photos (`technicaldost/tiktok-shop-reviews-plus`) Actor

Scrape public US TikTok Shop product reviews: ratings, text, photos, verified purchases and SKU details. Bulk URLs or IDs, newest sorting, rating and date filters, deduplication and run reports. $1 per 1,000 successful reviews; paid-plan discounts.

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

## Pricing

from $0.85 / 1,000 review collecteds

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

Collect public US TikTok Shop customer reviews for product research, customer-feedback analysis and variant comparisons. Submit product links or numeric IDs and get one structured row per review, ready for JSON, CSV or Excel export.

### Pricing: $1 per 1,000 reviews

**$1 per 1,000 successfully delivered reviews** on the Free plan. Bronze: $0.95; Silver: $0.90; Gold, Platinum and Diamond: $0.85 per 1,000. Failed products, duplicate reviews and reviews excluded by your filters are not billed as reviews. There is a separate **$0.0025 Actor-start event** (one per GB of memory, minimum one). The start fee applies even when products are unavailable. There are no third-party API-key or subscription requirements.

At default memory, 10 reviews cost $0.0125 on the Free plan or $0.012 on Bronze. Set Apify's maximum total charge to control your result budget (minimum $0.0035). Standard Apify pricing and account terms still apply; consult the Pricing tab for current rates. This Actor uses no billable residential proxy by default.

### Quick start

```json
{
  "startUrls": ["https://shop.tiktok.com/us/pdp/1731578642912612516"],
  "maxReviews": 10,
  "sortBy": "recommended"
}
```

Product links from `www.tiktok.com/shop/pdp/…` and `shop.tiktok.com/us/pdp/…`, bare product IDs, and `{ "url": "…" }` objects are accepted. Duplicate product inputs are skipped.

### Review fields

Each review retains its original `review_id` and `product_id` as strings, numeric star rating, review text, raw publication timestamp, a UTC `reviewDate`, publicly displayed reviewer name and avatar, image URLs, SKU ID and specification, country, and explicit verified-purchase and incentivized-review flags. Product context includes the title, overall rating and accessible review total where supplied.

Missing purchase flags are `null`, not `false`. Public reviewer names may be masked by TikTok; this Actor does not unmask them. Empty-text ratings remain valid reviews. Media URLs may expire. Photo coverage is supported; video attachment coverage is not claimed.

### Collection options

- `maxReviews`: maximum matching reviews per product, from 1 to 10,000.
- `sortBy`: source-recommended order or newest-first.
- `starRating`: 0 for all reviews, or an exact rating from 1 to 5.
- `mediaOnly`: keep only reviews containing photo URLs.
- `verifiedPurchaseOnly`: require TikTok's explicit verified flag.
- `since`: optional inclusive UTC date, formatted `YYYY-MM-DD`.
- `maxPagesPerProduct`: bound the pages requested when filters are restrictive.
- `maxRetries`: bounded retry count for temporary source errors.

Use a page cap appropriate to your budget. A filtered product may require many requests to find matching reviews, or have none. Limits are per product; your Apify maximum total charge caps the complete run.

### Reports and partial results

`REPORT` records per-product delivery counts, page counts, total reviews, source failures, duplicate/filtered/invalid counts and whether the spending limit stopped collection. `ERRORS` lists sanitized product-level failures. Delivered records are saved incrementally. Resume checkpoints preserve delivered IDs to reduce duplicate results after migration.

If every product fails, the run fails explicitly. Successful products can retain their data when another product fails. An accessible product's review total is not a promise that every review can be retrieved. The page cap, filters, source restrictions and your spending limit can all reduce coverage.

### Scope and limitations

Only US TikTok Shop products are supported. The Actor is independent and is not endorsed by TikTok. It uses the public storefront; it does not access orders, private messages or seller accounts. No customer TikTok login is requested. Explicit login or CAPTCHA challenges are reported, not solved. Regional restrictions, removed products and source changes can cause partial or failed runs.

Use the data responsibly and respect applicable platform terms and privacy requirements. This is an extraction tool, not a sentiment-scoring service; it does not invent reviews, infer demographics or guarantee sales insights.

### API and support

Run `technicaldost/tiktok-shop-reviews-plus` with the Apify API, client SDK or integrations, then read the run's default dataset and `REPORT` record:

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("technicaldost/tiktok-shop-reviews-plus").call(
    run_input={
        "startUrls": ["1731578642912612516"],
        "maxReviews": 30,
        "sortBy": "newest"
    },
    max_total_charge_usd=0.05
)
reviews = client.dataset(run["defaultDatasetId"]).list_items().items
report = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("REPORT")
print(len(reviews))
```

Open an issue on the Actor's Issues tab with the product URL, input and run ID. Never include cookies, access tokens or passwords in a public issue.

### How collection works

A single browser is reused across products. Each product has an isolated public session so TikTok's normal page scripts can initialize; reviews then come from the storefront's own JSON review feed, in pages of 10. Image, font and video downloads are blocked to reduce bandwidth. Returned records are normalized and filtered locally, with IDs deduplicated before saving and charging. No paid third-party review service is wrapped, and no seller or customer credentials are used.

Startup typically takes longer than a plain HTTP scraper. Speed varies with source response times; no throughput or success-rate guarantee is claimed.

### Frequently asked questions

**Can it scrape any TikTok Shop market?** No. Only US product detail pages are currently supported.

**Does it guarantee every review?** No. The public feed may restrict access or change. The report distinguishes limits, page caps, exhaustion and source failures.

**Are the reviews generated or sentiment-scored?** No. These are source records. Use your own analysis tools for sentiment.

**Why are some reviewer names hidden?** TikTok masks public identities. We preserve the displayed name; we do not reveal private account information.

**What happens if the budget runs out?** Collection stops with the affordable delivered rows retained and `spendingLimitReached` in the report.

# Actor input Schema

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

1–100 US TikTok Shop product detail URLs or numeric product IDs. String URLs and {url: ...} objects are accepted; duplicate products are skipped.

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

Maximum matching reviews per product. Fewer may be available. The page cap limits work when filters are restrictive.

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

TikTok's recommended order or newest-first order.

## `starRating` (type: `integer`):

0 collects all ratings; 1–5 selects an exact rating.

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

Return only reviews with image URLs. This option does not claim video coverage.

## `verifiedPurchaseOnly` (type: `boolean`):

Keep only reviews explicitly marked verified by TikTok. Unknown flags are excluded.

## `since` (type: `string`):

Optional UTC date in YYYY-MM-DD format. Unknown or older dates are excluded.

## `maxPagesPerProduct` (type: `integer`):

Bound requests for products with many reviews or restrictive filters.

## `maxRetries` (type: `integer`):

Retry temporary source failures. Explicit login or CAPTCHA walls are not solved.

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

Only US product review extraction is supported and tested.

## Actor input object example

```json
{
  "startUrls": [
    "https://shop.tiktok.com/us/pdp/1731578642912612516"
  ],
  "maxReviews": 10,
  "sortBy": "recommended",
  "starRating": 0,
  "mediaOnly": false,
  "verifiedPurchaseOnly": false,
  "maxPagesPerProduct": 100,
  "maxRetries": 2,
  "region": "US"
}
```

# Actor output Schema

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

One row per successfully collected unique review. Export JSON, CSV or Excel.

## `report` (type: `string`):

Per-product counts, partial coverage, errors, spending limit and request statistics.

# 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/1731578642912612516"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaldost/tiktok-shop-reviews-plus").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/1731578642912612516"] }

# Run the Actor and wait for it to finish
run = client.actor("technicaldost/tiktok-shop-reviews-plus").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/1731578642912612516"
  ]
}' |
apify call technicaldost/tiktok-shop-reviews-plus --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,technicaldost/tiktok-shop-reviews-plus"
        }
    }
}
```

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/Py14IyZs4v15CiYJb/builds/WCkAEDfhy7dKYrvbH/openapi.json
