# Douyin Hot Search Scraper (`kjames2001/douyin-hot-search`) Actor

Scrape Douyin (抖音) trending hot search topics in real-time. Get trending keywords, hot values, video counts, and cover images. No login required — uses public API.

- **URL**: https://apify.com/kjames2001/douyin-hot-search.md
- **Developed by:** [James Huang](https://apify.com/kjames2001) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 0 monthly users, 83.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 🔥 Douyin Hot Search Scraper | 抖音热搜 & Chinese Short Video Trends API

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue)](https://apify.com/store)
[![Douyin](https://img.shields.io/badge/Douyin-抖音-red)](https://www.douyin.com/)
[![Node.js 20](https://img.shields.io/badge/Node.js-20-green)](https://nodejs.org)
[![Pay Per Event](https://img.shields.io/badge/Pricing-Pay_per_Event-orange)](https://apify.com/pricing)

> Get **douyin hot search** trending topics in real-time. Scrape **抖音热搜** (Douyin trending keywords), hot values (热度值), video counts, and cover images. The most reliable **douyin scraper** for **chinese short video trends** and **tiktok china trending** topics — no login, no API key required. Single API call returns ~50 trending topics in under 5 seconds.

### Features

- **Douyin Hot Search Topics** — Get the current **抖音热搜** trending keywords in real-time
- **Hot Values** — Each trending topic includes its hot value (热度值) for trend intensity
- **Video Counts** — Number of videos and discussion videos for each trending topic
- **Cover Images** — Cover image URLs for each trending topic
- **Rank Position** — Each topic includes its ranking position number
- **Event Timestamps** — When each trending topic was first detected
- **No Login Required** — Uses Douyin's public hot search API, no account needed
- **No API Key Required** — Access the Douyin trending API without authentication
- **Fast** — All trending topics in under 5 seconds
- **Structured JSON Output** — Ready for dashboards, ML pipelines, or databases
- **Proxy Support** — Optional Apify proxy for access from outside China

### Use Cases

- **Trend Monitoring** — Track what's trending on **抖音** (Douyin) in real-time
- **Content Strategy** — Identify viral **douyin trending** topics for content creation
- **Market Research** — Understand what Chinese audiences are searching for right now
- **Social Listening** — Monitor **tiktok china trending** topics and discussions
- **Competitive Analysis** — Track competitor mentions in **douyin hot search**
- **Academic Research** — Study **chinese short video trends** and digital culture
- **SEO & Marketing** — Discover trending keywords for Chinese market campaigns
- **News Aggregation** — Build real-time news feeds from **douyin api** trending data
- **Brand Monitoring** — Check if your brand appears in Douyin's hot search
- **Influencer Discovery** — Identify trending topics to find relevant KOLs

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `proxyConfiguration` | object | No | Apify proxy | Proxy config (residential recommended outside China) |

### Output Fields

#### Trending Topic Object

| Field | Type | Description |
|---|---|---|
| `rank` | int | Ranking position (1-based) |
| `word` | string | Trending topic keyword/phrase |
| `hotValue` | int | Hot value (热度值) — higher = more trending |
| `sentenceId` | string | Douyin sentence ID for the topic |
| `wordType` | int | Topic type code |
| `eventTime` | string | ISO timestamp when topic was first detected |
| `groupId` | string | Douyin group ID for the topic |
| `videoCount` | int | Number of related videos |
| `discussVideoCount` | int | Number of discussion videos |
| `coverUrl` | string | Cover image URL for the topic |
| `activeTime` | string | Active time of the trending list (from API) |
| `trendingDesc` | string | Trending description (e.g., "实时上升热点") |
| `scrapedAt` | string | ISO timestamp of scraping |

### How It Works

1. **Single API call** — The actor calls Douyin's public hot search API endpoint
2. **Parse response** — Extracts ~50 trending topics ordered by hot value (descending)
3. **Structure & enrich** — Each topic is enriched with rank, hot value, video counts, and cover images
4. **JSON output** — Results saved to Apify dataset, ready for consumption

### Pricing

This Actor uses **pay-per-event** pricing:

| Event | Cost |
|---|---|
| Actor start (1GB RAM) | $0.005 |
| Topic scraped | $0.002 |

**Example**: 50 trending topics = $0.005 + (50 × $0.002) = **$0.105**

### Technical Details

This **douyin scraper** uses Douyin's public hot search API:
- Hot Search: `https://www.douyin.com/aweme/v1/web/hot/search/list/`

No headless browser is needed. The scraper sends proper headers (Windows Chrome User-Agent + Referer) to access the public API. No login or cookies are required.

#### Runtime & SDK
- **Runtime:** Node.js 20
- **SDK:** Apify SDK v3 + Crawlee v3
- **Execution:** Single API call, no browser overhead

#### Requirements

- Works from any region (residential proxies recommended outside China)
- No Douyin account needed
- No API key needed

#### API Notes

- The Douyin hot search API returns ~50 trending topics
- Topics are ordered by hot value (descending)
- The API updates frequently (every few minutes)
- Response includes `active_time` showing when the list was last updated

### Why Use This vs Alternatives?

| Feature | This Actor | Douyin Scraper (videos) | Douyin Search Scraper | Douyin Analytics Scraper |
|---|---|---|---|---|
| Hot search ranking (抖音热搜) | ✅ | ❌ | ❌ | ✅ |
| Hot values (热度值) | ✅ | ❌ | ❌ | ✅ |
| Video counts per topic | ✅ | ❌ | ❌ | ❌ |
| Cover images | ✅ | ❌ | ❌ | ❌ |
| No login required | ✅ | ❌ | ✅ | ✅ |
| Single API call (fast) | ✅ | ❌ | ❌ | ✅ |
| Cover image URLs | ✅ | ❌ | ❌ | ❌ |
| Event timestamps | ✅ | ❌ | ❌ | ❌ |

### FAQ

<details>
<summary><b>How often does the Douyin hot search update?</b></summary>
The Douyin hot search API updates frequently — typically every few minutes. The response includes an `activeTime` field showing when the list was last updated. Run periodically for continuous monitoring.
</details>

<details>
<summary><b>What is a hot value (热度值)?</b></summary>
Hot value is Douyin's metric for trend intensity. Higher values indicate more trending topics. Topics are ordered by hot value descending in the output.
</details>

<details>
<summary><b>Do I need a Douyin account or API key?</b></summary>
No. The actor uses Douyin's public hot search API endpoint with proper headers. No login, no cookies, no API key required.
</details>

<details>
<summary><b>Do I need a proxy?</b></summary>
The API works from any region. Residential proxies are recommended if you experience access issues from outside China.
</details>

<details>
<summary><b>What's the difference between Douyin and TikTok?</b></summary>
Douyin (抖音) is the Chinese version of TikTok, operated by ByteDance for the Chinese market. It has different trending topics, content, and user base. This actor scrapes Douyin's hot search, not TikTok's.
</details>

### Keywords

`douyin hot search` · `抖音热搜` · `douyin trending` · `抖音热搜榜` · `douyin scraper` · `chinese short video trends` · `tiktok china trending` · `douyin api` · `douyin hot search api` · `抖音趋势` · `douyin trending topics` · `douyin trends api` · `douyin hot value` · `热度值` · `china social media trends` · `douyin trending keywords` · `douyin rank tracker` · `chinese video trends` · `douyin real-time trends` · `抖音实时热搜` · `douyin trending list` · `china market research` · `douyin monitoring` · `chinese social listening` · `douyin public opinion` · `抖音舆情` · `bytedance trends`

# Actor input Schema

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

Apify proxy configuration. Use residential proxies if scraping from outside China.

## Actor input object example

```json
{
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kjames2001/douyin-hot-search").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 = { "proxyConfiguration": { "useApifyProxy": True } }

# Run the Actor and wait for it to finish
run = client.actor("kjames2001/douyin-hot-search").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call kjames2001/douyin-hot-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=kjames2001/douyin-hot-search",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Douyin Hot Search Scraper",
        "description": "Scrape Douyin (抖音) trending hot search topics in real-time. Get trending keywords, hot values, video counts, and cover images. No login required — uses public API.",
        "version": "0.1",
        "x-build-id": "3Gw5aZXIsnotYaaEj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kjames2001~douyin-hot-search/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kjames2001-douyin-hot-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/kjames2001~douyin-hot-search/runs": {
            "post": {
                "operationId": "runs-sync-kjames2001-douyin-hot-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/kjames2001~douyin-hot-search/run-sync": {
            "post": {
                "operationId": "run-sync-kjames2001-douyin-hot-search",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy configuration. Use residential proxies if scraping from outside China."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
