# TikTok Shop Scraper - Products, Sales & Trending Intelligence (`webdatalabs/tiktok-shop-intelligence`) Actor

Scrape TikTok Shop products by search, URL, shop or category. Get price, sold count, rating, reviews, SKUs + estimated monthly sales, revenue & trending score. Export CSV/JSON.

- **URL**: https://apify.com/webdatalabs/tiktok-shop-intelligence.md
- **Developed by:** [WebDataLabs](https://apify.com/webdatalabs) (community)
- **Categories:** E-commerce, Social media, Automation
- **Stats:** 1 total users, 0 monthly users, 96.7% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $7.00 / 1,000 product scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## TikTok Shop Scraper - Products, Sales & Trending Intelligence

Scrape TikTok Shop by **category, product URL, or shop** and get pricing, units sold, ratings, reviews, SKUs, images, and full seller data — **plus estimated monthly sales, monthly revenue, and a trending score**. The premium TikTok Shop research tool for dropshippers, sellers, and agencies who want sales *velocity*, not just a snapshot. Export to CSV, JSON, Excel, or Google Sheets.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-0084FF?logo=apify)](https://apify.com/webdatalabs/tiktok-shop-intelligence)
[![Maintained](https://img.shields.io/badge/Maintained-Yes-success)](https://github.com/webdatalabs)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

> ⚙️ **To get monthly sales + trending, two things are required (one-time):**
>
> 1. **Run with full permissions** (this Actor asks for them) — needed so it can persist its cross-run snapshot store.
> 2. **Run it on a schedule** (daily or weekly). Monthly sales & trending are computed from the *change* in units sold between runs, so they appear on the **2nd+ run**, not the first.
>
> Just need a one-off scrape (products, prices, units sold, lifetime revenue, sellers)? Use our lighter **[TikTok Shop Scraper](https://apify.com/webdatalabs/tiktok-shop-scraper)** instead.

### What can you do with it?

- **Find winning products by momentum** — not just total units sold, but how fast they're selling *now* (trending score)
- **Estimate monthly sales & revenue** per product — the metric paid analytics suites charge a subscription for
- **Track competitors over time** — a shop's catalog, ratings, followers, and sales velocity
- **Price & inventory monitoring** — prices, discounts, SKU-level variants
- **Automation** — feed everything into n8n, Make, Zapier, or Google Sheets

### Three ways to scrape

| Mode | You provide | Best for |
|------|-------------|----------|
| 🗂️ **Category** | Category slug/URL | Winning-product discovery & market research |
| 📦 **Product** | Product URLs | Deep data on specific products (variants, reviews, full shop) |
| 🏪 **Shop** | Store URLs | Competitor catalog & shop-level stats |

### What data do you get?

Every product record includes:

- **productId, productTitle, productUrl, currentPrice, originalPrice, discount, currency**
- **soldCount** — cumulative units sold since launch (every run)
- **estimatedRevenue** — lifetime revenue estimate (every run)
- **estimatedMonthlySales, estimatedMonthlyRevenue, trendingScore** — sales velocity *(appears once snapshot history exists — see setup above)*
- **rating, reviewCount, images**
- **shopName, shop** — full shop object (rating, total products, follower count, store URL)
- **variants** — SKUs with per-variant price, stock, attributes (product/shop modes)
- **reviews** — sample of recent reviews (product mode)
- **scrapedAt**

### How the sales intelligence works (honest method)

TikTok shows **cumulative** units sold, not a monthly figure — so monthly sales can't be derived from one snapshot, and we never fake one. Instead, this Actor stores a snapshot of units sold each run and computes the delta:

- 1st run → cumulative `soldCount` + lifetime `estimatedRevenue`. Monthly/trending are omitted (no history yet).
- 2nd run → `estimatedMonthlySales` + `estimatedMonthlyRevenue` from `(soldDelta / daysElapsed) × 30` (`salesDataStatus: "estimated_from_delta"`).
- 3rd+ run → `trendingScore` (0–100, 50 = steady) from sales-velocity acceleration.

Space scheduled runs **≥12h apart** for stable estimates.

### Setup (one-time)

1. **Permissions:** when prompted, allow **full permissions** (required to persist the snapshot store).
2. **Schedule:** open the Actor → **Schedule** → daily or weekly, with your input (a category, product URLs, or a shop).
3. After the 2nd run, open the **Sales Intelligence** / **Trending** dataset tabs — the velocity fields will be populated.

### Input

| Field | Description |
|---|---|
| `mode` | `category` | `product` | `shop` |
| `categoryUrls` / `productUrls` / `shopUrls` | The targets for your chosen mode (category accepts a `slug/id` shorthand, e.g. `beauty-personal-care/601450`) |
| `maxResults` | Max products to return (1–2000) |
| `proxyConfiguration` | US residential proxies (required; default is correct) |

### Output example (on a scheduled run with history)

```json
{
  "productId": "1730986220018765913",
  "productTitle": "Advanced Hair Density Roll-On Serum",
  "currentPrice": 30,
  "currency": "USD",
  "soldCount": 477547,
  "estimatedRevenue": 14326410,
  "estimatedMonthlySales": 8200,
  "estimatedMonthlyRevenue": 246000,
  "trendingScore": 63,
  "salesDataStatus": "estimated_from_delta",
  "rating": 4.2,
  "reviewCount": 19254,
  "images": ["https://..."],
  "shopName": "RootLabs",
  "shop": { "rating": 4.4, "totalProducts": 18, "followerCount": 65074, "shopUrl": "https://shop.tiktok.com/us/store/rootlabs/..." },
  "variants": [{ "skuId": "...", "name": "1 Pack", "price": 30, "stock": null, "attributes": {} }],
  "scrapedAt": "2026-06-30T10:00:00.000Z"
}
```

### Pricing

Pay-per-event: a per-run start fee + a charge per product scraped. Predictable, no subscription.

### Reliability & proxies

TikTok Shop has strong anti-bot protection. The Actor warms up a verified session, solves the verification challenge, and rotates US residential proxies automatically. **US residential proxies are required** (default). If a run is fully blocked it exits **with a clear error** — it never reports success with no data.

### FAQ

**I scheduled it but still see no monthly sales/trending.** They appear on the **2nd+ run** (need a prior snapshot) and only with **full permissions** enabled. Space runs ≥12h apart.

**Difference vs the standard TikTok Shop Scraper?** Same data + the **sales-velocity layer** (monthly sales, monthly revenue, trending). If you don't need velocity, the standard scraper is simpler and needs no special permissions.

**Which region?** United States.

**Is this legal?** It collects public, commercial product/shop data (not personal creator data). You're responsible for complying with TikTok's Terms and your local laws.

### Leave a review

Is this actor saving you time? A quick review on the Store helps other people find it — and tells us which fields to add next. **[Rate this actor →](https://apify.com/webdatalabs/tiktok-shop-intelligence)**

# Actor input Schema

## `mode` (type: `string`):

What to scrape. Fill in the matching field below for your chosen mode.

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

Product mode only. Full TikTok Shop product links, e.g. https://shop.tiktok.com/us/pdp/.../<id>

## `shopUrls` (type: `array`):

Shop mode only. Full TikTok Shop store links, e.g. https://shop.tiktok.com/us/store/<name>/<id>

## `categoryUrls` (type: `array`):

Category mode only. A full category URL, or a 'slug/id' shorthand such as 'beauty-personal-care/601450', 'phones-electronics/601739', 'kitchenware/600024'.

## `maxResults` (type: `integer`):

Maximum products to return (per keyword / category / shop).

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

TikTok Shop requires US residential proxies — keep the default unless you have your own residential pool.

## Actor input object example

```json
{
  "mode": "category",
  "productUrls": [],
  "shopUrls": [],
  "categoryUrls": [
    "beauty-personal-care/601450"
  ],
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `sales` (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 = {
    "productUrls": [],
    "shopUrls": [],
    "categoryUrls": [
        "beauty-personal-care/601450"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdatalabs/tiktok-shop-intelligence").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 = {
    "productUrls": [],
    "shopUrls": [],
    "categoryUrls": ["beauty-personal-care/601450"],
}

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

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

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

```

## CLI example

```bash
echo '{
  "productUrls": [],
  "shopUrls": [],
  "categoryUrls": [
    "beauty-personal-care/601450"
  ]
}' |
apify call webdatalabs/tiktok-shop-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=webdatalabs/tiktok-shop-intelligence",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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