# Tiktop Shop Product Scraper (`crucial_binoculars/tiktop-shop-scraper-2`) Actor

🚀 Scrape TikTok Shop product data fast! Extract full store catalogs, product details, customer reviews, search results & creator showcases across all regions. 🛍️ Anti-bot resistant & export-ready! ⚡

- **URL**: https://apify.com/crucial\_binoculars/tiktop-shop-scraper-2.md
- **Developed by:** [Iliya Musa](https://apify.com/crucial_binoculars) (community)
- **Stats:** 10 total users, 8 monthly users, 100.0% runs succeeded, 4 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.50 / 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/actors/running/actors-in-store.md#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 products & Reviews Scraper (All-in-One)

Scrape products, prices, seller ratings, customer reviews, sales volume, and creator showcases from TikTok Shop
Extract complete product catalogs, search results, detailed product specifications, customer reviews, and creator showcase items directly from **TikTok Shop**. Built for high-volume enterprise data pipelines with automated pagination, token pool rotation, and anti-bot mitigation.

***

### 🌟 Key Features

- **🔎 Keyword Search Extractor:** Scrape TikTok Shop search results using custom search queries and filters.
- **🏬 Shop Catalog Downloader:** Extract full product lists from any official TikTok seller storefront URL.
- **📦 Complete Product Details:** Retrieve pricing, sales volume, seller meta, media assets, and stock statuses.
- **⭐ High-Volume Reviews Scraper:** Extract raw customer review text, star ratings, reviewer details, and media.
- **🎬 Creator Showcase Extractor:** Collect products featured inside any TikTok creator's showcase tab.

***

### 🚀 Quick Start & Input Configuration

Select your desired extraction mode from the **Mode** dropdown in the actor input schema.

#### 1. Shop Search Mode (`shop_search`)

Extract products matching specific search terms.

````json
{
  "mode": "shop_search",
  "query": "running shoes",
  "maxItems": 100,
  "region": "US"
}

2. Shop Catalog Mode (shop_products)
Fetch all products listed inside a seller's TikTok Shop.

```json
{
  "mode": "shop_products",
  "shopUrl": "[https://www.tiktok.com/@ALLSWIFIT](https://www.tiktok.com/@ALLSWIFIT)",
  "maxItems": 250,
  "region": "US"
}

3. Product Details Mode (product_details)
Get enriched metadata for a single product URL.

```json

{
  "mode": "product_details",
  "url": "[https://www.tiktok.com/shop/pdp/1730718391180497792](https://www.tiktok.com/shop/pdp/1730718391180497792)",
  "region": "US"
}

4. Product Reviews Mode (product_reviews)
Scrape verified customer feedback and ratings.

{
  "mode": "product_reviews",
  "url": "[https://www.tiktok.com/shop/pdp/1730718391180497792](https://www.tiktok.com/shop/pdp/1730718391180497792)",
  "maxItems": 500,
  "region": "US"
}

5. Creator Showcase Mode (user_showcase)
Extract product listings attached to a creator's profile showcase.

{
  "mode": "user_showcase",
  "handle": "victoriaaa131313",
  "maxItems": 100,
  "region": "US"
}

📊 Sample JSON Output

{
	"product_id": "1731923286576632281",
	"title": "【Back To School】 KIDMI Genuine Suede Clogs for Women Men Soft Cork Footbed Leather Mules Comfort Potato Shoes with Arch Support Outdoor Nonslip Walking Shoes",
	"product_description": null,
	"ship_from": null,
	"trust_label": "best_seller",
	"product_label": "warehouse_label_8-8",
	"product_label_info": [
		{
			"label_type": 8,
			"text": "Free shipping"
		}
	],
	"search_meta": {
		"search_result_id": "1731923286576632281",
		"search_id": "20260831123411D95F279D4D8EAE09C2DC",
		"entrance_form": "search_pure_goods_card"
	},
	"image": {
		"height": 400,
		"width": 400,
		"uri": "tos-useast5-i-omjb5zjo8w-tx/e2f87ad6121d4063bebefbcd1b3099f7",
		"url_list": [
			"https://p16-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/e2f87ad6121d4063bebefbcd1b3099f7~tplv-fhlh96nyum-crop-webp:400:400.webp?dr=12190&t=555f072d&ps=933b5bde&shp=678cc231&shcp=678cc231&idc=useast5&from=1737278001",
			"https://p19-oec-general-useast5.ttcdn-us.com/tos-useast5-i-omjb5zjo8w-tx/e2f87ad6121d4063bebefbcd1b3099f7~tplv-fhlh96nyum-crop-webp:400:400.webp?dr=12190&t=555f072d&ps=933b5bde&shp=678cc231&shcp=678cc231&idc=useast5&from=1737278001"
		]
	},
	"video": null,
	"category_breadcrumb": null,
	"product_price_info": {
		"sale_price_decimal": "29.99",
		"sale_price_format": "29.99",
		"single_product_price_format": "29.99",
		"single_product_price_decimal": "29.99",
		"sale_price_integer_part_format": "29",
		"sale_price_decimal_part_format": "99",
		"decimal_point_symbol": ".",
		"symbol_position": 1,
		"show_currency_space": false,
		"currency_show_mode": 1,
		"currency_name": "USD",
		"currency_symbol": "$",
		"promotion_deduction_details": null
	},
	"rate_info": {
		"score": 4.7,
		"review_count": null
	},
	"sold_info": {
		"sold_count": 17931
	},
	"seller_info": {
		"seller_id": "7494195471787394521",
		"shop_name": "KIDMI US",
		"shop_logo": null
	},
	"seo_url": {
		"updated_at": "1788179653898",
		"canonical_url": "https://www.tiktok.com/shop/pdp/1731923286576632281",
		"slug": "back-to-school-kidmi-genuine-suede-clogs-for-women-men-soft-cork-footbed-leather-mules-comfort-potato-shoes-with-arch-support-outdoor-nonslip-walking-shoes",
		"type": 2,
		"version": 2
	}
}


🛠️ Integrations & Export Formats
You can export scraped TikTok Commerce data directly into:

Formats: JSON, CSV, Excel (XLSX), XML, HTML Table

Automations: n8n, Make, Zapier, Google Sheets, Airbyte

Databases: PostgreSQL, MongoDB, Snowflake, BigQuery

❓ Frequently Asked Questions
Q: Do I need proxies to run this actor?

A: No, proxy rotation and header spoofing are natively managed inside the API layer.

Q: Can I extract data from specific geographic regions?

A: Yes, pass the two-letter ISO country code (e.g., US, GB) into the region parameter.

📩 Support & Custom Modifications
Need a custom feature, higher rate limits, or integration assistance? Contact us through the Discussion tab in the Apify Console.

# Actor input Schema

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

Select the active mode to execute. Only the matching section below is used — every other section is ignored.
## `searchKeywords` (type: `array`):

Only used when Mode = Shop Search. One keyword or phrase per line — each is a separate search.
## `shopUrls` (type: `array`):

Only used when Mode = Shop Catalog. Full store URL, e.g. https://www.tiktok.com/shop/store/{name}/{id}
## `productUrls` (type: `array`):

Used when Mode = Product Details OR Product Reviews (same field for both). Full product page URL.
## `tiktokUsernames` (type: `array`):

Only used when Mode = Creator Showcase. Bare handle, no @ and no URL.
## `region` (type: `string`):

US is currently the most reliable region across every mode. Non-US regions can return limited, inconsistent, or missing data even for shops that appear in search. Only change this if you specifically need to test non-US coverage.
## `sortBy` (type: `string`):

Only affects Mode = Shop Catalog. Ignored by every other mode.
## `maxItems` (type: `integer`):

Caps how many results are pulled per keyword/store/username before moving to the next one. The actor keeps requesting more pages/cursors from the upstream API until this many items are collected (or there's genuinely nothing left to fetch) — it does not stop early. Ignored by Product Details, which always fetches exactly one record per URL.

## Actor input object example

```json
{
  "mode": "shop_search",
  "searchKeywords": [
    "led face mask"
  ],
  "shopUrls": [
    "https://www.tiktok.com/shop/store/goli-nutrition/7495794203056835079"
  ],
  "productUrls": [
    "https://www.tiktok.com/shop/pdp/1729527313880355335"
  ],
  "tiktokUsernames": [
    "hyram"
  ],
  "region": "US",
  "sortBy": "top",
  "maxItems": 100
}
````

# 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 = {
    "mode": "shop_search",
    "searchKeywords": [
        "led face mask"
    ],
    "shopUrls": [
        "https://www.tiktok.com/shop/store/goli-nutrition/7495794203056835079"
    ],
    "productUrls": [
        "https://www.tiktok.com/shop/pdp/1729527313880355335"
    ],
    "tiktokUsernames": [
        "hyram"
    ],
    "region": "US",
    "sortBy": "top",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("crucial_binoculars/tiktop-shop-scraper-2").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 = {
    "mode": "shop_search",
    "searchKeywords": ["led face mask"],
    "shopUrls": ["https://www.tiktok.com/shop/store/goli-nutrition/7495794203056835079"],
    "productUrls": ["https://www.tiktok.com/shop/pdp/1729527313880355335"],
    "tiktokUsernames": ["hyram"],
    "region": "US",
    "sortBy": "top",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("crucial_binoculars/tiktop-shop-scraper-2").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 '{
  "mode": "shop_search",
  "searchKeywords": [
    "led face mask"
  ],
  "shopUrls": [
    "https://www.tiktok.com/shop/store/goli-nutrition/7495794203056835079"
  ],
  "productUrls": [
    "https://www.tiktok.com/shop/pdp/1729527313880355335"
  ],
  "tiktokUsernames": [
    "hyram"
  ],
  "region": "US",
  "sortBy": "top",
  "maxItems": 100
}' |
apify call crucial_binoculars/tiktop-shop-scraper-2 --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crucial_binoculars/tiktop-shop-scraper-2"
        }
    }
}
```

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/2aUKoxTUrHM9aeLlv/builds/C56q1wT4cy0KSobxb/openapi.json
