Skip to content
E-commerce Apify Actor

TikTok Shop Scraper for product data.

TikTok Shop Scraper is a BatScrape Actor on Apify that collects public US TikTok Shop data three ways: keyword search, store listings and product URLs. It returns one JSON record per unique product, full product record or buyer review, with prices, discounts, ratings, units sold, shop details, SKU stock and shipping.

Runs in your Apify account. Export JSON or CSV.

  • Products
  • Prices & stock
  • Buyer reviews
  • Creator videos
TikTok Shop in action Illustrative demo
01 / INPUT

Set the input

Choose a keyword to search on TikTok Shop.

Search keywords Or store or product URLs
wireless earbuds Keyword
Market United States
Result limit 10
Output format Structured JSON

Example configuration · Run your own search on Apify.

02 / RESULT

Preview a record

Each listing row carries its price, discount, rating, units sold and shop.

Example Store 1 sample record
$24.99 $31.99

Example wireless earbuds with charging case

4.6 Rating
1,250 Sold
22% Discount
Matched keyword wireless earbuds

Made-up values · Actual field names · No live request.

03 / EXPORT

Export JSON

Use the structured dataset in your product research or price monitoring.

dataset-item.json JSON
{
  "type": "product",
  "id": "1700000000000000001",
  "url": "https://www.tiktok.com/shop/pdp/1700000000000000001",
  "title": "Example wireless earbuds with charging case",
  "imageUrl": "https://example.com/product-1.jpg",
  "price": 24.99,
  "originalPrice": 31.99,
  "discountPercent": 22,
  "currency": "USD",
  "currencySymbol": "$",
  "rating": 4.6,
  "soldCount": 1250,
  "shopMeta": {
    "id": "7400000000000000001",
    "name": "Example Store"
  },
  "categories": [
    "Electronics",
    "Audio"
  ],
  "searchPosition": 0,
  "searchKeyword": "wireless earbuds",
  "inputKeyword": "wireless earbuds"
}
Download sample JSON

Use it for product research and dropshipping, TikTok Shop affiliate and creator scouting, price and competitor monitoring, best-seller tracking, or review and sentiment analysis. It runs in your Apify account, and you do not need a TikTok login, cookies or request signing.

What it collects

  • Listing products, from keywords and stores: ID, URL, title, image, price, original price, discount, currency, rating, units sold, shop and categories.
  • Full product records, from product URLs: images, review count, variants, and the price, stock and purchase limit of each SKU, plus the description and specifications when TikTok Shop provides them.
  • Shops and shipping: the shop’s name, logo, product count and rating, and the shipping fee and delivery window when TikTok Shop provides them.
  • Creator videos linked to a product, with play and like counts and an affiliate flag.
  • Buyer reviews: rating, text, date, photos, the SKU bought, and verified-purchase and incentivized flags.
  • Attribution: every item records the keyword, store URL or product URL that produced it.

How it works

TikTok Shop Scraper collects public US TikTok Shop data in three ways, which you can combine in one run: keyword search, store listings and product URLs. There is no headless browser, no login and no cookies on your end. It pages through each keyword and store, fetches the full record and the reviews of each product you list, removes duplicates, and stops at your maxItemsPerQuery, maxReviewsPerProduct and maxItems limits or your pay-per-event budget.

A keyword returns the products TikTok Shop shows for it, and a keyword search ends by itself at about 100–200 products, depending on the keyword. A store is paged, best selling or newest first, until its catalogue ends, up to 1,200 products, or your limit is reached. A product URL returns the full product record, and maxReviewsPerProduct adds its buyer reviews.

Use cases

  • E-commerce sellers and dropshippers — find winning products, prices and units sold before you source.
  • TikTok Shop affiliates and creators — discover products to promote and the creator videos already selling them.
  • Brands — monitor prices, discounts and stock of your own and competing products.
  • Market researchers — track best-sellers by keyword, category and store over time.
  • Review and sentiment analysts — collect buyer reviews with ratings, photos and verified-purchase flags.
  • Agencies — research stores and products for TikTok Shop campaigns.

Input

Set these in the Actor’s input form on Apify, or send them as JSON through the API.

  • searchQueries — Keywords to search TikTok Shop for, one per line. Each keyword returns up to about 100 products, and a product found by several keywords is delivered, and charged, once. At least one of searchQueries, shopUrls or productUrls is required; they can be combined in one run.
  • shopUrls — TikTok Shop store URLs, as https://www.tiktok.com/shop/store/<store-name>/<store-id>. Lists each store’s products.
  • shopSort — Order of store products: top (“Best selling”), the default, or newest (“Newest”).
  • productUrls — Product pages (/shop/pdp/... or shop.tiktok.com/view/product/...) or product IDs to fetch full records for. Short links (vt.tiktok.com, vm.tiktok.com) are not supported: open them and paste the full link. Invalid entries are skipped with a warning in the log.
  • includeProductDetails — Fetch the full product record for each product URL. The default is true; turn it off to collect only reviews.
  • maxReviewsPerProduct — Reviews to collect for each product URL, from 0 to 5,000. The default, 0, collects no reviews.
  • maxItemsPerQuery — Maximum products per keyword or store. Empty means 100, the pre-filled value; 0 removes the limit, up to 5,000. It does not apply to reviews, which use maxReviewsPerProduct.
  • maxItems — Overall cap across all keywords, stores and products combined, counting listing products, product records and reviews together. 0 or empty means unlimited. The form pre-fills 1,000.
  • customMapFunction — Optional (object) => object JavaScript function applied to every item, to reshape or enrich it. It must not be used for filtering. Leave it empty to store items unchanged.

Custom map function

Use customMapFunction to reshape or enrich items on the fly. The input form pre-fills a function that returns each item unchanged, a starting point to edit:

(object) => { return {...object} }

The README sets one rule:

  • No filtering. The function takes an item and returns an item.

The input form adds that the function must not be used for filtering, and that accounts using it for filtering may be banned.

Input tips

Take a quick sample

Run a single keyword with maxItems set to 10: a cheap, fast check that the Actor and your keyword return what you expect.

Choose listing rows or full product records

Keyword and store results are listing rows: price, original price, discount, rating, units sold, shop and categories. For variants, stock and price per SKU, review counts, shop details or creator videos, and the description, specifications and shipping when TikTok Shop provides them, put the product URLs in productUrls to get full product records, which are priced separately. A common pattern is to search first, then pass the most interesting product URLs from that dataset to a second run.

Search several product keywords

This input searches three keywords in the United States, up to 100 products each:

{
  "searchQueries": [
    "wireless earbuds",
    "led strip lights",
    "phone case"
  ],
  "maxItemsPerQuery": 100,
  "maxItems": 300
}

List a store’s entire catalogue

Set maxItemsPerQuery to 0 to page a store until its catalogue ends, and raise maxItems to match. This input lists one store, newest products first:

{
  "shopUrls": [
    "https://www.tiktok.com/shop/store/<store-name>/<store-id>"
  ],
  "shopSort": "newest",
  "maxItemsPerQuery": 0,
  "maxItems": 0
}

Collect a product’s record and reviews

List the product in productUrls and set maxReviewsPerProduct. A popular product can have thousands of reviews, so pick a number that fits your budget, and raise maxItems or set it to 0, because its pre-filled 1,000 counts reviews too. Turn off includeProductDetails if you only want the reviews:

{
  "productUrls": [
    "https://www.tiktok.com/shop/pdp/<product-name>/<product-id>"
  ],
  "includeProductDetails": true,
  "maxReviewsPerProduct": 200,
  "maxItems": 0
}

Map more products with more keywords

Raise maxItemsPerQuery, or set it to 0, to follow each keyword search to its end, at about 100–200 products depending on the keyword. Beyond that, extra depth comes from extra keywords, such as brand names, product types and common variations. Dedup works across keywords and stores, so overlaps are stored and charged once.

Output

Each run writes its results to an Apify dataset. Each item is one unique result, and its type field says what it is: product, a listing row from a keyword search or a store; productDetail, a full product record from a product URL; or review, one buyer review. A keyword or store with no matches, or a product that is not found, adds no items and is not charged. In Apify Console, the dataset’s Overview shows the type, title, URL, price, currency, units sold, rating and shop, and its Reviews view shows the product ID, rating, text, reviewer, date and verified-purchase flag.

These are the main fields of an item.

  • type — product, productDetail or review. Use it to split the dataset; it also decides which result event charges the item.
  • id url title — The product ID, product page URL and title. A review has its own id and the product’s productId.
  • price originalPrice discountPercent currency — The current price, the price before the discount and the discount in percent, in the listing’s currency (USD).
  • rating soldCount reviewCount — The rating and units sold; product records add the review count. A listing row leaves out a rating or review count TikTok Shop doesn’t show on it.
  • shopMeta — The shop’s ID and name on search products, only its ID on store products, and its logo, product count and rating on product records.
  • specifications variants skus — Product records: specification name–value pairs when provided, option names and values, and one entry per purchasable variant with its price, stock and purchase limit.
  • shipping relatedVideos — Product records: the shipping fee and delivery window when provided, and creator videos linked to the product, with play and like counts and an affiliate flag.
  • skuSpecification isVerifiedPurchase isIncentivized — Reviews: the SKU bought, whether the reviewer bought the product, and whether the review was marked as incentivized. A review also has a rating, text, date, photos and reviewer.
  • searchKeyword inputKeyword inputShopUrl inputProductUrl — The input that produced the item: keyword fields on search products, inputShopUrl on store products, and inputProductUrl, exactly as you typed it, on product records and reviews.
{
  "type": "product",
  "id": "1700000000000000001",
  "url": "https://www.tiktok.com/shop/pdp/1700000000000000001",
  "title": "Example wireless earbuds with charging case",
  "imageUrl": "https://example.com/product-1.jpg",
  "price": 24.99,
  "originalPrice": 31.99,
  "discountPercent": 22,
  "currency": "USD",
  "currencySymbol": "$",
  "rating": 4.6,
  "soldCount": 1250,
  "shopMeta": {
    "id": "7400000000000000001",
    "name": "Example Store"
  },
  "categories": [
    "Electronics",
    "Audio"
  ],
  "searchPosition": 0,
  "searchKeyword": "wireless earbuds",
  "inputKeyword": "wireless earbuds"
}
Illustrative record: real field names, made-up values, trimmed.
{
  "type": "productDetail",
  "id": "1700000000000000001",
  "url": "https://www.tiktok.com/shop/pdp/1700000000000000001",
  "title": "Example wireless earbuds with charging case",
  "description": "An example product description.",
  "images": [
    "https://example.com/product-1.jpg"
  ],
  "price": 24.99,
  "originalPrice": 31.99,
  "discountPercent": 22,
  "currency": "USD",
  "soldCount": 1250,
  "specifications": [
    {
      "name": "Brand",
      "value": "Example"
    }
  ],
  "rating": 4.6,
  "reviewCount": 320,
  "variants": [
    {
      "name": "Color",
      "values": [
        "Black",
        "White"
      ]
    }
  ],
  "skus": [
    {
      "id": "1700000000000000101",
      "name": "Black",
      "price": 24.99,
      "originalPrice": 31.99,
      "currency": "USD",
      "stock": 500,
      "purchaseLimit": 5
    }
  ],
  "shopMeta": {
    "id": "7400000000000000001",
    "name": "Example Store",
    "logoUrl": "https://example.com/shop-logo.jpg",
    "productCount": 40,
    "rating": 4.7
  },
  "shipping": {
    "name": "Standard shipping",
    "fee": 0,
    "currency": "USD",
    "freeShipping": true,
    "deliveryMinDays": 4,
    "deliveryMaxDays": 6
  },
  "relatedVideos": [
    {
      "id": "7400000000000000201",
      "url": "https://www.tiktok.com/@example_creator/video/7400000000000000201",
      "durationSec": 30,
      "playCount": 15000,
      "likeCount": 900,
      "authorName": "Example Creator",
      "isAffiliate": true
    }
  ],
  "inputProductUrl": "https://www.tiktok.com/shop/pdp/1700000000000000001"
}
Illustrative full product record, from a product URL: real field names, made-up values, trimmed.
{
  "type": "review",
  "id": "7500000000000000001",
  "productId": "1700000000000000001",
  "skuSpecification": "Color: Black",
  "rating": 5,
  "text": "An example review text.",
  "createTime": 1791288000,
  "createDate": "2026-10-06",
  "images": [],
  "isVerifiedPurchase": true,
  "isIncentivized": false,
  "authorMeta": {
    "id": "6600000000000000001",
    "name": "Example buyer"
  },
  "inputProductUrl": "https://www.tiktok.com/shop/pdp/1700000000000000001"
}
Illustrative buyer review, from a product URL with `maxReviewsPerProduct` set: real field names, made-up values.

Field reference

Every documented key of a dataset item, with its JSON type. A dot marks a key inside an object.

FieldTypeMeaning
type string product, productDetail or review. product and review items are charged as “Product or review”, productDetail items as “Product details”.
id string The product ID; on a review, the review ID.
url string The product page, as https://www.tiktok.com/shop/pdp/<id>. Not on reviews.
title string The product title. Not on reviews.
imageUrl string Search and store products: the product image URL.
description string Product records: the product description, left out when TikTok Shop doesn’t provide one.
images array Product records: product image URLs. Reviews: review photo URLs.
price originalPrice number The current price and the price before the discount, in currency.
discountPercent number The discount in percent. Left out when there is no discount.
currency currencySymbol string The listing’s currency code and symbol: USD and $.
rating number The product rating; on a review, the reviewer’s rating. Left out of a listing row that doesn’t show one.
soldCount number Units sold.
reviewCount number Product records: the number of reviews.
shopMeta.id shopMeta.name string The shop’s ID and name. Store products carry only the ID.
shopMeta.logoUrl string Product records: the shop’s logo URL.
shopMeta.productCount shopMeta.rating number Product records: the shop’s product count and rating.
trustLabel string Search products only: a badge TikTok Shop shows on search results, such as blue_v, most_loved or best_seller, when the product has one.
categories array Search and store products: the product’s categories.
isVerifiedSeller boolean Product records: a verified-seller flag, left out when TikTok Shop doesn’t provide it.
categoryPath array Some product records: the full category path.
specifications array Product records: specifications as name and value pairs, left out when TikTok Shop doesn’t provide them.
variants array Product records: the option names and their values.
skus array Product records: one entry per purchasable variant, with its own id, name, price, originalPrice, currency, stock and purchaseLimit.
shipping object Product records: the shipping option’s name, fee, currency, freeShipping flag, deliveryMinDays, deliveryMaxDays and leadTime. Left out when TikTok Shop doesn’t provide it.
relatedVideos array Product records: creator videos linked to the product, with play and like counts; isAffiliate marks affiliate creators.
productId string Reviews: the ID of the product reviewed.
skuSpecification string Reviews: the SKU bought, such as Item: Default.
text string Reviews: the review text.
createTime number Reviews: the publish time as a Unix timestamp in seconds.
createDate string Reviews: the same moment as a YYYY-MM-DD date.
isVerifiedPurchase isIncentivized boolean Reviews: whether the reviewer bought the product, and whether the review was marked as incentivized.
authorMeta.name string Reviews: the reviewer’s name.
authorMeta.avatar string Reviews: the reviewer’s avatar URL, a signed link that expires, so fetch it soon after the run if you need it.
searchPosition number Search products: the position in the keyword’s results, starting at 0.
searchKeyword inputKeyword string Search products: the keyword that found the product. A product found by several inputs is stored once, under whichever found it first.
inputShopUrl string Store products: the store URL that listed the product.
inputProductUrl string Product records and reviews: the product URL, exactly as you typed it.
labels array In the README’s search sample, as ["Free shipping"]; the README does not describe it. Check a run of your own before relying on it.
hasVideo boolean In the README’s search sample, as true; the README does not describe it. Check a run of your own before relying on it.
category categoryId country authorMeta.id string In the README’s product-record and review samples; the README does not describe them. Check a run of your own before relying on them.

How to run it

  1. Open the Actor on Apify, listed as “Tiktok Shop Scraper”, and sign in. You need an Apify account.
  2. Fill in the Input tab, then click Start.
  3. When the run finishes, open the Output tab and click Export to download the dataset as JSON, CSV or another format.

Or send the same input to the Apify API. This call runs the Actor and returns its dataset items. Replace $APIFY_TOKEN with the API token from your Apify Console.

curl -X POST \
  "https://api.apify.com/v2/actors/batscrape~tiktok-shop-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["wireless earbuds"],"maxItems":10}'

The call waits up to 300 seconds. For a longer run, start it asynchronously and read the dataset when it finishes. Read the Apify API reference.

New to Apify? See how BatScrape Actors run on Apify. To run it on a schedule, or send results on when a run finishes, see schedules and webhooks.

Pricing

Pay per event. A run is charged when it starts, then one result event for every item delivered. Listing products from keywords and stores and buyer reviews share one result event; full product records from product URLs have their own, priced separately. A product found by several keywords, or by a keyword and a store, is stored and charged once, and a keyword or store with no matches, or a product that is not found, adds no result charges. There are no free result pages, and every result is checked against the run’s charge budget before it’s stored, so a run stops cleanly instead of overspending. See current rates on Apify .

Limitations

  • A keyword search ends by itself at about 100–200 products, depending on the keyword: that is where TikTok Shop’s search ends, not a partial result, so add keywords for more. A store is paged up to 1,200 products.
  • Reviews come only from product URLs, up to 5,000 per product, and maxReviewsPerProduct defaults to 0, which collects none.
  • This Actor currently collects United States TikTok Shop data. The current input has no region selector; other TikTok Shop markets are not advertised as supported.
  • Short links (vt.tiktok.com, vm.tiktok.com) are not supported, and invalid store or product links are skipped with a warning in the log.
  • It returns image and video page URLs but does not download or store the files. Reviewer avatar URLs are signed links that expire.
  • Fields an item doesn’t have, such as a discount, a trust badge or review photos, are left out rather than set to null.
  • On the Apify free plan, a run is limited to one request: the first page of products for the first keyword or store (about 20–40 products), the full record of the first product, or its first 10 reviews when includeProductDetails is off. Keywords come first, then stores, then product URLs, and everything else in the run is skipped. A paid plan removes that limit.

FAQ

Answers from the Actor’s README on Apify.

Do I need a TikTok account or login?

No. It collects public data only, through a backend service, and no login, cookies or request signing are required on your end. You need an Apify account to run it.

Which TikTok Shop markets are supported?

The current Actor supports the United States TikTok Shop market. There is no region input in the current build. Customers outside the US can use it to research US products; this does not mean their local TikTok Shop market is supported.

How many products or reviews do I get?

A keyword search ends at about 100–200 products, depending on the keyword. A store is paged until its catalogue ends, up to 1,200 products per store. Reviews can go deep, and you collect up to maxReviewsPerProduct, at most 5,000, per product URL. All of these are also bounded by maxItems and the run’s maximum charge, and on the Apify free plan a run is limited to one request.

What’s the difference between a listing product and a product record?

Listing products, from keywords and stores, have the price, discount, rating, units sold, shop and categories. Product records, from product URLs, add images, the review count, variants, stock and price per SKU, shop details and related creator videos, plus the description, specifications, shipping and a verified-seller flag when TikTok Shop provides them. They are priced separately.

What’s included at no extra charge?

Every field of an item comes with it; there are no add-on fees. Duplicates across keywords and stores are removed for free, and products that are not found add no result charges. There are no free result pages: every delivered result is charged.

Does it download images or videos?

No. It returns image and video page URLs but does not download or store the files. Reviewer avatar URLs are signed links that expire, so download them promptly if you need them.

Why did a run return few or no results?

Check these first:

  • Your plan: on the Apify free plan a run is limited to one request, and everything after it is skipped. The log says so when the limit applies.
  • The log: every keyword, store and review list ends with a line that says which limit stopped it.
  • maxItemsPerQuery: left empty, a keyword or store stops at 100 products. Set it to 0 for no per-query limit.
  • maxReviewsPerProduct: it is 0 by default, which means no reviews.
  • maxItems: the whole run stops once it’s reached, and it counts products, product records and reviews together.
  • The links: store URLs must look like https://www.tiktok.com/shop/store/..., and product URLs must be product pages or product IDs.
  • The market: use US TikTok Shop product and store URLs. Other markets are not supported by the current Actor.

How do I keep the cost of a run down?

Four settings help:

  • Set maxItems to a hard cap that matches your budget, and keep maxItemsPerQuery low when you only need the top products of each keyword or store.
  • Use listing rows from keywords and stores where they are enough, and request full product records only for the products you need.
  • Turn off includeProductDetails when you only want reviews.
  • Batch related keywords and stores into one run: cross-query dedup means overlaps are never charged twice.

Other BatScrape Actors

  • Reddit Scraper — Search Reddit posts or comments by keyword across all subreddits. Export titles, text, subreddits, authors, scores and comment counts, sorted by relevance, newest, top or most comments.
  • Threads Scraper — Search Threads by keyword or collect a public account’s latest posts. Export text, authors, engagement, topics, mentions, links and media URLs without a Threads login.
  • Realtor.com Scraper — Scrape Realtor.com for-sale, rental and sold listings by city, ZIP code or URL. Export price, beds, baths, photos, sale and tax history, schools and agents.
  • TikTok Scraper — Search TikTok by keyword and export unique videos with creator profiles, engagement stats, music, hashtags and media URLs. Sort by relevance or likes, filter by date and region.
  • Douyin Scraper — Search Douyin (抖音), also known as TikTok China, by keyword. Export unique posts with creator profiles, engagement stats, music and media URLs.
  • FollowScores Scraper — Extract live football fixtures, results and team profiles for 11 European competitions and 214 teams.

Every published Actor is on the scrapers hub.

YOUR NEXT DATASET STARTS HERE

Scrape at scale. Build with better data.

Discover our scraping actors on Apify. Configure your source and connect the results to your workflow.

  • Run actors on Apify
  • Export JSON or CSV
FROM SOURCE TO DATASET
Apify 02 / Run

03 / Use your data

JSON Apps & APIs
CSV Sheets & analysis
Ready for your workflow

Your source. Your Apify account. Your data.

Purpose-built actors. One place to start. Explore the scraper collection