# Douyin Hot Search Scraper - China Trends & Videos (`scrapewise/china-trending-scraper`) Actor

Scrape Douyin hot search list with every topic's videos, plus Douyin hot songs, Baidu, Zhihu and Toutiao boards. Rising list and change vs last run. Rank, heat and links. No login.

- **URL**: https://apify.com/scrapewise/china-trending-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Social media, News
- **Features:** Limited permissions
- **Stats:** 10 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.82 / 1,000 trending topic delivereds

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 Hot Search & China Trends Scraper

China Trending Scraper turns the **Douyin hot search list (抖音热榜)** into clean JSON, CSV or Excel, **with the videos behind every topic**, and adds the trending boards of **Baidu (百度热搜), Zhihu (知乎热榜) and Toutiao (头条热榜)** in the same row format. **No login, no cookies.** Built for schedules: turn on `compareWithPreviousRun` and every topic comes back marked **new, rising, falling or stable**, with rank and heat change, plus the topics that **dropped** off the board since your last run.

**US$ 4.50 per 1,000 topics, US$ 3 per 1,000 videos, US$ 0.03 per run. Error rows and dropped rows are free.**

### At a glance

- **Price:** US$ 4.50 per 1,000 topics, US$ 3 per 1,000 videos, US$ 0.03 per run start
- **A typical scheduled run:** Douyin board: ~55 topics = about US$ 0.28
- **Boards:** Douyin hot search + rising list, Douyin hot songs chart, Baidu realtime, Zhihu hot list, Toutiao hot board
- **Videos:** Every Douyin hot topic's videos with likes, comments, shares, saves, author, video and cover links
- **Change tracking:** new / rising / falling / stable / dropped vs your previous run
- **Error rows:** Free, with an `errorCode`

### Real rows

Collected on Apify on 2026-09-30, all five boards with videos (216 topics and 388 videos in 53 seconds).

Douyin topic:

```json
{
  "type": "topic",
  "platform": "douyin",
  "board": "hot_search",
  "rank": 2,
  "title": "天安门广场国庆升旗仪式",
  "hotValue": 11627424,
  "url": "https://www.douyin.com/hot/2675813",
  "videoCount": 1,
  "eventTime": "2026-09-30T15:26:14Z",
  "topicId": "2675813",
  "trend": "new",
  "source": "douyin:hot_search"
}
```

A video of that topic (video and cover links cut here):

```json
{
  "type": "video",
  "platform": "douyin",
  "id": "7691243427274542336",
  "url": "https://www.douyin.com/video/7691243427274542336",
  "description": "10月1日，天安门广场将举行升国旗仪式。关注@央视新闻 一起看国庆升旗，共同祝福伟大祖国！",
  "createdAt": "2026-09-30T08:32:42Z",
  "durationSec": 18.5,
  "likeCount": 200760,
  "commentCount": 89,
  "shareCount": 6790,
  "collectCount": 7626,
  "downloadCount": 393,
  "authorNickname": "央视新闻",
  "authorHandle": "cctvnews",
  "authorFollowers": 187478275,
  "authorVerified": "中央广播电视总台央视新闻官方抖音号",
  "musicTitle": "@央视新闻创作的原声",
  "width": 1080,
  "height": 1920,
  "topic": "天安门广场国庆升旗仪式",
  "topicRank": 2
}
```

The next scheduled run, with `compareWithPreviousRun`:

```json
{
  "platform": "douyin",
  "board": "hot_search",
  "rank": 28,
  "title": "国庆假期逛买地图已解锁",
  "hotValue": 7681353,
  "label": "hot",
  "labelCode": 3,
  "trend": "falling",
  "previousRank": 26,
  "rankChange": -2
}
```

### What you can do with it

- **China social listening:** what China is watching on Douyin right now, hour by hour.
- **Brand and PR monitoring:** get alerted when a topic about your brand, product or market enters the board, and follow it up and down.
- **Content and marketing teams selling into China:** the topics, songs and video formats that trend, with the creators behind them.
- **News, research and finance:** Baidu, Zhihu and Toutiao boards side by side with Douyin, in one table.

### Input

| Field | What it does |
|---|---|
| `platforms` | Any of `douyin` (default), `douyin_music`, `baidu`, `zhihu`, `toutiao` |
| `includeVideos` | Also return the videos of each Douyin topic |
| `maxVideosPerTopic` | Default 20 |
| `maxTopicsWithVideos` | Only the top N topics get videos (empty = all) |
| `topics` | Exact words from the current Douyin board, to get only their videos |
| `maxTopics` | Keep the top N of each board (default 50) |
| `includeRisingList` | Douyin's 5 rising topics (实时上升热点), default on |
| `compareWithPreviousRun` | Mark trend and return dropped topics; state lives in a named key-value store in your account |
| `snapshotName` | Keep separate comparisons (one per schedule) |

Hourly monitoring of all boards:

```json
{ "platforms": ["douyin", "baidu", "zhihu", "toutiao"], "compareWithPreviousRun": true }
```

Douyin topics with their videos:

```json
{ "platforms": ["douyin"], "includeVideos": true, "maxVideosPerTopic": 20 }
```

### Output fields

**Topic rows** (`type` `topic`, or `music` for the songs chart): `platform`, `board` (`hot_search`, `rising`, `music_chart`, `realtime`, `hot_list`, `hot_board`), `rank`, `title`, `hotValue`, `url`, `description` (Baidu, Zhihu), `coverUrl`, `label` and `labelCode` (Douyin 新/热/爆 badges; Toutiao labels), `isPinned`, `videoCount`, `eventTime`, `topicId`, `answerCount` and `followerCount` (Zhihu), `categories` (Toutiao), `artist`, `durationSec`, `audioUrl` (songs), `trend`, `previousRank`, `rankChange`, `previousHotValue`, `hotValueChange`.

**Video rows** (`type` `video`): `id`, `url`, `description`, `createdAt`, `durationSec`, `likeCount`, `commentCount`, `shareCount`, `collectCount`, `downloadCount`, `hashtags`, `isImagePost`, `authorNickname`, `authorHandle`, `authorFollowers`, `authorVerified`, `authorUrl`, `musicTitle`, `musicAuthor`, `videoUrl`, `coverUrl`, `width`, `height`, `topic`, `topicRank`, `topicBoard`.

Only what the apps show publicly about creators: nickname, handle, follower count, verification text and profile link.

#### Error codes (never charged)

| errorCode | Meaning |
|---|---|
| `NO_RESULTS` | No video for this topic (or the word is not on the current Douyin board) |
| `NO_DATA` | The board came back empty |
| `INVALID_INPUT` | A value the Actor does not understand |
| `BLOCKED` | The board did not answer after retries; run again |
| `NOT_REACHED`, `UNEXPECTED` | The run timeout arrived, or something unforeseen broke; only that board or topic is lost |

### Pricing

| Event | Price |
|---|---|
| Run start | US$ 0.03 per run |
| Topic delivered | US$ 4.50 per 1,000 |
| Video delivered | US$ 3 per 1,000 |

The Douyin board alone (about 55 topics) costs about US$ 0.28 per run. Dropped rows, duplicates and error rows are free, and there is no Apify compute bill on top.

### Limitations

- Douyin serves topic videos only for words that are on its board at that moment; a free word returns `NO_RESULTS`. Most topics have 1 to 20 videos.
- Douyin does not publish play counts in this list; likes, comments, shares, saves and downloads are there.
- Video and cover links are signed by Douyin and expire after some hours; download them soon if you need the files.
- Pinned rows (Baidu, Toutiao) have no rank and are not compared.
- This Actor reads public boards only and respects the sites' terms.

### FAQ

**Do I need a Douyin, Baidu, Zhihu or Toutiao account or cookies?**
No. The boards are read from their public pages, with no login and no cookies, through the Apify proxy.

**What does a run cost?**
US$ 0.03 per run start, US$ 4.50 per 1,000 topics and US$ 3 per 1,000 videos. The Douyin board alone (about 55 topics) costs about US$ 0.28 per run. Dropped rows, duplicates and error rows are free, and there is no Apify compute bill on top.

**How do I get the videos behind each Douyin topic?**
Turn on `includeVideos`. Use `maxVideosPerTopic` (default 20) and `maxTopicsWithVideos` to keep the cost down, or put exact words from the current Douyin board in `topics` to get only their videos.

**Can I run it on a schedule and see what changed?**
Yes. Turn on `compareWithPreviousRun` and every topic comes back marked new, rising, falling or stable, with `previousRank` and `rankChange`, plus the topics that dropped off the board (free rows). Use a different `snapshotName` for each schedule to keep separate histories.

**What are the limits?**
Douyin serves topic videos only for words that are on its board at that moment; any other word returns a free `NO_RESULTS` row. Play counts are not in this list, and video and cover links expire after some hours, so download the files soon if you need them.

### Changelog

- **2026-10-17:** FAQ in this page.
- **2026-09-30, 0.1:** first release. Douyin hot search, rising list and songs chart, videos per topic, Baidu, Zhihu and Toutiao boards, compare with previous run, free error rows.

# Actor input Schema

## `platforms` (type: `array`):

One or more Chinese trending boards to read in this run: Douyin hot search (热榜, about 50 topics plus the 5 rising ones), Douyin hot songs chart (热歌榜), Baidu realtime hot (百度热搜), Zhihu hot list (知乎热榜) and Toutiao hot board (头条热榜). Default Douyin hot search. Each topic is one row with rank, title, heat value, link and board, charged as 'Trending topic delivered'.

## `includeVideos` (type: `boolean`):

Off (default). On: for every Douyin hot topic, also return the videos Douyin shows under it, one row each with description, likes, comments, shares, saves, author, duration, video and cover links. Each video is charged as 'Topic video delivered', so limit it with the two fields below. Only for the Douyin hot search board.

## `maxVideosPerTopic` (type: `integer`):

Upper limit of videos for each Douyin topic, default 20, for example 5 to get only the top videos. Most topics have 1 to 20. Used only when 'Add the videos of each Douyin topic' is on or 'Specific Douyin topics' is filled.

## `maxTopicsWithVideos` (type: `integer`):

Get videos only for the top N topics of the board, for example 10 for the top 10. Leave empty for all topics on the board (up to 'Max topics per board'). Lowers cost when you need videos only for the hottest topics.

## `topics` (type: `array`):

Optional. Exact topic words from the current Douyin hot list, one per line, to get the videos of just those topics. Douyin only serves videos for words that are on the board right now; other words return a free NO_RESULTS row. Copy them from the 'title' of a previous run.

## `maxTopics` (type: `integer`):

Keep only the top N topics of each board, for example 10. Default 50, which covers the full Douyin and Baidu boards. You pay per topic delivered, so this caps the cost per board.

## `includeRisingList` (type: `boolean`):

On (default): adds the 5 topics Douyin marks as rising right now (实时上升热点), as board 'rising'. Turn off to get only the main hot search list.

## `compareWithPreviousRun` (type: `boolean`):

Made for scheduled runs (for example hourly). Each topic gets 'trend' new, rising, falling or stable, with its previous rank and heat change, and topics that left the board come back once as trend 'dropped' (free row). The last snapshot is kept in a named key-value store in your account. On the first run every topic is new. 'trackChanges' also works.

## `snapshotName` (type: `string`):

Name of the comparison to use, so different schedules keep separate histories, for example hourly-douyin and daily-all. Letters, numbers and hyphens. Default 'default'. Only used when 'Compare with previous run' is on.

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

Apify Proxy (datacenter) is the default and recommended; the boards are read from their public pages. Change it only to use your own proxies.

## Actor input object example

```json
{
  "platforms": [
    "douyin"
  ],
  "includeVideos": false,
  "maxVideosPerTopic": 20,
  "maxTopics": 50,
  "includeRisingList": true,
  "compareWithPreviousRun": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (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 = {
    "platforms": [
        "douyin"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/china-trending-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 = {
    "platforms": ["douyin"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/china-trending-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 '{
  "platforms": [
    "douyin"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/china-trending-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/china-trending-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/P1axlydmq5xSJZMgz/builds/O5884OSaf9z7qp9oi/openapi.json
