# TikTok Shop Product Scraper (`d_nepoch/tiktok-shop-product-scraper`) Actor

TikTok Shop scraper for products, categories and stores: price, discount, units sold, rating breakdown, stock per variant, reviews, shipping, shop stats. No login, no cookies, no captcha solving.

- **URL**: https://apify.com/d_nepoch/tiktok-shop-product-scraper.md
- **Developed by:** [Dmitrii Nepochatykh](https://apify.com/d_nepoch) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.05 / 1,000 product listing data

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

## TikTok Shop Product Scraper

**TikTok Shop Product Scraper** extracts TikTok Shop product data from product links, categories and stores: price and discount, **units sold**, rating and **rating breakdown**, **stock per variant**, top reviews, shipping fee and delivery time, specifications, product video and shop stats.

No login, no cookies, no browser, and no captcha solving — fast and cheap to run.

### Try it in one click

The input is prefilled with the TikTok Shop **Makeup** category: click **Start** and get 10 products with full details in about a minute, for about $0.04.

Real output, best sellers from a test run over several US categories (October 2026):

| Product (shortened) | Price | Units sold | Rating (reviews) | 1★ reviews | Stock | Shop |
|---|---|---|---|---|---|---|
| Purple Teeth Whitening Strips | $22.71 | 247,935 | 3.8 (17,877) | 3,248 | 1,190 | CEELIKE Global |
| Portable Electric Knee Massager | $44.19 | 246,235 | 4.3 (18,631) | 1,923 | 2,093 | CCSales |
| Cluster Lash Extensions, DD Curl | $16.99 | 208,726 | 4.7 (12,024) | 494 | 3,245 | Maxcomfi |
| Automatic Curling Stick 32mm | $30.98 | 193,659 | 4.2 (23,118) | 3,107 | 47,846 | PretiHom Living Pavilion |
| Under Eye Brightener Concealer | $19.49 | 167,086 | 4.3 (12,936) | 1,042 | 1,731 | Palladio |

Each product also has variants with their own stock, shipping fee and delivery days, specifications, top reviews, the product video and the shop's rating and service scores.

### What can this TikTok Shop scraper do?

- **Scrape TikTok Shop products** by product URL or product ID — full product page data.
- **Scrape TikTok Shop categories** — top products of a category, optionally with subcategories.
- **Scrape whole TikTok Shop stores (sellers)** — the shop's full catalog, page after page (20 products per page, up to your limit), plus shop rating, followers and service scores.
- **Fast listing mode** — price, sold count, rating and shop without opening product pages, at a lower price.
- **Merge with other marketplaces**: the same core fields as our AliExpress scraper.

### Who uses TikTok Shop data?

- **Dropshippers and sellers**: find winning products — scrape a category with subcategories and sort by `soldCount`.
- **Brands and agencies**: spy on competitors — track a store's products, prices, stock and sales with a scheduled run.
- **Analysts**: estimate revenue with `soldCount × price`; `totalStock` changes between runs show real sell-through.
- **Product researchers**: `ratingDistribution` shows how many 1-star reviews hide behind a 4.1 average.
- **Data and AI teams**: every number is typed — `soldCount` is `193659`, not "193.6K sold".

### What you get

| Data | Full details | Listing mode |
|---|---|---|
| Title, price, original price, discount, currency | ✅ | ✅ |
| Units sold, rating, review count | ✅ | ✅ |
| Brand, shop name, labels (e.g. free shipping) | ✅ | ✅ |
| Stock per variant (SKU) and total stock | ✅ | — |
| Rating breakdown 1–5★ and top reviews | ✅ | — |
| Shipping fee and delivery days | ✅ | — |
| Specifications, category path, product video | ✅ | — |
| Shop stats: rating, followers, sold, on-time delivery, response scores | ✅ | — |
| Price | $4.00 per 1,000 | $1.50 per 1,000 |

Duplicates are skipped and not charged.

### How to scrape TikTok Shop

1. Click **Try for free**.
2. Paste TikTok Shop links into **Start URLs** — product pages (`/pdp/...`), categories (`/c/...`) or stores (`/store/...`), or plain product IDs. Mix them freely.
3. Choose how many products per category or store, and whether to fetch full product details.
4. Click **Start**. Download products as JSON, CSV, Excel or HTML, or get them via the API.

Find category links on [shop.tiktok.com](https://shop.tiktok.com/us) — open a category and copy the URL.

### Input

| Field | Example | Notes |
|---|---|---|
| `startUrls` | product, category or store links, or product IDs | mix freely |
| `maxProductsPerSource` | `100` | per category or store link |
| `fetchDetails` | `true` | full product page data; `false` = fast listing data only |
| `includeSubcategories` | `true` | also scrape subcategories (2 levels) |
| `region` | `"us"` | US TikTok Shop (other markets coming) |

```json
{
  "startUrls": [
    "https://shop.tiktok.com/us/pdp/curling-stick-by-pretihom-32mm-fully-automatic-large-curling-tool/1730977383013453955",
    "https://shop.tiktok.com/us/c/makeup/848648",
    "https://shop.tiktok.com/us/store/pretihom-living-pavilion/7496021530288556163"
  ],
  "maxProductsPerSource": 100,
  "fetchDetails": true,
  "includeSubcategories": true
}
```

### Output: TikTok Shop product data

One item per product (full details):

```json
{
  "marketplace": "tiktok-shop",
  "productId": "1730977383013453955",
  "title": "PretiHom Fully Automatic Electric Curling Stick - 32mm Large Barrel Heated Styler",
  "url": "https://shop.tiktok.com/us/pdp/1730977383013453955",
  "imageUrl": "https://p16-oec-general-useast5.ttcdn-us.com/....webp",
  "price": 30.98,
  "originalPrice": null,
  "discountPercent": null,
  "currency": "USD",
  "rating": 4.1,
  "reviewCount": 22967,
  "soldCount": 193659,
  "freeShipping": false,
  "categoryPath": ["Beauty & Personal Care", "Personal Care Appliances", "Curlers & Straighteners"],
  "brand": "PretiHom",
  "shopName": "PretiHom Living Pavilion",
  "totalStock": 47848,
  "skus": [{"skuId": "1730977410263191683", "properties": {"Specifications": "Default"}, "price": 30.98, "originalPrice": null, "stock": 47848, "available": true}],
  "ratingDistribution": {"1": 3091, "2": 997, "3": 1348, "4": 2012, "5": 15519},
  "topReviews": [{"rating": 5, "text": "Amazing curls ...", "date": "2026-07-06T...", "verifiedPurchase": true, "images": ["..."]}],
  "shippingFee": 8.99,
  "deliveryDaysMin": 7,
  "deliveryDaysMax": 11,
  "labels": ["Free shipping on orders over $30.00"],
  "specifications": {"Brand": "PretiHom", "Material": "Plastic"},
  "videoUrl": "https://v16m-default.tiktokcdn-us.com/...",
  "shop": {"name": "PretiHom Living Pavilion", "rating": 4.1, "soldCount": 255056, "followers": 9118, "productCount": 8,
           "scores": {"Positive feedback": "75%", "On-time delivery": "99%"}}
}
```

With `fetchDetails: false` you get the listing fields (price, discount, sold, rating, reviews, brand, shop, labels) without `skus`, `totalStock`, reviews and shop stats.

The first fields (`marketplace` … `scrapedAt`) match our other marketplace scrapers (e.g. AliExpress), so datasets can be merged without remapping.

### Ready-made setups

Copy the JSON into the **Input → JSON** tab, click **Save as a new task**, then add a **Schedule** and an integration (Google Sheets, Slack, email, webhook) on the task's **Integrations** tab.

**1. Winning products in a niche** (dropshippers, sellers). Top products of a category and its subcategories with sales, rating breakdown and stock. Schedule: weekly. About $0.40 per 100 products.

```json
{
  "startUrls": ["https://shop.tiktok.com/us/c/makeup/848648"],
  "maxProductsPerSource": 100,
  "includeSubcategories": true,
  "fetchDetails": true
}
```

**2. Competitor store tracking** (brands, agencies). A shop's products every day; compare `soldCount` and `totalStock` between runs to see real sell-through and price changes. Schedule: daily.

```json
{
  "startUrls": ["https://shop.tiktok.com/us/store/pretihom-living-pavilion/7496021530288556163"],
  "maxProductsPerSource": 100,
  "fetchDetails": true
}
```

**3. Cheap daily price and sales snapshot** (analysts). Listing mode skips product pages: price, units sold, rating and shop only, at $1.50 per 1,000. Schedule: daily, export to Google Sheets.

```json
{
  "startUrls": ["https://shop.tiktok.com/us/c/makeup/848648"],
  "maxProductsPerSource": 200,
  "includeSubcategories": true,
  "fetchDetails": false
}
```

### Use it from AI agents (MCP, Claude, ChatGPT, n8n)

**MCP server.** Add this URL to Claude, Cursor, VS Code or any other MCP client and sign in to Apify when asked:

```
https://mcp.apify.com?tools=d_nepoch/tiktok-shop-product-scraper
```

```json
{
  "mcpServers": {
    "tiktok-shop": { "url": "https://mcp.apify.com?tools=d_nepoch/tiktok-shop-product-scraper" }
  }
}
```

Then just ask, for example: *"Which products in TikTok Shop's makeup category sold the most, and which of them have the highest share of 1-star reviews?"* or *"Track this TikTok Shop store and tell me which products sold out: <store link>"*. The agent passes category, store or product links in `startUrls` itself.

**One HTTP call** (waits for the run and returns the products as JSON; for runs longer than 5 minutes use the async `runs` endpoint):

```bash
curl -X POST "https://api.apify.com/v2/acts/d_nepoch~tiktok-shop-product-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": ["https://shop.tiktok.com/us/c/makeup/848648"], "maxProductsPerSource": 20, "fetchDetails": false}'
```

**Python** (`pip install apify-client`, version 3):

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("d_nepoch/tiktok-shop-product-scraper").call(
    run_input={"startUrls": ["https://shop.tiktok.com/us/c/makeup/848648"], "maxProductsPerSource": 50},
    max_total_charge_usd=1,  # hard spending cap for this run
)
for product in client.dataset(run.default_dataset_id).iterate_items():
    print(product["title"], product["price"], product["soldCount"])
```

**No-code and agent frameworks**: the Apify integrations for n8n, Make, Zapier, LangChain, LlamaIndex and CrewAI call this Actor by the name `d_nepoch/tiktok-shop-product-scraper` with the same JSON input.

Tips for agents: one row = one product; `soldCount`, `price` and `totalStock` are numbers; keyword search is not supported, so start from category, store or product links; set `maxTotalChargeUsd` to cap spend.

### How much does it cost to scrape TikTok Shop?

Paid Apify plans get lower prices: Starter −10%, Scale −20%, Business −30% (from **$1.05 per 1,000 listing products**, $2.80 with full details).

Pay per result (see the **Pricing** tab):

- **Product with full details**: $4.00 per 1,000
- **Listing-only product** (`fetchDetails: false`, or a captcha-protected page — see below): $1.50 per 1,000

Products that are not found, filtered out or duplicated are not charged. Set **Max total charge** in run options to cap your spend. New Apify accounts get free monthly credits, enough to try it on a few categories.

### FAQ

**Can I search TikTok Shop by keyword?** Not yet — TikTok protects search pages with a captcha. Use category, store or product links instead.

**Why do some products have only listing data?** TikTok protects some product pages with a captcha. This Actor never solves captchas: it retries on fresh sessions, and if the page stays protected you still get the product's listing data (price, sold, rating, shop), charged at the cheaper listing price. Product links given directly that stay protected are listed in the run summary and not charged.

**How many products does a category give?** A category page shows its top products (about 15–25). Turn on `includeSubcategories` to cover a whole department.

**Which countries are supported?** The US TikTok Shop. More markets are planned — tell us on the **Issues** tab which one you need.

**Is scraping TikTok Shop legal?** The Actor collects only public product and shop data; reviewer names are not collected. Use the data in line with TikTok's terms and the laws that apply to you.

### Limits

- `topReviews` contains the reviews TikTok shows on the product page (a handful), plus the full rating breakdown.
- Stores: the Actor pages through the shop's catalog in the order TikTok shows it (20 products per request) until `maxProductsPerSource` or the end of the catalog.
- Only the US web shop is supported; the UK web shop does not serve product listings to visitors.

### Other scrapers by this developer

- [AliExpress Product Search Scraper](https://apify.com/d_nepoch/aliexpress-product-search-scraper) — AliExpress prices, sold counts and ratings for any keyword; same core fields as this Actor.
- [App Store & Google Play Reviews Scraper](https://apify.com/d_nepoch/app-store-google-play-reviews) — app reviews from both stores with a built-in insights report.
- [Google Hotels Scraper](https://apify.com/d_nepoch/google-hotels-scraper) — hotel prices for any city and dates, prices from every booking site and a price calendar.
- [App Store & Google Play Scraper](https://apify.com/d_nepoch/app-store-google-play-scraper) — app search ranks (ASO), top charts up to 200 apps and full app details from both stores.
- [Startup Funding Rounds Scraper](https://apify.com/d_nepoch/startup-funding-rounds-scraper) — new startup rounds from SEC Form D, Form C and the news, with filters and only-new monitoring.

### Feedback

Found a bug or need a field? Open an issue on the **Issues** tab — fixes usually ship within a few days.

# Actor input Schema

## `startUrls` (type: `array`):

TikTok Shop product links (or numeric product IDs), category links (shop.tiktok.com/us/c/makeup/848648) and store links (shop.tiktok.com/us/store/name/7496021530288556163). Search pages are not supported.

## `maxProductsPerSource` (type: `integer`):

Stop after this many products for each category or store link. Stores are paged through (20 products per page) until this limit or the end of the catalog; category pages show their top ~15–25 products. Product links are always scraped.

## `fetchDetails` (type: `boolean`):

Open every product page for stock per variant, rating breakdown, reviews, shipping and shop stats. Turn off for fast, cheaper listing data (price, sold, rating) from category and store pages.

## `includeSubcategories` (type: `boolean`):

Also scrape the subcategories of each category link (two levels deep). Each category page shows its top products, so this gives you many more products.

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

TikTok Shop market. Only the US web shop is supported for now.

## `proxyConfiguration` (type: `object`):

Default proxies work; the Actor switches to US residential IPs automatically if TikTok blocks them.

## Actor input object example

```json
{
  "startUrls": [
    "https://shop.tiktok.com/us/c/makeup/848648"
  ],
  "maxProductsPerSource": 10,
  "fetchDetails": true,
  "includeSubcategories": false,
  "region": "us",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        "https://shop.tiktok.com/us/c/makeup/848648"
    ],
    "maxProductsPerSource": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("d_nepoch/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 = {
    "startUrls": ["https://shop.tiktok.com/us/c/makeup/848648"],
    "maxProductsPerSource": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("d_nepoch/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 '{
  "startUrls": [
    "https://shop.tiktok.com/us/c/makeup/848648"
  ],
  "maxProductsPerSource": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call d_nepoch/tiktok-shop-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,d_nepoch/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/ZGk56uQvEag0KojUu/builds/MI65d6LjsSbW67xmN/openapi.json
