# Douyin 抖音 Product Search Scraper - Price, Sales & Commission (`zen-studio/douyin-product-search-scraper`) Actor

Search Douyin Shop (抖音商城) products by keyword and extract price, monthly sales, a 30-day sales trend, positive-review ratio, shop name and score, and affiliate commission rate. One row per product in clean JSON, ready for product research, competitor analysis, and affiliate selection.

- **URL**: https://apify.com/zen-studio/douyin-product-search-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Videos, Social media, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.99 / 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.
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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Douyin Product Search Scraper (抖音) | Price, Sales, Commission & Shop Data (2026)

<blockquote style="border-left:4px solid #4C945E;background:#F0FDF4;padding:12px 16px">
<span style="font-size:16px;font-weight:700;color:#1C1917">Every Douyin Shop product for a keyword, in clean JSON:</span> <span style="font-size:15px;color:#57534E">price, monthly sales, a 30-day sales trend, positive-review ratio, shop identity and score, and affiliate commission rate. One row per product, ready for product research, competitor analysis, and affiliate selection.</span>
</blockquote>

![Douyin (抖音) product search scraper: price, monthly sales, sales trend, shop score, and affiliate commission as structured JSON](https://iili.io/CBDm5VS.png)

#### Copy to your AI assistant

````

zen-studio/douyin-product-search-scraper on Apify. Searches Douyin Shop (抖音商城) products by keyword: one row per product with price (CNY), monthly sales + a 30-day daily sales trend, positive-review ratio, 4-level category, shop name + shop score, affiliate commission rate + cooperating-creator count, tags, plus a full raw passthrough. Call ApifyClient("TOKEN").actor("zen-studio/douyin-product-search-scraper").call(run\_input={"keywords":\["口红"],"maxResults":100}), then client.dataset(run\["defaultDatasetId"]).list\_items().items. keywords accepts any product search string (Chinese works best); each keyword searched independently. ~500 products/keyword ceiling, so add more keywords to collect more. PPE: $8.99/1k products, cheaper on Starter/Scale/Business tiers. Token: https://console.apify.com/account/integrations

````

<table>
<tr>
<td colspan="4" style="padding:10px 14px;background:#4C945E;border:none;border-radius:4px 4px 0 0">
<span style="color:#FAFAF9;font-size:14px;font-weight:700;letter-spacing:0.5px">Zen Studio · Chinese-platform suite</span>
<span style="color:#E8F5E9;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;RedNote (小红书), Douyin (抖音), Xigua (西瓜视频)</span>
</td>
</tr>
<tr>
<td style="padding:10px 12px;border:1px solid #E7E5E4;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:25%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-3TJaaOJDU1AMiOoJM-Vu2eVr0P6N-douyin-profile-scraper-logo.png" width="20" height="20" style="vertical-align:middle;border-radius:4px"> &nbsp;<a href="https://apify.com/zen-studio/douyin-product-search-scraper" style="color:#4C945E;text-decoration:none;font-weight:700;font-size:13px">Douyin&nbsp;Products</a></span><br>
<span style="color:#4C945E;font-size:11px;font-weight:600">&#10148; You are here</span>
</td>
<td style="padding:10px 12px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:25%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-3TJaaOJDU1AMiOoJM-Vu2eVr0P6N-douyin-profile-scraper-logo.png" width="20" height="20" style="vertical-align:middle;border-radius:4px"> &nbsp;<a href="https://apify.com/zen-studio/douyin-search-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Douyin&nbsp;Search</a></span><br>
<span style="color:#78716C;font-size:11px">Keyword video search, 60+ fields</span>
</td>
<td style="padding:10px 12px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:25%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-3TJaaOJDU1AMiOoJM-Vu2eVr0P6N-douyin-profile-scraper-logo.png" width="20" height="20" style="vertical-align:middle;border-radius:4px"> &nbsp;<a href="https://apify.com/zen-studio/douyin-video-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Douyin&nbsp;Video</a></span><br>
<span style="color:#78716C;font-size:11px">Video metadata, music & MP4s</span>
</td>
<td style="padding:10px 12px;border:1px solid #E7E5E4;border-top:none;vertical-align:top;width:25%">
<span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-3TJaaOJDU1AMiOoJM-Vu2eVr0P6N-douyin-profile-scraper-logo.png" width="20" height="20" style="vertical-align:middle;border-radius:4px"> &nbsp;<a href="https://apify.com/zen-studio/douyin-profile-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Douyin&nbsp;Profile</a></span><br>
<span style="color:#78716C;font-size:11px">Followers, posts & hashtags</span>
</td>
</tr>
</table>

### How to Scrape Douyin Products

#### Basic: one keyword

```json
{
  "keywords": ["口红"]
}
````

#### Several keywords, deeper per keyword

```json
{
  "keywords": ["口红", "零食", "手机壳"],
  "maxResults": 300
}
```

#### Everything available for a keyword

```json
{
  "keywords": ["蓝牙耳机"],
  "maxResults": 0
}
```

`maxResults: 0` collects every product the platform returns for that keyword (around 500). Each keyword is searched independently with its own budget.

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywords` | string\[] | *required* | One or more product search terms. Chinese works best (e.g. `口红`, `零食`, `手机壳`). Each keyword is searched independently. |
| `maxResults` | integer | `100` | Products to fetch per keyword. `0` = all available (~500 ceiling). Cost scales linearly with the number of products returned. |

There are no sort, price, or time filters: Douyin's product search surface exposes none, so the actor returns products in Douyin's own natural search-rank order (the same order a shopper sees). To collect more, add more keywords.

### What Data Can You Extract from Each Douyin Product?

One row per product, in Douyin's natural search-rank order within each keyword. **19 top-level fields**, including **five rich nested objects** (`price`, `sales`, `category`, `shop`, `affiliate`) and a full `raw` passthrough so nothing the platform returns is ever lost.

#### Identity & media

- `productId`, `promotionId`: the product's stable IDs.
- `title`: full product name.
- `detailUrl`: the live Douyin product page (`haohuo.jinritemai.com/...`).
- `mainImage`, `whiteImage`: primary product photo and the white-background catalogue image.

#### Price (`price`)

- `amount`: final price in CNY yuan (e.g. `59.0`).
- `amountCents`: the same price in integer cents (`5900`), exactly as the platform stores it.
- `label`: the price descriptor Douyin shows (e.g. `到手价`, the landed / final price).

#### Sales (`sales`)

- `monthlySold`: units sold in the last 30 days.
- `goodReviewRatio`: positive-review percentage.
- `salesTrend`: a **30-point daily sales series** (`[{ "date": "20260610", "units": 49 }, ...]`), the velocity curve behind the monthly number.

#### Category (`category`)

Douyin's full taxonomy path: `first`, `second`, `third`, `fourth` (each `{ id, name }`) plus `leafLayer` (how deep the product is classified). E.g. `彩妆香水 → 唇部彩妆 → 有色唇膏/口红`.

#### Shop (`shop`)

- `shopId`, `shopName`: the seller's identity.
- `shopLogo`: shop logo image.
- `shopScore`: the shop's experience score (e.g. `92`), surfaced only when the shop has a published score.
- `shopScoreRating`: the qualitative rating label (e.g. `高` / high).

#### Affiliate (`affiliate`)

- `commissionRatePercent`: the affiliate commission rate a creator earns promoting this product.
- `commissionFee`: the commission amount in CNY yuan at the current price.
- `cooperatingCreators`: how many creators are already promoting it (demand signal).
- `promotionStatus`: the product's promotion-program status code.

#### Tags & status

- `tags`: shopper-facing badges (`运费险` shipping insurance, `现货` in-stock, `包邮` free shipping).
- `tagCodes`: the machine-readable codes behind those badges.
- `recommendReason`: Douyin's recommendation blurb, when present.
- `productStatus`, `checkStatus`: listing-state codes.

#### Context & raw

- `keyword`: the search term that surfaced this product.
- `searchPosition`: its 1-based rank within that keyword's results.
- `raw`: the complete, verbatim product object from the platform, so any field not curated above (and anything the platform adds later) is still in your data.

#### Output Example

Every top-level field below is present in every row. The `salesTrend` array and the `raw` object are trimmed here for readability; production rows carry the full 30-point series and the complete raw object.

```json
{
  "productId": "3821314999977115743",
  "promotionId": "3821317546850779275",
  "title": "【专柜正品】兰蔻全新菁纯柔润丝缎唇膏196#朱砂橘 1.6g",
  "detailUrl": "https://haohuo.jinritemai.com/ecommerce/trade/detail/index.html?id=3821314999977115743&origin_type=2631",
  "mainImage": "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/jpeg_m_f7eca9511caaf45b1cbe4954b80df2d6_sx_385999_www800-800",
  "whiteImage": "https://p3-aio.ecombdimg.com/obj/ecom-shop-material/jpeg_m_95f656ef1a6a7724475811b80030e4a3_sx_189601_www1500-1500",
  "price": {
    "amount": 59.0,
    "amountCents": 5900,
    "label": "到手价"
  },
  "sales": {
    "monthlySold": 1162,
    "goodReviewRatio": 88.70967741935483,
    "salesTrend": [
      { "date": "20260607", "units": 67 },
      { "date": "20260608", "units": 41 },
      { "date": "20260609", "units": 32 },
      { "date": "20260610", "units": 49 },
      "... +26 more daily points"
    ]
  },
  "category": {
    "first": { "id": 1000002395, "name": "彩妆香水" },
    "second": { "id": 1000002412, "name": "唇部彩妆" },
    "third": { "id": 1000002526, "name": "有色唇膏/口红" },
    "fourth": { "id": 0, "name": "" },
    "leafLayer": 3
  },
  "shop": {
    "shopId": 264515498,
    "shopName": "桢植专营店",
    "shopLogo": "https://p3-ecom-qualification-sign.ecombdimg.com/tos-cn-i-6vegkygxbk/...image?...",
    "shopScore": 92,
    "shopScoreRating": "高"
  },
  "affiliate": {
    "commissionRatePercent": 15,
    "commissionFee": 8.85,
    "cooperatingCreators": 486,
    "promotionStatus": 2
  },
  "tags": ["运费险", "现货", "包邮"],
  "tagCodes": ["ActivityInfo", "insurance_freight", "spot_goods", "FreightFree"],
  "recommendReason": null,
  "productStatus": 0,
  "checkStatus": 3,
  "keyword": "口红",
  "searchPosition": 1,
  "raw": { "...": "the complete verbatim product object from Douyin" }
}
```

> Notes on optional / context-dependent fields:
>
> - `shopScore` / `shopScoreRating` are `null` for shops without a published experience score.
> - `recommendReason` is `null` for products with no recommendation blurb.
> - `tags` / `tagCodes` are empty arrays when a product carries no badges.
> - `salesTrend` can be a shorter series for newly listed products.

### Image & URL Durability

| Field | Lifespan | Note |
|---|---|---|
| `productId`, `promotionId` | **Permanent** | Stable references. Build your pipeline around these. |
| `detailUrl` | **Permanent** | `haohuo.jinritemai.com/...?id=<productId>` resolves to the live product page. |
| `mainImage`, `whiteImage` | **Long-lived** | Direct catalogue CDN images (`*.ecombdimg.com`), no signature. |
| `shopLogo` | **~weeks** | Signed CDN URL (`*-sign.ecombdimg.com`); the query string carries the signature. Re-fetch or re-host if you need it long-term. |

The `productId` and `detailUrl` are the only truly permanent references. Re-run the actor whenever you need fresh price, sales, and commission figures: every number is fetched live at run time.

### Pricing: Pay Per Event (PPE)

You pay per product returned. Apify subscribers get steeper discounts on every tier.

| | **Free** | **Starter** | **Scale** | **Business** |
|---|---|---|---|---|
| **Product** (one row in your dataset) | **$8.99** / 1k | $8.99 / 1k | $8.49 / 1k | $7.99 / 1k |

Two trivial platform events also fire (`apify-actor-start` once per run, `apify-default-dataset-item` once per row at $0.01 / 1,000), covered by the free Apify tier in practice.

#### Free tier

Every account gets **10 free preview runs**, each returning up to 20 products from the first keyword, so you can validate the output shape before committing budget.

### FAQ

**What is Douyin Shop (抖音商城)?**
Douyin Shop is the in-app e-commerce marketplace inside Douyin (ByteDance's Chinese short-video platform, the domestic counterpart of TikTok). Creators promote products for affiliate commission, and shoppers buy without leaving the app. This actor searches that catalogue by keyword and returns each product's commercial data.

**How many products can I get per keyword?**
Around 500. Douyin's product search caps how deep a single keyword goes, so `maxResults` above ~500 simply returns up to that ceiling. To collect more, add more keywords, each is searched independently.

**Can I sort by price or sales, or filter by category / time?**
No. Douyin's product search surface exposes no sort, price, or time filters, so results come back in Douyin's own natural search-rank order, the same order a shopper sees in the app. The data you need for sorting (price, monthly sales, commission) is in every row, so you can sort and filter downstream.

**What does `salesTrend` contain?**
A 30-point daily series of units sold, one point per day for the last ~30 days. It's the velocity curve behind the headline `monthlySold` number, useful for spotting products that are accelerating versus cooling off.

**What is the affiliate commission data for?**
`commissionRatePercent` and `commissionFee` are what a creator earns for promoting the product through Douyin's affiliate program, and `cooperatingCreators` is how many creators already promote it. Together they're the core signals for affiliate and influencer-product selection.

**Why are prices given twice (`amount` and `amountCents`)?**
Douyin stores prices as integer cents. `amountCents` is that exact value (`5900`); `amount` is the convenient yuan figure (`59.0`). Use whichever your pipeline prefers, with no rounding ambiguity.

**What's in the `raw` field?**
The complete, verbatim product object exactly as the platform returns it. The 18 curated fields cover the high-value data; `raw` guarantees that anything not curated (or anything the platform adds later) is still in your dataset. Nothing is dropped.

**Which keywords work best?**
Chinese product terms (`口红`, `零食`, `手机壳`, `蓝牙耳机`). The catalogue is a Chinese marketplace, so Chinese keywords return the richest, most relevant results. Brand names and English terms work too, with thinner coverage.

**How fresh is the data?**
Live. Price, sales, commission, and shop score are all fetched on demand at run time. No caching, so re-run whenever you need current figures.

**Do I need a Douyin account or cookies?**
No. Enter keywords and run, no account, login, cookie export, or QR scan involved.

**How do I export the data?**
The dataset downloads as JSON, CSV, Excel, XML, or HTML from the run's Storage tab, or via the Apify API.

**Is it legal to scrape Douyin product data?**
The actor collects publicly available marketplace data only, nothing behind a login. You are responsible for complying with Douyin's terms of service and applicable data protection law (GDPR, CCPA, PIPL) before storing or republishing the data.

### More Zen Studio scrapers for Chinese platforms

**🎬 Short-video & social**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-3TJaaOJDU1AMiOoJM-Vu2eVr0P6N-douyin-profile-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Douyin 抖音**
  - [Douyin Search Scraper](https://apify.com/zen-studio/douyin-search-scraper)
  - [Douyin Profile Scraper](https://apify.com/zen-studio/douyin-profile-scraper)
  - [Douyin Video Scraper](https://apify.com/zen-studio/douyin-video-scraper)
  - [Douyin Comments Scraper](https://apify.com/zen-studio/douyin-comments-scraper)
  - [Douyin Transcripts Scraper](https://apify.com/zen-studio/douyin-transcripts-scraper)
  - [Douyin Creator Rankings Scraper](https://apify.com/zen-studio/douyin-xingtu-rankings-scraper)
  - [Douyin Live Recorder](https://apify.com/zen-studio/douyin-live-recorder)
  - [Douyin Hot Search Scraper](https://apify.com/zen-studio/douyin-hot-search-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-mHKEEgoDqr6btQQer-fUs5ZquIeN-xiaohongshu-search-scraper-logo-square.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **RedNote 小红书**
  - [RedNote User Profile Scraper](https://apify.com/zen-studio/rednote-user-profile-scraper)
  - [RedNote Search Scraper](https://apify.com/zen-studio/rednote-search-scraper)
  - [RedNote Comments Scraper](https://apify.com/zen-studio/rednote-comments-scraper)
  - [RedNote Product Search Scraper](https://apify.com/zen-studio/rednote-product-search-scraper)
  - [RedNote Note Detail Scraper](https://apify.com/zen-studio/rednote-note-detail-scraper)
  - [RedNote Product Reviews Scraper](https://apify.com/zen-studio/rednote-product-reviews-scraper)
  - [RedNote Live Recorder](https://apify.com/zen-studio/rednote-live-recorder)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-dexCSKEZtKS8hg4fT-lD4weyiYga-shigua-____-scraper-logo.jpg" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Xigua 西瓜视频**
  - [Xigua Video Search Scraper](https://apify.com/zen-studio/xigua-video-search-scraper)
  - [Xigua Video Detail Scraper](https://apify.com/zen-studio/xigua-video-detail-scraper)

**🛒 E-commerce**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-PsAKYWM55HG4AHXjK-ItywU7Bp0s-taobao-search-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Taobao 淘宝**
  - [Taobao Search Scraper](https://apify.com/zen-studio/taobao-search-scraper)
  - [Taobao Product Detail Scraper](https://apify.com/zen-studio/taobao-detail-scraper)
  - [Taobao Seller Products Scraper](https://apify.com/zen-studio/taobao-seller-products-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-uZy6tbKLKnSVtT4BN-emXnT123uR-jd-com-scraper-logo-square.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **JD.com 京东**
  - [JD.com Search Scraper](https://apify.com/zen-studio/jd-com-search-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-ghXSMZcW3GxsCrkiR-5hnvsKv4Yt-1688-wholesale-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **1688 阿里巴巴**
  - [1688 Wholesale Scraper](https://apify.com/zen-studio/1688-wholesale-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-5QcLc4BHaLMBUKYs3-f3CWQ60Row-goofish-search-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Goofish 闲鱼**
  - [Goofish (Xianyu) Search Scraper](https://apify.com/zen-studio/goofish-xianyu-search-scraper)
  - [Goofish (Xianyu) Seller Scraper](https://apify.com/zen-studio/goofish-xianyu-seller-scraper)
  - [Goofish (Xianyu) Item Detail Scraper](https://apify.com/zen-studio/goofish-xianyu-item-detail-scraper)
  - [Goofish (Xianyu) Item Comments & Q\&A Scraper](https://apify.com/zen-studio/goofish-xianyu-item-comments-scraper)

**🏠 Real estate & autos**

- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-1tAzNSf8Kz0v7Q2Lr-AINJ7FsZVU-anjuke-scraper-logo.jpg" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Anjuke 安居客**
  - [Anjuke For-Sale Listings Scraper](https://apify.com/zen-studio/anjuke-real-estate-scraper)
  - [Anjuke New-Home Scraper](https://apify.com/zen-studio/anjuke-new-home-scraper)
  - [Anjuke Rental Listings Scraper](https://apify.com/zen-studio/anjuke-rent-scraper)
  - [Anjuke Listing Detail Scraper](https://apify.com/zen-studio/anjuke-sale-detail-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-32OkWqsiUywoq2ci3-7JhFlW1qg3-58__-real-estate-scraper-logo.jpg" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **58.com 58同城**
  - [58.com Real Estate Scraper](https://apify.com/zen-studio/58-real-estate-scraper)
- <img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-ytaE4YpSmjXDmibPv-L1UMPHa2bO-che168-autohome-scraper-logo.png" width="16" height="16" style="vertical-align:middle;border-radius:3px"> **Autohome 汽车之家**
  - [Autohome (Che168) Used-Car Scraper](https://apify.com/zen-studio/che168-car-scraper)

### Support

- **Bugs**: Issues tab
- **Features**: Issues tab

### Legal Compliance

Extracts publicly available marketplace data from Douyin (抖音). Users must comply with Douyin's terms of service and applicable data protection regulations (GDPR, CCPA, PIPL).

***

*Structured Douyin Shop product data: price, monthly sales, 30-day sales trend, positive-review ratio, shop score, and affiliate commission, for any keyword, in clean JSON.*

# Actor input Schema

## `keywords` (type: `array`):

Add one or more product keywords. Chinese works best (e.g. 口红, 零食, 手机壳). Each keyword is searched independently.<br><br>Around <b>500 products per keyword</b> is the platform's ceiling, so add more keywords to collect more.

## `maxResults` (type: `integer`):

How many products to fetch for each keyword. Cost scales linearly.<br><br><ul><li>Default: <code>100</code>. Set <code>0</code> for <b>all available</b>.</li><li>Realistic yield is around <b>500 products per keyword</b>; larger numbers return up to that ceiling.</li></ul>

## Actor input object example

```json
{
  "keywords": [
    "口红"
  ],
  "maxResults": 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 = {
    "keywords": [
        "口红"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/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 = {
    "keywords": ["口红"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/douyin-product-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "口红"
  ],
  "maxResults": 100
}' |
apify call zen-studio/douyin-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zen-studio/douyin-product-search-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Douyin 抖音 Product Search Scraper - Price, Sales & Commission",
        "description": "Search Douyin Shop (抖音商城) products by keyword and extract price, monthly sales, a 30-day sales trend, positive-review ratio, shop name and score, and affiliate commission rate. One row per product in clean JSON, ready for product research, competitor analysis, and affiliate selection.",
        "version": "0.0",
        "x-build-id": "fQc4XsSaqiAek2TvA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/zen-studio~douyin-product-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-zen-studio-douyin-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/zen-studio~douyin-product-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-zen-studio-douyin-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/zen-studio~douyin-product-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-zen-studio-douyin-product-search-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "🔎 Product search keywords",
                        "type": "array",
                        "description": "Add one or more product keywords. Chinese works best (e.g. 口红, 零食, 手机壳). Each keyword is searched independently.<br><br>Around <b>500 products per keyword</b> is the platform's ceiling, so add more keywords to collect more.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "📦 Maximum products per keyword",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "How many products to fetch for each keyword. Cost scales linearly.<br><br><ul><li>Default: <code>100</code>. Set <code>0</code> for <b>all available</b>.</li><li>Realistic yield is around <b>500 products per keyword</b>; larger numbers return up to that ceiling.</li></ul>",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
