# Douyin Hot Search Scraper - Trending Topics & Hot List (`hgservices/douyin-hot-search-scraper`) Actor

Scrape Douyin (抖音) hot search boards: the main 热榜, rising topics, entertainment, society, challenge and 种草 seeding lists. Get rank, title, heat value, views, video count, badge (新/热/爆), top video and topic link per entry. No login. Schedule it to track trends over time.

- **URL**: https://apify.com/hgservices/douyin-hot-search-scraper.md
- **Developed by:** [Harish Garg](https://apify.com/hgservices) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 scraped topics

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 Scraper — Trending Topics & Hot List (抖音热榜)

Get the live **Douyin (抖音) hot search** in one run: the main **抖音热榜 hot list**, the topics **rising right now (实时上升热点)**, and the **entertainment (娱乐榜), society (社会榜), challenge (挑战榜) and product-seeding (种草榜)** boards. Every trending topic comes with its **rank, heat value, views, video count, badge (新 / 热 / 爆 …), the video Douyin attaches to it, and links to the topic page and a Douyin search**.

No Douyin account, no login, no cookies and no coding. Export the trending topics to **JSON, CSV, Excel or HTML**, get them through the **Douyin hot search API** endpoint of the Actor, schedule runs to build a trend history, or ask an AI assistant such as **Claude** or **ChatGPT** what is trending on Douyin.

### What does the Douyin Hot Search Scraper do?

- 🔥 **Six Douyin hot search boards in one run.** Main hot list (50 topics, plus the pinned topic when Douyin shows one), rising now (5), entertainment (50), society (50), challenges (50) and product seeding (50).
- 📊 **Heat and reach for every topic.** Douyin's heat value (热度), view count and video count.
- 🏷️ **Badges in Chinese and English.** 新 New, 热 Hot, 爆 Explosive, 首发 First release, 独家 Exclusive, 辟谣 Rumor debunked and more.
- 🏆 **Rank history.** The current rank and the best rank the topic has reached on the board.
- 🎬 **A video for every topic.** The ID and link of the video that Douyin attaches to the topic, plus the topic cover image.
- 🔗 **Ready-made links.** The topic page on douyin.com and a Douyin search for the topic text.
- 🕒 **Time-stamped snapshots.** When Douyin last updated the board and when the run collected it, so scheduled runs line up as a time series.

### What data can you extract from Douyin hot search?

| Field | What you get |
|------|-------------|
| Board | Board key and Douyin's board name (抖音热榜, 实时上升热点, 娱乐榜, 社会榜, 挑战榜, 种草榜) |
| Rank | Position on the board (1 = top; 0 = the pinned topic), pinned flag, best rank reached |
| Topic | Topic text, topic ID, topic URL, Douyin search URL |
| Heat | Heat value, views, number of videos |
| Badge | Badge in Chinese, badge in English, badge code |
| Category | Douyin's category code for the topic |
| Video | ID and link of the video Douyin attaches to the topic, cover image |
| Time | Event start time, board update time, scrape time |

### Input

The Actor has one input field.

| Field | Type | Description |
|------|------|-------------|
| `boards` | array of strings | The boards to scrape. Values: `main`, `rising`, `entertainment`, `society`, `challenge`, `seeding`. Leave it empty to get all six boards. |

| Value | Board | Topics |
|------|------|-------|
| `main` | Main hot list (抖音热榜) | 50, plus the pinned topic when Douyin shows one |
| `rising` | Rising now (实时上升热点) | 5 |
| `entertainment` | Entertainment (娱乐榜) | 50 |
| `society` | Society (社会榜) | 50 |
| `challenge` | Challenges (挑战榜) | 50 |
| `seeding` | Product seeding (种草榜) | 50 |

#### Input example

```json
{
    "boards": ["main", "rising", "entertainment"]
}
```

To get all boards, use `{}` or `{"boards": []}`. The results always come in the board order above, whatever the order in the input. If `boards` contains a value that is not in the list, the run stops with a message that shows the correct values.

### Output

You get one dataset item for each trending topic. A full run with all six boards gives approximately 255 topics.

#### Output example

```json
{
    "board": "main",
    "boardName": "抖音热榜",
    "rank": 1,
    "isPinned": false,
    "title": "冰雪大世界官宣联名迪士尼",
    "hotValue": 12099906,
    "viewCount": 65818088,
    "videoCount": 3,
    "label": "热",
    "labelEnglish": "Hot",
    "labelCode": 3,
    "categoryCode": 10000,
    "highestRank": 1,
    "eventTime": "2026-10-12T05:14:17+00:00",
    "topicId": "2691421",
    "topicUrl": "https://www.douyin.com/hot/2691421",
    "searchUrl": "https://www.douyin.com/search/%E5%86%B0%E9%9B%AA%E5%A4%A7%E4%B8%96%E7%95%8C%E5%AE%98%E5%AE%A3%E8%81%94%E5%90%8D%E8%BF%AA%E5%A3%AB%E5%B0%BC",
    "topVideoId": "7695396284148831488",
    "topVideoUrl": "https://www.douyin.com/video/7695396284148831488",
    "coverUrl": "https://p26-sign.douyinpic.com/tos-cn-p-0015/o4FizWTAiMw9aIrInMvb2wBA4IPIxs3cwQSKm~noop.jpeg?...",
    "boardUpdatedAt": "2026-10-13T00:24:21+08:00",
    "scrapedAt": "2026-10-12T16:25:41+00:00"
}
```

`boardUpdatedAt` uses Beijing time (UTC+8), the time zone of Douyin. All other times are in UTC.

#### Output fields

| Field | Description |
|------|-------------|
| `board` | Board key: `main`, `rising`, `entertainment`, `society`, `challenge` or `seeding` |
| `boardName` | Douyin's name of the board, for example `抖音热榜` |
| `rank` | Position on the board. 1 is the top. 0 is the pinned topic above rank 1 on the main board. |
| `isPinned` | `true` for the pinned topic on the main board |
| `title` | The hot search topic text |
| `hotValue` | Douyin's heat value. Empty for rising topics and for the pinned topic. |
| `viewCount` | Views of the topic. Empty for rising topics and for the pinned topic. |
| `videoCount` | Number of videos that Douyin links to the topic |
| `label` | The badge next to the topic, in Chinese. Empty when the topic has no badge. |
| `labelEnglish` | The English meaning of the badge |
| `labelCode` | Douyin's number for the badge |
| `categoryCode` | Douyin's category code for the topic. Douyin does not publish the meaning of the codes. |
| `highestRank` | The best rank the topic has reached on the board |
| `eventTime` | When the event of the topic started |
| `topicId` | Douyin's ID of the topic. It stays the same across runs and boards. |
| `topicUrl` | The topic page on douyin.com |
| `searchUrl` | A douyin.com search for the topic text |
| `topVideoId` | ID of the video that Douyin attaches to the topic |
| `topVideoUrl` | Link to that video |
| `coverUrl` | Topic cover image. The link expires after some hours. |
| `boardUpdatedAt` | When Douyin last updated the board |
| `scrapedAt` | When the run collected the board |

#### Badges

| `label` | `labelEnglish` | | `label` | `labelEnglish` |
|------|------|---|------|------|
| 新 | New | | 当事人 | First-hand |
| 商 | Commercial | | 剧集 | TV series |
| 热 | Hot | | 电影 | Movie |
| 爆 | Explosive | | 综艺 | Variety show |
| 首发 | First release | | 晚会 | Gala |
| 同城 | Local | | 辟谣 | Rumor debunked |
| 独家 | Exclusive | | 热议 | Hotly debated |
| 挑战 | Challenge | | 解读 | Explainer |

#### Error item example

Sometimes Douyin does not return a board. Then the dataset gets one item for that board with an `error` field, and the other boards are not affected:

```json
{
    "board": "society",
    "boardName": "社会榜",
    "error": "Douyin did not return this board after 4 attempts … This is usually temporary. Run it again in a few minutes."
}
```

### How to use the Douyin Hot Search Scraper

You can run the scraper in four ways: in Apify Console, with the Apify API, with the Apify API clients for JavaScript and Python, or from an AI assistant. All four use the same input and give the same output.

#### 1. Apify Console (no coding)

1. Open the Douyin Hot Search Scraper page in Apify Store and click **Try for free**.
2. Sign in to Apify, or create a free account.
3. On the **Input** tab, keep all boards in **Boards**, or select only the boards you need.
4. Click **Start**.
5. When the run ends, open the **Output** tab to see the trending topics in a table.
6. Click **Export** to download the data as JSON, CSV, Excel, HTML or XML.

To use the same input again, click **Save as a new task**. To get a new snapshot automatically, for example every hour, add a **schedule** to the task.

#### 2. Apify API (HTTP)

Get your API token from **Settings → API & Integrations** in Apify Console. Replace `YOUR_API_TOKEN` in the examples with your token.

This request runs the scraper, waits for it to finish and returns the trending topics in the response:

```bash
curl -X POST "https://api.apify.com/v2/acts/hgservices~douyin-hot-search-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"boards": ["main", "rising"]}'
```

To get CSV or Excel instead of JSON, add `?format=csv` or `?format=xlsx` to the URL.

You can also start the run without waiting, and then get the results:

```bash
## 1. Start the run. The response contains "id" and "defaultDatasetId".
curl -X POST "https://api.apify.com/v2/acts/hgservices~douyin-hot-search-scraper/runs" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"boards": ["main", "rising"]}'

## 2. When the run status is SUCCEEDED, get the topics.
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
```

#### 3. JavaScript / Node.js (apify-client)

Install the client with `npm install apify-client`.

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('hgservices/douyin-hot-search-scraper').call({
    boards: ['main', 'rising'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const topic of items) {
    console.log(topic.board, topic.rank, topic.title, topic.hotValue);
}
```

#### 4. Python (apify-client)

Install the client with `pip install apify-client`. This example is for apify-client version 3 or later.

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("hgservices/douyin-hot-search-scraper").call(run_input={
    "boards": ["main", "rising"],
})

for topic in client.dataset(run.default_dataset_id).iterate_items():
    print(topic.get("board"), topic.get("rank"), topic.get("title"), topic.get("hotValue"))
```

In apify-client version 2 or earlier, use `run["defaultDatasetId"]` instead of `run.default_dataset_id`.

The **API** tab of the Actor page has more examples and the full list of API endpoints.

#### 5. AI assistants: Claude, ChatGPT and other MCP clients

The scraper is available through the **Apify MCP server**. Connect your AI assistant to the server one time, and then ask in plain language. For example:

> *"What is trending on Douyin right now? Show the top 10 of the main hot list and the entertainment board, and translate the topics into English."*

To give the assistant only this scraper, use this server URL:

```
https://mcp.apify.com?tools=hgservices/douyin-hot-search-scraper
```

You can also use `https://mcp.apify.com` without parameters. Then the assistant can search Apify Store and run this scraper and other Actors.

**Claude (claude.ai and Claude Desktop)**

1. Open **Settings → Connectors**.
2. Click **Add custom connector**.
3. Type a name, for example `Apify`, and paste the server URL.
4. Click **Add**, and then sign in to Apify.

**Claude Code**

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=hgservices/douyin-hot-search-scraper"
```

Then run `/mcp` in Claude Code and sign in to Apify.

**ChatGPT**

1. Turn on **Developer mode** in ChatGPT.
2. Open **Settings → Apps & Connectors** and click **Create**.
3. Type a name, and paste the server URL into **MCP Server URL**.
4. Select **OAuth** for authentication, click **Create**, and then sign in to Apify.
5. In a new chat, click **+** → **More**, and select your Apify connector.

**Cursor, VS Code, Windsurf and other MCP clients**

Add this to the MCP configuration of your client:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com?tools=hgservices/douyin-hot-search-scraper"
        }
    }
}
```

Your client opens a browser window the first time, so that you can sign in to Apify. The [Apify MCP configurator](https://mcp.apify.com) can make the configuration for other clients.

### Integrations

Send the trending topics to the tools you already use with Apify integrations: **Google Sheets, Google Drive, Slack, Make, Zapier, n8n, Airbyte, GitHub** and webhooks. Use **schedules** to run the scraper every hour or every day, and build a history of what trends on Douyin, how long topics stay on the boards and how high they climb.

### Use cases

- **China trend monitoring** — see what people talk about on China's largest short-video platform, every hour.
- **Marketing and brand research** — find trending topics, challenges and products (种草) early.
- **Media and news** — follow society and entertainment stories as they rise and fall.
- **Trend history and analytics** — schedule the scraper and analyze heat, rank and time on board over weeks.
- **Content planning** — find challenges and topics for your own Douyin or TikTok videos.
- **Datasets for AI and research** — collect time-stamped trend data with heat values and ranks.

### Tips for the best results

- **The boards change all the time.** Douyin updates the hot search boards many times a day. Schedule the scraper to see the change over time. `boardUpdatedAt` and `scrapedAt` show when each snapshot was taken.
- **Rising topics have no heat value.** Douyin shows only the topic and its videos for the rising list, so `hotValue` and `viewCount` are empty there.
- **Use `topicId` to follow a topic.** A topic keeps its ID across runs and boards.
- **Save cover images soon.** The `coverUrl` link expires after some hours.

### FAQ

**Which Douyin boards does the scraper support?**
The main hot list (抖音热榜), rising now (实时上升热点), entertainment (娱乐榜), society (社会榜), challenges (挑战榜) and product seeding (种草榜).

**Can I get all the videos of a topic?**
No. Douyin shows the full video list of a topic only to signed-in users. Each topic has the one video that Douyin attaches to it, plus a search link. To get more videos about a topic, use the [Douyin Search Scraper](https://apify.com/hgservices/douyin-search-scraper) with the topic text.

**What does the badge mean?**
`label` is the badge that Douyin shows next to a topic, and `labelEnglish` is its English meaning. The [Badges](#badges) table shows all of them.

**Do I need a Douyin account?**
No. The scraper works without an account, a password or cookies.

**Is the Douyin hot list the same as TikTok trends?**
No. Douyin is the Chinese version of TikTok. It has its own users, its own content and its own hot search list.

**Can I use the data in Excel or Google Sheets?**
Yes. Download the results as CSV or Excel, or use the Google Sheets integration.

**What happens if a board is missing?**
The dataset gets an item with an `error` field for that board. The other boards are not affected. Run the scraper again some minutes later.

### Other Douyin scrapers

- [Douyin Video Downloader & Scraper](https://apify.com/hgservices/douyin-scraper) — get video data and no-watermark download links.
- [Douyin Search Scraper](https://apify.com/hgservices/douyin-search-scraper) — find Douyin videos by keyword.
- [Douyin Profile Scraper](https://apify.com/hgservices/douyin-profile-scraper) — get the videos of a creator with their stats.
- [Douyin Comments Scraper](https://apify.com/hgservices/Douyin-Comments-Scraper) — get the comments on Douyin videos.
- [Douyin Related Videos Scraper](https://apify.com/hgservices/douyin-related-videos-scraper) — get the videos Douyin recommends next to a video.
- [Douyin Danmaku Scraper](https://apify.com/hgservices/douyin-danmaku-scraper) — get the bullet comments (弹幕) of Douyin videos.
- [Douyin Collection Scraper](https://apify.com/hgservices/douyin-collection-scraper) — get the episodes of Douyin series and short dramas.
- [Douyin AI Transcript Scraper](https://apify.com/hgservices/douyin-ai-transcript-scraper) — turn Douyin videos into text.
- [Weibo Hot Search Scraper](https://apify.com/hgservices/weibo-hot-search-scraper) — get the Weibo hot search list (微博热搜).

### Is it legal to scrape Douyin?

This scraper collects only **publicly available** data. You are responsible for how you use the data. Obey Douyin's terms of service and the laws that apply to you, such as GDPR and copyright law.

### Feedback and support

Did you find a problem, or do you need a new field? Open an issue on the **Issues** tab.

# Actor input Schema

## `boards` (type: `array`):

The hot search boards to scrape. Main hot list (抖音热榜) = 50 topics, rising (实时上升热点) = 5 topics climbing fast right now, the other boards = 50 topics each. Leave empty to get all boards.

## Actor input object example

```json
{
  "boards": [
    "main",
    "rising",
    "entertainment",
    "society",
    "challenge",
    "seeding"
  ]
}
```

# Actor output Schema

## `topics` (type: `string`):

One item per topic: board, rank, title, heat value, views, video count, badge (Chinese + English), category code, highest rank reached, event time, topic ID and URL, search URL, top video ID and URL, cover image, board update time and scrape time.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/douyin-hot-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("hgservices/douyin-hot-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 '{}' |
apify call hgservices/douyin-hot-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hgservices/douyin-hot-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/eKApPfAH5W9dVrgSQ/builds/1CbzWnWlwEeGeyEOI/openapi.json
