TikTok Shop Scraper API — Products, Reviews & Sellers avatar

TikTok Shop Scraper API — Products, Reviews & Sellers

Pricing

from $1.22 / 1,000 product results

Go to Apify Store
TikTok Shop Scraper API — Products, Reviews & Sellers

TikTok Shop Scraper API — Products, Reviews & Sellers

Collect the official TikTok Shop US product feed without keywords, or search products and collect details, SKUs, stock, shipping, videos and reviews. Regional catalogs and direct product inputs remain supported.

Pricing

from $1.22 / 1,000 product results

Rating

0.0

(0)

Developer

Kelopr_bk

Kelopr_bk

Maintained by Community

Actor stats

2

Bookmarked

614

Total users

160

Monthly active users

3.2 hours

Issues response

4 days ago

Last modified

Features

Limited permissions

Share

TikTok Shop — illustrative structured data

🛍️ TikTok Shop Scraper — Products, Reviews, Sales & Sellers

Choose Fast or Full, select a TikTok Shop store, and collect products with the original prices, currencies, sales, ratings, sellers, images and links. Full adds available descriptions, variants, inventory, delivery, media, business details and customer reviews. All existing product fields remain available.

With no query or links, the Actor browses the official public feed in US/UK, or the selected local category catalog in other supported stores. Add search phrases, product URLs/IDs or category links when you want a particular source. The result identifies the actual source; a category catalog is never labelled as an official homepage feed.

Looking for the videos and creators behind these products? Try our TikTok Video Scraper — scrape TikTok videos by profile, hashtag, keyword or trending feed with engagement, author, sound and transcript data.

🚀 Start your first run

  1. Choose Fast for product cards or Full for all available product details.
  2. Select your Store and Maximum products.
  3. Leave source fields empty for default store discovery, or add search phrases, product URLs/IDs or category links.
  4. In Full, choose whether to include reviews and set the review limit.
  5. Start the run. Results appear in Products as they are saved; use the topic tabs or export JSON, CSV or Excel.

The default memory remains 512 MB. Missing source values stay unavailable. A valid but unsupported source/store combination finishes with a correction message and no diagnostic product row.

🎯 Two modes

ModeData collectedReviews
⚡ fastProduct cards: identity, title, image, price/currency, sales, rating, review count, seller and product linkReview counts when published; no review-text collection
📦 fullFast fields plus available descriptions, business data, SKU options/prices, stock, delivery, videos, safety fields and optional saved changesPublic reviews made available by TikTok, subject to maxReviews

Both modes accept every listed store. Fast never silently upgrades to Full. Product links work in both modes; Fast keeps the card fields and does not receive a successful-Full surcharge.

🌍 Automatic source selection

InputSource
Product URLs or IDsExact products from the selected store
Non-US category URLsThe supplied local categories
Search phrases in US, SG, MY, TH, VN or PHStore keyword search
Search phrases in GB, ID, MX or JPA title filter on the selected local catalog; the summary explains the scope
No query or links, US or UKOfficial public Shop homepage collections
No query or links, SG, MY, TH, VN, PH, ID, MX or JPThe selected category catalog

Stores: US/USD, UK/GBP, SG/SGD, MY/MYR, TH/THB, VN/VND, PH/PHP, ID/IDR, MX/MXN, JP/JPY. All retain their own currency. The country does not imply the same public discovery source exists everywhere. Use actual category URLs to select a UK catalog instead of its default feed.

Enter one search phrase per keyword entry. Commas within an entry remain literal. Product links take priority over search phrases, with an input warning; category and product links must be used in separate runs.

🛍️ Official Shop feed — United States and United Kingdom

Use mode: "fast" or mode: "full", region: "US", and no search phrase or product/category link to collect the products TikTok serves on its official Shop homepage at shop.tiktok.com/us. No keyword or TikTok account is required. This is an anonymous storefront view; recommendations can vary between requests. It does not reproduce a logged-in person's in-app For You feed.

{
"mode": "fast",
"region": "US",
"feedCollection": "auto",
"maxItems": 100
}

Choose recommended_for_you for the main recommendation feed. Other supported collection names include top_selling, discounted, selling_point, shop_guide and black_friday; an empty list requests all configured collections, including additional component groups. Collections can be empty or unavailable in a particular session. Choose region: "GB" for the UK homepage. feedCollection: "auto" selects the US recommendation feed or the available UK collections. A specific collection can be empty in a store or session. Other countries are not offered as official homepage feeds; use the automatically selected search or catalog source. A catalog is never substituted for the homepage feed.

InputDefault/API behaviorMeaning
feedCollectionForm: autoStore default, all available collections, or one named collection
homepageGroupsAPI: []Advanced collection list; an explicit non-empty list takes priority over the simple selector
homepageMaxPages10Maximum source pages per collection
homepageMaxItemsPerGroup0Optional saved-product cap per collection; 0 means no separate cap
maxItems10; the new form prefills 50Maximum saved products across the whole feed run
modefastSelect full to add available details, SKUs, stock, delivery, videos and optional reviews at the existing Full price

Every row retains the product fields and adds feedGroup, feedRank, feedPage, componentId and sourceType. sourceUrl identifies the storefront; productUrl opens the product. Rank records the observed order inside its own collection. Different collections have independent ordering.

To enrich feed products, select "mode": "full", then choose includeReviews and your maxReviews limit. Successful Full records are delivered as they finish; a slower product does not hold back completed records in relevance order. An explicit local sort preserves the selected ordering. Unavailable detail retains the collected card with a detail status and receives no successful-Full surcharge.

Filtering and enabled deduplication happen before a result consumes the saved-product allowance. Run summary lists the source pages, returned and unique products, saved rows, continuation signal and stop reason per collection. A page cap or spending cap is a limited collection, not proof that TikTok has no more products. When the remaining budget cannot cover the requested product options, the run stops before further collection or enrichment.

📋 Copy-paste examples

{
"mode": "fast",
"keywords": ["water bottle"],
"maxItems": 20,
"maxPages": 1
}

Search several product niches

{
"mode": "fast",
"keywords": ["neck fan", "phone case", "makeup organizer"],
"maxItems": 50,
"maxPages": 3,
"sortBy": "best_sellers",
"dedupe": true,
"maxConcurrency": 3
}

This example can save up to 50 products for each keyword, not 50 products in total.

Full product data with reviews

{
"mode": "full",
"keywords": ["portable blender"],
"maxItems": 25,
"maxPages": 2,
"includeReviews": true,
"maxReviews": 5,
"fullConcurrency": 8
}

Find named products in Singapore

{
"mode": "fast",
"region": "SG",
"keywords": ["lipstick", "phone case", "shampoo"],
"regionalSearchMatch": "all_terms",
"maxItems": 50,
"maxPages": 3,
"dedupe": true,
"htmlReport": true
}

This saves up to 50 products in total. Change region to MY, TH, VN or PH, using names appropriate to that store. To keep a phrase together, use "regionalSearchMatch": "phrase" with a query such as phone case. Leave regional category URLs and catalog title filters empty in this mode.

Browse 50 Malaysian catalog products in MYR

{
"mode": "fast",
"region": "MY",
"regionalCategory": "beauty",
"keywords": [],
"maxItems": 50,
"maxPages": 6,
"dedupe": true
}

For a catalog source, maxItems is the total for the run, including when you supply multiple category URLs. A small category may contain fewer products than requested.

Use your own regional category

{
"mode": "fast",
"region": "SG",
"keywords": [],
"regionalUrls": [
{"url": "https://shop.tiktok.com/sg/c/home-supplies/600001"}
],
"maxItems": 20,
"maxPages": 2
}

Optional regionalFilterKeywords keeps titles containing at least one of your phrases. It is a filter on collected category products, not a store-wide keyword search. Restrictive filters can return fewer rows.

Monitor price, sales, and stock changes

{
"mode": "full",
"keywords": ["mini printer"],
"maxItems": 50,
"includeReviews": false,
"trackChanges": true
}

Run the same input again later or schedule it on Apify. The first run creates a baseline; change fields appear from the second run onward.

🎛️ Input reference

Simple form

The form shows only two modes, the store, result limit, optional source fields and useful detail/review options. The collection capabilities and existing output fields are retained. Filters, detailed collection limits, raw-data switches and network settings remain available through JSON/API; they are hidden from the form. Existing API defaults and supplied values are preserved. Product URLs and product IDs can share the Product URLs or IDs list.

Input fields

FieldDefaultMeaning
modefastfast for cards or full for available complete product data
regionUSStore country for either mode; see automatic source selection above
keywords[]Optional product names/phrases; an empty list browses the default store source
regionalSearchMatchall_termsRegional Search title matching: all_terms or phrase
regionalCategorybeautyRegional preset: beauty, home, or womenswear
regionalUrls[]Matching category URLs, replacing the regional preset
regionalFilterKeywords[]Optional local title filter for Regional Catalog
maxItems10Saved products per US keyword, or total per regional run; 0 removes the item cap
maxPages3Maximum pages per query, category or feed collection, subject to source continuation
sortByrelevancerelevance, best_sellers, price_asc, price_desc, or rating_desc
dedupetrueRemoves repeated product IDs across all keywords and pages

maxItems: 0 does not remove the maxPages limit. Increase both values for deeper collection.

With deduplication enabled, repeated product IDs are removed before they consume a result slot. US searches continue looking for new matching products within the requested page limit. Run summary → queries reports saved products, filtered candidates, skipped duplicates, pages fetched, sourceHasMore, and the stop reason for each keyword. max_pages means the page allowance ended while the source still reported more results; max_items means the requested unique-product cap was reached. pagination_unavailable means the source stopped supplying usable continuation before the page allowance was reached.

Advanced JSON/API filters

FieldWhat it does
minPrice / maxPriceKeeps products within the selected price range, in the storefront's currency
minRatingKeeps products at or above the selected rating when a rating is available
minSoldCountKeeps products at or above the selected sold count when it is available
freeShippingOnlyKeeps products where TikTok exposes a free-shipping label

Filtering and sorting happen after TikTok returns the search cards. A filter can therefore reduce the number of saved rows below maxItems.

In both regional sources, the default relevance order saves each completed card immediately. An explicit local sort buffers each collected query/category before saving it; multiple queries are processed in input order, not merged into a global sort. best_sellers sorts the collected sample by soldCount; it is not an exhaustive store-wide best-seller ranking.

Full settings

FieldDefaultMeaning
includeReviewstrueFetch public customer reviews
maxReviews5Maximum reviews per product; 0 requests all reviews TikTok exposes
reviewSortrecommendedTikTok's recommended order or recent
trackChangesfalseCompare current values with the previous saved snapshot
fullConcurrency8Product-detail requests processed in parallel, from 1 to 12
includeRawDetailfalseAdds the original detail payload for debugging; significantly increases row size

Advanced JSON/API output and performance

FieldDefaultMeaning
compactOutputtrueRemoves null values and empty arrays/objects for a cleaner dataset
htmlReporttrueCreates a visual product grid with a search box for saved titles
maxConcurrency1US keywords processed in parallel, from 1 to 10; regional queries/categories are processed in order
requestDelayMs0Optional delay between pages for the same keyword

Start with the defaults. Advanced performance settings are optional; they do not change which data a mode collects.

📦 Output

All product results, including regional Full results, are visible through the primary dataset. Topic tabs provide Products, Prices & sales, Full details, SKUs & stock, Customer reviews, Delivery, Sellers, Price & stock changes, and Source & collection. The summary and errors remain separate.

The product overview keeps the image, title, store, selected mode, price/currency, sales, rating, seller and link together. The SKU and review views expand their original arrays into readable rows with named columns; this does not create extra billable product records. JSON export retains the original arrays and all original product fields. Regional arrays are kept consistently as arrays, with source 0 and false values preserved. collectionMode records Fast/Full and sourceType identifies the actual product source.

Every saved product is available in the default dataset. Full-mode rows are also placed in a separate Full dataset with additional views.

OutputWhat you will find there
ProductsClean product overview with image, price, sales, seller, and link
Prices & salesPrice, discount, sold count, rating, reviews, and shipping indicators
SellersSeller identity and products associated with each seller
Full product dataDescriptions, variants, stock, shipping, business data, videos, and review status
SKUs & variantsOne expanded row for every product variant
Customer reviewsOne expanded row for every fetched review
Price & sales changesPrice, sales velocity, and stock differences between tracked runs
ErrorsPages or details that could not be verified; these are not product results
Run summarySaved counts, issues, duration, mode, market, and direct output links
HTML reportA visual product grid with local currency and title search, saved as report; regional reports preview up to 200 products, while the dataset contains all saved rows

Export any dataset view to JSON, CSV, Excel, XML, or access it through the Apify API.

Find a product after the run

Open HTML report, then type a name into Find a product in these results. The product grid updates as you type; Clear restores all cards. This searches only the saved report preview, starts no new collection, and adds no Actor charge. To search the storefront again, change keywords in Input and start a new run. Use the dataset export to inspect results beyond the preview.

🔎 Main fields

Search product fields

  • Identity: productId, title, productUrl, countryCode, query, page.
  • Price: currentPrice, originalPrice, currency, currencySymbol.
  • Demand: soldCount, soldText, rating, reviewCount.
  • Seller: sellerId, sellerName, sellerUrl.
  • Media: imageUrl, imageUrls.
  • Discovery: searchRank, sortedRank, tags, freeShipping, sourceUrl, scrapedAt.
  • Sales intelligence (estimated, no extra cost): estimatedRevenue, estimatedRevenueText, revenueTier (Low/Medium/High/Top), discountPercent, priceMin, priceMax, soldPerReview.

Both regional sources use the same columns. In Regional Catalog, query identifies the selected category and sourceUrl links to that category. In Regional Search, query is your search phrase; use productUrl to open the actual product. sourceUrl is a provenance field, not necessarily a browsable search page. Seller URLs are only supplied when the source provides one; seller IDs and names can still be available. freeShipping indicates an exposed free-shipping label, not a personalized delivery quote.

Example:

{
"type": "product_card",
"status": "ok",
"countryCode": "US",
"query": "water bottle",
"productId": "1234567890123456789",
"title": "Example insulated water bottle",
"productUrl": "https://shop.tiktok.com/us/pdp/example-product/1234567890123456789",
"currentPrice": 19.99,
"originalPrice": 24.99,
"currency": "USD",
"soldCount": 1250,
"estimatedRevenue": 24987.5,
"estimatedRevenueText": "$24,988",
"revenueTier": "Medium",
"discountPercent": 20.0,
"soldPerReview": 4.0,
"rating": 4.8,
"reviewCount": 315,
"sellerName": "Example Store",
"imageUrl": "https://example.com/product.webp",
"freeShipping": true,
"searchRank": 1
}

All values in this example are fictional and show the output shape only.

Additional Full fields

  • Status: dataLevel, detailStatus, detailError.
  • Product: description, properties, options, categoryId, availabilityReason.
  • Variants and stock: variants, defaultSkuId, skuCount, skuInStockCount, totalStockQuantity, isSoldOut.
  • Inventory Intelligence: inventoryStatus, stockDataCoverage, stockStatusKnownCount, stockQuantityAvailableCount, stockQuantityCoverageComplete, inStockSkuPercent, outOfStockSkuCount, lowStockSkuCount, inStockVariantNames, soldOutVariantNames, inventoryValueEstimate, inventoryValueEstimateComplete.
  • Commercial metrics: discount, discountPercent, savingsAmount, priceRange, estimatedRevenue.
  • Shipping: shippingName, shippingFee, shippingCurrency, deliveryMinDays, deliveryMaxDays, fulfillable, codAvailable.
  • Seller business data: businessName, businessAddress, sellerLogoUrl.
  • Media: fullImageUrls, imageCount, videos, videoUrls, videoCount.

estimatedRevenue is a calculated estimate (currentPrice × soldCount), not verified seller revenue.

Inventory Intelligence is available only after successful US Full or US Product Details enrichment. inventoryStatus uses published SKU availability: in_stock, limited, out_of_stock, or unknown. stockDataCoverage distinguishes availability-only data from partial or complete unit quantities. inventoryValueEstimate is calculated only when every returned SKU has both a usable quantity and a same-currency price; otherwise it stays unavailable instead of presenting a partial total.

Regional Search and Regional Catalog are unchanged by Inventory Intelligence. They continue returning their existing product-card fields without extra detail requests.

Review fields

Each object in reviews[] can include:

{
"reviewId": "9876543210987654321",
"rating": 5,
"text": "Example review text.",
"createdAt": "2026-08-01T12:00:00Z",
"reviewerName": "A**e",
"reviewCountry": "US",
"verifiedPurchase": true,
"incentivizedReview": false,
"skuSpecification": "Blue / 32 oz",
"imageUrls": ["https://example.com/review-image.webp"]
}

Review summary fields include reviewsFetchedCount, reviewsAvailableCount, reviewsWithTextCount, reviewsWithMediaCount, reviewRatingBreakdown, and reviewsFetchStatus.

reviewsFetchStatus values:

  • complete — every currently exposed review was collected.
  • limited — the configured maxReviews limit was reached.
  • disabled — review collection was turned off.
  • failed — the product was saved, but its reviews could not be fetched after retries.

Change-tracking fields

From the second matching run onward, Full mode can add previousPrice, priceChange, priceChangePct, previousSoldCount, soldSinceLastScrape, soldVelocityPerDay, stockChange, firstSeenAt, and previousScrapedAt.

💳 How charging works

  • A product-result event is charged only for a product row saved to the default dataset.
  • Regional Search and Regional Catalog use the existing Product result event, with no Full or extra-review charge.
  • Full enrichment is charged only when the product-detail response succeeds.
  • The first five reviews are included with a successful Full result. Reviews above that allowance can use the separate extra-review event shown on the Actor pricing page.
  • A failed search page or rejected storefront is written to Errors, not billed as a product result.
  • Regional search candidates discarded for non-matching titles are not saved or charged as product results. Any Actor-start charge shown on the pricing page is separate.

Use maxItems, filters, and Fast mode to control the size and cost of exploratory runs before switching selected searches to Full.

⚠️ Troubleshooting

I received fewer products than requested

TikTok may expose a short feed, or title matching, filters and deduplication may remove rows. Increase maxPages when the source provides more pages. For Regional Search, try broader or local-language names and add several queries; extra pages cannot extend an exhausted feed. For Regional Catalog, try a broader category. Run summary lists each regional query/category's page count and stop reason.

Regional Search found no matching titles

Open Run summary. NO_MATCHING_PRODUCTS means none of the returned titles passed your query and filters, not that the product does not exist anywhere in the store. Try a shorter name, a local-language phrase, all_terms instead of phrase, or less restrictive filters. The Actor does not replace the empty result with unrelated recommendations.

I received only search fields in a Full test

Check that the input contains exactly "mode": "full". Do not use dataLevel, dataLevelMode, or maxReviewsPerProduct; the current input fields are mode and maxReviews.

Some cells are blank

TikTok does not publish every rating, stock quantity, shipping value, business field, or description for every product. Unavailable fields remain blank or omitted, never filled with invented values. Fast returns the product-card fields. Full adds the source-backed fields and reviews available for that product and store.

A Full detail or review failed

The base product row remains available with detailStatus, reviewsFetchStatus, and an explanation. Open Errors and Run summary, then retry the affected search with the default settings.

Which countries can I select?

Both Fast and Full accept every listed store; use the source-selection table above to understand its discovery coverage. Invalid combinations that reach the Actor finish successfully with status: "invalid_input" and a correction in Run summary, without product rows. Apify may reject schema-invalid values before a run starts. Legacy country_code and countryCode fields remain accepted and take priority over region.

✅ Data quality and safeguards

  • US search retains its storefront checks; every regional card must have a matching local product URL and currency before it is saved.
  • Regional pagination removes repeated product IDs and stops if the source stops returning new products.
  • Regional Search checks title matches before saving or charging a product result.
  • Duplicate product IDs can be removed across keywords and pages.
  • Incorrect or malformed input ends safely with a clear status message.
  • Failed Full enrichment is clearly marked and is never presented as successful Full data.
  • Missing source values stay missing; the Actor does not fabricate product information.

Tags: tiktok shop · tiktok shop scraper · product research · product reviews · price tracking · best sellers · ecommerce · dropshipping

Advanced source compatibility

The public mode selector accepts only fast and full. Existing collection sources remain available automatically, or through the hidden JSON/API workflow override: auto, us_search, homepage, regional_search, regional_catalog, product_details. Mode still controls the data level. Older inputs using a source name as mode should switch to Fast/Full and, if necessary, set workflow explicitly. Filters and raw-data options remain available through JSON/API.

Search phrases restricted by TikTok

TikTok can explicitly refuse a search phrase under its own content rules. Such a query is reported as query_restricted, with a clear correction in Run summary and the uncharged issues dataset. The Actor stops retrying that phrase and continues other queries. When every query is restricted, the summary status is QUERY_RESTRICTED; mixed runs list queriesRestricted separately from sourceErrors. No product-result or Full charge is applied to a query with no saved products; the existing startup event still applies. The source phrase and its result set are kept unchanged.