TikTok Shop Scraper — Reviews & Product Finder
Pricing
from $3.00 / 1,000 review scrapeds
TikTok Shop Scraper — Reviews & Product Finder
Scrape TikTok Shop product reviews (Vietnam / SEA and more) or find best-selling products by keyword with units sold, price and rating (US). One actor, two modes.
Pricing
from $3.00 / 1,000 review scrapeds
Rating
0.0
(0)
Developer
Smallsoft
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
Pull TikTok Shop data without a browser, a proxy, or a captcha in sight. One
Actor, two jobs, picked with the mode input:
| Mode | What you get | Storefront |
|---|---|---|
reviews | Every review for products you already know — rating, text, photos, buyer's variant, verified-purchase flag | Vietnam / SEA, UK, US |
products | Best-selling products for a keyword — units sold, price, rating, review count, seller | US |
Use products to find what is selling, then feed those product IDs into
reviews to learn why people buy it — or why they return it.
Input
Find products by keyword:
{"mode": "products","searchWords": ["labubu", "stanley cup"],"maxProductsPerKeyword": 100}
Scrape reviews for known products:
{"mode": "reviews","productUrls": ["https://shop.tiktok.com/vn/pdp/1736377755182990422"],"region": "VN","maxReviewsPerProduct": 200,"minRating": 1,"withMediaOnly": false}
productUrls accepts full /{region}/pdp/{id} URLs or bare numeric product IDs.
A max… of 0 means "everything reachable"; omitting the field uses the
default (200 reviews / 100 products), never "unlimited".
Output
One dataset row per record. The dataset has a table view per mode.
reviews — reviewId, productId, productName, productUrl, region,
rating, text, reviewDate, reviewerName, reviewerCountry,
isVerifiedPurchase, isIncentivized, hasMedia, mediaUrls,
purchasedVariant, subRatings, scrapedAt.
products — productId, title, region, searchWord, priceText,
priceValue, currency, originalPriceText, soldCount, rating,
reviewCount, sellerId, sellerName, productUrl, imageUrl, scrapedAt.
Example product row:
{"productId": "1730612163263434760","title": "POP MART THE MONSTERS Let's Checkmate Series","searchWord": "labubu","priceText": "$46.99","priceValue": 46.99,"currency": "USD","soldCount": 26073,"rating": 4.9,"reviewCount": 4164,"sellerName": "POPMART US SHOP","productUrl": "https://shop.tiktok.com/us/pdp/..."}
What this Actor promises — and what it doesn't
Straight answers, so you can plan around them.
Reviews are region-aware. Pass region: VN, TH, ID, MY, PH, SG,
GB, US. Vietnam and Southeast Asia are first-class here, not an afterthought.
Keyword search is US-only. The TikTok Shop search surface only answers for
the US storefront; every other region is rejected upstream. products mode
therefore pins region to US and tells you if you passed another. VN/SEA
products are still reachable in reviews mode by product ID.
There is no fixed product count per keyword. Search exposes no page cursor,
so the Actor walks the result set, de-duplicates, and stops when a keyword runs
dry. Measured on 2026-07-10 with maxProductsPerKeyword: 0:
| Keyword | Unique products |
|---|---|
iphone 16 case | 359 |
stanley cup | 269 / 280 (two runs) |
labubu | 230 / 209 / 195 (three runs) |
Expect a couple hundred for a broad keyword, varying by roughly ±10% between
runs, because the upstream page composition is not deterministic. Narrow
keywords return far fewer. Use more keywords to widen coverage, not a bigger
maxProductsPerKeyword.
Reliability
The upstream data is noisy. The Actor absorbs that instead of passing it to you:
- Transient failures are retried with backoff, so one hiccup never kills a whole product or keyword.
- Duplicate inputs are dropped. A PDP URL and its bare ID are the same
product;
Labubuandlabubuare the same keyword. You are never charged twice for the same row. - Quotas are never overshot. Ask for 30 and you get 30, not 40.
- Nothing is truncated silently. If an internal safety cap stops a run, the log says so and warns that more data may exist.
- Output is incremental. Rows land in the dataset as they are scraped, so an aborted run still returns everything collected up to that point.
Pricing
Pay per result: you are charged for each row that lands in your dataset, and for
nothing else. A run that returns no rows costs you nothing. Set
maxTotalChargeUsd on the run to cap your spend — the Actor delivers exactly
what it charged for and then stops.
Legal
Reviews, prices and product listings on TikTok Shop are public data. This Actor does not access private messages, logged-in-only content, or personal data beyond the display names TikTok itself publishes next to a review.
This project is not affiliated with, endorsed by, or sponsored by TikTok or ByteDance.
Development
npm installnpm test # typecheck (src + scripts) + 59 unit tests, zero extra depsnpm run buildapify push