# Douyin & Weibo Hot Search Scraper: China Trending Topics (`quarra/douyin-weibo-hot-search-scraper`) Actor

China's hot search lists in one run: Douyin, Weibo, Baidu and Toutiao. Rank, heat, badge, category, link and cover for every topic, rank changes since your last run, optional English translation. No login. Lists that could not be read are not charged.

- **URL**: https://apify.com/quarra/douyin-weibo-hot-search-scraper.md
- **Developed by:** [Quarra Labs](https://apify.com/quarra) (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 $0.50 / 1,000 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 & Weibo Hot Search Scraper: China Trending Topics

What China is talking about right now, from the four lists that set the agenda: **Douyin hot search (抖音热榜)** with its rising topics, **Weibo hot search (微博热搜)**, **Baidu hot search (百度热搜)** and **Toutiao hot list (头条热榜)**. One run reads each list once, as it stands at that minute, and returns one clean record per topic: rank, heat score, badge, category, link, cover image, and how the topic moved since your last run. English translation is one switch away.

No login, no account, nothing to set up. A run takes a few seconds.

### Quick start

1. Keep the default lists (Douyin and Weibo) or add Baidu and Toutiao.
2. Click **Start**. About 105 topics come back in under 15 seconds.
3. Schedule it (every hour, every 10 minutes) to follow how topics rise and fall: each record says its previous rank and whether it is new.

### What it is used for

- **Social listening and PR in China**: see the moment a brand, a product or an incident reaches a national list.
- **Market research and trading signals**: Weibo and Douyin lists move before the news cycle does.
- **Content planning**: what Douyin users search for this hour, with the number of videos attached to each topic.
- **Datasets for research and AI**: a timestamped, comparable snapshot of four platforms, every time you run it.

### What you get

| Field | Douyin | Weibo | Baidu | Toutiao |
|---|---|---|---|---|
| `rank` (1 = top) | yes | yes | yes | yes |
| `heat` (the platform's own score) | hot value | heat | hot score | hot value |
| `label` (hot, new, boiling...) | | yes | yes | yes |
| `category` | | yes (Chinese) | | yes |
| `description` (summary) | | | yes | |
| `imageUrl` (cover) | yes | | yes | yes |
| `videoCount` | yes | | | |
| `onListSince` | yes | yes | | |
| Rising topics (`list: "rising"`) | yes (about 5) | | | |
| Pinned topics (`isPinned`) | | yes | yes | yes |

Every record also has `title`, `url` (the topic page or its search results on the platform), `scrapedAt`, and, with rank tracking on, `previousRank`, `rankChange` and `isNew`. A field the platform does not show is `null`, never a made-up `0`.

### Inputs

| Input | Default | What it does |
|---|---|---|
| `boards` | `["douyin", "weibo"]` | Lists to read: `douyin`, `weibo`, `baidu`, `toutiao`. |
| `maxItemsPerBoard` | 50 | Ranked topics from the top of each list (the lists hold about 50). |
| `includeRising` | true | Douyin's rising topics, on top of the ranked ones. |
| `includePinned` | true | Topics pinned above the ranking (they have no rank). |
| `includePromoted` | false | Paid placements inside Weibo's list, marked `isPromoted`. |
| `translateToEnglish` | false | Adds `titleEnglish` (and `descriptionEnglish` for Baidu). Paid Apify plans only. |
| `trackRankChanges` | true | Compares each list with your last run under the same `historyKey` (runs with this option off are not counted). |
| `historyKey` | `default` | Give each schedule its own key if you run several. |
| `maxItems` | none | Total topics delivered by the run, counted exactly. |

Example:

```json
{
  "boards": ["douyin", "weibo", "baidu", "toutiao"],
  "maxItemsPerBoard": 20,
  "translateToEnglish": true
}
```

### Output

A Weibo topic, with English translation and rank tracking:

```json
{
  "board": "weibo",
  "platform": "Weibo",
  "list": "hot",
  "rank": 1,
  "title": "日本出现取消吃饭现象",
  "titleEnglish": "A phenomenon of skipping meals emerges in Japan",
  "heat": 1669936,
  "label": "hot",
  "category": "海外新闻",
  "url": "https://s.weibo.com/weibo?q=%23%E6%97%A5%E6%9C%AC%E5%87%BA%E7%8E%B0%E5%8F%96%E6%B6%88%E5%90%83%E9%A5%AD%E7%8E%B0%E8%B1%A1%23",
  "onListSince": "2026-10-18T12:23:22Z",
  "isPinned": false,
  "isPromoted": false,
  "previousRank": 1,
  "rankChange": 0,
  "isNew": false,
  "previousSnapshotAt": "2026-10-18T15:49:31Z",
  "translationStatus": "ok",
  "scrapedAt": "2026-10-18T15:49:56Z"
}
```

A Douyin topic:

```json
{
  "board": "douyin",
  "platform": "Douyin",
  "list": "hot",
  "rank": 1,
  "title": "LOUD战胜VIT夺冠",
  "heat": 12156640,
  "url": "https://www.douyin.com/hot/2701312",
  "imageUrl": "https://p26-sign.douyinpic.com/tos-cn-p-0015c000-ce/o8DEuSqdBy9Bi5SAieA38EIBTwXo0XjBzWfwa3~noop.jpeg?...",
  "videoCount": 11,
  "onListSince": "2026-10-18T06:35:37Z",
  "topicId": "2701312",
  "scrapedAt": "2026-10-18T15:49:04Z",
  "listUpdatedAt": "2026-10-18T15:47:54Z"
}
```

The **Overview** view of the dataset shows one line per topic (platform, rank, topic, English, heat, badge, change, link). The run summary (topics per list, lists not read and why, why the run stopped) is the `OUTPUT` record of the key-value store.

### Pricing

Pay per topic delivered. Lists that could not be read cost nothing (the run start fee below still applies).

| Event | Price |
|---|---|
| Topic | $0.50 per 1,000 ($0.0005 each) |
| Translated topic (instead of a topic) | $1.00 per 1,000 ($0.001 each) |
| Run start | $0.005 per run (one per GB of memory; the default is 256 MB) |

A default run (Douyin and Weibo, about 105 topics) costs about **$0.06**; all four lists, about $0.11. Pinned topics count as topics; promoted ones only if you include them. If a translation fails, or a topic has nothing to translate, it is charged as a plain topic.

### Limits

- Each list is read as it stands at that minute: to follow a topic over time, schedule the Actor.
- Douyin's other boards (entertainment, society, challenges) are not covered: we only return lists we can read reliably for every run.
- Douyin and Toutiao cover links (`imageUrl`) are signed by the platform and expire after a while: download them the same day if you need them.
- Weibo categories are in Chinese, as Weibo writes them.
- The Actor returns the lists, not the posts or videos behind each topic. For those, see the related tools below.

### FAQ

**Is it legal?** The Actor reads public lists that anyone can open without an account, and returns no personal data. Check the rules that apply to your use of the data.

**How fresh is the data?** As fresh as the platforms: Douyin and Baidu also return when they last updated their list (`listUpdatedAt`).

**How does rank tracking work?** At the end of each run, the Actor saves each list's ranks in a key-value store of your account. The next run with the same `historyKey` compares against it. Nothing leaves your account.

**Is anything different on Apify's free plan?** The English translation option is available on paid Apify plans only; on the free plan the run collects everything else as usual and charges nothing for translation.

**Does the Actor send anything to Quarra?** Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.

### Related tools from Quarra

- [Douyin Transcript Scraper](https://apify.com/quarra/douyin-transcript-scraper): the words spoken in Douyin videos, with English translation.
- [Douyin Comments Scraper](https://apify.com/quarra/douyin-comments-scraper): comments and replies under Douyin videos, with likes and optional translation.
- [Weibo Scraper](https://apify.com/quarra/weibo-scraper): Weibo posts, comments and profiles.
- [Bilibili Scraper](https://apify.com/quarra/bilibili-scraper): Bilibili videos, comments and danmaku.

# Actor input Schema

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

Which lists to read. Each list is read once per run, as it stands at that minute.

## `maxItemsPerBoard` (type: `integer`):

Ranked topics taken from the top of each list (the lists hold about 50). Pinned topics and Douyin's rising topics come on top of this number when they are included.

## `includeRising` (type: `boolean`):

Also return the topics Douyin shows as rising right now (usually 5), with list = "rising".

## `includePinned` (type: `boolean`):

Topics the platform pins above the ranking (official topics on Weibo, Baidu and Toutiao). They have no rank.

## `includePromoted` (type: `boolean`):

Paid placements inside Weibo's list, marked isPromoted. Left out by default.

## `translateToEnglish` (type: `boolean`):

Adds titleEnglish (and descriptionEnglish for Baidu). A translated topic is charged as a translated topic instead of a topic. Available on paid Apify plans only.

## `trackRankChanges` (type: `boolean`):

Compares each list with the last run that had this option on, under the same history key: previousRank, rankChange (positive = moved up) and isNew. Useful on a schedule.

## `historyKey` (type: `string`):

Name of the history the comparison uses. Give each schedule its own key if you run several (letters, digits, - and \_).

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

Total number of topics delivered by the run, counted exactly. Empty = no limit beyond the lists themselves.

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

Connection. Keep the default (automatic). Costs are included in the price.

## Actor input object example

```json
{
  "boards": [
    "douyin",
    "weibo"
  ],
  "maxItemsPerBoard": 50,
  "includeRising": true,
  "includePinned": true,
  "includePromoted": false,
  "translateToEnglish": false,
  "trackRankChanges": true,
  "historyKey": "default",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every topic with all its fields.

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

One line per topic: platform, rank, title, heat, rank change.

## `summary` (type: `string`):

Topics per list, lists not read and why, why the run stopped.

# 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 = {
    "boards": [
        "douyin",
        "weibo"
    ],
    "maxItemsPerBoard": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

# Run the Actor and wait for it to finish
run = client.actor("quarra/douyin-weibo-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 '{
  "boards": [
    "douyin",
    "weibo"
  ],
  "maxItemsPerBoard": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call quarra/douyin-weibo-hot-search-scraper --silent --output-dataset

```

## MCP server setup

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