TikTok Shop Reviews Scraper
Pricing
from $5.00 / 1,000 results
TikTok Shop Reviews Scraper
Collect customer reviews for a TikTok Shop product by ID or URL, filtered by star rating or media, with automatic pagination and the product's full star distribution attached to every row.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
ToolzerHub
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Collect customer reviews for any TikTok Shop product — star rating, review text, photos, and whether the buyer actually purchased — from a product ID or URL.
Every row also carries the product's full star breakdown, so one review is enough to know what you are looking at. A 4.7 average reads differently once you can see it is 5,543 five-star reviews and 242 one-star.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
product_id | string | — | Required. A product ID, or a product page URL. |
region | enum | US | US, GB, SG, MY, PH, TH, VN, ID. |
maxItems | integer | 100 | Caps how many reviews are saved. 0 means no limit. |
reviewFilter | enum | no_filter | no_filter, with_media (photos or video only), verified_purchase. |
reviewRating | enum | all | all, or 5_star … 1_star to collect one rating only. |
{"product_id": "1729397618688364854","region": "US","maxItems": 100,"reviewFilter": "no_filter","reviewRating": "all"}
A product page URL works anywhere the ID does — https://shop.tiktok.com/view/product/1729397618688364854 and the bare ID behave identically, regional subdomains and query strings included.
Output
One row per review.
| Field | What it holds |
|---|---|
review_id | TikTok Shop review ID |
product_id | Product the review belongs to |
sku_id | The specific variant reviewed |
reviewer_id | Account that left the review |
reviewer_name | Display name, partially masked by TikTok |
reviewer_avatar_url | Reviewer avatar |
review_rating | 1 to 5 |
review_text | Review body — empty when they rated without writing |
review_time | Millisecond epoch, as a string |
review_images | Photos or video attached |
display_image_url | Primary review image |
is_verified_purchase | TikTok confirmed they bought it |
is_incentivized_review | They were rewarded for reviewing |
sku_specification | Which variant — size, colour |
review_country | Where the review came from |
product_name | Product name carried on the record |
review_ratings | Star breakdown for the whole product |
{"review_id": "7668316668074886926","review_rating": 5,"review_text": "Amazing 🤩","is_verified_purchase": true,"is_incentivized_review": false,"review_country": "US","review_ratings": {"review_count": "6550","overall_score": 4.7,"rating_result": { "1": "242", "2": "86", "3": "150", "4": "529", "5": "5543" }}}
What people use it for
- Read the complaints, not the average. Set
reviewRatingto1_starand you get only the reviews that say what is wrong. - Separate real sentiment from seeded reviews.
is_incentivized_reviewmarks reviewers who got a free sample or discount;is_verified_purchasemarks confirmed buyers. - See the product before you sell it.
with_mediareturns only reviews with photos, which is where you find out what actually arrives in the box. - Track sentiment over time. Schedule a run and diff
review_ratings.rating_resultbetween runs.
Questions
Why did I get fewer reviews than maxItems?
Two reasons, and they look the same from outside. Either the product genuinely has fewer reviews, or you set a filter and it ran out of matches. A product with 6,550 reviews might have only 242 one-star ones, so reviewRating: "1_star" with maxItems: 500 stops at 242. review_ratings.rating_result tells you the ceiling for each rating before you run.
Why is review_text empty on some rows?
TikTok lets buyers leave a star rating without writing anything. Those still count toward the product's rating and still appear here, with review_rating set and review_text empty. If you only want written reviews, filter on non-empty review_text after the run.
What is is_incentivized_review?
TikTok's own flag for reviewers who received something in exchange — a free sample, a discount, a gift card. It is worth splitting on: incentivized reviews skew positive, so a 4.8 average made mostly of incentivized reviews is a different signal from a 4.8 built on ordinary purchases.
Does the star breakdown cost an extra request?
No. review_ratings arrives with every page the upstream returns, so it is attached to each row for free. It describes the whole product, not the page — the same values appear on every row of a run.
Why is review_time a string and not a date?
It comes back as a millisecond epoch string, and it is passed through unchanged rather than reformatted, so nothing is lost to a timezone guess. new Date(Number(review_time)) gives you a date.
Can I scrape reviews for several products at once?
One product per run. Take product_id from any row returned by TikTok Shop Search Scraper or TikTok Shop Seller Products Scraper, then drive one run per product through the Apify API.
Other TikTok Shop Actors
| Actor | Use when |
|---|---|
| TikTok Shop Search Scraper | You are finding products by keyword |
| TikTok Shop Products Scraper | You want products plus full detail |
| TikTok Shop Product Scraper | You want one product's full record |
| TikTok Shop Seller Products Scraper | You want one shop's entire catalogue |
| TikTok Shop Category Products Scraper | You want a whole category, without a keyword |
Support
Questions, bugs, or feature requests: contact@toolzerhub.com
Browse the rest: apify.com/toolzerhub