# All-in-One TikTok Shop Scraper (`thenetaji/tiktok-shop-all-in-one-scraper`) Actor

Collects TikTok Shop products, sellers, categories, reviews, creator videos, trending items and recommendations through a single Actor. The mode is selected per run; each mode accepts its own identifier and returns that dataset's fields.

- **URL**: https://apify.com/thenetaji/tiktok-shop-all-in-one-scraper.md
- **Developed by:** [The Netaji](https://apify.com/thenetaji) (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 $3.19 / 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

## All-in-One TikTok Shop Scraper

The Actor collects seventeen TikTok Shop datasets — product detail, keyword and category search, seller and shop records, reviews, review insights, listing health, creator videos, storefront carousels, recommendation rails, and related search terms — through a single run configuration. The dataset is chosen with **View**; each mode reads its own identifier and returns that dataset's fields.

### Modes

| View | Identifier | Returns |
| --- | --- | --- |
| Product detail | `product_ids` | Full product records: price, variants, stock, ratings, shop |
| Product search | `keyword` | Products matching a keyword |
| Category products | `category_id` | Products within a category |
| Shop info | `seller_id` | One shop: ratings, follower count, policies |
| Seller products | `seller_id` | A seller's catalogue |
| Product reviews | `product_ids` | Individual reviews, filtered by `reviewFilter` and ordered by `reviewSort` |
| Review insights | `product_ids` | Recurring pain points and praise drawn from a review sample |
| Listing health | `product_ids` | A scored diagnosis of a listing with a prioritised fix list |
| Creator videos | `product_ids` | Affiliate videos promoting a product |
| Home carousels | — | The storefront's own carousels |
| You may like, More from shop, Top reviewed, Frequently bought together, Recommended for you, Recommended shops | `product_ids` or `seller_id` | The recommendation rails TikTok Shop renders around a product or shop |
| Related terms | `keyword` | The search terms TikTok Shop associates with a keyword |

**View** is the only required input. Each mode raises a clear error when its identifier is missing.

`region` selects the storefront. The same product id can carry different prices, stock and review counts per region, so a run that changes region is reading different data rather than refreshing the same data.

### Enrichment

| Add-on | Attaches |
| --- | --- |
| `enrichProductDetails` | Full product detail on listing-card rows returned by the search, category, seller, trending and recommendation modes |
| `includeKeywordCoverage`, `includeCompetitive` | Extra sections on the search-insight output |
| `includeCreators`, `includeCategoryBenchmark` | Extra sections on the review-insight and listing-health output |
| `includeShopSignal` | Shop-level signal on seller output |

`enrichProductDetails` costs one extra request per row it enriches and is charged per enriched row. It has no effect on modes whose row is already a full product record.

### Behaviour worth knowing

Review insights and listing health are analyses rather than listings. Each returns one row per product — the outcome itself — and is charged through its own event rather than as an enrichment of a listing card. `reviewSampleSize` bounds how many reviews the analysis reads; a larger sample costs more upstream requests and produces a more stable result.

Recommendation rails are rendered per session. Two runs against the same product can return different rails in a different order, because TikTok Shop personalises and rotates them. Rows are not stable identifiers to diff against over time.

A listing that is out of stock, region-locked or delisted returns an empty result rather than an error. The source does not distinguish these cases, so neither does this Actor.

### Focused alternatives

Twelve single-purpose Actors cover these datasets individually and are cheaper for a single job. Among them: [TikTok Shop Product Scraper](https://apify.com/thenetaji/tiktok-shop-product-scraper), [TikTok Shop Search Scraper](https://apify.com/thenetaji/tiktok-shop-search-scraper), [TikTok Shop Reviews Scraper](https://apify.com/thenetaji/tiktok-shop-reviews-scraper), [TikTok Shop Review Insights](https://apify.com/thenetaji/tiktok-shop-review-insights) and [TikTok Shop Listing Health](https://apify.com/thenetaji/tiktok-shop-listing-health).

# Actor input Schema

## `scraperType` (type: `string`):

Choose the dataset for this run, then fill in the section for that mode below.

## `product_ids` (type: `array`):

One or more TikTok Shop products to fetch. Paste product page links, or product IDs — both work, and you can mix them.

## `enrichProductDetails` (type: `boolean`):

Add the full product page to every row — description, all variants, shop profile, a page of reviews with the star breakdown, and the category path. This makes one extra request per product.

## `keyword` (type: `string`):

Product keyword to search for on TikTok Shop.

## `includeKeywordCoverage` (type: `boolean`):

Check the title against TikTok's own related search terms for the product's keyword and flag high-intent terms missing from it. Needs Search Keyword. Adds one request per distinct keyword in the run, shared across products that use it.

## `includeCompetitive` (type: `boolean`):

Compare the product's price and rating against the top search results for its keyword, and flag if it does not appear in them at all. Needs Search Keyword. Adds one request per distinct keyword in the run, shared across products that use it.

## `category_id` (type: `string`):

A TikTok Shop category page link, or a category ID.

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

A TikTok Shop shop link, or a seller ID.

## `includeShopSignal` (type: `boolean`):

Add the seller's shop-level rating to the report. Adds one request per distinct shop in the run, shared across products from the same shop.

## `reviewSort` (type: `string`):

Order reviews are returned in. Most recent walks the newest first — the right choice for tracking sentiment over time.

## `reviewFilter` (type: `string`):

Narrow to one star rating, to reviews carrying photos or video, or to confirmed purchases. Only one filter applies at a time.

## `reviewSampleSize` (type: `integer`):

How many recent reviews to pull per product before analysing them. A larger sample surfaces quieter themes but costs one larger request per product. 0 asks for the upstream ceiling of 500.

## `includeCreators` (type: `boolean`):

Check how many creators are promoting the product on TikTok Shop, their combined view count, and whether any carry a paid-partnership label. Adds one request per product.

## `includeCategoryBenchmark` (type: `boolean`):

Compare the product's rating against the best-reviewed items TikTok Shop surfaces on its own page. Adds one request per product.

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

Which TikTok Shop storefront to read. This changes the products, prices, and currency you get back — not just the display language.

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

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

## Actor input object example

```json
{
  "scraperType": "productDetail",
  "product_ids": [
    "1730927783781307026"
  ],
  "enrichProductDetails": false,
  "keyword": "wireless earbuds",
  "includeKeywordCoverage": true,
  "includeCompetitive": true,
  "category_id": "601450",
  "seller_id": "7495516049083828882",
  "includeShopSignal": true,
  "reviewSort": "recommended",
  "reviewFilter": "all",
  "reviewSampleSize": 100,
  "includeCreators": true,
  "includeCategoryBenchmark": true,
  "region": "US",
  "maxItems": 20
}
```

# Actor output Schema

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

All records scraped by this run

# 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_ids": [
        "https://shop.tiktok.com/us/pdp/1730927783781307026"
    ],
    "keyword": "wireless earbuds",
    "category_id": "https://shop.tiktok.com/us/c/category/601450",
    "seller_id": "7495516049083828882",
    "reviewSampleSize": 100,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("thenetaji/tiktok-shop-all-in-one-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_ids": ["https://shop.tiktok.com/us/pdp/1730927783781307026"],
    "keyword": "wireless earbuds",
    "category_id": "https://shop.tiktok.com/us/c/category/601450",
    "seller_id": "7495516049083828882",
    "reviewSampleSize": 100,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("thenetaji/tiktok-shop-all-in-one-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 '{
  "product_ids": [
    "https://shop.tiktok.com/us/pdp/1730927783781307026"
  ],
  "keyword": "wireless earbuds",
  "category_id": "https://shop.tiktok.com/us/c/category/601450",
  "seller_id": "7495516049083828882",
  "reviewSampleSize": 100,
  "maxItems": 20
}' |
apify call thenetaji/tiktok-shop-all-in-one-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thenetaji/tiktok-shop-all-in-one-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/3XR1Mw7HUCKxgJafX/builds/cfMqCAcNXT3dADEX7/openapi.json
