# TikTok Shop Scraper - Products, Stock, Prices & Sellers (`benthepythondev/tiktok-shop-scraper`) Actor

Export TikTok Shop (US) products without a browser or account: price, discount, units sold, rating, seller and, on request, the full record with variants, stock per variant, shipping, reviews and seller totals. Works from product, category and store links.

- **URL**: https://apify.com/benthepythondev/tiktok-shop-scraper.md
- **Developed by:** [Ben](https://apify.com/benthepythondev) (community)
- **Categories:** E-commerce, Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 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

## 🛍️ TikTok Shop Scraper - Products, Stock, Prices & Sellers

Export products from TikTok Shop (United States): price, discount, units sold, rating, brand and seller for every product, and on request the full record with all variants, the stock of each variant, shipping, description, reviews and the seller's totals. Works from product links, category links and store links. No TikTok account, no browser, no proxy setup. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

### 🔎 What is the TikTok Shop Scraper?

It is an Apify Actor that reads the data TikTok Shop's own pages carry, without opening a browser. The default run (15 products of one category) takes about three seconds. In our tests on Apify 200 products of a category took 15 seconds, and 30 products with their full records took 21 seconds.

It accepts three kinds of links and tells them apart by itself:

- **Product links** (`…/pdp/…`, or a bare product id) return the full record of that product.
- **Category links** (`…/c/…`) return products of the category. TikTok shows every visitor a different selection of a category, so the Actor asks again as a new visitor until it has the number you asked for. You get the products TikTok is pushing in that category, without repeats; it is a broad sample and not a complete catalogue.
- **Store links** (`…/store/…`) return the up to 20 products the store's page lists, each with the seller's rating, followers, units sold and product count.

With **Include the full product record** on, category and store rows are completed from each product's own page.

#### What data does it extract?

- **Every row:** `product_id`, `url`, `title`, `price`, `original_price`, `discount_percent`, `currency`, `rating`, `review_count`, `sold_count`, `brand`, `seller_name`, `seller_id`, `image_url`
- **Full record, product:** `description`, `images`, `video_url`, `categories`, `specifications`, `search_keywords`
- **Full record, variants and stock:** `variants` (each with `sku_id`, `options`, `price`, `stock`), `variant_count`, `stock_total`, `price_max`
- **Full record, shipping:** `free_shipping`, `shipping_fee`, `delivery_days_min`, `delivery_days_max`
- **Full record, reviews:** `rating_breakdown`, `reviews` (the reviews shown on the product page: rating, text, date, verified purchase, variant, country)
- **Seller totals (store rows and full records):** `seller_url`, `seller_rating`, `seller_sold_count`, `seller_product_count`, `seller_followers`

### ⬇️ Input

| Field | Type | What it does |
|---|---|---|
| `urls` | array | Product, category or store links, or bare product ids |
| `maxResults` | integer | Products per category link. 15 by default, up to 5,000 |
| `includeDetails` | boolean | Complete category and store rows with the full product record |

#### Example input

The 100 products TikTok shows first in a category, with stock and variants:

```json
{
  "urls": ["https://shop.tiktok.com/us/c/beauty-personal-care/601450"],
  "maxResults": 100,
  "includeDetails": true
}
```

### ⬆️ Output

A real row from a category:

```json
{
  "product_id": "1730661941307937028",
  "url": "https://shop.tiktok.com/us/pdp/youluck-lash-clusters-waterproof-long-lasting-beginner-friendly/1730661941307937028",
  "title": "YOULUCK Velvet Touch Lash Cluster DIY Kit, Waterproof Dramatic Eyelash Extensions with Ultra-Thin Band, Bond, Seal, Remover & Tweezer, Beginner-Friendly Beauty …",
  "price": 20.09,
  "original_price": 30.9,
  "discount_percent": 35,
  "currency": "USD",
  "rating": 4.7,
  "review_count": 1513,
  "sold_count": 26932,
  "brand": "YOULUCK",
  "seller_name": "YouLuck Beauty",
  "seller_id": "7495486250805332228",
  "image_url": "https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/912555cbce624dfea9e6fd80298270d7~tplv-fhlh96nyum-crop-webp:1200:1200.webp?dr=12190&t=55 …",
  "source_type": "category",
  "source_url": "https://shop.tiktok.com/us/c/beauty-personal-care/601450",
  "position": 5,
  "has_details": false,
  "scraped_at": "2026-10-03T12:10:59.704828+00:00"
}
```

A real row with the full record. This product has 15 variants, 3 reviews on its page and 8 images; lists and long texts are shortened here:

```json
{
  "product_id": "1729475770630116401",
  "url": "https://shop.tiktok.com/us/pdp/easora-women-cap-sleeve-v-neck-tops-drawstring-shorts-loungewear/1729475770630116401",
  "title": "Yousify Women's 2-Piece Leopard Print Loungewear Set - Polyester Blend Lapel V-Neck Cap Sleeve Ease Top & Drawstring Above Knee Loose Fit Shorts, Casual Summer …",
  "price": 48.79,
  "original_price": 60.99,
  "discount_percent": 20,
  "currency": "USD",
  "rating": 4.7,
  "review_count": 2174,
  "sold_count": 8464,
  "brand": null,
  "seller_name": "Yousify",
  "seller_id": "7494157184055084081",
  "image_url": "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/84e29b7b07724825921a9b3893c97e05~tplv-fhlh96nyum-crop-webp:800:800.webp?dr=12190&t=555f …",
  "source_type": "category",
  "source_url": "https://shop.tiktok.com/us/c/womenswear-underwear/601152",
  "position": 2,
  "has_details": true,
  "price_max": 48.79,
  "description": "Fabric type: Leopard: 96% Polyester, 4% Elastane Solid: 95% Polyester, 5% Elastane\nCare instructions: Machine Wash\nOrigin: Imported\nNote: This set is loose …",
  "images": [
    "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/84e29b7b07724825921a9b3893c97e05~tplv …",
    "https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/d0ec233e43a84730bedc73a5b4b2b4ac~tplv …"
  ],
  "video_url": null,
  "categories": [
    "Womenswear & Underwear",
    "Women's Suits & Sets"
  ],
  "specifications": {
    "Apparel fabric stretch": "Medium stretch",
    "Fabric weight": "Medium weight",
    "Included components": "Shorts",
    "Care instructions": "Machine wash",
    "Closure type": "Pull on"
  },
  "variants": [
    {
      "sku_id": "1729475796983714865",
      "options": {
        "Color": "Leopard Brown",
        "Size": "Small"
      },
      "price": 48.79,
      "stock": 3
    },
    {
      "sku_id": "1729475796983780401",
      "options": {
        "Color": "Leopard Brown",
        "Size": "Medium"
      },
      "price": 48.79,
      "stock": 1
    }
  ],
  "variant_count": 15,
  "stock_total": 138,
  "free_shipping": true,
  "shipping_fee": 0,
  "delivery_days_min": 3,
  "delivery_days_max": 6,
  "rating_breakdown": {
    "1": 51,
    "2": 31,
    "3": 94,
    "4": 206,
    "5": 1792
  },
  "reviews": [
    {
      "rating": 5,
      "text": "I’m so excited I’m 4”11 177 pounds and when I say I was nervous for no reason lol This first perfect I do …",
      "date": "2026-07-20",
      "verified_purchase": true,
      "variant": "Leopard Brown, Large"
    },
    {
      "rating": 5,
      "text": "Love this outfit It fix perfect, the fabric so soft and stretchy",
      "date": "2026-07-08",
      "verified_purchase": true,
      "variant": "Leopard Yellow, XX-Large"
    }
  ],
  "seller_url": "https://shop.tiktok.com/us/store/yousify/7494157184055084081",
  "seller_rating": 4.5,
  "seller_sold_count": 41916,
  "seller_product_count": 190,
  "seller_followers": 22870,
  "search_keywords": [
    "women's leopard print lounge set",
    "2 piece set for women"
  ],
  "scraped_at": "2026-10-03T12:18:09.063904+00:00"
}
```

### 💰 How much does it cost?

You pay per saved product, plus a tiny start fee per run. The full record is a second event on top of the product row.

| Apify plan | 1,000 products | 1,000 full records, added |
|---|---|---|
| Free | $2.00 | $4.00 |
| Starter | $1.90 | $3.80 |
| Scale | $1.80 | $3.60 |
| Business and above | $1.70 | $3.40 |

The default run (15 products) costs 3 cents. A product link always returns the full record, so it costs both events: 0.6 cents on the Free plan. Set **Maximum cost per run** in the run options and the Actor stops at that amount and says so in the status message.

### 💡 Use cases

- 📦 **Product research:** see what sells in a category, at which price and with how many units sold, before you source or list a product.
- 📉 **Stock and price tracking:** schedule a run on your competitors' product links and watch `stock_total`, variant stock and prices change.
- 🏪 **Seller and brand scouting:** collect the shops behind the best-selling products with their ratings, followers and units sold, as leads for agencies and suppliers.
- 🧠 **Datasets for AI and analytics:** titles, descriptions, specifications, search keywords and reviews for classification, pricing models or trend reports.

### ❓ FAQ

**Which countries are covered?** TikTok Shop in the United States. Shops of other countries live on other pages and are not read.

**Do I need a TikTok account, cookies or a proxy?** No. The Actor reads what TikTok Shop shows a visitor from the United States and manages its own connections.

**Can I search by keyword?** No. TikTok guards its shop search with a check that needs a browser. Start from a category link, a store link or product links instead; the links of TikTok Shop's categories are on shop.tiktok.com.

**Does a category link return every product of the category?** No. TikTok shows each visitor a selection, weighted toward what sells. The Actor keeps asking as new visitors and drops repeats, which gave 600 different products from two categories in one test. When TikTok only repeats itself, the run stops and the status message says how many products it found.

**Why does a store link give at most 20 products?** That is what the store's page carries. For more products of a seller, use their product links.

**How current is the stock?** It is the stock TikTok Shop reports on the product page at the moment of the run, per variant.

**What happens when a product no longer exists or a page is not answered?** A removed product is named in the status message and costs nothing. A product page that stays unanswered after several attempts is named too; in a category or store run its row is kept without the full record and the second event is not charged.

**Does `maxResults` count per link or per run?** Per category link. To cap the whole run, set **Maximum cost per run**.

**Is it legal to scrape TikTok Shop?** The Actor reads only what TikTok Shop shows publicly to any visitor and does not log in. Reviews can contain personal data, so GDPR, CCPA and similar rules apply to how you store and use them, and TikTok's terms apply to you as well. If in doubt, ask a lawyer.

**Something is missing or broken?** Open an issue on the Actor's Issues tab with the run ID. Issues are answered within one business day.

### 🔗 You might also like

- [TikTok Profile Videos Scraper](https://apify.com/benthepythondev/tiktok-profile-videos-scraper)
- [TikTok Comments Scraper](https://apify.com/benthepythondev/tiktok-comments-scraper)
- [TikTok Transcript Scraper](https://apify.com/benthepythondev/tiktok-transcript-scraper)
- [Shopify Store Scraper](https://apify.com/benthepythondev/shopify-store-scraper)
- [E-commerce Price Monitor](https://apify.com/benthepythondev/ecommerce-price-monitor)

**Keywords:** tiktok shop scraper, tiktok shop product scraper, scrape tiktok shop, tiktok shop data, tiktok shop products export, tiktok shop stock tracker, tiktok shop price monitor, tiktok shop seller data, tiktok shop best sellers, tiktok shop product research, tiktok shop api alternative, tiktok shop reviews, tiktok shop category products, tiktok shop to csv, tiktok shop dataset

# Actor input Schema

## `urls` (type: `array`):

Product links (…/pdp/…), category links (…/c/…) or store links (…/store/…) from shop.tiktok.com or tiktok.com/shop. A bare product id works too.

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

Products to save for each category link. A store link gives the up to 20 products its page lists; a product link gives one.

## `includeDetails` (type: `boolean`):

For category and store links: also open every product page for variants, stock, shipping, description, reviews and seller totals. Charged as a second event per product. Product links always return the full record.

## Actor input object example

```json
{
  "urls": [
    "https://shop.tiktok.com/us/c/beauty-personal-care/601450"
  ],
  "maxResults": 15,
  "includeDetails": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {
    "urls": [
        "https://shop.tiktok.com/us/c/beauty-personal-care/601450"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("benthepythondev/tiktok-shop-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 = { "urls": ["https://shop.tiktok.com/us/c/beauty-personal-care/601450"] }

# Run the Actor and wait for it to finish
run = client.actor("benthepythondev/tiktok-shop-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 '{
  "urls": [
    "https://shop.tiktok.com/us/c/beauty-personal-care/601450"
  ]
}' |
apify call benthepythondev/tiktok-shop-scraper --silent --output-dataset

```

## MCP server setup

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