TikTok Shop Scraper — Reviews & Product Finder avatar

TikTok Shop Scraper — Reviews & Product Finder

Pricing

from $3.00 / 1,000 review scrapeds

Go to Apify Store
TikTok Shop Scraper — Reviews & Product Finder

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

Smallsoft

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 days ago

Last modified

Share

Pull TikTok Shop data without a browser, a proxy, or a captcha in sight. One Actor, two jobs, picked with the mode input:

ModeWhat you getStorefront
reviewsEvery review for products you already know — rating, text, photos, buyer's variant, verified-purchase flagVietnam / SEA, UK, US
productsBest-selling products for a keyword — units sold, price, rating, review count, sellerUS

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.

reviewsreviewId, productId, productName, productUrl, region, rating, text, reviewDate, reviewerName, reviewerCountry, isVerifiedPurchase, isIncentivized, hasMedia, mediaUrls, purchasedVariant, subRatings, scrapedAt.

productsproductId, 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:

KeywordUnique products
iphone 16 case359
stanley cup269 / 280 (two runs)
labubu230 / 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; Labubu and labubu are 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.

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 install
npm test # typecheck (src + scripts) + 59 unit tests, zero extra deps
npm run build
apify push