# TikTok Shop Product Scraper - Stock & Sellers (`zen-studio/tiktok-shop-product-scraper`) Actor

Search TikTok Shop across all 16 marketplaces and export every product: price, rating, units sold, seller, badges and the video promoting it. US products add every variant with its live stock, specifications, delivery options and shop statistics. One row per product.

- **URL**: https://apify.com/zen-studio/tiktok-shop-product-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** E-commerce, Social media
- **Stats:** 12 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

[![90+ fields per TikTok Shop product. Variant stock. Units sold. Video views.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/tiktok-shop-product-scraper-readme-hero-v1.png)](https://console.apify.com/actors/qPXO2yh7RVIZvboUf/input)

From **Zen Studio**, creators of the [1688 Wholesale Scraper](https://apify.com/zen-studio/1688-wholesale-scraper), used by **2,000+ users**, and the [Shopee Product Scraper](https://apify.com/zen-studio/shopee-product-scraper). Bring the same team's marketplace data tools to TikTok Shop.

### Why choose this actor?

- **90+ fields in a detailed product record.** Go beyond the listing price with stock and discounts for each variant, coupons, specifications, delivery options and shop sales. Full details are available for **US products** with `includeProductDetails` enabled.
- **Connect products to the videos promoting them.** Collect units sold alongside video views, likes, comments, shares and creator follower counts when available. Full details also add related videos, helping you research both the product and its promotion.
- **Search across 16 marketplaces.** Research products in the US, UK, Europe, Latin America and Asia, with prices in each market's currency. Overlapping keywords return each product once, so duplicates do not inflate your export or product charges.

<a href="https://console.apify.com/actors/qPXO2yh7RVIZvboUf/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/tiktok-shop-product-scraper-readme-cta-v1.svg" width="264" height="48" alt="Try 5 detailed products" /></a>

#### Start with five US products

```json
{
  "searchKeywords": [
    "cat toys"
  ],
  "region": "US",
  "maxProductsPerKeyword": 5,
  "includeProductDetails": true
}
```

[Open actor input](https://console.apify.com/actors/qPXO2yh7RVIZvboUf/input), paste this example and export JSON, CSV or Excel. JSON preserves nested variants, delivery options and related videos. **Full details carry a separate charge**; see [pricing](https://apify.com/zen-studio/tiktok-shop-product-scraper/pricing).

The 90+ field example comes from a US search with full details enabled. Available values vary by product; promoting videos are not present on every listing. Search supports all 16 markets; full details and direct product lookups are US-only.

<table><tr><td colspan="5" style="background:#25F4EE;color:#161823;padding:10px 14px;font-size:13px;font-weight:700">Zen Studio · Marketplace Data</td></tr><tr><td style="background:#CCFAF7;padding:8px 9px;border:1px solid #BDE2DF;vertical-align:top;width:20%;min-width:130px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-qPXO2yh7RVIZvboUf-oVF5TY4KDy-icon.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;<a href="https://apify.com/zen-studio/tiktok-shop-product-scraper" style="color:#142D30;text-decoration:none;font-weight:700;font-size:13px">TikTok Shop</a></span><br><span style="color:#3F6063;font-size:12px;white-space:nowrap">You are here</span></td><td style="background:#E8FDFC;padding:8px 9px;border:1px solid #BDE2DF;vertical-align:top;width:20%;min-width:130px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-PsVmeHsn8748GeSDv-Ktzu3u1ZW9-icon.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/tiktok-shop-review-scraper" style="color:#142D30;text-decoration:none;font-weight:700;font-size:13px">TikTok Shop</a></span><br><span style="color:#3F6063;font-size:12px;white-space:nowrap">Buyer reviews</span></td><td style="background:#E8FDFC;padding:8px 9px;border:1px solid #BDE2DF;vertical-align:top;width:20%;min-width:130px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-FHLdQDoADvB14bAyA-r6ZrVkIHKi-shopee-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/shopee-product-scraper" style="color:#142D30;text-decoration:none;font-weight:700;font-size:13px">Shopee</a></span><br><span style="color:#3F6063;font-size:12px;white-space:nowrap">Products &amp; stock</span></td><td style="background:#E8FDFC;padding:8px 9px;border:1px solid #BDE2DF;vertical-align:top;width:20%;min-width:130px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-ghXSMZcW3GxsCrkiR-5hnvsKv4Yt-1688-wholesale-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/1688-wholesale-scraper" style="color:#142D30;text-decoration:none;font-weight:700;font-size:13px">1688</a></span><br><span style="color:#3F6063;font-size:12px;white-space:nowrap">Wholesale products</span></td><td style="background:#E8FDFC;padding:8px 9px;border:1px solid #BDE2DF;vertical-align:top;width:20%;min-width:130px;white-space:nowrap"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-TASViBigl6dEv1GaH-RjnHoxkrmo-alibaba-scraper-logo.png" width="20" height="20" alt="" style="display:inline-block;vertical-align:middle;margin:0"/>&nbsp;&nbsp;<a href="https://apify.com/zen-studio/alibaba-scraper" style="color:#142D30;text-decoration:none;font-weight:700;font-size:13px">Alibaba</a></span><br><span style="color:#3F6063;font-size:12px;white-space:nowrap">Supplier details</span></td></tr></table>

#### Copy to your AI assistant

```text
zen-studio/tiktok-shop-product-scraper on Apify returns one row per TikTok Shop product (product_id, title, price and price_amount, price_currency, original_price_amount, discount, rating_average, sold_count, shop_name, seller_id, trust_label, labels, ships_from, category_breadcrumb, image_url, and for the promoting clip video_url, video_caption, video_posted_at, video_play_count, video_like_count, video_author_handle, video_author_followers, video_hashtags) across 16 marketplaces. Input precedence is productUrls > productIds > searchKeywords; set region to the marketplace you want (default US). Keyword search works in every marketplace, but productUrls/productIds and includeProductDetails are United States only: a non-US lookup is rejected with a message, and a non-US details request is logged and skipped. includeProductDetails=true adds variants[] with per-variant price, discount and live stock, plus stock_total, specifications, description, image_urls, delivery_options[], related_videos[], brand, category_name and shop_rating/shop_followers/shop_sold_count; it is charged as a separate event, and a product looked up by URL or ID always carries that charge because the lookup returns that record by definition. One keyword returns roughly 150-200 products before results repeat, so maxProductsPerKeyword is an upper bound; a product found under several keywords is delivered and charged once. Limits per run: 100 keywords, 500 product IDs. Charges: $0.005 per run start, each unique product delivered, each catalogue lookup, and the standard dataset-item fee. Full spec: https://api.apify.com/v2/actors/zen-studio~tiktok-shop-product-scraper/builds/default and current pricing: https://apify.com/zen-studio/tiktok-shop-product-scraper To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
```

### What you get

Every product a search returns, roughly 150-200 per keyword, as structured rows:

| | |
|---|---|
| **Product** | Title, product ID, direct link, image and all image URLs, category trail |
| **Price** | Price and numeric amount, currency, unit price, pre-discount price, discount, saving |
| **Demand** | Star rating, units sold |
| **Shop** | Shop name, seller ID, ships-from location, shop badge (`gold`, `silver`, `best_seller`) |
| **Badges** | Free delivery, coupons and other labels shown on the listing |
| **Video** | The promoting clip: link, caption, post date, length, hashtags, sound |
| **Video reach** | Plays, likes, comments, shares, saves, and the creator's handle and follower count |
| **Search** | Which keyword found it and its position in that keyword's results |

Turn on **Add full product details** and every US product also carries:

| | |
|---|---|
| **Variants** | Each buyable option with its price, original price, discount, **live stock**, purchase and minimum-order limits, warehouse |
| **Catalogue** | Full description, category and category IDs, specifications, every product image, size-chart flag, coupon text, review count |
| **Shop stats** | Shop rating, follower count, total units sold, product count, video count, location, performance percentile |
| **Delivery** | Every delivery option with estimated dates, min/max days, fee and free-shipping flag |
| **Related videos** | Other clips featuring the product, with plays, likes, cover image and post date |

### Use it for

- **Product research.** Find what sells in a category, at what price, with what
  rating, and how much stock is behind it.
- **Competitor tracking.** Watch a rival's catalogue, prices, discounts and
  stock over time by scheduling the same keywords.
- **Supplier and shop discovery.** Every row carries the seller, its location
  and its performance.
- **Ad and content research.** Most listings link the video that promotes them,
  with caption and post date.

### Input

```json
{
  "searchKeywords": ["cat toys", "dog beds"],
  "region": "US",
  "maxProductsPerKeyword": 100,
  "includeProductDetails": false
}
```

| Field | What it does |
|---|---|
| `searchKeywords` | Terms to search. Each is collected to the end of its result set, or to your maximum. Up to 100 per run. |
| `productUrls` / `productIds` | Collect specific products instead of searching. US marketplace only, up to 500 per run, and each one carries the full-details charge. |
| `region` | `US`, `GB`, `DE`, `FR`, `IT`, `ES`, `IE`, `BR`, `MX`, `JP`, `ID`, `MY`, `PH`, `SG`, `TH`, `VN`. Defaults to `US`. |
| `maxProductsPerKeyword` | Cost control. Leave empty to take everything a search returns. |
| `includeProductDetails` | Adds variants, live stock, specifications, delivery options and shop statistics. US only, slower, and charged as a separate event. |

A product found under two keywords is returned, and charged, once.

### Output

One real row, trimmed only where a URL or a caption ran long:

```json
{
  "type": "product",
  "product_id": "1732320522239447983",
  "title": "Rechargeable Interactive Unpredictable Moving Feather Cat Toy - 3 Spe...",
  "region": "US",
  "product_url": "https://www.tiktok.com/shop/pdp/1732320522239447983",
  "price": "4.89",
  "price_amount": 4.89,
  "price_currency": "USD",
  "original_price_amount": 19.99,
  "discount": "76%",
  "saving": "Saving $15.10",
  "rating_average": 4.7,
  "sold_count": 495,
  "seller_id": "7494550511383644079",
  "shop_name": "YUPET",
  "labels": [
    "Free shipping"
  ],
  "category_breadcrumb": [
    "Pet Supplies",
    "Dog & Cat Accessories",
    "Cat Toys"
  ],
  "image_url": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-o...",
  "video_url": "https://v19.tiktokcdn-us.com/36b56eadf9144d448af77448408822c...",
  "video_caption": "My cat absolutely loves it!!!\ud83d\ude3b\ud83d\ude38\ud83d\ude3d#interactivecattoy #catfish #cat #c...",
  "video_posted_at": "2026-08-11T16:39:09+00:00",
  "video_play_count": 4437,
  "video_like_count": 18,
  "video_comment_count": 0,
  "video_author_handle": "wujf10",
  "video_author_followers": 97,
  "video_hashtags": [
    "interactivecattoy"
  ],
  "search_keyword": "cat toys",
  "search_rank": 1
}
```

With **Add full product details** on, the same row also carries:

```json
{
  "description": "HAPPYCODE Electric Cat Teaser: Interactive Pet Toy for Stress Relief \ud83c\udf1f Features: Benefi...",
  "category_name": "Pet Supplies",
  "coupon": "Extra 60% off (up to $12)",
  "sold_count_display": "58.5K sold",
  "variant_count": 5,
  "stock_total": 948,
  "variants": [
    {
      "sku_id": "1731445039459045454",
      "specification": "Color: Dual Mode Upgrade (gray) ",
      "price": "$24.99",
      "price_amount": 24.99,
      "original_price": null,
      "original_price_amount": null,
      "discount": null,
      "stock": 542,
      "purchase_limit": 20
    },
    {
      "sku_id": "1731740354077888590",
      "specification": "Color: Dual Mode Upgrade (blue)",
      "price": "$20.99",
      "price_amount": 20.99,
      "original_price": "$24.99",
      "original_price_amount": 24.99,
      "discount": "-16%",
      "stock": 147,
      "purchase_limit": 20
    }
  ],
  "variant_options": [
    {
      "name": "Color",
      "values": [
        "Dual Mode Upgrade (gray) ",
        "Dual Mode Upgrade (blue)",
        "Dual Mode Upgrade (orange)",
        "Dual Mode Upgrade (pink)",
        "Electric Cat Teaser Accessory Refill Kit"
      ]
    }
  ],
  "shop_rating": 4.5,
  "shop_followers": 2379,
  "shop_sold_count": 77228,
  "shop_location": "United States of America",
  "shop_performance": "Better than 93% of other shops",
  "delivery_options": [
    {
      "name": "3-day delivery",
      "estimate": "Sep 28 - Sep 30",
      "min_days": 3,
      "max_days": 5,
      "fee": "$0.00",
      "fee_amount": 0.0,
      "free_shipping": true
    }
  ],
  "related_video_count": 20,
  "review_count": 5745
}
```

### Good to know

- **Searching works in every marketplace.** Looking a product up by URL or ID,
  and the full-detail fields, are United States only. Ask for them elsewhere and
  the run tells you instead of quietly returning less.
- **A keyword's result set ends.** TikTok Shop returns roughly 150-200 products
  per search, then repeats itself. The run stops when a keyword has nothing new
  left to show, so your maximum is an upper bound, not a promise.
- **Overlapping keywords are not double-charged.** A product that two keywords
  both surface is delivered, and charged, once, under the first keyword.
- **Not every field exists on every product.** Videos appear on about 40% of
  listings, ratings on about two thirds, category trails on a third. Review
  counts and full descriptions come with **Add full product details**. Fields
  that are absent upstream come back empty rather than invented.

### Pricing

Pay per result, no subscription.

| Event | Free plan | Bronze | Silver | Gold+ |
|---|---:|---:|---:|---:|
| Actor start | $0.005 per run | $0.005 | $0.005 | $0.005 |
| Product | $1.99 / 1,000 | $1.49 | $0.99 | $0.79 |
| Full product details | $4.00 / 1,000 | $3.00 | $2.00 | $1.50 |
| Dataset item | $0.01 / 1,000 | $0.01 | $0.01 | $0.01 |

**Full product details** is charged once per product that gains the extra
fields: for a keyword search, only when you switch the option on; for a product
URL or ID, always, because that lookup returns the full catalogue record by
definition. A product found under several keywords is charged once.

A 1,000-product search on the Free plan costs about $2.00. The same search with
full details costs about $6.00. Looking up 1,000 products by URL costs the same
$6.00, since each one is a full catalogue record.

### Questions

**Which marketplaces can I search?**
All 16: the United States, United Kingdom, Germany, France, Italy, Spain,
Ireland, Brazil, Mexico, Japan, Indonesia, Malaysia, the Philippines, Singapore,
Thailand and Vietnam. Prices come back in each marketplace's own currency.

**Why are product URLs and full details US-only?**
Those come from the product's catalogue record, which TikTok Shop only serves for
the United States. Keyword search works everywhere. Ask for a non-US lookup and
the run says so rather than returning nothing.

**How many products will one keyword give me?**
Roughly 150 to 200, then the results start repeating. The run stops there, so
`maxProductsPerKeyword` is an upper bound rather than a promise.

**Will I pay twice for a product that two keywords both find?**
No. It is delivered once, under the first keyword that found it, and charged once.

**Can I track stock or price over time?**
Yes, that is what the variant rows are for. Schedule the same keywords daily and
compare `stock`, `price_amount` and `discount` between runs.

**Do I need the full details option?**
Only if you want variants, live stock, the full description, delivery options or
shop statistics. Everything in the first output sample comes without it.

### Related

- [TikTok Shop Review Scraper](https://apify.com/zen-studio/tiktok-shop-review-scraper)
  reads every buyer review for the products you find here.

# Actor input Schema

## `searchKeywords` (type: `array`):

Search TikTok Shop for these terms and collect every product found. One row per product.

## `productUrls` (type: `array`):

Collect these specific products instead of searching. Accepts full product links or bare product IDs. US marketplace only, and always returns the full product details, which are charged as a separate event.

## `productIds` (type: `array`):

Same as product URLs, for IDs you already have. Used only when no product URLs are given. US marketplace only.

## `maxProductsPerKeyword` (type: `integer`):

Upper limit of products collected for each keyword. Leave empty to collect every product a search returns, which is around 150-200 per keyword. You are charged per product returned, so this is also your cost control.

## `region` (type: `string`):

Which TikTok Shop marketplace to search. Defaults to the United States.

## `includeProductDetails` (type: `boolean`):

Adds variants with prices and live stock, specifications, the full description, every product image, all delivery options, related videos and shop statistics. Available in the United States marketplace only, slower, and charged as a separate event.

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "searchKeywords": [
    "cat toys"
  ],
  "maxProductsPerKeyword": 100,
  "region": "US",
  "includeProductDetails": false
}
```

# Actor output Schema

## `products` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchKeywords": [
        "cat toys"
    ],
    "maxProductsPerKeyword": 100,
    "region": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/tiktok-shop-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchKeywords": ["cat toys"],
    "maxProductsPerKeyword": 100,
    "region": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/tiktok-shop-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchKeywords": [
    "cat toys"
  ],
  "maxProductsPerKeyword": 100,
  "region": "US"
}' |
apify call zen-studio/tiktok-shop-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/tiktok-shop-product-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qPXO2yh7RVIZvboUf/builds/ZovKO7l2HwWb7bxkV/openapi.json
