# TikTok Shop Scraper - Products, Sales, Prices, Stock & Sellers (`topapi/tiktok-shop-scraper`) Actor

Scrape TikTok Shop products by keyword, category, store or product link: price, original price, discount, units sold, rating, reviews, seller and images. Details add SKUs with stock, package size, shipping, specs, reviews, related videos and the seller's business entity. US, UK, SEA, JP. No login.

- **URL**: https://apify.com/topapi/tiktok-shop-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (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 $0.05 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does TikTok Shop Scraper do?

**TikTok Shop Scraper** extracts TikTok Shop products from [shop.tiktok.com](https://shop.tiktok.com/us) and turns keywords, category links, store links and product links into one row per product: price, original price, discount, units sold, rating, review count and the seller. Built for e-commerce sellers, dropshippers, brands, agencies and market researchers who need TikTok Shop product data without copying it by hand.

TikTok Shop Scraper - TikTok Shop API - TikTok Shop product data - TikTok Shop sales scraper

<a href="https://console.apify.com/actors/kc8RafdFcHICLpU2D"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/tiktok-shop-scraper-source.png" alt="TikTok Shop search results with prices, discounts, ratings and units sold that TikTok Shop Scraper turns into rows" style="width:70%"></a>

- **Every way into TikTok Shop:** keyword search, category pages (with all sub-categories), a seller's whole store, product links and plain product ids, in one run.
- **Sales and pricing signals:** units sold, current and original price, discount %, rating, review count and an estimated GMV (price × units sold) on every row.
- **Full product details on demand:** every SKU with its price, stock and purchase limit, **package weight and dimensions per SKU**, the seller's SKU code, shipping fee and delivery time, description, specifications, category path, the first reviews, the TikTok videos shown with the product and the seller's registered business name and address.
- **Whole stores, checked:** a store link returns every product the shop lists; the run summary compares what was read with the count TikTok shows (52 of 52 on our test store).
- **No login, cookies or TikTok API key:** paste keywords or links; the actor reads the same public pages any shopper sees.
- **Monitoring built in:** return only new products on each scheduled run, or also the ones whose price, units sold, rating or review count changed.
- **Export anywhere:** JSON, CSV, Excel, XML or RSS; schedules, webhooks, Make, Zapier, n8n, Google Sheets, the Apify API and MCP.

### What data can you get from TikTok Shop?

<table>
<tr>
<td>🛍️ Product title and link (`productUrl`)</td>
<td>💲 Current price (`currentPrice`)</td>
<td>🏷️ Original price and discount %</td>
</tr>
<tr>
<td>📈 Units sold (`soldCount`)</td>
<td>💰 Estimated GMV (`estimatedGmv`)</td>
<td>⭐ Rating and review count</td>
</tr>
<tr>
<td>🏬 Seller id, name, logo and store link</td>
<td>🔖 Brand</td>
<td>🚚 Free-shipping and deal labels</td>
</tr>
<tr>
<td>📦 SKUs with price, stock, purchase limit</td>
<td>📐 Package weight and size per SKU</td>
<td>🧾 Seller SKU code (`sellerSku`)</td>
</tr>
<tr>
<td>🚛 Shipping fee, delivery days, lead time</td>
<td>🗂️ Category path and ids</td>
<td>📝 Description and specifications</td>
</tr>
<tr>
<td>💬 First reviews (rating, text, date, variant)</td>
<td>🎬 Related TikTok videos (plays, likes, creator)</td>
<td>🏢 Seller's business name and address</td>
</tr>
</table>

On a 100-product run with details on (keywords "water bottle" and "lip gloss"), every row had price, original price, units sold, SKUs with stock and package size, shipping, category path and the seller's business name and address; 87% had a rating, 86% shipped reviews and 56% had related videos.

### How to scrape TikTok Shop with TikTok Shop Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) — $5 of monthly credit, no card needed.
2. Open [TikTok Shop Scraper](https://apify.com/topapi/tiktok-shop-scraper) and click **Try for free**.
3. Type keywords into **Search keywords** and/or paste product, store or category links into **TikTok Shop links**; pick the **Market**.
4. Set **Max products per source** and **Max products in total**; turn on **Include product details** if you need SKUs, stock and shipping.
5. Click **Start**. Products stream into the dataset as they are found.
6. Open the **Storage** tab and **Export** as JSON, CSV or Excel — or let a schedule run it for you.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `searchQueries` | List | Keywords a shopper types, e.g. `"lipstick"`, `"water bottle"`. One search per keyword. |
| `startUrls` | List | Product (`…/pdp/…`, `/view/product/…`), store (`…/store/<name>/<id>`), category (`…/c/<name>/<id>`) or search (`…/s?q=…`) links from shop.tiktok.com or tiktok.com/shop, and vt.tiktok.com share links. |
| `productIds` | List | Product ids instead of links, e.g. `"1729527313880355335"`. |
| `region` | Select | Market for keywords and ids: `US` (default), `GB`, `MY`, `PH`, `SG`, `TH`, `VN`, `JP`. Links carry their own market. |
| **🎯 Filters** | | |
| `includeSubcategories` | Boolean | Walk a category's sub-categories (US) to go past the ~100 products TikTok lists per category. Default `false`. |
| `includeRelatedSearches` | Boolean | When a keyword runs out, continue with TikTok's own related searches. Default `false`. |
| **✂️ Refine results** | | |
| `minPrice` / `maxPrice` | Number | Price range in the market's currency. |
| `minRating`, `minReviews` | Number | Quality floor. |
| `minSold` / `maxSold` | Integer | Units-sold range, e.g. `maxSold: 500` for new or rising products. |
| `onlyDiscounted`, `minDiscountPercent` | Boolean / Integer | Discounted products only, or at least this % off. |
| `freeShippingOnly` | Boolean | Products TikTok labels with free shipping. |
| `titleKeywords` / `excludeKeywords` | List | Title must / must not contain these words. |
| `sellers` / `excludeSellers` | List | Keep or drop shops by name or seller id. |
| **➕ Extra data** | | |
| `includeDetails` | Boolean | SKUs, stock, package size, shipping, description, specs, category path, first reviews, related videos, business entity — charged as **product-details** on rows that carry them. Default `false`. |
| `includeSellerStats` | Boolean | With details (US): each seller's store page once — experience scores, official label, total sold, reviews, videos. Slower; no extra charge. |
| **🔁 Monitoring** | | |
| `monitorMode` | Boolean | Only products an earlier run with the same store name did not deliver. Pair with a daily schedule. |
| `monitorChanges` | Boolean | Also products whose price, units sold, rating or review count changed, with `previous` values and `soldDelta`. |
| `monitorStoreName` | Text | Named key-value store that remembers delivered products. Default `tiktok-shop-monitor`. |
| **📦 Output** | | |
| `maxResultsPerSource` | Integer | Per keyword, category, store or link list. Default `100`; `0` = all TikTok lists. |
| `maxItems` | Integer | Total cap for the run; `0` = none. |
| `compact` | Boolean | Core fields only, sized for AI agents and MCP. |
| `includeRawData` | Boolean | Attach TikTok's own product card as `raw`. |
| **⚙️ Advanced** | | |
| `proxyConfiguration` | Proxy | Leave empty: the US runs without a proxy (Apify datacenter as backup), other markets on residential IPs in that country. |
| `maxConcurrency` | Integer | Sources in parallel (1-6). Default `3`. |

#### Input JSON

```json
{
  "searchQueries": ["lipstick", "water bottle"],
  "startUrls": [{ "url": "https://shop.tiktok.com/us/store/goli-nutrition/7495794203056835079" }],
  "region": "US",
  "maxResultsPerSource": 100,
  "minSold": 100,
  "includeDetails": true
}
```

#### Use a store or category link to get everything a shop or category sells

A keyword search shows what TikTok ranks for that word: signed-out, TikTok lists about 45-120 products per US keyword (70-76 on our test keywords). A **store link** returns the whole shop, and a **category link with sub-categories on** returned 1,000 products in 111 seconds on our test run. **Do:** `https://shop.tiktok.com/us/c/beauty-personal-care/601450` with `includeSubcategories: true` · **Don't:** expect one keyword to list a whole niche.

#### Pick the market before you paste ids

Links carry their own market (`/us/`, `/gb/`, `/my/`…). Bare product ids and keywords use **Market**. Prices come back in that market's currency.

### ⬆️ Output

Every TikTok Shop product becomes one dataset item. Here is a run for the keywords "water bottle" and "lip gloss" with details on:

<a href="https://console.apify.com/actors/kc8RafdFcHICLpU2D"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/tiktok-shop-scraper-output.png" alt="TikTok Shop Scraper output table with price, original price, discount, units sold, rating, SKUs, stock, package size, category and business name" style="width:70%"></a>

A product row from a keyword search (details off):

```json
{
  "productId": "1732180317008925072",
  "title": "Funny Lipstick DStick | Viral Funny Lipstick | Long-Lasting Hydrating Lipstick…",
  "productUrl": "https://shop.tiktok.com/us/pdp/funny-lipstick-for-galentines-day-anti-valentines-day/1732180317008925072",
  "region": "US",
  "currency": "USD",
  "currentPrice": 16.89,
  "originalPrice": 16.89,
  "discountPercent": 0,
  "soldCount": 816,
  "rating": 4.8,
  "reviewCount": 67,
  "estimatedGmv": 13782.24,
  "sellerId": "7495480508926560656",
  "sellerName": "FunnyLipstick Official",
  "source": "search",
  "query": "lipstick",
  "searchRank": 1
}
```

With **Include product details** on, a row also carries SKUs, package size, shipping, category, business entity, reviews and videos. A real row from the "water bottle" run (lists cut to their first item, review text shortened):

```json
{
  "productId": "1732379226018321361",
  "title": "Magcheer Soccer Water Bottle - 20oz Insulated Misting Water Bottles Stainless St…",
  "currentPrice": 38.99,
  "originalPrice": 77.99,
  "discountPercent": 50,
  "soldCount": 3483,
  "variants": [{ "skuId": "1732380799031874513", "options": { "Color": "Soccer" }, "price": 38.99, "originalPrice": 77.99, "stock": 137, "purchaseLimit": 200, "sellerSku": "WBMS20SC1", "packageWeightG": 400, "packageDimensionsCm": { "length": 9, "width": 9, "height": 26 } }],
  "variantCount": 6,
  "totalStock": 237,
  "shipping": { "deliveryName": "Standard", "freeShipping": true, "fee": 0, "originalFee": 5.99, "deliveryMinDays": 4, "deliveryMaxDays": 7, "shipFrom": "local" },
  "categoryPath": ["Kitchenware", "Drinkware", "Vacuum Flasks"],
  "businessName": "Haluni Limited",
  "reviews": [{ "rating": 1, "text": "Water bottle arrived, looks dirty, scratches and with a dent…", "date": "2026-06-26T20:48:31.008Z", "isVerifiedPurchase": true }],
  "relatedVideos": [{ "videoId": "7644628280514989342", "url": "https://www.tiktok.com/@/video/7644628280514989342", "plays": 627436, "likes": 4397 }],
  "videoCount": 20
}
```

#### Fields

| Field | What it is | Fill (test run) |
|---|---|---|
| `productId`, `title`, `productUrl`, `currentPrice`, `originalPrice`, `discountPercent` | Product and price | 100% |
| `soldCount`, `estimatedGmv` | Units sold TikTok shows; price × units sold | 100% |
| `rating`, `reviewCount` | Product rating and reviews | 100% of search / category rows |
| `sellerId`, `sellerName`, `sellerLogo`, `sellerUrl` | The shop | 100% |
| `brand` | Brand TikTok prints on the card | 37-38% (TikTok shows it on some products) |
| `tags`, `freeShipping`, `dealEndsAt` | TikTok's labels | 56-57% / 50-56% / 6-11% |
| `variants`, `variantCount`, `totalStock` | Every SKU with price, stock, limit (details) | 100% |
| `packageWeightG`, `packageDimensionsCm`, `packageDimensionsIn` | Per SKU (details, US / GB) | 100% of SKUs |
| `sellerSku` | Seller's own SKU code (details, US / GB) | 93% of SKUs |
| `shipping`, `categoryPath`, `specifications` | Details | 100% / 99% / 99% |
| `description` / `descriptionImages` | Text (null when the seller uses images only) | 83% / 60% |
| `businessName`, `businessAddress` | Seller's registered entity (details, US) | 100% |
| `reviews`, `relatedVideos`, `shopTopProducts` | Details | 86% / 56% / 93% |
| `sellerScores`, `sellerIsOfficial`, `sellerSold` | With `includeSellerStats`, or on store links | store links 100% |
| `changeType`, `previous`, `soldDelta` | Monitor mode | on monitor rows |

### How can I use TikTok Shop data?

- 🛒 **Dropshippers and product researchers** — find products with high `soldCount`, strong ratings and a discount; schedule the same keywords weekly and read `soldDelta` for sales velocity.
- 🏷️ **Brands and pricing teams** — monitor your products and resellers: price, original price, discount and stock per SKU.
- 🤝 **Agencies, 3PLs and SaaS selling to TikTok sellers** — build seller lists from stores and categories with units sold, followers, rating and the registered business name and address.
- 📦 **Logistics and fulfilment** — package weight and dimensions per SKU, shipping fees and delivery times.
- 🎬 **Affiliate and creator marketing** — the TikTok videos already selling a product, with plays, likes and the creator.
- 🤖 **AI and analytics teams** — feed `compact` rows or the full detail rows to an LLM or a dashboard.

### How much does it cost to scrape TikTok Shop?

TikTok Shop Scraper is pay-per-result: **$0.045 per 1,000 products**, plus **$1.30 per 1,000 products** that carry product details (only when **Include product details** is on). No start fee; empty pages, duplicates, products removed by your filters and products TikTok would not show are not charged.

| Products | List rows | With details |
|---:|---:|---:|
| 10 | $0.00045 | $0.013 |
| 100 | $0.0045 | $0.135 |
| 1,000 | $0.045 | $1.35 |
| 10,000 | $0.45 | $13.45 |

Measured on the platform: 100 list rows from two keywords in 5 seconds, 1,000 category rows in 111 seconds and 100 rows with details in about 2 minutes, all on 256 MB.

### Integrations, API, scheduling & MCP

- **Schedules:** run TikTok Shop Scraper hourly, daily or weekly from the **Schedules** tab; turn on **Only new products** (and **Also changed products**) to get just what is new.
- **Webhooks:** fire a URL when a run finishes — push products to your sheet, CRM or Slack.
- **No-code:** Make, Zapier, n8n, Google Sheets, Airtable and Slack through [Apify integrations](https://docs.apify.com/integrations).
- **API:** call it from Node.js or Python with `apify-client` — code on the [API tab](https://apify.com/topapi/tiktok-shop-scraper/api/python) and in the [Apify API reference](https://docs.apify.com/api/v2).
- **MCP / AI agents:** connect Claude, Cursor or any MCP client through the [MCP tab](https://apify.com/topapi/tiktok-shop-scraper/api/mcp) and ask for TikTok Shop products in plain language; `compact` keeps answers small.

### More TikTok scrapers

<table>
<tr>
<td>🎵 <a href="https://apify.com/topapi/tiktok-scraper">TikTok Scraper</a> — videos by profile, hashtag or keyword</td>
<td>🎬 <a href="https://apify.com/topapi/tiktok-video-scraper">TikTok Video Scraper</a> — stats and transcript by video URL</td>
<td>👤 <a href="https://apify.com/topapi/tiktok-user-search-scraper">TikTok User Search Scraper</a> — creators, bio links, emails</td>
</tr>
<tr>
<td>📣 <a href="https://apify.com/topapi/tiktok-ads-library-scraper">TikTok Ads Library Scraper</a> — Ad Library and Creative Center ads</td>
<td>🛍️ TikTok Shop Scraper — products, sales and sellers (this actor)</td>
<td>🧭 <a href="https://apify.com/topapi">All TopApi actors</a></td>
</tr>
</table>

### Limits & empty runs

- **Keyword depth:** signed-out, TikTok lists about 45-120 products per US keyword. Use store and category links (with sub-categories) or **Follow related searches** to go wider.
- **Markets:** US — keywords, categories, stores, products, details. UK (GB) — categories and product links with details; TikTok has no web search for the UK. MY, PH, SG, TH, VN, JP — the first page per keyword or category (about 15 products) and product links; TikTok asks signed-out visitors to verify for anything deeper, which this actor never answers. Indonesia, Mexico, Brazil and the EU have no TikTok Shop web store it can read.
- **Reviews:** the first reviews TikTok prints on the product (up to 5); TikTok asks for verification before showing more.
- **TikTok's check page:** sometimes TikTok answers a page with its slider check. The actor never answers it: it reads the same product from TikTok's product data instead, or reports the product as blocked in `RUN_SUMMARY` without charging it.
- **Speed:** list rows are fast (100 in 5 seconds); details take about 1-2 seconds per product.
- **Empty dataset:** no products for the keyword, a removed product or store, or a market mismatch — the run status and `RUN_SUMMARY` say which. Nothing is charged.

### FAQ

#### How many products can TikTok Shop Scraper collect in one run?

As many as your sources list: a whole store, a category with its sub-categories (1,000 products in 111 seconds on our test), and about 45-120 products per US keyword. Use `maxItems` to cap a run.

#### Can I run TikTok Shop Scraper on a schedule to track new products and sales?

Yes. Save your input as a task, open **Schedules**, pick the cadence and turn on **Only new products**. With **Also changed products** each run also returns products whose price, units sold, rating or review count moved, with the previous values and `soldDelta`. Each run bills only the products it delivers.

#### Can I integrate TikTok Shop Scraper with other apps?

Yes — Make, Zapier, n8n, Google Sheets, Slack and more via [Apify integrations](https://docs.apify.com/integrations), or use [webhooks](https://docs.apify.com/integrations/webhooks) to trigger an action when a run finishes.

#### Can I use TikTok Shop Scraper with the Apify API?

Yes. Start runs, fetch datasets and manage schedules through the API; use `apify-client` for [Node.js](https://apify.com/topapi/tiktok-shop-scraper/api/javascript) or [Python](https://apify.com/topapi/tiktok-shop-scraper/api/python).

#### Can I use TikTok Shop Scraper through an MCP server?

Yes. Open the [MCP tab](https://apify.com/topapi/tiktok-shop-scraper/api/mcp), connect your MCP client and ask for TikTok Shop products in plain language. Turn on `compact` for short answers.

#### Do I need a TikTok account, cookies or a TikTok Shop API key?

No. TikTok Shop Scraper reads only what TikTok Shop shows publicly; you pass keywords, links or ids and nothing else.

#### Which TikTok Shop markets does TikTok Shop Scraper support?

US in full; the UK for categories and product links; Malaysia, the Philippines, Singapore, Thailand, Vietnam and Japan for the first page per keyword or category and for product links. Prices come in each market's currency.

#### Why did my TikTok Shop Scraper run return no results?

The keyword has no TikTok Shop products, the product or store was removed, the link is from another market than the one TikTok shows to that IP, or TikTok answered with its check page. `RUN_SUMMARY` names the reason per source; nothing is charged.

#### How is TikTok Shop Scraper different from other TikTok Shop scrapers?

It ships the fields other TikTok Shop actors ship — price, discount, units sold, rating, reviews, seller, SKUs with stock, shipping, specs, reviews and videos — plus package weight and dimensions per SKU, the seller's SKU codes, the seller's registered business name and address, a whole-store completeness check and a monitor mode for price and sales changes, with no start fee.

#### Is it legal to scrape TikTok Shop?

TikTok Shop Scraper reads only public product pages that anyone can open without logging in. Reviewer names arrive masked as TikTok shows them. You are responsible for following the laws in your country and TikTok's terms, especially if you store or republish the data.

#### Your feedback

We keep improving TikTok Shop Scraper. Found a bug or missing a field? Open an issue on the [Issues tab](https://apify.com/topapi/tiktok-shop-scraper/issues/open).

# Actor input Schema

## `searchQueries` (type: `array`):

Words a shopper types into TikTok Shop search, e.g. "lipstick", "water bottle", "phone case". Each keyword is searched on its own.

## `startUrls` (type: `array`):

Product (…/pdp/…, /view/product/…), store (…/store/<name>/<id>), category (…/c/<name>/<id>) or search (…/s?q=…) links from shop.tiktok.com or tiktok.com/shop, and vt.tiktok.com share links.

## `productIds` (type: `array`):

TikTok Shop product ids instead of links, e.g. "1729527313880355335". Read in the market chosen below.

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

TikTok Shop market for keywords and ids (links carry their own). Prices come in the market's currency.

## `includeSubcategories` (type: `boolean`):

On a category link, also walk its sub-categories (US) to go past the ~100 products TikTok lists per category.

## `includeRelatedSearches` (type: `boolean`):

When a keyword runs out, continue with TikTok's own related searches (e.g. "water bottle" → "water bottle for kids"). Rows keep your keyword in query and the related one in matchedKeyword.

## `minPrice` (type: `number`):

Keep products priced at or above this, in the market's currency, e.g. 10.

## `maxPrice` (type: `number`):

Keep products priced at or below this, e.g. 50.

## `minRating` (type: `number`):

Keep products rated at least this (1-5), e.g. 4.5. Unrated products are removed when set.

## `minReviews` (type: `integer`):

Keep products with at least this many reviews, e.g. 100.

## `minSold` (type: `integer`):

Keep products TikTok shows at least this many units sold for, e.g. 1000.

## `maxSold` (type: `integer`):

Keep products with at most this many units sold, e.g. 500 to find new or rising products.

## `onlyDiscounted` (type: `boolean`):

Keep products whose current price is below TikTok's original price.

## `minDiscountPercent` (type: `integer`):

Keep products at least this % off, e.g. 30.

## `freeShippingOnly` (type: `boolean`):

Keep products TikTok labels with free shipping.

## `titleKeywords` (type: `array`):

Keep a product only if its title contains one of these words, e.g. "matte", "stainless".

## `excludeKeywords` (type: `array`):

Remove products whose title contains any of these words, e.g. "case", "refill".

## `sellers` (type: `array`):

Keep products from these shops only (shop name or seller id, part of the name is enough), e.g. "Goli".

## `excludeSellers` (type: `array`):

Remove products from these shops (shop name or seller id).

## `includeDetails` (type: `boolean`):

Adds SKUs with price and stock, package size / weight, seller SKU codes, shipping, description, specs, category path, the first reviews, related videos and the seller's stats and business entity.

## `includeSellerStats` (type: `boolean`):

With details on (US): also read each seller's store page once for its experience scores (positive feedback, on-time delivery), official label, total sold, reviews and videos. Slower; no extra charge.

## `monitorMode` (type: `boolean`):

Skip products an earlier run with the same monitor store already delivered (they are not charged again).

## `monitorChanges` (type: `boolean`):

With monitoring on, also return products whose price, units sold, rating or review count changed, with the previous values and soldDelta.

## `monitorStoreName` (type: `string`):

Named key-value store that remembers delivered products between runs. Use one name per schedule, e.g. "tiktok-shop-lipstick".

## `maxResultsPerSource` (type: `integer`):

Per keyword, category, store or link list. Signed-out TikTok shows ~45-120 products per US keyword, ~100 per category page and a whole store. 0 = all.

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

Stop after this many products across all sources. 0 = no total cap.

## `compact` (type: `boolean`):

Core fields only (id, title, link, price, discount, sold, rating, reviews, seller) - trimmed for AI / MCP pipelines.

## `includeRawData` (type: `boolean`):

Attach TikTok's own product card object to each row as raw.

## `proxyConfiguration` (type: `object`):

Leave empty for the built-in routing. Set your own proxy only if you need a specific exit; it is used for every request.

## `maxConcurrency` (type: `integer`):

How many keywords / categories / stores run at once (1-6).

## Actor input object example

```json
{
  "searchQueries": [
    "lipstick"
  ],
  "region": "US",
  "includeSubcategories": false,
  "includeRelatedSearches": false,
  "onlyDiscounted": false,
  "freeShippingOnly": false,
  "includeDetails": false,
  "includeSellerStats": false,
  "monitorMode": false,
  "monitorChanges": false,
  "monitorStoreName": "tiktok-shop-monitor",
  "maxResultsPerSource": 100,
  "maxItems": 50,
  "compact": false,
  "includeRawData": false,
  "maxConcurrency": 3
}
```

# Actor output Schema

## `products` (type: `string`):

The dataset of TikTok Shop products (one item per product).

## `summary` (type: `string`):

Per-source outcome (delivered, read, filtered, seen before, blocked, not found, unsupported), pages read, bytes on the wire.

# 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 = {
    "searchQueries": [
        "lipstick"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("topapi/tiktok-shop-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 = {
    "searchQueries": ["lipstick"],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("topapi/tiktok-shop-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 '{
  "searchQueries": [
    "lipstick"
  ],
  "maxItems": 50
}' |
apify call topapi/tiktok-shop-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,topapi/tiktok-shop-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/kc8RafdFcHICLpU2D/builds/19FGEqd4WFNE9feUD/openapi.json
