Tiktiok Shop Product Reviews
Pricing
from $2.50 / 1,000 reviews
Tiktiok Shop Product Reviews
Scrapes every review from any TikTok Shop product page: rating, text, photos, variant, reviewer name/country, verified & incentivized flags. Includes product title, price, per-SKU stock, sold count, category, rating breakdown, shop stats. Sort by newest or filter by star rating
Pricing
from $2.50 / 1,000 reviews
Rating
0.0
(0)
Developer
Reviewly
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
TikTok Shop Product Reviews Scraper
Export every review from any TikTok Shop product in seconds — full text, star rating, photos, dates and buyer details — plus the product's live price, stock and seller stats.
Paste a product link. Get a clean, structured dataset. No browser automation, no login, no API keys.
- ⚡ Fast — 971 reviews in under 10 seconds, 3,360 reviews in 16 seconds
- 🎯 Complete — collects the entire review history, not the first page
- 💰 Real prices — the sale price, original price and discount TikTok hides from scrapers
- 📸 Rich data — review photos, verified-purchase flags, purchased variant, buyer country
- 📊 Ready to use — export to Excel, CSV, JSON or Google Sheets in one click
📌 What this Actor does
This Apify Actor scrapes TikTok Shop product reviews at scale. You give it one or more TikTok Shop product URLs; it returns one clean record per product with every review nested inside.
It solves a real problem: TikTok Shop shows you a handful of reviews at a time behind an infinite scroll, and offers no export. Copying thousands of reviews by hand is impossible. This web scraping tool turns any product page into a spreadsheet in seconds.
Who it's for
| You are… | You use it to… |
|---|---|
| E-commerce seller / brand | Monitor your own reviews and your competitors', catch quality complaints early |
| Product researcher / dropshipper | Validate winning products before you buy inventory |
| Market researcher / analyst | Mine thousands of real customer opinions for a category |
| Marketing / agency team | Pull social proof, testimonials and UGC photos for campaigns |
| Developer / data team | Feed a clean review feed into dashboards, LLMs or sentiment models |
✨ Key features
- Every review, not a sample. Pages through the full history until there is nothing left — thousands of reviews per product.
- The real price. TikTok deliberately masks prices from non-browser clients (you get
"*"instead of7.84). This Actor fetches the genuine sale price, original price, discount percentage, per-variant prices and live stock. - Review photos included. Direct image URLs for every customer photo.
- Filter by star rating. Pull only 1-star reviews to find product problems, or only 5-star for testimonials.
- Sort by newest. Ideal for scheduled runs that track new reviews over time.
- Full product context. Title, description, images, SKUs, sold count, category path and the seller's shop rating, follower count and total sales.
- Accepts any link format. Full
tiktok.com/shop/pdp/...URLs,shop.tiktok.comregional URLs, or just the bare product ID. - Honest reporting. A
partialflag tells you when a run couldn't reach everything — you never get a truncated export silently labelled complete. - Multiple products per run. Queue a whole competitor catalogue in one go.
🧠 Why this Actor is different
Most TikTok Shop scrapers drive a headless browser, which is slow, expensive and fragile. This one talks to TikTok's own data endpoints directly.
1. It's genuinely fast and cheap. No Chrome instance means low memory and low compute cost. A 3,370-review product finishes in about 16 seconds.
2. It gets the real price. TikTok serves fake, masked prices to automated clients — "*" for 7.84, "2*" for 20.00. Naive scrapers parse "2*" as $2 for a $20 product and quietly poison your dataset. This Actor retrieves the true price from a separate endpoint and refuses to guess when a value is masked.
3. It doesn't stop early. TikTok's API intermittently answers with an empty-but-successful-looking response. Treating that as "no more reviews" truncates big products at around 1,000 reviews while reporting success. This Actor detects and retries it — which is how it reliably reaches 3,360 reviews where a naive implementation stops at 995.
4. The numbers check out. On a 971-review product, the star ratings collected match TikTok's own published breakdown exactly (62 × 1★, 33 × 2★, 58 × 3★, 120 × 4★, 698 × 5★). Nothing is missing, nothing is duplicated.
5. It's transparent about limits. See the FAQ for what TikTok itself does not expose. No overclaiming.
⚙️ Input configuration
Minimal example
{"startUrls": [{ "url": "https://www.tiktok.com/shop/pdp/cat-nail-clipper/1731578642912612516" }]}
Full example
{"startUrls": [{ "url": "https://www.tiktok.com/shop/pdp/cat-nail-clipper/1731578642912612516" },{ "url": "https://shop.tiktok.com/us/pdp/catnip-chew-toy/1731791261654290596" },{ "url": "1731466511483113636" }],"maxReviews": 0,"sortBy": "newest","ratingFilter": "all","includePrice": true,"pageSize": 500,"requestDelayMs": 0,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Fields
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | TikTok Shop product pages. Accepts www.tiktok.com/shop/pdp/<slug>/<id>, shop.tiktok.com/<region>/pdp/<slug>/<id>, or a bare product ID like 1731578642912612516. The slug is ignored — only the trailing ID matters. |
maxReviews | integer | 0 | Stop after this many reviews per product. 0 collects everything. |
sortBy | select | relevance | relevance matches what the product page shows. newest returns the most recent first. |
ratingFilter | select | all | Collect only 1, 2, 3, 4 or 5 star reviews. |
includePrice | boolean | true | Fetch the real price, per-variant prices and live stock (one extra request per product). |
pageSize | integer | 500 | Reviews per request, up to 1500. |
requestDelayMs | integer | 0 | Pause between requests. |
proxyConfiguration | proxy | Residential, US | Proxy settings — see tips below. |
debug | boolean | false | Verbose logging for troubleshooting. |
💡 Tips for best results
- Match the proxy country to the storefront. A
/us/product needs a US proxy. TikTok redirects mismatched regions to its homepage, and the Actor will report that the product wasn't found. - Use
sortBy: "newest"for scheduled runs. Combine withmaxReviews: 100to cheaply capture only what's new since yesterday. - Use
ratingFilter: "1"for product research. Negative reviews are where the actionable insight lives — and it's far cheaper than pulling everything. - Leave
pageSizeat 500. It's the sweet spot between fewer requests and manageable response sizes. - Turn off
includePriceif you only want review text — it saves one request per product.
📤 Output format
One record per product, with all reviews nested inside. This keeps product context and reviews together, so you don't need a join.
Sample output
{"productId": "1731791261654290596","productUrl": "https://shop.tiktok.com/us/pdp/x/1731791261654290596","region": "us","title": "Potaroma Interactive Catnip Chew Toy with [6000mg A+ Organic Catnip]…","description": "100% Organic Catnip Inside — Relieves Stress, Triggers Instinct…","images": ["https://p16-oec-general-useast5.ttcdn-us.com/…webp"],"price": 12.59,"originalPrice": 16.99,"currency": "USD","discountPercent": 26,"skus": [{"skuId": "1731791107165294756","name": "ACCU-Potaroma-JMBZ","specification": "Default","price": 12.59,"originalPrice": 16.99,"stock": 5431}],"soldCount": 35121,"rating": 4.6,"reviewCount": 3370,"ratingBreakdown": { "1": 135, "2": 83, "3": 160, "4": 254, "5": 2738 },"categories": ["Pet Supplies", "Dog & Cat Accessories", "Cat Toys", "Catnip Toys"],"shopId": "7495813075786500260","shopName": "Potaroma LLC","shopUrl": "https://shop.tiktok.com/us/store/potaroma-llc/7495813075786500260","shopRating": 4.4,"shopFollowers": 12240,"shopSoldCount": 182114,"shopProductCount": 60,"reviewsAvailable": 3370,"reviewsCollected": 3360,"partial": false,"scrapedAt": "2026-08-12T12:21:15.040Z","reviews": [{"reviewId": "7578995850673604366","rating": 5,"text": "My cats absolutely went crazy for these. They could smell it through the mail…","date": "2025-12-01T20:55:16.901Z","reviewerName": "K**0","reviewerId": "7048016581158585350","reviewerAvatar": "https://p16-common-sign.tiktokcdn-us.com/…jpg","images": ["https://p16-oec-general-useast5.ttcdn-us.com/…webp"],"skuId": "1731791107165294756","skuSpecification": "Default","country": "US","verifiedPurchase": true,"incentivized": false}]}
Product fields
| Field | Description |
|---|---|
productId, productUrl, region | Product identity and storefront |
title, description | Product name and full description text |
images, videos | Product media URLs |
price, originalPrice, currency, discountPercent | Current pricing |
skus[] | Each variant: skuId, name, specification, price, originalPrice, stock |
soldCount | Units sold |
rating, reviewCount | Average star rating and TikTok's total review count |
ratingBreakdown | Review count per star, 1 through 5 |
categories | Category path, root to leaf |
shopId, shopName, shopUrl, shopLogo | Seller identity |
shopRating, shopFollowers, shopSoldCount, shopProductCount | Seller reputation |
reviewsAvailable | How many reviews this query could reach |
reviewsCollected | How many were actually collected |
partial | true if the run stopped short of everything available |
scrapedAt | ISO timestamp of the run |
Review fields
| Field | Description |
|---|---|
reviewId | Unique review identifier |
rating | 1–5 stars |
text | The review text |
date | ISO 8601 timestamp |
reviewerName | Buyer's display name (TikTok masks these — see FAQ) |
reviewerId, reviewerAvatar | Buyer ID and profile picture |
images[] | Customer photo URLs |
skuId, skuSpecification | Which variant was purchased |
country | Buyer's country code |
verifiedPurchase | Confirmed buyer |
incentivized | Review given in exchange for a free or discounted product |
▶️ How to use
On the Apify platform (no code)
- Open the Actor and click Try for free.
- Paste your TikTok Shop product URLs into Start URLs — one per line, or click Add for each.
- (Optional) Set Max reviews per product, pick a star rating filter, or switch sorting to Newest first.
- Click Start.
- When it finishes, open the Dataset tab and click Export → choose Excel, CSV, JSON or Google Sheets.
That's it — no configuration needed for a first run.
Where to find a product URL
Open any TikTok Shop product, copy the address bar. It looks like:
https://www.tiktok.com/shop/pdp/cat-nail-clipper-by-potaroma/1731578642912612516
The long number at the end is the product ID — you can paste just that if you prefer.
Run it on a schedule
Use Apify Schedules to run daily or weekly. Set sortBy: "newest" and maxReviews: 100 to capture new reviews cheaply, then build a monitoring dashboard or an alert on negative sentiment.
Call it from code
curl -X POST "https://api.apify.com/v2/acts/YOUR~tiktok-shop-product-reviews-scraper/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{ "startUrls": [{ "url": "1731578642912612516" }] }'
The Actor also works with the official Apify clients for JavaScript and Python.
📈 Use cases
1. Competitor review mining. Pull every review from your top 10 competitors' bestsellers, filter to 1- and 2-star, and build a list of the exact complaints their customers have. Then fix those things in your own product listing and ad copy.
2. Product validation before you buy stock. Before committing to inventory, export the full review history of a trending product. Check whether the 4.6★ average is built on 3,000 genuine reviews or padded with incentivized ones — the incentivized and verifiedPurchase flags make this a one-column filter.
3. Automated review monitoring. Schedule a daily run sorted by newest. Push new 1- and 2-star reviews to Slack or email so your support team responds within hours, not weeks.
4. Social proof and UGC harvesting. Filter to 5-star reviews with photos and you have a ready-made library of customer testimonials and user-generated images for ads, landing pages and email campaigns.
5. Category-level market research. Run the Actor across dozens of products in a niche, then feed the combined review text to an LLM or sentiment model. Surface what buyers in that category actually care about — sizing, durability, shipping speed — backed by thousands of real data points.
🛠️ Advanced tips
Performance. The default pageSize: 500 returns roughly 1,000 reviews per two requests. Raising it to 1,500 cuts request count on very large products; lowering it makes each response smaller on a slow connection. Most products complete in a handful of requests either way.
Proxies. Residential proxies with the country matched to the storefront are the most reliable setting, and the default. Datacenter proxies also work — no rate limiting was observed in testing (40 consecutive requests all succeeded) — so try them if you want to reduce cost on large runs.
Scaling to many products. Add all URLs to a single run rather than starting one run per product — the HTTP and proxy session is reused across products, and you pay Apify's per-run startup once instead of many times. Each product is written to the dataset as soon as it finishes, so an interrupted or migrated run keeps everything already collected.
Cost control. Set maxReviews when you only need a representative sample, and turn includePrice off when you don't need pricing. Both cut work per product.
Non-US storefronts. Set apifyProxyCountry to match the region in your URL. A UK product URL with a US proxy will not resolve.
❓ FAQ and troubleshooting
Why are reviewer names masked, like J** o**n?
That's how TikTok publishes them. The platform masks buyer names on its own website for privacy, and there is no unmasked version available to anyone — including this Actor.
The Actor collected 3,360 reviews but the product says 3,370. Is something missing?
No. TikTok's headline count includes a small number of reviews it filters out of its own pages — hidden, removed or moderated entries. You are getting everything the platform actually serves. The reviewsCollected and reviewsAvailable fields make the difference explicit, and partial stays false because nothing was lost on our side.
A run finished with partial: true. What now?
Something stopped the sweep early — usually a temporary network or proxy problem. Simply re-run it; the Actor retries aggressively, so a repeat run almost always completes. If it persists, enable a residential proxy and raise requestDelayMs to 500.
I got "Could not load product…". What's wrong?
Two common causes: (1) the product ID doesn't exist or was delisted, or (2) your proxy country doesn't match the product's storefront region. Open the URL in your own browser to confirm it still works, then set apifyProxyCountry to that storefront's country.
Why is price empty?
Either includePrice was set to false, or TikTok didn't return pricing for that product on that run. The Actor deliberately reports null rather than guessing — TikTok serves deliberately corrupted price strings to automated clients, and a guessed number would be wrong, not merely missing.
Prices changed between two runs of the same product. Why? TikTok personalizes promotions per session, so the price reflects what a shopper in that session would see. Treat it as a live observation rather than a fixed catalogue price.
Can it scrape a whole shop or a search results page? Not yet — this Actor takes product URLs. You can pass as many as you like in one run. Contact me if shop-wide or keyword-based scraping would be useful to you.
Does it need my TikTok login? No. It only reads publicly visible data. No account, cookies or API keys required.
Is this legal? The Actor collects only publicly available information. You are responsible for how you use the data — check TikTok's terms and your local regulations, particularly around personal data, before using it commercially.
📞 Support
Questions, bug reports or feature requests are welcome.
- 📧 Email:
- 🐛 Issues: use the Issues tab on this Actor's Apify page
- 💡 Feature requests: tell me what you need — shop-wide scraping, extra fields and new marketplaces are all on the table
Include your run ID when reporting a problem, and enable the debug input before re-running. That gives me everything I need to diagnose it quickly.
Related keywords
TikTok Shop scraper · TikTok Shop reviews API · TikTok product data extraction · e-commerce review scraping · TikTok Shop product scraper · customer review export · Apify actor · web scraping · product research tool · competitor analysis · UGC scraping
Engineering notes on how this Actor bypasses TikTok's request signing, price cloaking and transient-failure traps: docs/how-it-works.md.