# Douyin Scraper: Hot Search, Videos, Creators & Transcripts (`zaiq/douyin-scraper`) Actor

Douyin (抖音, China's TikTok) without login: the live hot search list (热榜) with heat and video counts; any video or photo post by link with likes, comments, shares, saves, author, music, hashtags and video file; transcripts; creator profiles with followers and likes.

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

## Pricing

from $4.00 / 1,000 hot search terms

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 Scraper: hot search, videos, transcripts and creators (抖音, no login)

Get **Douyin (抖音, China's TikTok) data without an account**: the live **hot search list (热榜)** with each term's **heat** and video count; **any video or photo post by link** with **likes, comments, shares and saves**, the author, music, hashtags, cover and video file; **what is said in it (transcript)**; and **creator profiles** with **followers, likes received** and post count.

Built for **China social listening**, **trend tracking**, **brand monitoring** and **KOL (influencer) research**. Chinese text is kept as written; transcripts are in the language spoken.

### What you get

| Field | What it holds |
|---|---|
| Hot search rows | `rank`, `term`, `heat`, `videoCount`, `list` (hot or rising), `since`, `cover`, `url` |
| Video rows | `awemeId`, `type` (video or photos), `text`, `createdAt`, `durationSeconds`, `likes`, `comments`, `shares`, `saves`, `hashtags`, `author` (name, Douyin ID, bio, posts, link), `music`, `series`, `cover`, `videoUrl`, `images`, `url`, and, when asked, `transcript`, `hook` (opening line), `segments` and `srt` (timestamps), `translation` |
| Creator rows | `name`, `douyinId`, `bio`, `followers`, `following`, `likesReceived`, `posts`, `verified`, `series`, `avatar`, `url` |

### What people use it for

- **Trend tracking:** save Douyin's hot list every hour and see what rises, how hot it gets and for how long
- **Video benchmarks:** likes, comments, shares and saves of any video, for content and campaign reports
- **KOL research:** creator profiles with followers and likes received
- **Transcripts:** what is said in Douyin videos up to 10 minutes, with timestamps, SRT and an optional English translation
- **Media monitoring:** the hot topics of the day with their heat and video counts
- **China market research:** what Chinese viewers watch and talk about, as it happens

### How to use it

1. Keep **Hot search list** on (or off).
2. Add **video links** (douyin.com/video/..., or v.douyin.com share links), and turn on **transcripts** if you want them.
3. Add **creator links** for profiles, then click **Start**. Schedule it hourly to track the hot list.

### Input

| Field | Example | Notes |
|---|---|---|
| Hot search list (热榜) | on | The 50 terms on the list now, plus rising ones |
| Videos | `https://www.douyin.com/video/<id>` | Links, share links or ids |
| Transcripts | off | Videos up to 10 minutes, $0.006 per started minute |
| Timestamps / Translate to | on / English | Segments and SRT; optional translation; no extra charge |
| Creators | `https://www.douyin.com/user/<id>` | Links or sec_uids |

### Output

Each result is one row in the run's dataset (download it as JSON, CSV, Excel, XML or HTML, or read it through the API). An example row (values shortened):

```json
{
  "kind": "video",
  "awemeId": "7692394891321576714",
  "type": "video",
  "text": "《鬼才谈恋爱·归处》 没积分了弹尽粮绝了朋友们，这集只做一个承上启下的剧情，祝大家假期快乐！",
  "createdAt": "2026-10-03T11:01:02Z",
  "durationSeconds": 193,
  "likes": 6594,
  "comments": 224,
  "shares": 319,
  "saves": 1526,
  "hashtags": [
    "LibTV",
    "LibTV创作者成长计划",
    "AI短片"
  ],
  "author": {
    "name": "示例创作者",
    "douyinId": "…",
    "posts": 6
  },
  "music": {
    "title": "原声",
    "author": "示例创作者"
  },
  "series": "鬼才谈恋爱",
  "url": "https://www.douyin.com/video/7692394891321576714",
  "transcript": "阿离。吓到了吧？你没事吧？怎么到这的？不知道，眼睛一闭一睁，就听到你叫我了。走，…",
  "hook": "阿离。",
  "translation": "A-Li. Were you scared? Are you okay? How did you get here? I…"
}
```

A record named `SUMMARY` in the run's key-value store says what each input returned, with any notes (for example a deleted video), what was charged and how much traffic the run used. The example row is from a run on 17 October 2026 (creator name removed; transcript and translation shortened).

### Pricing

- **$0.005 per hot search term** (the full list of about 55 is $0.28)
- **$0.003 per video**
- **$0.005 per creator profile**
- **$0.006 per started minute** of transcript, with timestamps, SRT, the opening line and the translation (silent and failed ones are free)
- Videos and creators that don't exist or that Douyin withholds are free
- The AI model that writes the speech down (Google's Gemini Flash) is billed by Apify at its exact cost: about $0.004 a minute with timestamps and translation on paid Apify plans (measured 17 October 2026); Apify charges free-plan accounts 10 times that

What typical jobs cost at the list price:

| Job | Cost |
|---|---|
| The hot search list, once | $0.28 |
| The hot list every hour for a day | $6.60 |
| 50 videos | $0.15 |
| 10 one-minute videos with transcripts | $0.09 |
| 50 creator profiles | $0.25 |

On Apify's Scale and Business plans the per-event prices are lower (Store discounts). Set **Maximum cost per run** and the Actor stops cleanly when it is reached: you never pay more than that.

### Tips

- Schedule hourly runs with only the hot list on: a time series of China's top topics.
- Paste v.douyin.com share links as they are: they are followed to the video.
- If Douyin withholds some videos in a run, run them again later: they are not charged.

### Use it through the API

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("zaiq/douyin-scraper").call(run_input={"hotSearch": true})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

**JavaScript**

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('zaiq/douyin-scraper').call({"hotSearch": true});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**HTTP (one call, results back)**

```bash
curl -X POST 'https://api.apify.com/v2/acts/zaiq~douyin-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{"hotSearch": true}'
```

### Integrations and schedules

- **Schedules:** run it every hour, day or week from the Apify Console (Schedules) and keep a history of results.
- **Make, Zapier, n8n, Google Sheets, Slack, Airtable:** connect it through Apify's integrations, or send each finished run to a **webhook**.
- **Datasets:** results stay in the run's dataset; export them or read them by API whenever you need them.

### Use it with AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) to Claude, ChatGPT, Cursor, VS Code or any MCP client. The agent can find this Actor and run it for you: ask it for "what is trending on Douyin right now, with each topic's heat". AI agents can also pay for runs directly through Apify's agentic payments.

### Limits

- Douyin's keyword search and a creator's video list need a Douyin login, so they are not offered: use the hot list, video links and profiles.
- Comments and related videos are not offered: Douyin does not show them reliably to signed-out visitors from servers.
- Douyin limits how often one address can read it; videos it withholds are listed in the run's SUMMARY and not charged.
- Transcripts: videos up to 10 minutes, written down in full (in 2-minute pieces) by Google's newest Gemini Flash model from the video's own sound track; Mandarin in Simplified characters.

### FAQ

**Do I need a Douyin account?**

No. Everything is what Douyin shows a signed-out visitor.

**Can I search Douyin by keyword?**

No: Douyin asks for a login to search. Start from the hot list or video links.

**Is the text translated?**

Captions are kept as written. Transcripts are in the language spoken, and you can add a translation into English or 18 other languages.

**How fresh is the hot list?**

Live at run time.

**Why are some videos missing?**

Deleted, private and region-locked videos are not shown to visitors, and Douyin sometimes withholds videos from busy addresses; they are listed in SUMMARY and not charged.

### Related Actors from Zaiq

- [douyin-transcripts-scraper](https://apify.com/zaiq/douyin-transcripts-scraper): Douyin video to text for many links, with SRT and English
- [weibo-scraper](https://apify.com/zaiq/weibo-scraper): Weibo hot search, trending posts, comments and profiles
- [bilibili-scraper](https://apify.com/zaiq/bilibili-scraper): Bilibili videos, comments and danmaku
- [tiktok-transcript-scraper](https://apify.com/zaiq/tiktok-transcript-scraper): what TikTok videos say

### Support

Questions, a site that changed, or a field you need? Open an issue on this Actor's **Issues** tab: we answer there, usually within a day.

***

Also found as: douyin scraper, douyin api, 抖音, douyin hot search, 抖音热榜, douyin comments scraper, douyin video scraper, douyin transcript, china social media scraper.

# Actor input Schema

## `hotSearch` (type: `boolean`):

The 50 terms on Douyin's hot list right now, plus the rising ones, with heat and video counts. On when nothing else is asked for.

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

Douyin video or photo-post links (douyin.com/video/..., v.douyin.com/... share links) or video ids, one per line.

## `transcripts` (type: `boolean`):

Also write down what is said in each video up to 10 minutes long, with its opening line ($0.006 per started minute; silent and failed ones are free).

## `timestamps` (type: `boolean`):

Split each transcript into timed segments (start and end in seconds) and add an SRT subtitle file. No extra charge.

## `translateTo` (type: `string`):

Also give each transcript in this language (skipped when it is already in it). No extra charge from this Actor; the AI model's own cost is billed by Apify, a fraction of a cent a transcript.

## `users` (type: `array`):

Douyin creator links (douyin.com/user/MS4wLjAB...) or sec_uids, one per line: their profile.

## Actor input object example

```json
{
  "hotSearch": true,
  "transcripts": false,
  "timestamps": true,
  "translateTo": ""
}
```

# Actor output Schema

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

Dataset: the results.

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

What each input returned, and notes.

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

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

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

```

## MCP server setup

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