TikTok Shop Scraper - Products, Sales, Reviews & Seller Data
Pricing
from $6.15 / 1,000 results
TikTok Shop Scraper - Products, Sales, Reviews & Seller Data
TikTok Shop product scraper and data API. By product ID or URL across 13 marketplaces: units sold, ratings with star breakdown, buyer reviews, seller profile and legal business details, per-SKU variants with live stock, shipping, specs, images and video. Filter and sort. Export JSON, CSV, Excel.
Pricing
from $6.15 / 1,000 results
Rating
5.0
(1)
Developer
Scrapers Lat
Maintained by CommunityActor stats
1
Bookmarked
10
Total users
4
Monthly active users
5 days ago
Last modified
Categories
Share
TikTok Shop Scraper
Here is one real record from a live run (trimmed) with the optional AI product summary add-on enabled:
{"productId": "1730123606468825995","title": "Huloo Sleep Baby Playpen Mat - 1.3\" Thick Elasti-Foam Nursery Development Mat","region": "US","url": "https://shop.tiktok.com/us/pdp/huloo-sleep.../1730123606468825995","price": null,"priceMasked": true,"discount": "50%","discountPercent": 50,"currency": "USD","soldCount": 24749,"rating": 4.8,"reviewCount": 2569,"ratingBreakdown": { "oneStar": 58, "twoStar": 19, "threeStar": 54, "fourStar": 140, "fiveStar": 2298 },"reviews": [{ "rating": 5, "text": "Highly recommended for children and adults alike...", "reviewerName": "Z**a", "verifiedPurchase": true, "country": "US" }],"promotions": ["Flash sale", "Free shipping"],"inStock": true,"availableQuantity": 2326,"category": "Baby & Maternity > Baby Furniture > Decoration > Rugs & Carpets","shopName": "Huloo Sleep","shopId": "7496011205704125323","shopRating": 4.8,"shopFollowers": "2.2K+","shopSoldCount": "39.4K","shopReviewCount": 3067,"shopProductCount": 4,"shopSubScores": [ { "type": "productQuality", "percentage": 100 }, { "type": "service", "percentage": 94 } ],"sellerBusinessName": "Hangzhouwucui Technology Co., Ltd","sellerBusinessAddress": "1640 S Holly St, Denver, Colorado, 80224, United States","shippingInfo": { "deliveryName": "Standard", "freeShipping": true, "shippingFee": 0, "deliveryMinDays": 4, "deliveryMaxDays": 7 },"variants": "[36 SKUs with option, live stock and per-SKU image]","specifications": "[product attributes]","images": "[8 image URLs]","video": { "id": "v12d52...", "duration": 33.3, "coverUrl": "https://...", "url": "https://...mp4" },"aiSummary": "A thick, non-toxic foam baby play mat with a water-repellent, non-slip surface.","aiPros": ["Soft, 1.3in thick foam", "Free standard shipping", "Verified 4.8 rating from 2,569 reviews"],"aiCons": ["Larger sizes ship in 4-7 days"],"error": null}
The most complete TikTok Shop product data extractor available. Give it a product ID or URL and a marketplace, and it returns everything TikTok Shop exposes on a product page: units sold, average rating with a full 1-to-5 star breakdown, a sample of real buyer reviews (with text, rating and verified-purchase flag), live per-SKU stock and variants, the discount and promotions, shipping and delivery days, the complete seller profile including its legal business name and address, specifications, images, and the product video, across 13 marketplaces, plus filters and sorting to keep only the products you want.
Price note: TikTok currently masks the numeric price on its logged-out web product pages, so
priceandoriginalPriceare returned asnullwithpriceMasked: truewhen TikTok withholds them (the real discount percentage, units sold, ratings, reviews, stock and seller data are always returned in full). When TikTok does expose the price, this actor returns it. See the FAQ.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- How we compare
- Use cases
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
This is a TikTok Shop scraper and TikTok Shop product data API for e-commerce and social commerce research. You give it one or more TikTok Shop product IDs or full product URLs and a marketplace region, and it reads each product's public detail payload and writes one normalized record per product to the run's dataset.
Each record includes the title, units sold, average rating with a full 1-to-5 star breakdown, review count, a sample of real buyer reviews (text, rating, verified-purchase and incentivized flags, country, photos), the discount and promotion labels (for example Flash sale, Free shipping), live stock and per-SKU variants with per-SKU images, product options, specifications, the category path, shipping and delivery days, the complete seller profile (name, rating, sub-scores, followers, units sold, review count, product and video counts, and the seller's legal business name and address), images, and the product video. When TikTok exposes the numeric price it is included, along with an estimated lifetime revenue figure; when TikTok masks it, price is null and priceMasked is true. Prices and currency come from the product's home marketplace. Missing source values are returned as null.
Optional input filters (minimum and maximum price, minimum rating, minimum units sold, in stock only, category contains, and a sort order) are applied to the real records after they are read, so only the products that match are returned and charged.
TikTok Shop applies a security check on some marketplace edges. When an edge is challenging, the actor returns a single record with a populated error field instead of a product, and it is not charged. Retry, or read a marketplace edge that is not currently challenging.
How we compare
All figures below are the competitors' own listing figures at the time of writing; check their pages for current numbers.
| scrapers_lat (this actor) | webdatalabs/tiktok-shop-scraper | novi/tiktok-shop-scraper | excavator/tiktok-shop-scraper | |
|---|---|---|---|---|
| Marketplaces | 13 (US, GB, FR, DE, ES, IT, IE, ID, TH, VN, MY, PH, SG) | 8 | region code | US only |
| Per-SKU variants + live stock | Yes | Product mode only | No | No |
| Units sold + estimated revenue | Yes | Yes | No | No |
| Rating star breakdown (1-5) | Yes | No | No | No |
| Buyer reviews with text | Yes (embedded sample) | Yes (product mode) | No | No |
| Shipping + delivery days | Yes | No | No | No |
| Seller legal business name + address | Yes | No | No | No |
| Full seller profile (sub-scores, followers, reviews, product/video counts) | Yes | Partial | Partial | No |
| Specifications + options | Yes | No | No | No |
| Product video (cover + playable URL) | Yes | No | No | No |
| Promotions (flash sale, free shipping) | Yes | No | No | No |
| Input filters + sorting on results | Yes (price, rating, sold, stock, category, sort) | maxResults only | keyword + sort | none |
| Keyword search / category browse | No | Yes | Yes (search) | No |
| No charge on block or failure | Yes | Not stated | Not stated | Not stated |
| Billing | Pay per result | Pay per result | $38 per month rental | $30 per month rental |
Why switch to this actor: you get more marketplaces, per-SKU live stock, a full rating star breakdown, a sample of real buyer reviews, shipping and delivery days, the seller's legal business name and address, specifications, promotions, the product video, and result filters that no other TikTok Shop product scraper combines, on pay-per-result billing with no monthly rental, and you are never charged when a page is blocked.
Where a competitor is a better fit, honestly: if you need to discover products from a keyword or browse a category or seller storefront (rather than start from product IDs or URLs), webdatalabs and novi cover those discovery surfaces and this actor does not. webdatalabs returns a larger volume of individual review bodies and is a touch cheaper per result; this actor returns the page's embedded review sample plus the full star breakdown. novi has more historical installs but its recent successful-run rate is low. This actor is the choice when you already have the product IDs or URLs and want the most complete, reliable per-product detail.
Use cases
- Product and price research: pull live prices, discounts, and per-SKU stock to size an assortment or set your own pricing.
- Competitor monitoring: track a rival's TikTok Shop catalog, prices, ratings, units sold, and estimated revenue over time.
- Dropshipping and product sourcing: filter by minimum units sold, minimum rating, and price range to surface proven winners before you list them.
- Influencer and social commerce analysis: read seller profiles (followers, review count, product and video counts) to vet TikTok Shop sellers and creators.
- Trend discovery: sort a list of product URLs by units sold or estimated revenue to spot what is moving in a category.
- E-commerce data pipelines: feed structured TikTok Shop product data into a dashboard, warehouse, or model as JSON, CSV, or Excel.
Quickstart
Open the actor, paste this into the input, and press Run.
{"productIds": ["1731465583417136117"],"region": "US","minRating": 4,"sortBy": "soldDesc","maxProducts": 3}
You can paste full product URLs too (the ID is extracted automatically). Free Apify plans are capped at 10 products per run.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
productIds | string[] | yes | ["1729480569078716908"] | TikTok Shop product IDs or full product URLs. The ID is the long numeric value in a product URL such as tiktok.com/view/product/1729480569078716908. Full URLs are accepted and the ID is extracted automatically. |
productUrls | string[] | no | (none) | Alias for productIds, provided as a separate list of full product URLs. Merged with productIds. |
region | enum | no | FR | Marketplace to read prices and availability from: FR, GB, US, DE, ES, IT, IE, ID, TH, VN, MY, PH, SG. Prices and currency come from the product's home marketplace. |
maxProducts | integer | no | (all) | Maximum number of products to collect. Free Apify plans are capped at 10 per run. |
minPrice | number | no | (none) | Keep only products at or above this price (marketplace currency). |
maxPrice | number | no | (none) | Keep only products at or below this price. |
minRating | number | no | (none) | Keep only products with an average rating at or above this value (0 to 5). |
minSold | integer | no | (none) | Keep only products with at least this many units sold. |
inStockOnly | boolean | no | false | Drop products that are out of stock. |
category | string | no | (none) | Keep only products whose category path contains this text (case-insensitive). |
sortBy | enum | no | none | Order of returned products: none, priceAsc, priceDesc, ratingDesc, soldDesc, reviewsDesc, revenueDesc. |
aiSummary | boolean | no | false | Optional paid add-on. Adds an AI buyer summary with pros and cons (aiSummary, aiPros, aiCons) to each product. Billed only when a summary is produced. Not available on the free plan. |
Output reference
One dataset item per product. Types: string, number, integer, boolean, string[], object, object[], or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
productId | string | TikTok Shop product ID (unique per product). |
title | string | Product title. |
region | string | Marketplace the product was read from. |
url | string | Product page URL. |
imageUrl | string | Primary product image URL. |
images | string[] | All product image URLs. |
price | number | Current price in the marketplace currency, or null when TikTok masks it (see priceMasked). |
originalPrice | number | Original (pre-discount) price, or null. |
priceMasked | boolean | true when TikTok withheld the numeric price on the web page. Other fields remain fully populated. |
discount | string | Discount label, for example a percentage, or null. |
discountPercent | number | Discount as a number (for example 50), or null. Returned even when the price is masked. |
currency | string | ISO currency code, for example USD, GBP. |
currencySymbol | string | Currency symbol, for example $. |
rating | number | Average product rating. |
reviewCount | integer | Total number of reviews. |
ratingBreakdown | object | Count of reviews at each star level: oneStar through fiveStar. |
reviews | object[] | Sample of buyer reviews embedded on the page: rating, text, reviewerName, verifiedPurchase, incentivized, country, skuSpecification, images, reviewedAt. |
reviewsHasMore | boolean | true when the product has more reviews than the embedded sample. |
promotions | string[] | Promotion labels on the listing, for example Flash sale, Free shipping. |
soldCount | integer | Units sold. |
estimatedRevenue | number | Estimated lifetime revenue (price multiplied by units sold); null when the price is masked. |
inStock | boolean | true when the product is purchasable, null when unknown. |
availableQuantity | integer | Total available quantity across variants. |
category | string | Category path joined into a single string. |
categoryPath | string[] | Category path as a list. |
description | string | Product description. |
specifications | object[] | Product attributes; each entry has a name and value. |
options | object[] | Sale properties / option groups (for example size, color). |
variants | object[] | Per-SKU variants with price, original price, availability, and stock. |
variants[].image | string | Per-SKU image URL, or null. |
variants[].isPreOrder | boolean | true when the SKU is pre-order, or null. |
shippingInfo | object | Delivery name, free-shipping flag, shipping fee, currency, and min/max delivery days, or null. |
mainVideo | string | Playable URL of the main product video, or null. |
video | object | Main product video object: id, duration, coverUrl, url, width, height, or null. |
shopName | string | Seller/shop name. |
shopId | string | Seller/shop ID. |
shopUrl | string | Seller/shop page URL. |
shopLogo | string | Seller/shop logo URL. |
shopRating | number | Seller rating. |
shopSubScores | object[] | Seller sub-scores as percentages: productQuality, shipping, service. |
sellerBusinessName | string | Seller's registered legal business name, when published, else null. |
sellerBusinessAddress | string | Seller's registered business address, when published, else null. |
shopSoldCount | string | Seller total units sold (formatted, for example 1.9M). |
shopGlobalSoldCount | string | Seller total units sold across all markets (formatted). |
shopFollowers | string | Seller follower count (formatted). |
shopReviewCount | integer | Seller total review count. |
shopProductCount | integer | Number of products on sale in the seller's store. |
shopVideoCount | integer | Number of videos on the seller's store. |
aiSummary | string | AI buyer summary (only with the aiSummary add-on), else null. |
aiPros | string[] | AI-distilled product pros (only with the aiSummary add-on), else null. |
aiCons | string[] | AI-distilled product cons (only with the aiSummary add-on), else null. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a blocked or failed attempt, a record with a populated error field is written instead (not charged). |
Example output record
A real success record from a live run (trimmed for length; the full record includes every field in the Output reference):
{"productId": "1730123606468825995","title": "Huloo Sleep Baby Playpen Mat - 1.3\" Thick Elasti-Foam Nursery Development Mat","region": "US","price": null,"priceMasked": true,"discount": "50%","discountPercent": 50,"currency": "USD","rating": 4.8,"reviewCount": 2569,"ratingBreakdown": { "oneStar": 58, "twoStar": 19, "threeStar": 54, "fourStar": 140, "fiveStar": 2298 },"soldCount": 24749,"inStock": true,"availableQuantity": 2326,"shopName": "Huloo Sleep","shopRating": 4.8,"sellerBusinessName": "Hangzhouwucui Technology Co., Ltd","promotions": ["Flash sale", "Free shipping"],"shippingInfo": { "deliveryName": "Standard", "freeShipping": true, "deliveryMinDays": 4, "deliveryMaxDays": 7 },"error": null}
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~tiktok-shop-product-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"productIds":["1731465583417136117"],"region":"US","sortBy":"soldDesc"}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~tiktok-shop-product-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"productIds":["https://www.tiktok.com/view/product/1731465583417136117"],"region":"GB"}'
Apify CLI:
apify call scrapers_lat/tiktok-shop-product-scraper \--input '{"productIds":["1731465583417136117"],"region":"US"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
<DATASET_ID> is returned as defaultDatasetId in the run object. clean=true drops empty and internal fields.
Billing and limits
This actor uses pay-per-event billing. See the pricing tab for current prices.
| Event | When it is charged |
|---|---|
apify-actor-start | Once per run, for every user, at run start. Covers the fixed residential-proxy compute cost of a run. |
result | Once per product record successfully returned and passing your filters. The primary event. |
ai_summary | Once per product when the optional AI summary add-on (aiSummary) produces a usable buyer summary. Opt-in, default off, and disabled for free-plan users. |
- No charge on failure or block. If a product cannot be read (including a TikTok security check), or is filtered out by your input filters, the actor does not charge a
resultfor it. Blocked attempts are written with a populatederrorfield. The AI add-on is charged only when a summary is actually produced. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 product records per run, and paid add-ons (including
aiSummary) are disabled for free-plan users. Upgrade for highermaxProductsand add-ons.
FAQ and troubleshooting
Is there a TikTok Shop API for product data? TikTok does not offer a public product API for arbitrary listings. This actor is a TikTok Shop product data API you can call over HTTP or the Apify SDK: pass product IDs or URLs, receive structured JSON, CSV, or Excel with units sold, ratings and star breakdown, buyer reviews, variants, live stock, shipping, seller data, and price when TikTok exposes it.
Why is price null / what is priceMasked?
TikTok currently masks the numeric price on its logged-out web product pages (it shows the price only inside the app or to signed-in shoppers). When that happens this actor returns price and originalPrice as null and sets priceMasked to true, rather than guessing a wrong number. Everything else on the page is real and returned in full: the discount percentage, units sold, ratings and the 1-to-5 star breakdown, buyer reviews, live stock and per-SKU variants, shipping, promotions, and the full seller profile. When TikTok does expose the price, this actor returns it and computes estimatedRevenue. This is TikTok's own posture, so it can change over time and can differ by marketplace.
Can it search TikTok Shop by keyword or browse a category or shop? No. This actor works from product IDs or URLs and returns the most complete per-product detail. If you need keyword search, category browse, or seller-storefront discovery, that is a different surface (see the comparison above).
Why did I get temporarily blocked by the site, please retry?
TikTok Shop applies a security check (slide captcha) on some marketplace edges. This is a real, honest signal, not a fabricated record, and it is not charged. Retry the run, or read a marketplace edge (region) that is not currently challenging.
Which marketplaces are most reliable? US and GB edges typically clear more often than FR. The security check is intermittent, so retries help.
Where do I find a product ID?
It is the long numeric ID in a product URL, for example tiktok.com/view/product/1731465583417136117. You can paste the whole URL and the ID is extracted automatically.
How is estimated revenue calculated?
estimatedRevenue is the current price multiplied by the reported units sold. It is an estimate for comparison, not audited sales.
Why are price and currency different from my region?
Prices and currency come from the product's home marketplace, set by region. Choose the marketplace you want the price from.
Is this an official TikTok tool? No. This actor is independent and has no affiliation with TikTok or ByteDance. It reads only publicly available product pages. Use it in accordance with the TikTok terms of service.
Related scrapers
- TikTok Creative Center Scraper: top-performing TikTok ads with metrics.
- TikTok Hashtag Analytics Scraper: trending hashtags and their metrics.
- 1688 Wholesale Scraper: wholesale products and suppliers.
- DHgate Suppliers Scraper: DHgate products and suppliers.
- AliExpress Scraper: AliExpress product details and prices.
- Flipkart Products Scraper: Flipkart product details and prices.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with TikTok or ByteDance. Accesses only publicly available product data. Use in accordance with the TikTok terms of service.
