# 🛒 TikTok Shop Scraper: Products & Sellers · $6/1k (`themineworks/tiktok-shop-products`) Actor

Scrape TikTok Shop products by keyword or shop URL: name, price, rating, reviews, sold count and seller. No login for search. Use as an MCP server in Claude & AI agents.

- **URL**: https://apify.com/themineworks/tiktok-shop-products.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** E-commerce, MCP servers, Social media
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.60 / 1,000 product scrapeds

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 Scraper: Products, Prices & Sellers

> **The Mine Works:** 544 users across 100 public Actors, >99% run success. Pay only for results delivered. [Browse all Actors](https://apify.com/themineworks).

### Overview

TikTok Shop Scraper extracts product listings from TikTok Shop by keyword search or shop URL. Keyword search returns name, price, currency, rating, review count, brand, images, and product URL, and runs with no login at all. Point it at a specific shop URL with a session cookie to pull that seller's full catalog, including seller name, seller handle, and sold count, fields the keyword-search page does not expose.

Built for social-commerce operators, dropshippers, brand teams, competitive-intel dashboards, and AI agents that need live TikTok Shop data.

Reliability posture: blocked, empty, or failed runs are never charged. The charge event fires only for a product record that is actually parsed and delivered to the dataset.

✅ No login for keyword search | ✅ Full seller catalog | ✅ Currency-normalised prices | ✅ MCP-ready for AI agents

### Features

Keyword search across the TikTok Shop catalog, one result page per keyword.
Optional shop URL input to pull one seller's full catalog, with seller name, handle, and sold count.
Structured fields for price, original price, rating, and review count.
Same output whether you consume it via CSV, JSON, Excel, API, or MCP tool call.

### How it works

TikTok Shop is the fastest-growing live-commerce platform in the world and has no official product-search API. This actor talks to the same public product feed that powers the TikTok Shop web experience, normalises prices and currencies, and returns clean flat records. Keyword search runs unauthenticated. Shop-URL scraping supports an optional session cookie for higher throughput and richer catalog coverage.

**Keyword search returns one page per keyword, not a paginated crawl.** TikTok Shop's own search page does not expose a working page/offset parameter for this route (tested directly: requesting a second page returns the identical product set). A search typically returns 20 to 25 unique products per keyword. To cover more ground, add more keywords rather than raising `maxProducts` far beyond that for a single term.

**Search results don't carry a seller name.** TikTok Shop's search page publishes each product's brand (the manufacturer, e.g. "CMF by Nothing"), not the TikTok seller account that's listing it, and the two aren't always the same. Rather than mislabel one as the other, seller name and handle are only populated from shop-URL scraping, where the seller is the page itself. The output is flat and analytics-ready either way: no HTML, no nested review threads, no per-page parsing.

### 🧾 Input configuration

```json
{
  "searchKeywords": ["wireless earbuds", "phone case"],
  "shopUrls": [],
  "maxProducts": 25,
  "proxyConfig": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] },
  "sessionCookie": null
}
```

### 📤 Output format

Real record from a live keyword search:

```json
{
  "productId": "1732196048087061435",
  "productName": "ESR Acrylic Protective Casing for iPhone 17e/16e, Classic Hybrid Magnetic Smartphone Accessory, MagSafe-Compatible, Military-Grade Shockproof Protection",
  "price": 16.99,
  "currency": "USD",
  "priceText": "USD 16.99",
  "rating": 4.8,
  "reviewCount": 92,
  "productUrl": "https://shop.tiktok.com/us/pdp/esr-iphone-17e-16e-case-magsafe-compatible-shockproof/1732196048087061435",
  "source": "phone case",
  "sourceType": "search",
  "charged": true,
  "scraped_at": "2026-09-04T07:26:28.854Z"
}
```

`originalPrice`, `soldCount`, `shopName`, `shopHandle`, `category`, and `images` are omitted here, not blank: TikTok Shop's keyword-search page genuinely doesn't publish those fields. Shop-URL mode (with a `sessionCookie`) additionally returns seller name, seller handle, and sold count on every record.

Every product record contains these fields:

| Field | Description |
| --- | --- |
| 🆔 `productId` | TikTok Shop internal product ID |
| 🏷️ `productName` | Product title as listed |
| 💰 `price` | Current selling price |
| 💱 `currency` | ISO currency code |
| 🏷️ `priceText` | Price with currency symbol as shown |
| 🏷️ `originalPrice` | Original list price for discount math |
| ⭐ `rating` | Average star rating |
| 💬 `reviewCount` | Total review count |
| 📦 `soldCount` | Total units sold. Shop-URL mode only; null from keyword search |
| 🏬 `shopName` | Seller shop name. Shop-URL mode only; null from keyword search |
| 👤 `shopHandle` | Seller handle (`@handle`). Shop-URL mode only; null from keyword search |
| 🗂️ `category` | Product category |
| 🖼️ `images` | Array of product image URLs |
| 🔗 `productUrl` | Canonical product page URL |
| 🧭 `source` | The search keyword or shop URL that found this product |
| 🏷️ `sourceType` | `search` or `shop` |
| 💳 `charged` | True when this record is billed |
| 🕒 `scraped_at` | ISO timestamp of capture |

### 💼 Common use cases

**Dropshipping and product research**
Find high-sold, high-rating products in a niche and evaluate margin before listing.
Monitor a hot category (kitchen gadgets, phone accessories) for the next breakout SKU.

**Competitive price and catalog intelligence**
Pull a competitor shop's full catalog and track price and inventory changes over time.
Benchmark your prices against the leader in your category weekly.

**Brand and social-commerce operators**
Monitor brand mentions and unauthorised sellers of your products.
Track discount depth and campaign timing across your category.

**AI shopping copilots**
Give an agent live TikTok Shop data so it can recommend, compare, or link to real SKUs.
Feed structured product data into a RAG index for a niche commerce assistant.

### 🚀 Getting started

1. Open the actor and set `searchKeywords` for keyword search, or `shopUrls` for shop-catalog mode.
2. Set `maxProducts` to cap the run size.
3. Keep residential proxy on, and add a `sessionCookie` only if you're using shop-catalog mode at scale.
4. Click Start, then download the dataset as JSON, CSV, or Excel, or pull it via API or MCP.
5. Schedule the run daily for a rolling social-commerce feed.

### FAQ

**Do I need a TikTok account?**
No for keyword search. Shop-catalog mode benefits from a session cookie at scale, but is not strictly required for smaller runs.

**Does it capture reviews?**
It returns aggregated review count and rating at the product level, not per-review text. The actor is optimised for wide catalog and trend scans.

**Which currencies are supported?**
Prices come back in the shop's native currency. The `priceText` field preserves the on-page symbol so you can display or convert without ambiguity.

**How much does it cost?**
$6 per 1,000 products delivered. You pay only for products actually delivered, and there is no free tier. Empty runs cost nothing.

**Can I use it inside an AI agent?**
Yes. It is exposed as an MCP tool. See below.

### Use in Claude, ChatGPT & any MCP agent

```
https://mcp.apify.com/?tools=themineworks/tiktok-shop-products
```

Or call it programmatically with the Apify client:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/tiktok-shop-products').call({
  searchKeywords: ['wireless earbuds'],
  maxProducts: 25,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### 🛠️ Complete your social-commerce pipeline

Pair this actor with the rest of the themineworks e-commerce suite:

- **[AliExpress Products Scraper](https://apify.com/themineworks/aliexpress-products)**: cross-source products and margins on AliExpress.
- **[Twitter / X Scraper](https://apify.com/themineworks/twitter-x-scraper)**: track social buzz around a product or category.
- **[Website Contact Scraper](https://apify.com/themineworks/website-contact-finder)**: pull seller and brand contact details for direct sourcing.

Typical flow: tiktok-shop-products validates demand, aliexpress-products checks margin at source, twitter-x-scraper measures the social wave.

Questions or need a custom field set? Reach out through the Apify profile.

### Related guides

- [TikTok Shop Product Scraper: Price, Rating and Seller Data Without a TikTok API](https://themineworks.com/blog/tiktok-shop-scraper-python)

*Last verified: 2026-08*

# Actor input Schema

## `searchKeywords` (type: `array`):

List of product keywords to search on TikTok Shop (e.g. "wireless earbuds", "skincare serum").

## `shopUrls` (type: `array`):

TikTok shop URLs or handles (e.g. "@brandname", "https://www.tiktok.com/@brandname/shop"). Leave empty to search by keyword.

## `maxProducts` (type: `integer`):

Maximum number of products to extract per keyword or shop. You pay only for products actually delivered; there is no free tier. Keyword search returns one result page per keyword (no working pagination was found on TikTok Shop's side), typically 20 to 25 unique products, regardless of how high this is set for a single keyword. Shop-URL mode is not limited this way.

## `proxyConfig` (type: `object`):

Apify proxy settings. Residential proxies recommended for TikTok.

## `sessionCookie` (type: `string`):

Your TikTok sessionid cookie value. Only needed for scraping individual shop pages (/@handle/shop). Not required for keyword search.

## Actor input object example

```json
{
  "searchKeywords": [
    "wireless earbuds"
  ],
  "shopUrls": [],
  "maxProducts": 5,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "searchKeywords": [
        "wireless earbuds"
    ],
    "maxProducts": 5,
    "proxyConfig": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/tiktok-shop-products").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 = {
    "searchKeywords": ["wireless earbuds"],
    "maxProducts": 5,
    "proxyConfig": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/tiktok-shop-products").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 '{
  "searchKeywords": [
    "wireless earbuds"
  ],
  "maxProducts": 5,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call themineworks/tiktok-shop-products --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,themineworks/tiktok-shop-products"
        }
    }
}
```

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/U1TDNb0QuAS628Sg6/builds/YexbJns1ixacCB1gS/openapi.json
