# TikTok Shop Seller Products Scraper (`toolzerhub/tiktok-shop-seller-products-scraper`) Actor

Collect a TikTok Shop seller's product catalog by seller ID and region with automatic pagination, product listing fields, and optional full product-detail enrichment.

- **URL**: https://apify.com/toolzerhub/tiktok-shop-seller-products-scraper.md
- **Developed by:** [ToolzerHub](https://apify.com/toolzerhub) (community)
- **Categories:** E-commerce, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 92.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 results

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 Seller Products Scraper

Pull one seller's entire TikTok Shop catalogue by seller ID — every product they list, with pagination handled for you and optional full detail on each one.

Point it at a competitor's shop and you get their whole range in one dataset: what they sell, at what price, and how much of it has moved.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `seller_id` | string | — | **Required.** The seller or shop ID whose catalogue you want. |
| `region` | enum | `US` | `US`, `GB`, `SG`, `MY`, `PH`, `TH`, `VN`, `ID`. |
| `maxItems` | integer | `100` | Caps how many products are saved. `0` means the whole catalogue. |
| `addonProductDetails` | boolean | `false` | Adds the detail fields below. One extra request per product. |

```json
{
  "seller_id": "8655572138322465518",
  "region": "US",
  "maxItems": 100,
  "addonProductDetails": false
}
```

Every product row from any of the search Actors carries a `seller_id` — that is where to get one.

### Output

Eleven fields on every row:

| Field | What it holds |
|---|---|
| `product_id` | TikTok Shop product ID |
| `seller_id` | Seller or shop ID |
| `title` | Product title |
| `name` | Product name, when available |
| `price` | Product price information |
| `image` | Primary product image URL |
| `sold_count` | Sales count |
| `rating` | Product rating |
| `seller_info` | Seller information returned alongside the listing |
| `seo_url` | Product SEO URL information |
| `seller_product` | The original listing wrapper, when the catalogue endpoint returns extra metadata |

```json
{
  "product_id": "1732432759321694958",
  "seller_id": "8655572138322465518",
  "title": "LEGO Classic Creative Bricks Box",
  "price": "$24.99",
  "sold_count": 4821,
  "rating": 4.8
}
```

#### With `addonProductDetails` enabled

Eight more fields are merged into each row — `product_detail`, `product_info`, `shop_info`, `reviews_info`, `hot_reviews`, `vouchers`, `category_info`, `shop_performance`. Fields the upstream response omits come back `null` rather than being dropped, so the row shape stays stable across a catalogue.

It costs one extra request and one extra billed event per product, so on a 500-product shop that is 500 extra requests. Leave it off for a first pass, then re-run with it on for the products you actually care about.

### Questions

**Where do I find a seller ID?**
Every row from [TikTok Shop Search Scraper](https://apify.com/toolzerhub/tiktok-shop-search-scraper) or [TikTok Shop Products Scraper](https://apify.com/toolzerhub/tiktok-shop-products-scraper) has a `seller_id`. Search for a product the shop sells, take the `seller_id` off the result, feed it here.

**Why did I get fewer products than the shop appears to list?**
The catalogue endpoint pages through a cursor and the run stops when TikTok reports no more pages, returns an empty page, or hands back a cursor identical to the previous one. That last case is the common one on large shops — TikTok stops advancing rather than saying it has finished. Set `maxItems` to `0` to take everything offered, but a very large catalogue can still come back partial.

**What is `seller_product` and why is it sometimes missing?**
The catalogue endpoint sometimes wraps each product with extra listing metadata — shop-specific ordering, promotion state. When it does, the product itself is unwrapped into the normal fields and the original wrapper is kept whole in `seller_product`. When TikTok returns a bare product with no wrapper, the field is absent.

**Does a failed detail lookup lose the product?**
No. Enrichment is per-product: a lookup that returns nothing leaves that row with its catalogue fields and no detail fields, the run carries on, and you are not charged for the empty lookup.

**Can I pass a shop URL instead of a seller ID?**
No — this one takes the ID only. URLs are accepted by [TikTok Shop Product Scraper](https://apify.com/toolzerhub/tiktok-shop-product-scraper), for products rather than shops.

### Other TikTok Shop Actors

| Actor | Use when |
|---|---|
| [TikTok Shop Search Scraper](https://apify.com/toolzerhub/tiktok-shop-search-scraper) | You are searching by keyword and want listing fields only |
| [TikTok Shop Products Scraper](https://apify.com/toolzerhub/tiktok-shop-products-scraper) | You are searching by keyword and want detail too |
| [TikTok Shop Product Scraper](https://apify.com/toolzerhub/tiktok-shop-product-scraper) | You already have one product ID or URL |
| [TikTok Shop Category Products Scraper](https://apify.com/toolzerhub/tiktok-shop-category-products-scraper) | You want a whole category, without a keyword |
| [TikTok Shop Reviews Scraper](https://apify.com/toolzerhub/tiktok-shop-reviews-scraper) | You want what buyers said about a product |

### Support

Questions, bugs, or feature requests: **contact@toolzerhub.com**

Browse the rest: [apify.com/toolzerhub](https://apify.com/toolzerhub)

# Actor input Schema

## `seller_id` (type: `string`):

TikTok Shop seller or shop ID whose products you want to collect.

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

TikTok Shop region code.

## `maxItems` (type: `integer`):

Maximum number of products to save in search mode. Set 0 for no limit.

## `addonProductDetails` (type: `boolean`):

Add product, shop, review, voucher, category, and performance detail to every product found. This makes one extra request per product.

## Actor input object example

```json
{
  "seller_id": "8655572138322465518",
  "region": "US",
  "maxItems": 20,
  "addonProductDetails": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset containing all scraped data

# 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 = {
    "seller_id": "8655572138322465518",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("toolzerhub/tiktok-shop-seller-products-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 = {
    "seller_id": "8655572138322465518",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("toolzerhub/tiktok-shop-seller-products-scraper").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 '{
  "seller_id": "8655572138322465518",
  "maxItems": 20
}' |
apify call toolzerhub/tiktok-shop-seller-products-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/dmMS2eOk6jj8qqu2A/builds/fhA7ptlERsExyiwtg/openapi.json
