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

Fetch a full TikTok Shop product detail record by product ID or product page URL and region, including product info, shop info, reviews summary, vouchers, category data, and shop-performance fields.

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

## Pricing

from $7.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 Product Scraper

Fetch the full record for one TikTok Shop product — shop info, review summary, highlighted reviews, vouchers, category, and shop performance — from a product ID or a product page URL.

One product, one request, one row. When you already know which product you want, this skips the search entirely.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `product_id` | string | — | **Required.** A product ID, or a product page URL. |
| `region` | enum | `US` | **Required.** `US`, `GB`, `SG`, `MY`, `PH`, `TH`, `VN`, `ID`. |

Both of these are accepted for `product_id`:

```json
{ "product_id": "1732432759321694958", "region": "US" }
```

```json
{ "product_id": "https://shop.tiktok.com/view/product/1732432759321694958", "region": "US" }
```

Regional subdomains, trailing slashes, and query strings on the URL are all fine — the ID is pulled out of it.

### Output

One row, with eleven fields.

| Field | What it holds |
|---|---|
| `product_id` | TikTok Shop product ID |
| `seller_id` | Seller or shop ID associated with the product |
| `name` | Product name |
| `product_detail` | The full detail payload, unmodified |
| `product_info` | Product information object |
| `shop_info` | Shop information object |
| `reviews_info` | Review summary and rating information |
| `hot_reviews` | Highlighted reviews |
| `vouchers` | Voucher and promotion data |
| `category_info` | Category information |
| `shop_performance` | Shop performance indicators |

`product_detail` is the raw response kept whole, so anything TikTok returns that the named fields do not cover is still there to read.

### Questions

**What happens if the product does not exist, or is delisted?**
The run finishes successfully with an empty dataset — no row, no error. A run that saved zero items means TikTok returned nothing for that ID in that region, which is also what you get for a product that was pulled from the catalogue.

**Why does `region` matter if I already have the exact product ID?**
TikTok Shop resolves product IDs per market. The same ID under a region where the seller never listed returns nothing. If a known-good ID comes back empty, try the region the seller actually sells in before assuming the ID is wrong.

**Can I pass the product page URL instead of the ID?**
Yes. `https://shop.tiktok.com/view/product/1732432759321694958` and `1732432759321694958` behave identically, including regional subdomains and any query string on the end.

**Why is `name` sometimes empty?**
`name` is read from the product model inside the detail payload. When TikTok omits that model, `name` comes back empty while `product_detail` still holds everything that was returned — read it from there.

**I have hundreds of product IDs. Is this the right Actor?**
It fetches one product per run. For a whole catalogue use [TikTok Shop Seller Products Scraper](https://apify.com/toolzerhub/tiktok-shop-seller-products-scraper) with the seller ID, which paginates and can attach the same detail fields to every product it finds.

### 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 Seller Products Scraper](https://apify.com/toolzerhub/tiktok-shop-seller-products-scraper) | You want one shop's entire catalogue |
| [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

## `product_id` (type: `string`):

TikTok Shop product ID, or a product page URL (https://shop.tiktok.com/view/product/<id>), to fetch full product details for.

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

TikTok Shop region code.

## Actor input object example

```json
{
  "product_id": "1732432759321694958",
  "region": "US"
}
```

# 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 = {
    "product_id": "1729401495861891109"
};

// Run the Actor and wait for it to finish
const run = await client.actor("toolzerhub/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 = { "product_id": "1729401495861891109" }

# Run the Actor and wait for it to finish
run = client.actor("toolzerhub/tiktok-shop-product-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 '{
  "product_id": "1729401495861891109"
}' |
apify call toolzerhub/tiktok-shop-product-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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