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

Captures the product's historical sales, price, variants details, description, title, attributes, breadcrumb component, shop details, first 3 reviews

- **URL**: https://apify.com/ace\_scraper/tiktok-shop-product-scraper.md
- **Developed by:** [Guru Shekhar](https://apify.com/ace_scraper) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### What does TikTok Shop Product API Scraper do?

**TikTok Shop Product API Scraper** fetches product page details from [TikTok Shop](https://shop.tiktok.com/) product pages for supported across regions and returns structured JSON records in an Apify dataset. It is designed for productId lists and captures the product's historical sales, price, variants details, description, title, attributes, breadcrumb component, shop details, first 3 reviews.

Run it on the Apify platform to use API access, scheduling, integrations, proxy rotation, monitoring, and dataset exports without maintaining your own scraping machine.

### Why use TikTok Shop Product API Scraper?

Use this Actor when you need repeatable product-level checks across TikTok Shop markets such as Indonesia, Malaysia, Thailand, Vietnam, the Philippines, and Singapore and US. It can support catalog monitoring, product availability checks, marketplace analytics, price and merchandising audits, and internal quality-control workflows.

### How to use TikTok Shop Product API Scraper

1. Open the Actor in Apify Console.
2. Go to the Input tab.
3. Select the target country.
4. Paste product IDs into the `products` JSON array.
5. Keep the browser profile as `desktop` unless you specifically need mobile-like behavior.
6. Start the run.
7. Open the Dataset tab to inspect or export the results.

### Input

The Input tab accepts a country and a list of product IDs.

```json
{
    "country": "ID",
    "products": [
        {
            "productId": "1729383641925780840"
        }
    ],
    "browserProfile": "desktop",
    "headless": true
}
````

Supported countries are `ID`, `MY`, `TH`, `VN`, `PH`, `SG` and `US`.

### Output

Each product is saved as one dataset item. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
    "productId": "1729383641925780840",
    "normalizedProductId": "1729383641925780840",
    "url_output": "https://www.tiktok.com/view/product/1729383641925780840",
    "success": true,
    "verificationCleared": true,
    "routerDataFound": true,
    "routerDataLength": 36813,
    "timestamp": "2026-05-03T17:41:45.000Z",
    "responseBody": {
        "breadcrumbComponent": {},
        "productComponentData": {}
    }
}
```

### Data table

| Field                 | Description                                                  |
| --------------------- | ------------------------------------------------------------ |
| `productId`           | Product ID from the input.                                   |
| `normalizedProductId` | Product ID after removing a country prefix, if present.      |
| `url`                 | Internal loader URL used by the scraper.                     |
| `url_output`          | Public TikTok product URL.                                   |
| `success`             | Whether product component data was extracted.                |
| `verificationCleared` | Whether captcha/security verification was absent or cleared. |
| `routerDataFound`     | Whether the page returned enough router data to parse.       |
| `routerDataLength`    | Character length of the router data payload.                 |
| `error`               | Failure reason when extraction did not succeed.              |
| `responseBody`        | Breadcrumb and product information components.               |

### Pricing / Cost estimation

How much does it cost to scrape TikTok Shop product data? Cost depends on the number of product IDs, browser runtime, retries, captcha frequency, and proxy settings. Small test runs usually consume little compute, while large product lists or repeated verification gates increase runtime. Apify free tier limits may be enough for small tests, but production monitoring should be sized against expected product count and run frequency.

### Tips or Advanced options

Use smaller batches when testing a new country or product source. Use `desktop` profile for stable API-style responses, and switch to `mobile` only when you need mobile browser behavior.

### FAQ, disclaimers, and support

Is this legal? Scraping can be legal when done responsibly, but you are responsible for checking TikTok Shop terms, robots rules, local law, and data protection requirements for your use case.

Why is a product marked unsuccessful even when router data exists? Some product pages can return region blocks, unavailable-product payloads, or router data that does not contain the expected `product_info` component.

Need help or a custom workflow? Use the Issues tab on the Actor page to report problems or request support. Custom solutions can add parsing, CSV exports, proxy configuration, or additional marketplace fields.

# Actor input Schema

## `country` (type: `string`):

TikTok Shop country or region to use for product URLs, browser locale, timezone, and geolocation.

## `products` (type: `array`):

Product IDs to fetch. Each item can contain productId.

## `browserProfile` (type: `string`):

Desktop is recommended for stable product API responses; mobile can be used for mobile-like fingerprints.

## `headless` (type: `boolean`):

Run Chromium without a visible window. Keep enabled on Apify platform.

## Actor input object example

```json
{
  "country": "ID",
  "products": [
    {
      "productId": "1729383641925780840"
    }
  ],
  "browserProfile": "desktop",
  "headless": 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 = {
    "products": [
        {
            "productId": "1729383641925780840"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ace_scraper/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 = { "products": [{ "productId": "1729383641925780840" }] }

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Shop Product Scraper",
        "description": "Captures the product's historical sales, price, variants details, description, title, attributes, breadcrumb component, shop details, first 3 reviews",
        "version": "0.0",
        "x-build-id": "VfTNQ10J6VZLZbrZF"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ace_scraper~tiktok-shop-product-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ace_scraper-tiktok-shop-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ace_scraper~tiktok-shop-product-scraper/runs": {
            "post": {
                "operationId": "runs-sync-ace_scraper-tiktok-shop-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ace_scraper~tiktok-shop-product-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-ace_scraper-tiktok-shop-product-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "products"
                ],
                "properties": {
                    "country": {
                        "title": "Country",
                        "enum": [
                            "ID",
                            "MY",
                            "TH",
                            "VN",
                            "PH",
                            "SG"
                        ],
                        "type": "string",
                        "description": "TikTok Shop country or region to use for product URLs, browser locale, timezone, and geolocation.",
                        "default": "ID"
                    },
                    "products": {
                        "title": "Products",
                        "type": "array",
                        "description": "Product IDs to fetch. Each item can contain productId.",
                        "items": {
                            "type": "object",
                            "properties": {
                                "productId": {
                                    "type": "string",
                                    "title": "Product ID",
                                    "description": "TikTok Shop product ID to fetch."
                                }
                            },
                            "required": [
                                "productId"
                            ]
                        },
                        "default": [
                            {
                                "productId": "1729383641925780840"
                            }
                        ]
                    },
                    "browserProfile": {
                        "title": "Browser profile",
                        "enum": [
                            "desktop",
                            "mobile"
                        ],
                        "type": "string",
                        "description": "Desktop is recommended for stable product API responses; mobile can be used for mobile-like fingerprints.",
                        "default": "desktop"
                    },
                    "headless": {
                        "title": "Headless browser",
                        "type": "boolean",
                        "description": "Run Chromium without a visible window. Keep enabled on Apify platform.",
                        "default": true
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
