# Douyin Product Search Scraper — Price, Sales & SKUs (`sian.agency/douyin-product-search-scraper`) Actor

Scrape Douyin Shop (Douyin Mall, jinritemai) products by keyword with price, monthly sales, positive-review rate, shop and creator commission rate. Also gets product details, SKU variant prices, buyer comments with the variant bought, and full shop catalogs. Export JSON, CSV or Excel.

- **URL**: https://apify.com/sian.agency/douyin-product-search-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** E-commerce, Marketing, Agents
- **Security:** Limited permissions
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 search products

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?

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

## Douyin Product Search Scraper — Price, Sales & SKUs 🛍️

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Taobao & Tmall Product Scraper](https://img.shields.io/badge/Store-Taobao%20%26%20Tmall-FF5000)](https://apify.com/sian.agency/taobao-tmall-product-scraper?fpr=sian) [![JD.com Product Scraper](https://img.shields.io/badge/Store-JD.com-E1251B)](https://apify.com/sian.agency/jd-com-product-scraper?fpr=sian) [![Xiaohongshu Scraper](https://img.shields.io/badge/Store-Xiaohongshu-FF2442)](https://apify.com/sian.agency/xiaohongshu-rednote-scraper?fpr=sian)

#### 🎉 Search Douyin Shop by keyword and get price, monthly sales, review rate, shop and commission on every row

##### For sellers, sourcing teams and China-market analysts who track what sells on Douyin Mall (jinritemai)

### 🔎 What is the Douyin Product Search Scraper — and when should you use it?

The **Douyin Product Search Scraper** turns Douyin Shop (Douyin Mall, jinritemai) product listings, variant prices, buyer comments and shop catalogs into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** keyword search results with price, 30-day sales, positive-review rate, shop name and score, creator commission rate and the number of creators promoting each product. Product lookups add the image gallery and lifetime sales, the full SKU table with a price per variant, and buyer comments that carry the variant bought and the price paid. Shop lookups list a seller's whole catalog with price and lifetime sales.

**Use something else when:** the products sit on another Chinese marketplace, or you already use a different Douyin Shop field set. Use [Douyin Shop Scraper](https://apify.com/sian.agency/douyin-shop-scraper?fpr=sian) for Douyin Shop search, product detail and reviews with a different field set. Use [Taobao & Tmall Product Scraper](https://apify.com/sian.agency/taobao-tmall-product-scraper?fpr=sian) for Taobao and Tmall product detail, shop catalogs and reviews. Use [JD.com Product Scraper](https://apify.com/sian.agency/jd-com-product-scraper?fpr=sian) for JD.com search, product detail and reviews. One operation per run: search first to collect product and shop IDs, then run detail, SKUs, comments or shop products against them.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/douyin-product-search-scraper

**Agentic payments:** Availability of [x402](https://www.x402.org/) and [Skyfire](https://www.skyfire.xyz/) depends on this Actor's current Store eligibility. Check the published listing for supported payment methods. Billing is a one-time run-start fee plus each row returned; error rows are not charged.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want Douyin Shop product, price and review data using the Apify Actor `sian.agency/douyin-product-search-scraper`.

Use it when I need: keyword search results with price, 30-day sales, positive-review rate, shop name and score, creator commission rate and the number of creators promoting each product. Product lookups add the image gallery and lifetime sales, the full SKU table with a price per variant, and buyer comments that carry the variant bought and the price paid. Shop lookups list a seller's whole catalog with price and lifetime sales.

Don't use it when: the products sit on another Chinese marketplace, or you already use a different Douyin Shop field set — use douyin-shop-scraper or taobao-tmall-product-scraper or jd-com-product-scraper instead.

How to call it: pick one `operation` per run. `searchProducts` takes a `keyword`. `productDetail`, `productSkus` and `productComments` take a numeric `productId` or a product link. `shopProducts` takes a numeric `shopId`. `maxPages` (1-50) controls search, comments and shop products.

Start with this input:
{
  "operation": "searchProducts",
  "keyword": "运动鞋",
  "maxPages": 1
}

Ask me which keyword, product ID or shop ID to look up, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Find the best-selling 咖啡豆 on Douyin under ¥60 and rank them by monthly sales.*
- *Get every size and colour of this Douyin product with its price.*
- *Pull 200 comments for this product and tell me which size buyers complain about.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/douyin-product-search-scraper.md](https://apify.com/sian.agency/douyin-product-search-scraper.md).

### 📋 Overview

Douyin Shop (抖音商城, also called Douyin Mall, on jinritemai.com) is the store behind Douyin's short videos and live streams. This actor reads it into a dataset, one row per product or comment. Pick one operation per run:

| Operation | You give | You get | Rows per page |
|---|---|---|---:|
| 🔍 Search Products | a keyword | price, monthly sales, positive-review rate, shop, shop score, commission rate, creators promoting it | up to 30 |
| 📦 Product Detail | a product ID or link | title, image gallery, lifetime sales, review rate, service promises | 1 |
| 🏷️ Product SKUs | a product ID or link | every variant (colour, size) with its own price, plus the shop and its rating | 1 |
| 💬 Product Comments | a product ID or link | comment text, time, likes, photos, the variant the buyer bought and the price they paid | 20 |
| 🏪 Shop Products | a shop ID | the shop's catalog with price and lifetime sales | 10 |

No Douyin account, cookies or app login needed.

***

### ✨ Features

- **Price on every search row** in fen (`priceCents`) and yuan (`priceCny`), next to 30-day sales and the positive-review rate.
- **Affiliate signals**: `commissionRatePercent` and `cooperatingCreators` show how much a seller pays creators and how many creators already push the product.
- **Shop on search and SKU rows**: `shopId` and `shopName`, plus `shopScore` on search rows and `shopRating` on SKU rows, so you can go from a keyword straight to a seller's whole catalog.
- **Variant price table**: Product SKUs lists every SKU with its price and image in one row.
- **Comments with order context**: each comment carries `purchasedSku` and `orderSkuPriceCents`, so you know what was actually bought and what it cost.
- **Pages that don't repeat**: any product seen on an earlier page is skipped, so each later page only adds new products.
- **Clear failures**: an ID that is not a Douyin ID is refused before the run starts; a keyword with no matches returns one uncharged row that says so (the run-start fee still applies).

***

### 🎬 Quick Start

1. Open the actor and press **Start**. The prefilled run searches `运动鞋` (sneakers), up to 5 pages.
2. Open the dataset. The **📊 Overview** view shows image, title, price, sales, review rate and shop.
3. Copy a `productId` or `shopId` from a row and run Product SKUs, Product Comments or Shop Products against it.

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick an operation

Search Products for discovery, the three product operations for one product, Shop Products for one seller.

#### Step 2: Fill the one field it uses

Keyword for search, Product ID for detail, SKUs and comments, Shop ID for shop products. The other fields are ignored, so you can leave them as they are.

#### Step 3: Run and export

Download JSON, CSV or Excel, or pull the dataset over the API. Every run also saves a `report.html` with a summary, the rows that need a fix and what you were charged.

***

### 📥 Input Configuration

| Field | Used by | Notes |
|---|---|---|
| `operation` | all | `searchProducts`, `productDetail`, `productSkus`, `productComments` or `shopProducts` |
| `keyword` | Search Products | Chinese keywords match far more listings than English ones |
| `productId` | Detail, SKUs, Comments | numeric ID such as `3781601737262105026`, or a `haohuo.jinritemai.com` link containing `?id=` |
| `shopId` | Shop Products | numeric ID such as `164753456`, taken from the `shopId` column |
| `maxPages` | Search, Comments, Shop | 1 to 50, default 5. The run stops earlier when there is nothing new, and a search can stop after the first page |

```json
{
  "operation": "searchProducts",
  "keyword": "运动鞋",
  "maxPages": 2
}
```

***

### 📤 Output

A search row, as returned on 2026-11-03:

```json
{
  "productId": "3781601737262105026",
  "productName": "冬季老北京布鞋女棉鞋新款加绒妈妈鞋健步运动鞋休闲鞋轻便软底鞋",
  "productUrl": "https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3781601737262105026&origin_type=2631",
  "imageUrl": "https://p9-aio.ecombdimg.com/obj/ecom-shop-material/FhNhRhrn_m_39a742385feaba72727823d41b4d30a3_sx_117782_www1080-1080",
  "categoryPath": "鞋靴/女鞋/休闲鞋",
  "priceCents": 1390,
  "priceCny": 13.9,
  "monthlySales": 18382,
  "goodRatioPercent": 81.5,
  "shopId": "164753456",
  "shopName": "福临祥鞋业",
  "shopScore": 81,
  "commissionRatePercent": 20,
  "cooperatingCreators": 719,
  "serviceTags": ["消费券", "现货", "包邮"],
  "rankingNote": "休闲鞋视频带货热推榜·第9名",
  "_sourceKeyword": "运动鞋",
  "_operation": "searchProducts",
  "_fetchedAt": "2026-11-03T03:05:12.000Z"
}
```

A comment row:

```json
{
  "commentId": "8295995189085110569",
  "commentContent": "尺码合适，穿着很舒服脚穿着不打脚",
  "commentTime": "2026-11-03 10:10:09",
  "commentLikes": 0,
  "purchasedSku": "黑紫加绒/36",
  "orderSkuPriceCents": 1390,
  "orderItemNum": 1,
  "photoUrls": ["https://p3-product-comment-sign.byteimg.com/…"],
  "totalComments": 901,
  "productId": "3781601737262105026",
  "_operation": "productComments"
}
```

| Field | Meaning |
|---|---|
| `priceCents` / `priceCny` | current price in fen / in yuan |
| `monthlySales` | units sold in the last 30 days (search rows) |
| `totalSales` | lifetime units sold (detail and shop rows) |
| `salesCount` | lifetime units sold (detail and SKU rows) |
| `goodRatioPercent` | share of positive reviews |
| `shopScore` / `shopRating` | shop experience score (0-100) / shop star rating |
| `commissionRatePercent` | commission the seller pays creators who sell the product |
| `cooperatingCreators` | creators currently promoting the product |
| `skuVariants` | list of `{skuId, variantName, priceCents, dealPriceCents, imageUrl}` |
| `purchasedSku` / `orderSkuPriceCents` | variant the commenter bought / price they paid, in fen |
| `status`, `errorMessage` | only on rows that could not be fetched; these rows are not charged |

IDs are strings because Douyin IDs are longer than a JavaScript number can hold exactly.

***

### 💼 Use Cases & Examples

#### 1. Price monitoring

Schedule Product SKUs for the products you track and compare `skuVariants[].priceCents` run to run.

#### 2. Dropshipping and sourcing research

Search a niche keyword, sort by `monthlySales`, then drop anything under 80 in `goodRatioPercent`.

#### 3. Affiliate and creator programmes

Rank a category by `commissionRatePercent` against `cooperatingCreators` to find products with good commission and few creators.

#### 4. Review mining

Pull a few hundred comments and group complaints by `purchasedSku`. Sizing complaints tend to pile up on one or two sizes.

#### 5. Competitor shop tracking

Run Shop Products on a competitor's `shopId` every week and diff the catalog and prices.

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/douyin-product-search-scraper').call({
  operation: 'searchProducts',
  keyword: '咖啡豆',
  maxPages: 2,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].productName, items[0].priceCny, items[0].monthlySales);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/douyin-product-search-scraper').call(
    run_input={'operation': 'productComments', 'productId': '3781601737262105026', 'maxPages': 3}
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['purchasedSku'], item['commentContent'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~douyin-product-search-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"operation": "productSkus", "productId": "3781601737262105026"}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: a daily schedule
2. **HTTP Request**: run the actor with Product SKUs for each product you watch
3. **Process**: compare `priceCents` with yesterday's value
4. **Action**: post price drops to Slack or a Google Sheet

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 rows** per run with every field
- No credit card required

#### PAID Tier (Production Ready)

- Up to 50 pages per run for comments and shop products (20 and 10 a page)
- Search returns 30 products a page, but deeper search pages are not always available: a search can stop after the first page, and the run log says when it does
- A search page takes about 11 to 16 seconds, a shop page about 5 and a comment page about 3
- A one-time run-start fee plus each row returned. Error rows are not charged

💰 On the Bronze plan: **$7 per 1,000** search products, **$12 per 1,000** shop products, **$6 per 1,000** comments, **$0.04** per product detail and **$0.06** per SKU table, plus a run-start fee. Higher Apify plans pay less.

🔗 [View current pricing](https://apify.com/sian.agency/douyin-product-search-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Where do I find a product ID?**
In the `productId` column of any search or shop row, or in a product link after `?id=`. You can paste the whole link.

**Where do I find a shop ID?**
In the `shopId` column of a search or SKU row.

**Why are prices in fen?**
That is how Douyin stores them, and integers do not round. `priceCny` gives the same price in yuan.

**Can I search in English?**
Yes, but Douyin is a Chinese marketplace and most listings only match Chinese terms. `运动鞋` returns far more than "sneakers".

**Why did Product SKUs return an error row for my product?**
Some listings do not publish a variant table. That row is not charged (the run-start fee still applies); run Product Detail for the same ID instead.

**How fresh is the data?**
Every run reads Douyin at that moment. Nothing is cached.

***

### 🐛 Troubleshooting

| Problem | Fix |
|---|---|
| "No products found for this keyword." | Use a shorter or Chinese keyword |
| The run stops with "not a Douyin product ID" | Paste the numeric `productId` or a link that contains `?id=` |
| Fewer pages than `maxPages` | Either Douyin ran out of new products, or a deeper search page was not available; the run log says which. Run the same keyword again later to try for more |
| "Douyin did not return this product" or "Shop not found" | Check the ID (copy it from a search row); the listing may be delisted |
| "did not respond" | Run the same input again in a few minutes |

***

### ⚠️ Trademark Disclaimer

Douyin and jinritemai are trademarks of their respective owners. This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Douyin or ByteDance. Rows link to the public listing pages the data describes.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

***

### 🤝 Support

- For issues or questions, open an issue on the [Issues tab](https://apify.com/sian.agency/douyin-product-search-scraper/issues)
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/douyin-product-search-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

One operation per run.

- **🔍 Search Products** (Keyword): 30 products a page with price, monthly sales, review score, shop and commission
- **📦 Product Detail** (Product ID): gallery, lifetime sales, review score
- **🏷️ Product SKUs** (Product ID): every variant with its price
- **💬 Product Comments** (Product ID): 20 a page, with the variant bought and price paid
- **🏪 Shop Products** (Shop ID): 10 products a page

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

Used by **Search Products** only. Any search term a Douyin shopper would type. Chinese terms match far more listings than English ones, for example `运动鞋` (sneakers), `咖啡豆` (coffee beans) or `手机壳` (phone case).

Ignored by the other operations.

## `productId` (type: `string`):

Used by **Product Detail**, **Product SKUs** and **Product Comments**. The numeric Douyin product ID, for example `3781601737262105026`. Copy it from the `productId` column of a search row, or paste a haohuo.jinritemai.com product link that contains `?id=`.

Ignored by Search Products and Shop Products.

## `shopId` (type: `string`):

Used by **Shop Products** only. The numeric Douyin shop ID, for example `164753456`. Copy it from the `shopId` column of a search or SKU row.

Ignored by the other operations.

## `maxPages` (type: `integer`):

How many pages to fetch for **Search Products** (up to 30 products a page), **Product Comments** (20 a page) and **Shop Products** (10 a page). The run stops sooner when Douyin has nothing new to show, and deeper search pages are not always available, so a search can stop after the first page. Product Detail and Product SKUs always return one row.

Start with 1 to 3 pages to preview. Maximum 50.

## Actor input object example

```json
{
  "operation": "searchProducts",
  "keyword": "运动鞋",
  "productId": "3781601737262105026",
  "shopId": "164753456",
  "maxPages": 5
}
```

# Actor output Schema

## `douyinProducts` (type: `string`):

Rows from the operation you ran: products, SKU tables, comments or shop catalog

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "searchProducts",
    "keyword": "运动鞋",
    "productId": "3781601737262105026",
    "shopId": "164753456",
    "maxPages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/douyin-product-search-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 = {
    "operation": "searchProducts",
    "keyword": "运动鞋",
    "productId": "3781601737262105026",
    "shopId": "164753456",
    "maxPages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/douyin-product-search-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 '{
  "operation": "searchProducts",
  "keyword": "运动鞋",
  "productId": "3781601737262105026",
  "shopId": "164753456",
  "maxPages": 5
}' |
apify call sian.agency/douyin-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/douyin-product-search-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/zId4DKQxFBxY4kq0D/builds/YI31PPnvblYFo77YW/openapi.json
