# Douyin Hot Search - China Trends, Baidu, Zhihu, Toutiao (`scrapewise/china-trending-scraper`) Actor

Douyin hot search list (热榜) with the videos of every topic, plus Baidu, Zhihu and Toutiao trending boards. Rank, heat, label, video stats, author. Rising/falling/new/dropped vs your last run. No login.

- **URL**: https://apify.com/scrapewise/china-trending-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Social media, News
- **Stats:** 2 total users, 1 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.

### Changelog

- **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 trending boards. Douyin hot search returns ~50 topics plus the 5 of the rising list (实时上升热点).

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

For every Douyin hot topic, also return the videos Douyin shows under it: description, likes, comments, shares, saves, author, duration, video and cover links.

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

Upper limit of videos per topic. Most topics have 1 to 20.

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

Leave empty for all topics on the board. Set 10 to get videos only for the top 10.

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

Exact topic words from the current Douyin hot list. Douyin only serves videos for words that are on the board right now; other words return a free NO_RESULTS row.

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

Keep only the top N of each board.

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

The 5 topics Douyin marks as rising right now (实时上升热点), as board 'rising'.

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

Made for schedules: each topic gets trend new, rising, falling or stable, with previous rank and heat change, and topics that left the board come back once as trend 'dropped' (free). State is kept in a named key-value store in your account.

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

Use different names to keep separate comparisons (for example one per schedule). Default: 'default'.

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

Apify Proxy is recommended.

## 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/4F37BgrSoHnxnYtJq/openapi.json
