# Douyin Index 巨量算数 \[From $2] Keyword Trends, Audience & Topics (`memo23/douyin-index-scraper`) Actor

\[From $2 per 1000 rows] Douyin Index (巨量算数) data: daily keyword trends with search, content and consumption indices, audience by age, gender and city, related words, hot topics, plus topic, video and creator search. Also Toutiao. No login. Lists $2, keyword indices $30 per 1,000.

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

## Pricing

from $30.00 / 1,000 keyword indices

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 Index 巨量算数 — Keyword Trends, Audience & Hot Topics

Market and trend data from **Douyin Index (巨量算数)**, the official index of what people search for and watch on Douyin (抖音) and Toutiao. Get the daily index of any keyword with its search, content and consumption components, see who is behind it, find related words and hot topics, and search the index library for topics, videos and creators. No login, no cookies.

### What it does

| Input | You get | Row type |
|-------|---------|----------|
| Keyword | Daily composite index for 7 to 365 days, the search, content and consumption indices, change against the previous period and a year ago | `keyword-index` |
| `includeAudience` | Age, gender, province, city, city tier and interests behind the keyword, each with an index against the platform average | `keyword-audience` |
| `includeRelatedWords` | Words that go with the keyword in content and in search, with sample videos | `related-word` |
| `includeHotWords` | Current hot search words | `hot-word` |
| `includeHotTopics` | Real-time hot topics and the fastest rising ones | `hot-topic` |
| Topic keyword | Hashtags with their index, video count, likes and plays | `topic` |
| Video keyword | Up to 1,000 videos with likes, video index and flags for low-follower hits | `video` |
| Creator keyword | Creators with followers, total likes and category | `creator` |
| Video link or ID | The video's daily index, likes, comments and shares gained in the period, its percentile against all videos, and who watched it | `video-index` |
| Creator (user ID or a video link) | Totals, what the last 7 days added, daily averages, the followers' profile, 20 similar creators, best videos | `creator-index` |
| Content category | 30 days of publishing, viewing and interaction trends, which video lengths work, who creates and who watches | `category-insight` |
| `includeReports` / report keyword | Trend and industry reports with introduction, view and download counts and the PDF link | `report` |

### How It Works

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

### Input

| Field | Type | Description |
|-------|------|-------------|
| `keywords` | `string[]` | Keywords for the index, usually Chinese. |
| `timeRangeDays` | integer | Days of daily index, 7 to 365. Default 30. The index lags two days. |
| `platform` | string | `douyin` (default) or `toutiao`. |
| `includeAudience` | boolean | Audience row per keyword, for the last full week. |
| `includeRelatedWords` / `maxRelatedWords` | boolean / integer | Related-word rows per keyword. Default 50. |
| `includeHotWords` | boolean | Current hot search words. |
| `includeHotTopics` | boolean | 30 current and 30 rising hot topics. |
| `topicKeywords` / `maxTopicsPerKeyword` | `string[]` / integer | Hashtag search. Default 50, up to 100. |
| `videoKeywords` / `maxVideosPerKeyword` | `string[]` / integer | Video search. Default 100, up to 1,000. |
| `videoCategory` | string | One of 38 content categories for video search. |
| `videoPublishedWithin` | string | `any`, `3d`, `7d` or `30d`. |
| `creatorKeywords` | `string[]` | Creator search by nickname, up to 20 per keyword. |
| `videoUrls` | `string[]` | Video links or IDs for a `video-index` row each. Uses `timeRangeDays`. |
| `creators` | `string[]` | Numeric user IDs (uid), or a link to any video of the creator. `video` and `video-index` rows carry the uid as `creatorUid`. |
| `categories` | `string[]` | Content category IDs, picked from a list in the input form (for example `628` Food, `629` Travel, `608` Games). |
| `includeReports` / `reportKeywords` / `maxReports` | boolean / `string[]` / integer | Trend reports, newest first, or matching a keyword. Default 16. |

#### Example: compare two keywords over a quarter

```json
{ "keywords": ["咖啡", "奶茶"], "timeRangeDays": 90, "includeAudience": true }
```

#### Example: what goes with a keyword, and which videos are winning

```json
{
  "keywords": ["露营"],
  "includeRelatedWords": true,
  "videoKeywords": ["露营"],
  "videoPublishedWithin": "7d",
  "maxVideosPerKeyword": 200
}
```

#### Example: today's hot topics

```json
{ "includeHotTopics": true, "includeHotWords": true }
```

### Output

Keyword index:

```json
{
  "type": "keyword-index",
  "keyword": "咖啡",
  "platform": "douyin",
  "from": "2026-09-08",
  "to": "2026-10-08",
  "averageIndex": 1756426,
  "peakIndex": 1983028,
  "peakDate": "2026-09-26",
  "searchIndex": 45744663,
  "contentIndex": 3883586,
  "consumptionIndex": 4820963,
  "searchChangeVsPreviousPeriodPercent": -7.15,
  "searchChangeVsLastYearPercent": 24.27,
  "daily": [{ "date": "2026-09-08", "index": 1756097 }, { "date": "2026-09-09", "index": 1665857 }]
}
```

Keyword audience:

```json
{
  "type": "keyword-audience",
  "keyword": "咖啡",
  "weekFrom": "2026-09-28",
  "weekTo": "2026-10-04",
  "gender": [{ "name": "女", "percent": 54, "index": 136.1 }, { "name": "男", "percent": 46, "index": 76.3 }],
  "age": [{ "name": "31-40", "percent": 31.98, "index": 97.5 }, { "name": "24-30", "percent": 21.41, "index": 134.5 }],
  "city": [{ "name": "广州", "percent": 2.4, "index": 123.3 }]
}
```

Related word, hot topic, topic, video and creator:

```json
{ "type": "related-word", "keyword": "咖啡", "relation": "content", "relatedWord": "拿铁", "rank": 1, "searchIndex": 2888241, "scoreChange": "-1.87%" }
```

```json
{ "type": "hot-topic", "board": "rising", "rank": 1, "topic": "国庆特种兵结算画面", "topicIndex": 10539530, "videoCount": 2, "plays": 26445086, "category": "话题互动" }
```

```json
{ "type": "topic", "searchKeyword": "咖啡", "topic": "瑞幸咖啡", "topicIndex": 4468467, "videoCount": 37840, "likes": 3996522, "plays": 496126186 }
```

```json
{ "type": "video", "searchKeyword": "咖啡", "title": "猫屎咖啡生产流程#咖啡#工艺 #解压", "creatorFollowers": 10751, "likes": 35381, "videoIndex": 356936, "isLowFollowerHit": true, "url": "https://www.douyin.com/video/7693862284268059584" }
```

```json
{ "type": "creator", "searchKeyword": "咖啡", "name": "咖啡", "followers": 2794853, "totalLikes": 20255185, "videoCount": 222, "category": "艺术" }
```

### Pricing

Pay per event. You pay for rows you receive; a keyword the index does not track costs nothing.

| Event | When | Price |
|-------|------|-------|
| Actor start | Once per run | $0.005 |
| Keyword index | Each keyword's index row | $0.03 |
| Keyword audience | Each keyword's audience row | $0.02 |
| Related word | Each related word | $0.002 |
| Hot word | Each hot search word | $0.002 |
| Hot topic | Each hot topic | $0.002 |
| Topic | Each hashtag found | $0.002 |
| Video | Each video found | $0.002 |
| Creator | Each creator found | $0.002 |
| Video index | Each video's index row | $0.03 |
| Creator index | Each creator's index row | $0.03 |
| Category insight | Each content category's row | $0.04 |
| Report | Each trend report | $0.002 |

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 Index account?**
No.

**What do the index numbers mean?**
They are Douyin's own weighted measures. The composite index tracks a keyword's overall heat, the search index how much it is searched, the content index how much is posted about it, and the consumption index how much that content is watched. Compare them over time and between keywords; they are not raw counts.

**What is the index in the audience data?**
100 is the platform average. A group with index 136 is 36% more common behind this keyword than on Douyin overall.

**Where do I get a creator's numeric user ID?**
Paste a link to any of the creator's videos into `creators` instead, or take `creatorUid` from a `video-index` row.

**Why did a keyword return nothing?**
The index tracks keywords with enough volume. A rare keyword returns no row and is not charged.

**Why do audience and related words cover one week?**
Douyin Index serves them per full Monday-to-Sunday week, so the Actor uses the last complete one.

**How long do the cover links work?**
Douyin signs the `coverUrl` of `video` rows for only a few hours, so download covers right after the run if you need them. Report covers have no expiry. For lasting video covers, pass the video links to the [Douyin Scraper](https://apify.com/memo23/douyin-scraper) with `downloadCovers` on.

### 🤖 For AI Agents & LLM Apps

**Purpose:** Douyin keyword demand, audience and trend data as structured JSON.

**Minimal input:** `{"keywords": ["咖啡"]}`

**Output:** rows with `type` = `keyword-index` | `keyword-audience` | `related-word` | `hot-word` | `hot-topic` | `topic` | `video` | `creator`. keyword-index: keyword, from, to, averageIndex, peakIndex, searchIndex, contentIndex, consumptionIndex, percent changes, daily\[]. keyword-audience: age, gender, province, city, cityTier, interests as {name, percent, index}.

**Behaviors to know:** keywords should be Chinese. Percent fields are 0 to 100. `videoCategory` takes the numeric id as a string (`"628"` = food). Free-plan runs return a sample of each list.

### ⚠️ Disclaimer

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

### SEO Keywords

douyin index, 巨量算数, 抖音指数, douyin keyword trends, douyin search volume, douyin keyword research, china keyword trends, douyin audience insights, douyin hot topics, toutiao index, china market research, douyin trend analysis

# Actor input Schema

## `keywords` (type: `array`):

Keywords to get the index for (usually Chinese). Each returns a `keyword-index` row: the daily composite index, the search, content and consumption indices, and their change against the previous period and a year ago.

## `timeRangeDays` (type: `integer`):

How many days of daily index to return. The index lags two days.

## `platform` (type: `string`):

Which platform's index to read.

## `includeAudience` (type: `boolean`):

For each keyword, add a `keyword-audience` row: age, gender, province, city, city tier and interests of the people behind the keyword, each with an index against the platform average, for the last full week.

## `includeRelatedWords` (type: `boolean`):

For each keyword, add `related-word` rows: the words that go with it in content and in search, with relation score, search index and sample videos, for the last full week.

## `maxRelatedWords` (type: `integer`):

Upper bound on related-word rows per keyword.

## `includeHotWords` (type: `boolean`):

Return the current hot search words with their index and growth, as `hot-word` rows.

## `includeHotTopics` (type: `boolean`):

Return Douyin's real-time hot topics and the fastest rising ones, 30 each, as `hot-topic` rows with index, video count and plays.

## `topicKeywords` (type: `array`):

Find hashtags by keyword. Each result is a `topic` row with its index, video count, likes and plays for the last full week.

## `maxTopicsPerKeyword` (type: `integer`):

Upper bound on topic rows per keyword.

## `videoKeywords` (type: `array`):

Find videos in the index library by keyword. Each result is a `video` row with likes, video index, creator followers and flags for low-follower hits, high like rate, high completion and high follower growth.

## `videoCategory` (type: `string`):

Limit video search to one content category.

## `videoPublishedWithin` (type: `string`):

Limit video search by publish date.

## `maxVideosPerKeyword` (type: `integer`):

Upper bound on video rows per keyword.

## `creatorKeywords` (type: `array`):

Find creators by nickname. Each result is a `creator` row with followers, total likes, video count, category and profile link (up to 20 per keyword).

## `videoUrls` (type: `array`):

Douyin video links or video IDs. Each returns a `video-index` row: the video's daily index over the time range, likes, comments and shares gained with the change against the period before, its percentile against all indexed videos, and the age, gender, region and interests of its viewers.

## `creators` (type: `array`):

Numeric Douyin user IDs (uid), or a link to any video of the creator. Each returns a `creator-index` row: totals, what the last 7 days added, daily averages by week and month, the followers' age, gender, region, interests and phone brand, 20 similar creators and the best videos of the time range.

## `categories` (type: `array`):

Each chosen category returns a `category-insight` row for the last 30 days: publishing, viewing and interaction trends, which video lengths work (with example videos), and the profile of the category's creators and viewers.

## `includeReports` (type: `boolean`):

Return the industry and trend reports published on the Index site, newest first: title, industries, introduction, view and download counts and the PDF link.

## `reportKeywords` (type: `array`):

Search the reports by keyword (for example 美妆 or 汽车). Leave empty to list the latest reports.

## `maxReports` (type: `integer`):

Upper bound on report rows per keyword, or in total when no keyword is given. A page holds 16.

## Actor input object example

```json
{
  "keywords": [
    "咖啡"
  ],
  "timeRangeDays": 30,
  "platform": "douyin",
  "includeAudience": false,
  "includeRelatedWords": false,
  "maxRelatedWords": 50,
  "includeHotWords": false,
  "includeHotTopics": false,
  "maxTopicsPerKeyword": 50,
  "videoCategory": "",
  "videoPublishedWithin": "any",
  "maxVideosPerKeyword": 100,
  "includeReports": false,
  "maxReports": 16
}
```

# Actor output Schema

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

Rows told apart by `type`: `keyword-index`, `keyword-audience`, `related-word`, `hot-word`, `hot-topic`, `topic`, `video` and `creator`.

# 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 = {
    "keywords": [
        "咖啡"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/douyin-index-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 = { "keywords": ["咖啡"] }

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

```

## MCP server setup

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