TikTok Shop Scraper - Products, Prices, Sales & Reviews (US)
Pricing
from $1.99 / 1,000 products
TikTok Shop Scraper - Products, Prices, Sales & Reviews (US)
Search TikTok Shop US by keyword or paste product links for public product data: title, price and original price, discount, units sold, rating, review count, shop, images and URL - plus the product page's public reviews. No login, no cookies. Anything cut short is labelled, never reported as zero.
Pricing
from $1.99 / 1,000 products
Rating
0.0
(0)
Developer
Lantern Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
TikTok Shop Scraper — Products, Prices, Sales & Reviews (US)
A Lantern Lab Actor. Give it TikTok Shop keywords or product links and get back each product's title, price and original price, discount, units sold, rating, review count, shop, images and product URL — and, if you switch reviews on, the reviews the product page shows publicly, with rating, text, post date and country. United States storefront. No TikTok login, no cookies, no account of yours.
Price: you pay per product row and per review row. Keywords that return nothing, dead links, status rows, the run summary and any product row TikTok Shop served with the price masked are free, and there is no run-start fee.
What you get
- Products from a keyword search, in result order, or from product links / bare product IDs.
- price and originalPrice with discount and currency. For a product sold in a range,
priceis the low end andpriceMaxthe high end.originalPriceis only the struck-through price the page actually shows; a product on sale at its list price getsnull, not a made-up "was" figure. When TikTok Shop masks the price for logged-out visitors — it shows$7** - 8**on some products —priceisnull,priceHiddenistrue, the row is marked partial and you are not charged for it. It is never a guess and never 0. - soldCount, rating, reviewCount, shopName with shop ID and shop rating, and the product URL TikTok Shop itself publishes.
- imageUrls — every product image from a product link, the result-list image from a keyword.
- Reviews (optional):
rating,text,publishedAt,reviewerCountry, verified-purchase flag, the review's own photos and the display name the page shows — TikTok Shop masks that itself (L**), and the reviewer's account ID and avatar are left alone. Each review is linked to its product byproductId. - Clear status for every input. A keyword that returned nothing, a product ID TikTok Shop does not have, and an input cut short by a limit are three different, labelled records — never confused, and a blocked request is never reported as zero results.
- No duplicates. A product found by several keywords (or by a keyword and a link) is written and charged once; so is a review.
- Two platform-specific timestamps kept apart.
collectedAtis when this run read the page;publishedAton a product row is alwaysnull, because TikTok Shop publishes no listing date. On a review rowpublishedAtis the platform's own post time. - A hard request ceiling.
maxUpstreamRequestscaps the run; leave it empty and the Actor derives one from your input.
Input example
{"searchQueries": ["coffee grinder", "air fryer"],"productUrls": ["https://www.tiktok.com/shop/pdp/coffee-grinder-electric/1732083256138699473"],"region": "US","maxProducts": 30,"includeReviews": false}
| Field | Default | Meaning |
|---|---|---|
searchQueries | — | One keyword per line. Use this, productUrls, or both. |
productUrls | — | Product links or bare product IDs. shop.tiktok.com links and links without the slug work too. |
region | US | Storefront to read. This version supports US only. |
maxProducts | 30 | Products to take per keyword, from the top of the result page. |
includeReviews | false | Also return the product page's public reviews, one row each. |
maxReviewsPerProduct | 5 | Reviews per product. TikTok Shop shows at most 5 publicly. |
maxUpstreamRequests | derived | Hard ceiling on requests to TikTok Shop for the whole run, retries included. |
proxyConfiguration | Apify Proxy | Datacenter is the default and what this Actor is measured on. |
Output example
A product row (recordType: "product"):
{"recordType": "product","productId": "1732083256138699473","title": "coffee grinder, Spice Grinder Electric with Stainless Steel Blades","price": 16.89,"priceMax": null,"originalPrice": 25,"discount": "-32%","currency": "USD","priceHidden": false,"priceText": "$16.89","soldCount": 85,"rating": 4.5,"reviewCount": 11,"shopName": "REDSUNSHOP","shopId": "7495952906928491217","shopRating": 4.2,"region": "US","imageUrls": ["https://p16-oec-general-useast5.ttcdn-us.com/..."],"skuCount": 1,"stockTotal": 499,"availability": "default","url": "https://www.tiktok.com/shop/pdp/coffee-grinder-electric/1732083256138699473","publishedAt": null,"fieldSource": "product_url","sourceType": "product_url","sourceQuery": null,"sourceProductUrl": "https://www.tiktok.com/shop/pdp/coffee-grinder-electric/1732083256138699473","rank": null,"partial": false,"partialReason": null,"collectedAt": "2026-10-24T03:12:44.182Z"}
A review row (recordType: "review"):
{"recordType": "review","reviewId": "7647381888391808781","productId": "1729385034780414637","rating": 5,"text": "Great product. Easy setup. Fast shipping.","publishedAt": "2026-04-08T09:57:48.000Z","reviewerCountry": "US","isVerifiedPurchase": true,"imageUrls": ["https://p16-oec-general-useast5.ttcdn-us.com/..."],"nickname": "L**","helpfulCount": null,"productUrl": "https://www.tiktok.com/shop/pdp/1729385034780414637","partial": false,"partialReason": null,"collectedAt": "2026-10-24T03:12:48.903Z"}
Every keyword also gets one free query_status row and every link one free product_status row, and the last row of the dataset is RUN_SUMMARY (also in the key-value store under RUN_SUMMARY): products and reviews collected, how many of them were charged, duplicates skipped, products with a hidden price, which inputs are incomplete and why, how many requests went to TikTok Shop, and whether the run stopped early.
Limits — read these before you run
- 30 products per keyword. TikTok Shop's public search page serves one page of results and ignores the paging parameters in the URL, so a keyword cannot return more than about 30 products however high you set
maxProducts. It also renders that page at two sizes for the same keyword — 25-30 results, or 5 that claim to be complete — so the Actor asks again from a new IP while the page comes back short and keeps the largest rendering;searchAttemptson the keyword's status row says how many it needed. The status row also says when the page held more than you asked for (max_products_reached) and when TikTok Shop itself said there is more behind a cursor only its own app can follow (platform_search_limit). Use several narrower keywords, or product links, to go wider. - 5 reviews per product. The public product page shows only its first screen of reviews. A product with more gets a
reviews_statusrow saying how many of how many arrived (platform_review_limit). Reading every review of a product is not possible without logging in, which this Actor does not do. - TikTok Shop has no "no results" page for a keyword. Search for something nothing matches and it fills the result list with unrelated recommendations under a "Results for …" heading. This Actor returns what the page holds rather than inventing an empty result, so check the titles before trusting a very narrow keyword.
- Some prices are hidden from logged-out visitors. Those rows carry
priceHidden: true,price: nullandpartial: true, and everything else the page published — and they are free: a row missing a field this Actor promises is not charged, and it does not consume your run's maximum charge either.RUN_SUMMARYreports them asproductsWithHiddenPrice, andproductsChargedexcludes them. Which products those are is decided per visit, not per product: the same product can answer with a price on one read and a masked one on the next. - A price is what TikTok Shop showed at
collectedAt, not a stable attribute. TikTok Shop runs per-session promotions, so the same product can read$59.99,$27.99and$31.43within a quarter of an hour, and a product row from a keyword can differ from the same product's own page read minutes later.priceis always the figure the page carried on the request this row came from;fieldSourcesays which page that was. Re-read a product rather than treating one row as its list price. - Occasional security checks. TikTok Shop answers some requests with a captcha page instead of the data. Each retry leaves from a new IP, and a request that keeps being refused is reported as
blockedon the input's status row — never as an empty result. If a run sees many of them, switchproxyConfigurationto residential. - United States only. Other storefronts are refused at input validation rather than returning a US catalogue under the wrong label.
- Public pages only. This Actor reads the same pages a logged-out visitor sees, at
/shop/pdp/…and/shop/s, and it does not read anything TikTok'srobots.txtdisallows. From a review it takes only what the page shows: the already-masked display name, rating, text, date, country and the review's own photos — not the reviewer's account ID and not their avatar.