# Douyin Trends 抖音热点榜 \[From $2] Hot Videos, Topics, Searches (`memo23/douyin-trends-scraper`) Actor

\[From $2 per 1000 rows] Douyin (抖音) trend rankings: hot videos, low-follower hits, high like-rate videos, hot and rising topics and search terms, hot words, fastest-growing accounts and hot events by city. 1 hour to 7 days, 38 categories, trend history per row. No login.

- **URL**: https://apify.com/memo23/douyin-trends-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 2 monthly users, 93.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 ranking rows

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 Trends & Rankings 抖音热点榜 — Hot Videos, Topics, Searches

Get Douyin's (抖音) trend rankings as structured data: the videos, topics, search terms, content words, accounts and events that are rising right now. Pick the lists you want, a time window from 1 hour to 7 days and an optional content category. No login, no cookies, no proxy to set up.

### Lists

| List | `lists` value | Row type |
|------|---------------|----------|
| Hot videos (视频总榜) | `hotVideos` | `video` |
| Low-follower hits (低粉爆款) | `lowFollowerHits` | `video` |
| High completion rate (高完播率) | `highCompletion` | `video` |
| High follower growth (高涨粉率) | `highFollowGrowth` | `video` |
| High like rate (高点赞率) | `highLikeRate` | `video` |
| Hot topics (话题榜) | `hotTopics` | `topic` |
| Rising topics (热度飙升话题) | `risingTopics` | `topic` |
| Hot searches (搜索榜) | `hotSearches` | `search-term` |
| Rising searches (热度飙升搜索) | `risingSearches` | `search-term` |
| Hot content words (内容热词) | `hotWords` | `hot-word` |
| Hot accounts (热门账号) | `hotAccounts` | `account` |
| Rising hot events (上升热点) | `risingEvents` | `hot-event` |
| Hot challenges (挑战榜) | `challenges` | `hot-event` |
| City hot events (同城热点) | `cityEvents` | `hot-event` |

Every row carries `list`, `listName` and `rank`. Topics, search terms, words, accounts and events also carry a `trend` history.

### Analytics, search and calendar

| Input | You get | Row type |
|-------|---------|----------|
| `videos` | Who liked a video (gender, age, province, city, city tier, phone brand and price, each with an index against the platform average), its comment word cloud and daily likes, shares and comments | `video-analytics` |
| `accounts` | An account's follower audience with interests, daily new likes, videos, comments and shares, and last week against the week before | `account-analytics` |
| `accountKeywords` | Accounts matching a name or Douyin handle, with followers and total likes | `account` |
| `includeCalendar` | Douyin's planned activities and campaign topics for the coming days | `calendar-event` |
| `includeHotWordDetails` | 7-day totals and sample videos on each hot content word | added to `hot-word` rows |

### How It Works

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/jgbbhjTcjemuliLHj/records/how-it-works-douyin-trends.png" alt="How the Douyin Trends scraper works" width="900" />
</p>

### Input

| Field | Type | Description |
|-------|------|-------------|
| `lists` | `string[]` | One or more list values from the table above. Required. |
| `timeWindow` | string | `1h`, `24h` (default), `3d` or `7d`. Hot accounts use 24 hours when you pick 1 hour. Hot events are always live. |
| `category` | string | One of 38 content categories (food, travel, fashion, cars, gaming…). Applies to video, topic and account lists. |
| `keyword` | string | Keep only entries matching this keyword. |
| `cityCode` | string | For `cityEvents`: a Chinese administrative code such as `110000` (Beijing) or `310000` (Shanghai). |
| `maxItemsPerList` | integer | Rows per list. Default 50, up to 1,000. |
| `eventCategory` | string | Category for the two hot-event lists: `food`, `travel`, `entertainment`, `society`, `sports`, `gaming`, `technology`, `finance` and 15 more. |
| `includeHotWordDetails` | boolean | Add 7-day totals and sample videos to hot content words. |
| `videos` | `string[]` | Douyin video links or ids for `video-analytics`. |
| `accounts` | `string[]` | Douyin profile links for `account-analytics`. |
| `accountKeywords` / `maxAccountsPerKeyword` | `string[]` / integer | Account search. Default 30 per keyword. |
| `includeCalendar` / `calendarDays` | boolean / integer | Activity calendar, default 14 days ahead. |

#### Example: what is going viral from small accounts

```json
{
  "lists": ["lowFollowerHits", "highFollowGrowth"],
  "timeWindow": "24h",
  "maxItemsPerList": 100
}
```

#### Example: food trends this week

```json
{
  "lists": ["hotVideos", "hotTopics", "hotAccounts"],
  "timeWindow": "7d",
  "category": "628"
}
```

#### Example: search demand and local events

```json
{
  "lists": ["hotSearches", "risingSearches", "cityEvents"],
  "cityCode": "310000"
}
```

### Output

Video:

```json
{
  "type": "video",
  "list": "lowFollowerHits",
  "listName": "Low-follower hits",
  "rank": 1,
  "videoId": "7694162005930353123",
  "url": "https://www.douyin.com/video/7694162005930353123",
  "title": "我没开玩笑#公安夜色",
  "creatorName": "超级无敌美少女💃",
  "creatorFollowers": 3027,
  "plays": 17887081,
  "likes": 316555,
  "followsGained": 1010,
  "likeRate": 0.017697,
  "followRate": 0.000062,
  "score": 2325364,
  "publishedAt": "2026-10-08T05:18:17.000Z",
  "durationSeconds": 9,
  "timeWindow": "24h"
}
```

Topic:

```json
{
  "type": "topic",
  "list": "hotTopics",
  "rank": 1,
  "topicId": "1606465689061379",
  "name": "续火花",
  "plays": 15108910505,
  "videoCount": 443911,
  "averagePlays": 34035,
  "score": 17144782,
  "trend": [{ "date": "2026-10-07", "value": 15633959 }, { "date": "2026-10-08", "value": 17144782 }]
}
```

Search term:

```json
{
  "type": "search-term",
  "list": "hotSearches",
  "rank": 1,
  "keyword": "独库公路为什么要封闭",
  "score": 228104614,
  "trend": [{ "date": "2026-10-08", "value": 82851814 }, { "date": "2026-10-09", "value": 228104614 }]
}
```

Account:

```json
{
  "type": "account",
  "list": "hotAccounts",
  "rank": 1,
  "secUid": "MS4wLjABAAAA8U_l6rBzmy7bcy6xOJel4v0RzoR_wfAubGPeJimN__4",
  "url": "https://www.douyin.com/user/MS4wLjABAAAA8U_l6rBzmy7bcy6xOJel4v0RzoR_wfAubGPeJimN__4",
  "name": "人民日报",
  "followers": 203325588,
  "newFollowers": 6716,
  "newLikes": 5965930,
  "totalLikes": 19116372756,
  "videoCount": 16019
}
```

Hot event:

```json
{
  "type": "hot-event",
  "list": "cityEvents",
  "rank": 2,
  "title": "赵睿崴脚被队友背下场治疗",
  "hotScore": 5777120,
  "rankChange": 1,
  "videoCount": 1,
  "category": "体育",
  "cityName": "北京",
  "cityCode": "110000",
  "createdAt": "2026-10-10T13:13:23.000Z"
}
```

### Pricing

Pay per event. You pay for rows you receive; a list that fails costs nothing.

| Event | When | Price |
|-------|------|-------|
| Actor start | Once per run | $0.005 |
| Ranking row | Each row of any list | $0.002 |
| Video analytics | Each video's audience, word cloud and daily counts | $0.04 |
| Account analytics | Each account's audience, daily activity and weekly comparison | $0.05 |
| Account search result | Each account found by keyword | $0.002 |
| Calendar event | Each planned activity | $0.002 |
| Hot word detail | 7-day totals added to a hot content word | $0.003 |

A 50-row list costs $0.10. Set a maximum cost per run in the run options and the Actor stops there with what it has.

### FAQ

**Do I need a Douyin account, cookies or a proxy?**
No.

**How do I build a time series?**
Schedule the Actor hourly or daily. Every row has `scrapedAt`, `list` and `rank`, and most rows already carry a `trend` history.

**Why does a video list return fewer rows than I asked for?**
Douyin removes some entries from these lists, so a page of 50 can come back with 35 to 45.

**Can I get the full data of a ranked video or account?**
Each row has a `url`. Pass it to a Douyin video or profile scraper for comments, the full profile and the rest.

**Which videos have analytics?**
Videos large enough for Douyin to compute statistics, which covers everything on the ranking lists. A small or very new video returns nothing and is not charged.

**What is the index in the audience data?**
100 is the platform average. An age group with index 320 is 3.2 times more common among this video's or account's audience than on Douyin overall.

**Which city codes work?**
Standard Chinese administrative codes: `110000` Beijing, `310000` Shanghai, `440100` Guangzhou, `440300` Shenzhen, `330100` Hangzhou, `510100` Chengdu.

### 🤖 For AI Agents & LLM Apps

**Purpose:** Douyin (抖音) trend rankings as structured JSON.

**Minimal input:** `{"lists": ["hotVideos"], "maxItemsPerList": 20}`

**Output:** rows with `type` = `video` | `topic` | `search-term` | `hot-word` | `account` | `hot-event` | `video-analytics` | `account-analytics` | `calendar-event`; list rows come each with `list`, `rank` and `scrapedAt`. Videos: videoId, url, title, creatorName, creatorFollowers, plays, likes, likeRate, followsGained, score, publishedAt. Topics: name, plays, videoCount, trend. Search terms and words: keyword, score, trend. Accounts: secUid, url, name, followers, newFollowers. Events: title, hotScore, rankChange, cityName.

**Behaviors to know:** give at least one of `lists`, `videos`, `accounts`, `accountKeywords` or `includeCalendar`. `category` takes the numeric id as a string (`"628"` = food). Free-plan runs return up to 50 rows per list.

### ⚠️ Disclaimer

This Actor collects publicly available ranking data only. It is not affiliated with, endorsed by, or sponsored by Douyin or ByteDance. You are responsible for using the data in line with applicable laws and Douyin's terms.

### SEO Keywords

douyin trends, douyin hot list, 抖音热点榜, 抖音热榜, douyin rankings api, douyin hot search, douyin trending videos, douyin viral videos, douyin hot topics, douyin trending hashtags, douyin top accounts, china social media trends, douyin trend monitoring

# Actor input Schema

## `lists` (type: `array`):

Which rankings to return. Each list is fetched on its own; every row says which list it came from.

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

Period the video, topic, search, word and account lists cover. Hot accounts have no 1-hour list and use 24 hours instead. Hot events are always live.

## `category` (type: `string`):

Limit the video, topic and account lists to one content category.

## `eventCategory` (type: `string`):

Limit the rising hot events and city hot events lists to one category.

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

Keep only entries matching this keyword. Works on every list except hot accounts.

## `cityCode` (type: `string`):

For 'City hot events': a Chinese administrative code, for example `110000` Beijing, `310000` Shanghai, `440100` Guangzhou, `440300` Shenzhen. Empty returns all cities.

## `maxItemsPerList` (type: `integer`):

Upper bound on rows per list. Lists hold up to about 1,000 entries. Free-plan runs return up to 50 per list.

## `includeHotWordDetails` (type: `boolean`):

For each row of the 'Hot content words' list, add 7-day totals (videos, plays, likes, comments, shares) and up to 20 sample video links. Billed as `hot-word-detail` on top of the row.

## `videos` (type: `array`):

Douyin video links or ids. Each returns one `video-analytics` row: the audience of the people who liked it (gender, age, province, city, city tier, phone brand and price, each with an index against the platform average), the comment word cloud and daily likes, shares and comments. Works for videos big enough to have statistics.

## `accounts` (type: `array`):

Douyin profile links (`https://www.douyin.com/user/MS4w…`). Each returns one `account-analytics` row: follower audience with interests, daily new likes, videos, comments and shares, and last week's averages against the week before.

## `accountKeywords` (type: `array`):

Find accounts by name or Douyin handle. Each result is an `account` row with followers, total likes, video count and the profile link. Billed as `account-search-result`.

## `maxAccountsPerKeyword` (type: `integer`):

Upper bound on accounts per account-search keyword.

## `includeCalendar` (type: `boolean`):

Douyin's planned activities and campaign topics for the coming days, nationwide, as `calendar-event` rows.

## `calendarDays` (type: `integer`):

How far ahead the activity calendar looks.

## Actor input object example

```json
{
  "lists": [
    "hotVideos",
    "hotSearches"
  ],
  "timeWindow": "24h",
  "category": "",
  "eventCategory": "",
  "maxItemsPerList": 50,
  "includeHotWordDetails": false,
  "maxAccountsPerKeyword": 30,
  "includeCalendar": false,
  "calendarDays": 14
}
```

# Actor output Schema

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

One row per ranked entry, told apart by `type` (`video`, `topic`, `search-term`, `hot-word`, `account`, `hot-event`) and `list`. Every row has `rank`; most carry a `trend` history.

# 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 = {
    "lists": [
        "hotVideos",
        "hotSearches"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/douyin-trends-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 = { "lists": [
        "hotVideos",
        "hotSearches",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/douyin-trends-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 '{
  "lists": [
    "hotVideos",
    "hotSearches"
  ]
}' |
apify call memo23/douyin-trends-scraper --silent --output-dataset

```

## MCP server setup

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