TikTok Shop Product Details Scraper | SKU Stock avatar

TikTok Shop Product Details Scraper | SKU Stock

Pricing

from $2.40 / 1,000 tiktok shop products

Go to Apify Store
TikTok Shop Product Details Scraper | SKU Stock

TikTok Shop Product Details Scraper | SKU Stock

Scrape US TikTok Shop products by URL or ID: displayed and list price, sold count, variants with SKU price and stock, seller and shop stats, specs, shipping and sample reviews.

Pricing

from $2.40 / 1,000 tiktok shop products

Rating

0.0

(0)

Developer

Eli J

Eli J

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

Turn public TikTok Shop US product URLs or IDs into product rows for price, stock, variant and seller monitoring. Each distinct readable product returns its displayed price, product-level sales counts, SKU prices and stock, description, images, shipping details and the page's free review sample.

How to try it

Run the form's two prefilled products, a gift bag and tags set and a wireless page-turner remote, as a first experiment. The samples are a prefill, not an API default or a guaranteed result. Supply your own US product URLs or IDs for later runs.

Input

FieldTypeDefaultWhat it does
productUrlsarrayEmptyUS product URLs or bare 19-digit IDs. The form supplies two sample products as a prefill; an API input of {}, null or an empty list does no product work.
proxyConfigurationobjectApify RESIDENTIAL, country USApify Proxy must be enabled with exactly the group list ["RESIDENTIAL"] and country US. Mixed and other groups are rejected before a product request.
{
"productUrls": ["1731642463894148039"],
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Accepted paths on a tiktok.com host include /pdp/{slug}/{id}, /pdp/{id} and /view/product/{id}, optionally preceded by /shop or a region. Query strings are discarded. An absent region means US. Other regions receive region not admitted; store, video and shortened vt.tiktok.com links receive not a product URL. Repeated IDs are read once and products retain first-occurrence order.

Every accepted input is fetched by ID at https://shop.tiktok.com/us/pdp/x/{id}; the input's slug is not used for the request.

Output

One dataset row per distinct readable product, with recordType: "product". This abbreviated example illustrates formats; its values are illustrative, not a current product quote.

{
"recordType": "product",
"productId": "1731642463894148039",
"title": "Gift bag set",
"price": "$32.97",
"currency": "USD",
"listPrice": "$45.67",
"soldCountDisplay": "79.6K",
"soldCount": "79600",
"rating": "4.8",
"reviewCount": "5047",
"productUrl": "https://shop.tiktok.com/view/product/1731642463894148039",
"scrapedAt": "2026-10-12T18:00:00Z"
}
ColumnsMeaning and units
productId, title, productUrl, scrapedAtRequested product identity, page title, stable product link and collection time in UTC ISO 8601. IDs remain strings.
price, listPrice, currencyDisplayed current and crossed-out price strings with currency symbol; currency code is separate. An absent list price is null. The JSON price range is not substituted.
soldCountDisplay, soldCountProduct units sold: source abbreviation and exact integer string. Neither is the shop-wide total.
rating, reviewCount, reviewCountDisplayStars out of 5, exact review-count integer string and source-formatted count. An unrated product has null rating.
sellerName, sellerId, sellerRating, sellerFollowers, sellerProductCountSeller identity, stars out of 5, followers and listed-product counts. Source count strings retain their formatting.
mainImage, images, categoryPath, descriptionMain image, ordered image URLs, category names and full text description. Signed image URLs can expire.
variants, skus, specificationsPage variant axes and specifications. Variant image width/height are pixels. Each SKU has skuId, named property/value identities, decimal price strings in currency, nullable original price and integer stock in units. Zero stock is preserved.
shippingFee, shippingCurrency, deliveryMinDays, deliveryMaxDays, deliveryWindow, shipFromSource shipping amount string and currency code, minimum/maximum delivery days, displayed delivery text and origin location. These fields are null when shipping is not shown, including sold-out products; SKU stock zero is preserved.
ratingHistogram, sampleReviewsSource distribution (stars out of 5, counts in reviews) and free page reviews, including source IDs, text, ratings, images, variant labels and source date strings when present. Nested source formats are retained.
shopSoldCount, shopGlobalSoldCount, shopReviewCount, shopOnSaleProductCount, shopVideoCountShop units sold, worldwide units sold, reviews, on-sale products and shop videos. Integer source values stay integers; source strings and abbreviations stay strings.
shopLink, shopDescription, shopLogo, globalSellerId, shopIdentityLabelPage-carried shop details and identifiers.
storeSubScoresRaw score is a fraction from 0 to 1; score_percentage is the source percentage string. type, platform_rate_type and high_light_tag are source enum codes.
experienceScoresFor shop_sub_score_type 4, 5 and 7, raw score is a fraction from 0 to 1; for type 6 (issue resolution), it is hours. score_percentage and format_numeric_score retain the displayed percent or hours. experience_format_type and score_level are source enum codes.
businessName, businessAddress, saleRegion, productStatusDisplayed business disclosures, sale-region code and source product-status code. Status is an enum identifier, not a quantity.
aiSummary, aiFaq, promotionLabelsTikTok's generated summary/FAQ and displayed promotion labels when present.

Fields the page does not display are null. A displayed field that cannot be extracted is an error for that input, never a guessed value or a null substituted for a parsing failure.

Errors and billing

Unreadable inputs never create dataset rows. Their requested value, original ordinal and reason appear in the run's ERRORS record. OUTPUT records returned rows, failed inputs, repeated identities, request bytes, retry classes and fallback counts. It also records request and push timings and failed requests' source error codes, sanitized messages and Security Check markers. Redirect details contain status, host and path without query strings. Credentials and response bodies are excluded. Duplicate inputs and error/status records are not charged as product rows. The page review sample is included in the product row. A fallback call is not charged separately. You pay the listed product and start events only; proxy and compute usage is included.

The Actor reads each push's charge result and stops new work when the customer's maximum charge binds. Up to three requests already in flight can finish without further delivery. Collection ends 30 seconds before the platform run timeout, reserving time for closing records; when no timeout is set, collection is limited to 270 seconds. Remaining inputs receive charge limit reached or time budget reached records. Empty input exits successfully with guidance. If every attempted read fails, the run fails with guidance; partial success retains its readable rows.

The primary uses browserless requests through US residential proxies at concurrency three, pacing each fresh-session request. Security Check, anti-crawler and regional responses receive at most three fresh sessions. An unknown nonzero source error code gets one fresh-session retry within that same three-session total bound. Persistent code 23004014 is reported as not found or blocked: 23004014 after 3 fresh sessions: an inferred ambiguity, not proof of removal. Mixed failures retain their observed class without claiming persistence. HTTP-status and extraction errors are not replayed. A shared browser service is used after two connection/TLS failures or three Security Check sessions when its pinned build and credentials are available; its returned page must report US regions. At most three browser calls are made per run; later inputs needing the browser receive an unbilled fallback cap reached error record. A browser read that also meets Security Check remains unrescued with reason browser fallback Security Check. Primary-readable inputs can still return rows. US validation and the same product parser apply to browser results. Challenges are never solved.

Ten-product tests on an earlier build at 1024 MB, measured in two different hours, took 15.9 seconds median (three runs, 29 of 30 products) and about 20.9 seconds median in a later hour (three runs, 27 of 30 products). The first timing measures run start to dataset ready; the later timing measures the complete synchronous request from the caller. These earlier measurements are not a speed or completion guarantee for a run that needs the browser fallback.

Pricing

You pay per product row returned: $0.004 on the Free plan, $0.0032 on Bronze, $0.0028 on Silver and $0.0024 on Gold and above, plus $0.0007 each time the Actor starts. Error records, duplicates and the run's status records are not charged. Fallback calls are not charged separately, and proxy and compute usage is included. A run that returns no rows costs the start event only. Ten returned products on Bronze cost $0.0327.

These figures are the stored prices at write time; the Actor's Pricing tab is authoritative. The start price covers the cost of one zero-row test at 1024 MB ($0.000521187 divided by 0.8, rounded up to the next $0.0001). That test made two requests, encountering Security Check and HTTP 301; it does not establish a cost ceiling for larger unreadable jobs.

Coverage and source limits

The browser fallback blocks image, media and font downloads; product image URLs and other page-carried values still come from the returned document. Browser calls remain limited to three per run.

Only logged-out US product pages are supported. Additional review pages are not available in this version. The cause is unresolved on the anonymous routes tried. The page's embedded sample remains available, including an empty sample where the source supplies none.

GMV, commission, 30-day sales, influencer counts, live counts, product-video counts and first-listed time are absent from the product page data. Shop-wide video counts are a different field. No GMV is computed. This Actor supports US product pages only; it does not collect search results, stores, categories or analytics.

TikTok's US Terms of Service, last updated July 15, 2026, prohibit users from "scrape, crawl, export or otherwise extract any data or content in any form, for any purpose, from the Platform using any automated system or software, including automated “bots,” except as approved in writing by TikTok USDS Joint Venture,".

Robots permission is not established by successful reads. shop.tiktok.com/robots.txt returned Security Check, so the disposition for slugged and placeholder /us/pdp/ routes and the tested Shop Reviews API is unknown. The www.tiktok.com rules disallow named AI crawlers entirely; their general rule disallows /shop/view/product/, a different path from /view/product/. View/product inputs are parsed for their IDs and are not fetched. The signing hosts tried have no verified robots disposition; they are not called by this version.

Help

Use the Actor's Issues tab for questions or failed runs. Include the run URL and the affected input's ordinal from ERRORS; do not share credentials.