TikTok Shop Reviews Scraper Pro โญ๏ธ avatar

TikTok Shop Reviews Scraper Pro โญ๏ธ

Pricing

from $1.29 / 1,000 reviews

Go to Apify Store
TikTok Shop Reviews Scraper Pro โญ๏ธ

TikTok Shop Reviews Scraper Pro โญ๏ธ

Extract TikTok Shop product reviews from product URLs, product IDs, or search-discovered products. Collect rating, review text, reviewer metadata, media flags, and product context for ecommerce intelligence.

Pricing

from $1.29 / 1,000 reviews

Rating

5.0

(1)

Developer

DeepMine

DeepMine

Maintained by Community

Actor stats

1

Bookmarked

123

Total users

6

Monthly active users

2.3 days

Issues response

2 days ago

Last modified

Security

Limited permissions

Share

TikTok Shop Reviews Pro โ€“ Review Scraper & Data API

Get every public review of a TikTok Shop product, not just the 3 previews. Give product URLs, product IDs or search keywords and get one row per review: star rating, review text, variant, reviewer, verified-purchase flag, date and review photos. Each run also gives a product table (star rating, 5-to-1 star breakdown, review count) and a list of the reviews with photos.

โญ Rating๐Ÿ“ Review๐ŸŽจ Variant๐Ÿ‘ค Reviewerโœ”๏ธ Verified๐Ÿ“ธ Photo๐Ÿ“… Date๐Ÿ“ฆ Product
5Buena calidad facil de armar y muy comdaBlack White+With massage+Bonded Leather๐”‘**๐”ชโœ“2026-10-18Bellemave gaming chair
5Size & Dimensions: Besides of this product is perfect for mโ€ฆPinkE** P**g (**)โœ“โœ“2026-10-20Sweetcrispy office chair
5Yes it smells like rose petals and it's non sticky LOVELY aโ€ฆpickin petalst**hโœ“2026-10-29r.e.m beauty drip lip oil
1I never received the chair U. P. S delivered the wrong packโ€ฆBlack+With massage+Bonded Leatherp**sโœ“2026-06-29Bellemave gaming chair

What you get
Reviews per productThe newest reviews in TikTok's order, up to your maxReviewsPerProduct (default 100). Set it high for the full history.
Checked October 29, 2026 (Apify platform runs, version 3.1.24)The prefilled 3 products ร— 100 reviews: 300 of 300 reviews in 3 of 3 runs (31 to 59 seconds on a day TikTok refused many requests; first reviews saved after about 6 to 7 seconds). The previous version lost a whole product in 1 of 3 of the same runs. A 221-review product: 221 of 221. A 1,184-review product: 1,183 of 1,184 in 12 to 21 seconds in 2 of 3 runs; the third ended Incomplete at 933 reviews when TikTok kept refusing pages inside the time limit (the Products table says so). The missing review is counted by TikTok but not published. Star and photo filters: 12 of 12 one-star reviews, 20 of 20 reviews with photos or video.
Very large productsTikTok's public review list can be shorter than the count on the page. Example: a product showing 4,621 reviews had a list that ended at 3,702, and we collected all 3,702. On the biggest products TikTok also limits how deep anyone can page. The ๐Ÿ›๏ธ Products table always shows the count TikTok displays next to the number delivered.
MarketUnited States TikTok Shop
If TikTok blocks a productNever reported as a product without reviews, and never filled with preview data. If TikTok refuses every product, the run fails. If it refuses some, the run succeeds with a warning, and the ๐Ÿ›๏ธ Products table marks them Failed or Incomplete with the reason.

Use it for product research, competitor analysis, brand monitoring, sentiment analysis and conversion optimization, or as a TikTok Shop reviews dataset for BI dashboards, AI pipelines and customer-feedback analysis.

What's new in version 3 (September 2026)

Earlier versions often returned only the 3 preview reviews TikTok embeds in the product page, because TikTok's review API started requiring signed requests. Version 3 signs every review request the way TikTok's own website does and pages through the full review list.

  • Full review history per product instead of 3 previews.
  • Modern product links (shop.tiktok.com/us/pdp/<name>/<id>) work, as do www.tiktok.com/shop/pdp/... links, older /view/product/<id> links and plain product IDs.
  • Clean rows: every row has the same fields in reading order (rating, text, variant, reviewer, date...), empty values are null, and the Console table shows product images, stars, review snippets and photos. Two more tables come with every run: ๐Ÿ›๏ธ Products and ๐Ÿ“ธ Photo Reviews.
  • Newest first, without holes: with a limit you get the newest N reviews in order. If TikTok refuses an early page and a retry can't get it, the product is marked incomplete instead of skipping ahead to older reviews.
  • Honest run status: a run where TikTok refused every product fails. Otherwise refused and incomplete products are named in the log and in the ๐Ÿ›๏ธ Products table.
  • Predictable cost and time: retries per product are capped in requests and in seconds, so a product TikTok refuses can't run up proxy time or hold up the run. It gets what it can in about 20 seconds (longer for large limits), then is marked incomplete. You only pay for review rows.
  • Fast: products are collected 5 at a time, and the log ends with one line per product (reviews, status, seconds).
  • Old input fields that no longer do anything are accepted and ignored.
  • Lower price: from $1.99 per 1,000 reviews on the Starter plan (was $8), with no start fee.
  • Restart-safe: if Apify restarts a run, reviews it already delivered are skipped and never charged twice, and the run never goes past your maximum cost. A restarted run that can't read back what it already delivered stops with a clear error instead of collecting again.

Note for existing users: maxReviewsPerProduct now really is the number of reviews you get per product, and you pay per review. A saved task that says 50 now returns up to 50 reviews per product where the old version usually returned 3, so its row count and cost go up. Lower maxReviewsPerProduct, or set maxResults for a run-wide cap, if you want less. Leaving the field out now means 100 reviews per product (it was 50).

Field names changed. Rows now use short camelCase names (review_text is now text, review_date is reviewedAt, and so on; the full list is under Output). If an integration reads the old names, set outputFormat to v2 to get rows with the version 2 names and layout (details under Old field names).

Why TikTok Shop review data matters

Most teams don't just need product listings. They need review intelligence:

  • What are buyers praising?
  • What are buyers complaining about?
  • Which products are gaining positive momentum?
  • Which competitors are collecting low-star feedback?
  • Which variants get media-rich reviews?
  • Scrape TikTok Shop product reviews at scale
  • Export TikTok Shop review data for analysis
  • Build product-review and star-rating datasets
  • Monitor customer sentiment and recurring complaints
  • Compare competing TikTok Shop products and sellers
  • Feed review intelligence into dashboards, databases and AI workflows

Who should use this

  • Ecommerce operators managing multiple product lines
  • Marketplace analysts tracking competitor quality signals
  • Growth teams optimizing offer, pricing and messaging
  • Agencies running TikTok Shop research for clients
  • Data teams building recurring marketplace dashboards
  • AI teams training review classification and trend models

Input

Give at least one of these:

FieldUse it when
productUrlsYou have product links.
productIdsYou store product IDs (the long number at the end of a product URL). Keep them as text.
queriesYou want the Actor to find products by keyword first.

reviewsFilter reads only 1- to 5-star reviews or only reviews with photos or video (default: all). Main limits: maxReviewsPerProduct (default 100), maxProductsTotal (default 50), maxProductsPerQuery (default 50), maxPagesPerQuery (default 5) and an optional run-wide maxResults. sortBy picks most recent first (default) or TikTok's recommended order.

Example input

The form comes filled with these three products (each has 200 to 900+ reviews). With the default of 100 reviews per product, the run returns 300 reviews, newest first, in about 15 seconds.

{
"productUrls": [
"https://shop.tiktok.com/us/pdp/compact-office-chair-pu-leather-height-adjustable-360-swivel/1731016350288417305",
"https://shop.tiktok.com/us/pdp/drip-lip-oil-by-r-e-m-beauty-coconut-oil-infused-moisturizing-gloss/1729440509592047995",
"https://shop.tiktok.com/us/pdp/ergonomic-gaming-chair-by-bellemave-swivel-high-back-adjustable-recliner/1729513286476075339"
]
}

Keyword search finds products the way TikTok's own search lists them, which is often newer listings with only a handful of reviews. If you already know the products you care about, give their URLs.

Output

Every run gives you three tables (Apify datasets) and a run report:

TableRowsConsole view columns
โญ All Reviews (default dataset, billed)One per review๐Ÿ“Š Overview: ๐Ÿ–ผ๏ธ Product, โญ Rating, ๐Ÿ“ Review, ๐ŸŽจ Variant, ๐Ÿ‘ค Reviewer, โœ”๏ธ Verified, ๐Ÿ“ธ Photo, ๐Ÿ“… Date, ๐Ÿ”— TikTok Shop, ๐Ÿ… Rank. ๐Ÿ“ Full Reviews: rating, full text, variant, date, reviewer, product.
๐Ÿ›๏ธ Products (free)One per product, in input order๐Ÿ–ผ๏ธ Product, ๐Ÿ“ฆ Name, โญ Rating, ๐Ÿ’ฌ Reviews, ๐Ÿ“ฅ Collected, โญ 5 to 1 Stars, ๐Ÿšฆ Status, ๐Ÿ’ก Note, ๐Ÿ”— TikTok Shop
๐Ÿ“ธ Photo Reviews (free)The delivered reviews that have photos๐Ÿ“ธ Photo, โญ Rating, ๐Ÿ“ Review, ๐ŸŽจ Variant, ๐Ÿ‘ค Reviewer, ๐Ÿ“… Date, ๐Ÿ–ผ๏ธ All Photos, ๐Ÿ–ผ๏ธ Product, ๐Ÿ”— TikTok Shop

A review row (real, collected October 29, 2026 by version 3.1.26; the avatar link is cut here). variantImage is the picture of the variant bought, photo/photos are the reviewer's own:

{
"productImage": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/bd578b0b2199460d83dd1dbc2314349e~tplv-fhlh96nyum-crop-webp:800:800.webp",
"productName": "PU Leather Compact Armless Height-Adjustable (17.71\"-21.45\") Rolling Swivel Office Chair - Sturdy Modern Vertical Grain, Airflow Cushioned Seat, U-Shape Lumbar, Easy Setup, Space-Saving for Home Use, 250lb Capacity, Leather Swivel Chairs & Stools Category",
"rating": 5,
"text": "Size & Dimensions: Besides of this product is perfect for my sewing table. I like that there are no arms to get in the way.\nEase of Assemble: Right out of the box it took me probably 10 minutes to assemble my chair. I love how the Allen wrench tool was very easy to use for the assembly.\nComfort: The comfort level of this chair is amazing it has great lumbar support for me sitting in my sewing chair for at least 6 hours a day",
"textSnippet": "Size & Dimensions: Besides of this product is perfโ€ฆ",
"variant": "Pink",
"skuId": "1732317823154360857",
"variantImage": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/953cde52e5314eb09b4573d8b682f3dd~tplv-fhlh96nyum-crop-webp:800:800.webp",
"reviewerName": "E** P**g (**)",
"reviewerAvatarUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/eb5923581a928a46a75d4e8307ec42b0~tplv-tiktokx-cropcenter:100:100.jpg?โ€ฆ",
"isVerifiedPurchase": true,
"isIncentivized": false,
"photo": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/e13d570b8fa64fac943b1c9a770e3ca2~tplv-fhlh96nyum-crop-webp:300:300.webp",
"photos": [
"https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/e13d570b8fa64fac943b1c9a770e3ca2~tplv-fhlh96nyum-crop-webp:300:300.webp"
],
"reviewedAt": "2026-10-20T12:19:54Z",
"rank": 2,
"productUrl": "https://shop.tiktok.com/us/pdp/compact-office-chair-pu-leather-height-adjustable-360-swivel/1731016350288417305",
"seller": "Sweetcrispy Shop",
"brand": null,
"queries": null,
"reviewId": "7698723487388813069",
"reviewerId": "6620608868542398469",
"country": "US",
"productId": "1731016350288417305",
"scrapedAt": "2026-10-30T04:16:50Z"
}

Review fields (in row order)

  • productImage: the product's main image.
  • productName: product title as TikTok Shop shows it.
  • rating: stars the reviewer gave, 1 to 5.
  • text: full review text; null for star-only reviews (about a third of reviews).
  • textSnippet: first 50 characters of the text.
  • variant: the variant bought (color, size...); null for single-variant products and reviews TikTok shows without one.
  • skuId, variantImage: TikTok's ID of the variant bought and the product page's picture of that variant (null when the product has no picture for that option). Reviewers' own photos are in photo and photos.
  • reviewerName: reviewer name, masked by TikTok (C**h).
  • reviewerAvatarUrl: the reviewer's profile picture; TikTok signs the link and it expires, null when the reviewer has none.
  • isVerifiedPurchase, isIncentivized: TikTok's badges.
  • photo, photos: the first review photo and all of them (300 ร— 300 previews from TikTok's image CDN); null when the review has none.
  • reviewedAt: when the review was posted, UTC.
  • rank: position in TikTok's order for the product (1 = newest, or top recommended).
  • productUrl: the product page.
  • seller, brand: shop name, and the brand when the product page names one.
  • queries: every search keyword that found the product (a product found by two keywords is collected once and lists both); null for URL and ID input.
  • reviewId, reviewerId: TikTok's IDs, as text.
  • country: country of the review (US).
  • productId: TikTok's product ID, as text.
  • scrapedAt: when the row was collected, UTC.
  • rawReview: TikTok's original review object, only with includeRawReview.

Every row has every field; a value TikTok doesn't have is null. Rows of one product come in TikTok's order; with several products in parallel, the products' rows can be interleaved, so sort by productId and rank if you need them grouped.

Product fields

productImage, productName, rating (average stars), price and sold (as the product page shows them), reviews (the count TikTok shows), reviewsCollected (delivered this run), fiveStar to oneStar (TikTok's count per star), status (Complete, Reached your max, Stopped early, Incomplete, Failed or Not collected), note (why, in words: "Newest 100 of 924", "TikTok kept showing its captcha"), productUrl, seller, brand, queries, productId, scrapedAt.

Old field names (outputFormat: v2)

Rows from version 2 used snake_case names. They map like this: product_id โ†’ productId, product_name โ†’ productName, seller โ†’ seller, brand_name โ†’ brand, product_url and source_url โ†’ productUrl, review_rank โ†’ rank, review_id โ†’ reviewId, rating โ†’ rating, review_text โ†’ text, review_date โ†’ reviewedAt, reviewer_name โ†’ reviewerName, reviewer_id โ†’ reviewerId, is_verified_purchase โ†’ isVerifiedPurchase, is_incentivized_review โ†’ isIncentivized, variant โ†’ variant, first_image_url โ†’ photo, image_urls โ†’ photos, query โ†’ queries (now a list of every keyword that found the product), scraped_at โ†’ scrapedAt, raw_review โ†’ rawReview. Dropped because TikTok never fills them or they repeat another field: reviewer_country (always US on the US shop), likes_count, video_count, first_video_url, video_urls, has_media, image_count, raw_product_context.

Set outputFormat to v2 to get rows with the version 2 names and layout, built by version 2's rules: the same snake_case keys in the same (alphabetical) order, empty values left out (or null with compactNullFields off), empty photo and video lists kept as [], one query string, and includeRawProduct as before. The two extra tables are not written, and the Console table views are built for the new names, so read v2 rows through the API or the JSON/CSV export. What still differs from version 2's rows: they are full reviews instead of the 3 previews, so review_rank counts in TikTok's full list; review_date, reviewer_id, reviewer_country and variant are now filled (version 2 defined them but its parser never found them; variant is TikTok's text, Default for single-variant products); seller is always the shop name (version 2 sometimes wrote an internal object there); and product links for ID input have the shop.tiktok.com/us/pdp/product/<id> form.

Run report (OUTPUT)

Every run also saves a report in the key-value store under OUTPUT for integrations: for each product the advertised review count (expectedTotal), reviews delivered, status (complete, limited by your settings, partial or failed) and the reason code. refusedProducts and incompleteProducts list the products worth a rerun. costLimitedProducts lists products left unread because reading them would have cost more than the run's reviews earn. Residential retries and further products go on for as long as the reviews pay for them, and a product stopped this way gets another try once more reviews have come in, so this happens only on runs whose products keep coming back with no reviews (empty, or refused by TikTok on every IP). Keywords left unsearched for the same reason are in searchSummary with status skipped. The run's status line gives the same summary.

Pricing

Apify planPrice per 1,000 reviews
Free$2.49
Starter$1.99
Scale$1.69
Business$1.29

No start fee: a run costs only the reviews it delivers. You pay per review row in the โญ All Reviews table. The ๐Ÿ›๏ธ Products and ๐Ÿ“ธ Photo Reviews tables and the run report are free, and products without reviews or refused by TikTok cost nothing. maxReviewsPerProduct caps the cost per product.

Free plan

The free Apify plan gets the same full run as paid plans. A run stops at the number of reviews your maximum cost per run pays for.

Practical workflows

Review sentiment intelligence

  1. Pull reviews by category keyword.
  2. Compare products in the ๐Ÿ›๏ธ Products table (rating, star breakdown, review count).
  3. Tag text by theme (comfort, quality, shipping, sizing...).
  4. Track complaint themes and low-rating spikes over time.

Competitor weakness discovery

  1. Collect reviews for the top competing products.
  2. Filter low ratings.
  3. Find repeated pain points and answer them in your own listing.

Product quality monitoring

  1. Schedule recurring runs with sortBy: most_recent and a modest maxReviewsPerProduct.
  2. Compare rating and text over time, and the product's star breakdown between runs.
  3. Catch problems before conversion drops.

Variant insights

  1. Group reviews by variant.
  2. Compare ratings per variant.
  3. Promote winning variants and fix weak ones.

FAQ

Do I get all reviews or only a sample?

All reviews TikTok publishes for the product, up to your maxReviewsPerProduct. Set it to 10000 or more for full histories. TikTok's displayed count sometimes includes a few reviews it doesn't publish; those can't be collected by anyone.

What happens when TikTok blocks a request?

The Actor reads through Apify's datacenter proxy and retries on fresh IPs, first datacenter, then US residential for what TikTok keeps refusing there (paid by the Actor, not by you), with a cap on retries and on time per product (about 20 seconds when TikTok keeps refusing, plus one residential retry), so one stubborn product never holds up the rest. The Actor reads each product through TikTok Shop's own product data request instead of loading the product page (about a third of the bytes, and no "Security Check" captcha page); when TikTok refuses that request, it asks again on another IP. If a product still can't be read, the log warns and the ๐Ÿ›๏ธ Products table marks it Failed or Incomplete with the reason in words (OUTPUT has the reason code, e.g. product_unavailable when TikTok didn't return the product, challenge when a search page kept showing the captcha). The run fails only when TikTok refused every product. Enable allowPartialResults to let even those runs succeed.

Which markets are supported?

The United States TikTok Shop.

Does it use a browser or my account?

No. It reads TikTok's public review API anonymously. No login, no cookies from you.

Can I use this for TikTok Shop competitor research?

Yes. Mix product URLs and keywords in one run.

Can I export this to my own dashboard?

Yes. Export to CSV, Excel or JSON, or pull the dataset through the Apify API into Google Sheets, BigQuery, Snowflake, PostgreSQL or Python.

Calling it via API?

Use deepmine/tiktok-shop-reviews-pro (was sentry/tiktok-shop-reviews-pro before September 3, 2026), or the Actor ID eOx7btKVgiegLYrmO, which never changed. If an integration still calls the old sentry/ name, switch it to the Actor ID: it works for every version of the name.

curl -X POST "https://api.apify.com/v2/acts/eOx7btKVgiegLYrmO/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"productIds": ["1729513286476075339"], "maxReviewsPerProduct": 100, "reviewsFilter": "with_images"}'
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("eOx7btKVgiegLYrmO").call(run_input={"productIds": ["1729513286476075339"], "maxReviewsPerProduct": 100})
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
print(review["rating"], review["text"])

The TikTok Shop journey

  1. Find products and their sales with TikTok Shop Search Pro (Hr1hjEAGdYMr1RbUj): keyword to products, units sold and estimated GMV. Its rows carry the productId this Actor reads.
  2. Read what buyers say with this Actor: every review of the products you shortlisted.
  3. Find who promotes them with TikTok Shop Affiliate Products (qiAiFIv5U1jrKcSG6): affiliate-ready products scored for commission and demand.

Compliance and responsible use

Use this Actor in accordance with applicable laws, data privacy requirements and platform terms. You are responsible for lawful, ethical and policy-compliant use in your jurisdiction.