# Douyin 抖音 Trending Scraper - Hot Search & Charts (`vulnv/douyin-trending-scraper`) Actor

Scrape Douyin (抖音) trends: the live hot search list and its themed boards, hot and rising topics by category and city, hot videos, trending hashtags, top search terms and the music charts. Export ranks, heat scores and trends to JSON/CSV/Excel. No login, cookies or proxy needed.

- **URL**: https://apify.com/vulnv/douyin-trending-scraper.md
- **Developed by:** [VulnV](https://apify.com/vulnv) (community)
- **Categories:** Social media, News
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 hot search entries

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Trending Scraper - 抖音 Hot Search, Hot Topics & Charts

**Scrape Douyin (抖音) trends and export the hot search list, hot and rising topics, hot videos, trending hashtags, top search terms and the music charts to JSON, CSV or Excel.** Grab the live hot list (热榜) and its seeding, entertainment, society and challenge boards, follow rising topics by category or city, find the videos and hashtags taking off right now, see what people are searching for, and pull the hot, rising and original music charts - all from one Actor. Each ranked entry is one clean, flat row with its rank, heat score and trend.

No keywords, URLs, login, cookies, proxies or China IP needed - pick a board and press **Start**.

> **Unofficial notice:** This is an independent tool and is **not** affiliated with, endorsed by, or connected to Douyin, 抖音, ByteDance or Beijing Douyin Information Service Co., Ltd. "Douyin" and "抖音" are trademarks of their respective owners, used here only to describe what the Actor scrapes.

### What is Douyin?

Douyin (抖音) is China's version of TikTok and the country's largest short-video app, with more than 750 million daily users. Its rankings decide what China talks about: the hot list (热榜) is refreshed every few minutes, and separate boards track rising topics, local city trends, breakout videos, hashtags, searches and the songs everyone is using. This scraper gives you those rankings as data, so you can spot trends early and track them over time without a Douyin account.

### Operations

Pick one **Operation** and, optionally, a board and filters:

| Operation | Boards | Filters | What you get |
|-----------|--------|---------|--------------|
| **Hot search list (热榜)** | Hot list, Seeding (种草), Entertainment, Society, Challenges | none | The live in-app hot list: rank, term, heat score, views, peak rank, badge and category. About 50 entries per board. |
| **Hot topics (热点榜)** | Total hot list, Rising topics, City topics, Challenges | category, city, sort, date range, keyword | Topics with heat score, rank change, category, city and a heat trend. The rising and city boards run thousands deep. |
| **Hot videos (视频榜)** | All, Hits from small accounts (低粉爆款), High completion rate, High follower growth, High like rate | time window, content category, keyword | Breakout videos with plays, likes, like rate, followers gained, follow rate and author data. |
| **Trending hashtags (话题榜)** | Hot, Rising | time window, content category, keyword | Hashtags with heat score, total plays, video count, average plays and a 14-day trend. |
| **Top search terms (搜索榜)** | Hot, Rising | time window, keyword | The most searched (or fastest-rising) search terms with search score and trend. |
| **Music charts (音乐榜)** | Hot, Rising, Original | none | Chart tracks with artist, duration, heat (hot chart), genre, mood and language tags, and audio URL. |

### How to use it (step by step)

1. Choose an **Operation**.
2. Pick the board for that operation (each has its own selector; the default is the main board).
3. Optionally narrow it down:
   - Hot topics -> **Topic category**, **City** (for the city board, e.g. 北京 or 上海), **Topic sort** (rising and city boards) and **Start date** / **End date** (total board).
   - Hot videos / Trending hashtags -> **Time window** and **Content category**.
   - Top search terms -> **Time window**.
   - Any board except the hot search list and music -> **Keyword filter** to keep only entries containing a word.
4. Set **Maximum results** (default 100, or 0 for everything on the board).
5. Press **Start**. Export the dataset as JSON, CSV, Excel, XML or via the API.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `operation` | string | **Required.** `hot_search`, `hot_topics`, `hot_videos`, `hot_hashtags`, `search_terms`, or `hot_music`. |
| `maxItems` | integer | Max rows for the board. `0` = all available. Default `100`. |
| `keyword` | string | Keep only entries containing this word (`hot_topics`, `hot_videos`, `hot_hashtags`, `search_terms`). |
| `hotSearchBoard` | string | `hot`, `seeding`, `entertainment`, `society` or `challenge` (`hot_search`). |
| `topicBoard` | string | `total`, `rising`, `city` or `challenge` (`hot_topics`). |
| `topicCategory` | string | `all` or a topic category such as `entertainment`, `society`, `sports`, `gaming`, `tech`, `finance` (`hot_topics`). |
| `city` | string | Chinese city name or city code for the city board (`hot_topics`). |
| `topicSort` | string | `rank` or `rank_change` (rising and city boards). |
| `startDate`, `endDate` | string | Date range like `2026-09-28` for the total board (`hot_topics`); leave empty for the latest snapshot. |
| `videoBoard` | string | `all`, `low_follower_hits`, `high_completion`, `high_follower_growth` or `high_like_rate` (`hot_videos`). |
| `hashtagBoard` | string | `hot` or `rising` (`hot_hashtags`). |
| `searchBoard` | string | `hot` or `rising` (`search_terms`). |
| `timeWindow` | string | `1h`, `24h`, `72h` or `7d` (`hot_videos`, `hot_hashtags`, `search_terms`). |
| `contentCategory` | string | `all` or a content vertical such as `food`, `travel`, `dance`, `fashion`, `gaming`, `cars` (`hot_videos`, `hot_hashtags`). |
| `musicChart` | string | `hot`, `trending` or `original` (`hot_music`). |

Example: the top 200 rising entertainment topics, sorted by biggest climb:

```json
{
  "operation": "hot_topics",
  "topicBoard": "rising",
  "topicCategory": "entertainment",
  "topicSort": "rank_change",
  "maxItems": 200
}
```

### Output

Every row carries `record_type` (`hot_search`, `hot_topic`, `hot_video`, `hashtag`, `search_term` or `music`), plus `operation`, `input` (the board and filters used), `board` and `rank`.

| Record type | Key fields |
|-------------|------------|
| `hot_search` | `word`, `hot_value`, `view_count`, `video_count`, `peak_rank`, `label_code`, `category_code`, `event_time`, `is_pinned`, `sentence_id`, `cover_url`, `hot_url`, `search_url` |
| `hot_topic` | `word`, `hot_value`, `rank_change`, `video_count`, `category`, `category_code`, `label`, `city_code`, `city_name`, `create_time`, `snapshot_time`, `trend`, `sentence_id`, `hot_url`, `search_url` |
| `hot_video` | `video_id`, `video_url`, `title`, `cover_url`, `is_image_post`, `image_count`, `duration_seconds`, `publish_time`, `hot_value`, `play_count`, `like_count`, `like_rate`, `new_followers`, `follow_rate`, `author_name`, `author_followers_count`, `author_avatar_url`, `play_url` |
| `hashtag` | `hashtag_id`, `hashtag_name`, `hashtag_url`, `hot_value`, `play_count`, `video_count`, `avg_play_count`, `cover_url`, `create_time`, `trend` |
| `search_term` | `word`, `hot_value` (search score), `trend`, `search_url` |
| `music` | `music_id`, `music_url`, `title`, `author`, `album`, `duration_seconds`, `hot_value`, `is_original`, `is_commercial`, `genres`, `moods`, `themes`, `languages`, `owner_id`, `owner_sec_uid`, `cover_url`, `audio_url` |

`trend` is a short list of `{time, value}` heat points (hourly, 10-minute or daily, depending on the board). Times are ISO-8601 UTC.

Example hot topic row:

```json
{
  "record_type": "hot_topic",
  "operation": "hot_topics",
  "input": "rising | category=entertainment | sort=rank_change",
  "board": "rising",
  "rank": 465,
  "rank_change": 4017,
  "word": "薛之谦成都快闪店场周汇总",
  "hot_value": 4574001,
  "video_count": 1,
  "category": "娱乐",
  "category_code": "2005",
  "create_time": "2026-09-30T07:46:39+00:00",
  "snapshot_time": "2026-10-01T15:15:00+00:00",
  "trend": [{"time": "2026-10-01 22", "value": 5281540}, {"time": "2026-10-01 23", "value": 7374801}],
  "sentence_id": "2675044",
  "hot_url": "https://www.douyin.com/hot/2675044"
}
```

### Common use cases

- **Trend tracking** - schedule the hot search list or the rising board every hour and watch topics rise and fall.
- **Content planning** - find the hashtags, sounds and video formats taking off in your niche before they peak.
- **Local and category monitoring** - follow what is trending in one city or one category (entertainment, sports, finance, gaming and more).
- **Brand and market research** - filter the boards by a brand or product word and see which topics, searches and videos mention it.
- **Music and A\&R scouting** - track the hot, rising and original charts with genre and mood tags.

### Notes on reliability

- Rankings are live: two runs a few minutes apart can differ. The hot search list and music charts are single boards of about 30-50 entries; `maxItems` above that returns the whole board.
- The hot list opens with a pinned entry (usually official news) that is not ranked; it comes back with `rank` 0 and `is_pinned` set.
- On the rising and city boards `rank` is the topic's place on Douyin's overall heat ranking, so it is not always 1, 2, 3 when you sort by rank change or pick a city.
- Smaller cities may have no city board at the moment you run; the run then returns nothing and costs nothing.
- The video and hashtag boards go about 1,000 entries deep. A keyword filter on the search board keeps matching terms but no longer orders them by score.
- Heat for the music charts is only published on the hot chart; on the rising and original charts `hot_value` is 0.
- Image, video and audio URLs are served by Douyin's CDN and expire; fetch them promptly.

### FAQ

**Do I need a Douyin account, cookies or a proxy?** No. Just pick a board and press Start.

**Do I need to enter keywords or URLs?** No. Every operation reads a ranking board. The keyword field is an optional filter.

**How often do the boards update?** The hot list and topic boards refresh every few minutes; the video, hashtag and search boards are computed over the time window you choose.

**Can I get a past day's hot list?** Yes, for recent dates: choose the Total hot list board and set a start and end date.

**Which cities are supported?** Several hundred Chinese cities. Enter the name in Chinese (e.g. 北京, 上海, 广州) or its city code.

**Can I try it for free?** Yes. Users on the free Apify plan can fetch up to 10 results in total to try the Actor. Upgrade to a paid Apify plan to run it without that limit.

**What export formats are supported?** JSON, CSV, Excel, XML and HTML, plus the Apify API and integrations such as Google Sheets, Zapier, Make and webhooks.

### Pricing

This Actor is **pay per result**: you are charged for each row it returns (hot-search entries, hot topics, hot videos, hashtags, search terms and music tracks), plus standard Apify platform usage. Different record types have different prices; see the **Pricing** tab for current rates. You are never charged for inputs that return nothing.

### Related scrapers

- **[Douyin Scraper](https://apify.com/vulnv/douyin-search-scraper)** - 抖音 videos by keyword, with creators and downloads.
- **[Weibo Scraper](https://apify.com/vulnv/weibo-scraper)** - 微博 posts, users, comments and the hot search list.
- **[Xiaohongshu Scraper](https://apify.com/vulnv/xiaohongshu-scraper)** - 小红书 / RedNote notes, users and comments.

# Actor input Schema

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

Which ranking to scrape. Each operation has its own board selector and filters below:

• Hot search list → Hot search board
• Hot topics → Topic board, category, city, sort, dates
• Hot videos → Video board, time window, content category
• Trending hashtags → Hashtag board, time window, content category
• Top search terms → Search board, time window
• Music charts → Music chart

## `maxItems` (type: `integer`):

Upper bound on rows for the chosen board. The hot search list has about 50 entries and each music chart 30-50; the topic, video, hashtag and search boards go much deeper. Cost scales linearly. Set 0 to fetch all available.

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

For Hot topics, Hot videos, Trending hashtags and Top search terms. Only keep board entries that contain this word, e.g. 国庆 or 金价. Leave empty for the whole board.

## `hotSearchBoard` (type: `string`):

For "Hot search list". The in-app hot list and its themed sub-boards.

## `topicBoard` (type: `string`):

For "Hot topics". Total hot list, rising topics, city topics or challenges. Rows include the topic's category, heat score, rank change and a heat trend.

## `topicCategory` (type: `string`):

For "Hot topics" (total, rising and city boards). Only keep topics in this category.

## `city` (type: `string`):

For the "City topics" board. A Chinese city name (e.g. 北京, 上海, 成都) or a city code (e.g. 110000). Leave empty for city topics from everywhere.

## `topicSort` (type: `string`):

For the "Rising topics" and "City topics" boards. Sort by heat rank, or by how many places a topic climbed.

## `startDate` (type: `string`):

For the "Total hot list" board only. Set both dates to get every topic that was on the board during that period instead of the latest snapshot. Recent dates only.

## `endDate` (type: `string`):

For the "Total hot list" board only. Last day of the period (inclusive).

## `videoBoard` (type: `string`):

For "Hot videos". The overall hot video ranking or one of its specialised boards.

## `hashtagBoard` (type: `string`):

For "Trending hashtags". The hottest hashtags, or the ones rising fastest.

## `searchBoard` (type: `string`):

For "Top search terms". The most searched terms, or the ones rising fastest.

## `timeWindow` (type: `string`):

For "Hot videos", "Trending hashtags" and "Top search terms". The period the ranking is computed over.

## `contentCategory` (type: `string`):

For "Hot videos" and "Trending hashtags". Only keep entries in this content vertical.

## `musicChart` (type: `string`):

For "Music charts". The hot, rising or original music chart.

## Actor input object example

```json
{
  "operation": "hot_search",
  "maxItems": 100,
  "hotSearchBoard": "hot",
  "topicBoard": "total",
  "topicCategory": "all",
  "topicSort": "rank",
  "videoBoard": "all",
  "hashtagBoard": "hot",
  "searchBoard": "hot",
  "timeWindow": "24h",
  "contentCategory": "all",
  "musicChart": "hot"
}
```

# Actor output Schema

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

All scraped Douyin ranking rows in the default dataset.

## `overview` (type: `string`):

Overview table of the scraped results.

# 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("vulnv/douyin-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 = {}

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

```

## MCP server setup

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