# Douyin Scraper – Creator Profiles, Videos & Trending, No Login (`openharvest/douyin-scraper`) Actor

Douyin (Chinese TikTok, 抖音) scraper without login or cookies: creator profile stats (followers, total likes, video count) and their newest videos with likes, comments, shares, saves, hashtags and music, plus the live Douyin trending hot search list.

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

## Pricing

from $3.00 / 1,000 videos

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 Scraper – Creator Profiles, Videos & Trending, No Login

Douyin (Chinese TikTok, 抖音) scraper without login or cookies: creator profile stats (followers, total likes, video count) and their newest videos with likes, comments, shares, saves, hashtags and music, plus the live Douyin trending hot search list. Use it instead of a general web crawler when you need structured Douyin data: douyin.com only answers requests signed by its own security script, and this Actor handles that for you.

**Price: $3 per 1,000 videos, $0.003 per profile, $0.50 per 1,000 trending topics.** Failed inputs are free.

### What data do you get?

- **Creator profiles** – nickname, Douyin ID (抖音号), sec_uid, bio (emails, phone numbers and messenger IDs removed), followers, following, total likes received, number of videos, verification text, avatar URL
- **Creator videos** (newest first) – video ID and URL, caption, publish time, duration, **likes, comments, shares, saves (collects)**, hashtags, Douyin category tags, music title and author, cover image, temporary playback URL, resolution, image-post flag and image URLs, pinned and ad flags
- **Trending hot search (热榜)** – rank, topic, hot value, label (hot / new / …), number of videos, event time, cover and a search link

### Use cases

- **Influencer marketing in China** – check a creator's followers, total likes and real engagement per video before a campaign.
- **Competitor and brand monitoring** – track the newest videos of brand accounts and how their likes, shares and saves develop.
- **Trend research** – take a daily snapshot of the Douyin hot search board and spot rising topics.
- **Content and music research** – see which hashtags, categories and sounds the top creators use.
- **Academic research & AI pipelines** – build datasets of public Douyin video metadata for NLP, sentiment or recommendation studies.

### How to use it

1. Click **Try for free** / **Start**.
2. Paste one or more creator links into **Douyin creator profiles** – `https://www.douyin.com/user/MS4wLjABAAAA...`, a `v.douyin.com` short link or the bare `sec_uid`.
3. Set **Max videos per profile** (default 20) and, if you want, switch on **Include Douyin trending list**.
4. Click **Start** and download the data as JSON, CSV, Excel or HTML, or connect it to Make, Zapier, n8n, Google Sheets or the Apify API.

Running with an empty input returns the current trending list.

### Input

| Field | Type | Description |
|---|---|---|
| `profileUrls` | array of strings | Creator profile links, short links or sec_uids. |
| `maxVideosPerProfile` | integer | Newest videos per profile, 0–50. `0` = profile stats only. Default `20`. |
| `includeProfileInfo` | boolean | Add one profile-stats row per creator. Default `true`. |
| `includeTrending` | boolean | Add the Douyin hot search board. Automatic when `profileUrls` is empty. Default `false`. |
| `maxTrending` | integer | Number of trending topics, 1–50. Default `50`. |
| `proxyConfiguration` | object | Optional. Not needed in normal use. |

Example input:

```json
{
    "profileUrls": ["https://www.douyin.com/user/MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ"],
    "maxVideosPerProfile": 20,
    "includeTrending": true,
    "maxTrending": 10
}
```

### Output

Each row has a `type`: `profile`, `video`, `trend` or `error`. Real output from a run on 8 October 2026 (URLs shortened):

**Profile**

```json
{
    "type": "profile",
    "secUid": "MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ",
    "uniqueId": "L99612",
    "nickname": "萧萧不吃辣",
    "bio": "唯一小号@萧萧又怎么了",
    "followers": 2622134,
    "following": 197,
    "totalLikes": 61064139,
    "videoCount": 646,
    "verified": null,
    "avatarUrl": "https://p3-pc.douyinpic.com/aweme/1080x1080/aweme-avatar/...jpeg",
    "url": "https://www.douyin.com/user/MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ"
}
```

**Video**

```json
{
    "type": "video",
    "videoId": "7592500476550203771",
    "url": "https://www.douyin.com/video/7592500476550203771",
    "description": "神明降临人间 被爱的世界好漂亮 #芭蕾",
    "createTime": "2026-01-07T06:19:34.000Z",
    "durationSec": 11.6,
    "isImagePost": false,
    "hashtags": ["芭蕾"],
    "likes": 149678,
    "comments": 735,
    "shares": 23324,
    "collects": 22089,
    "plays": null,
    "authorNickname": "萧萧不吃辣",
    "authorUniqueId": "L99612",
    "authorFollowers": 2622134,
    "authorUrl": "https://www.douyin.com/user/MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ",
    "coverUrl": "https://p3-pc-sign.douyinpic.com/tos-cn-i-0813c000-ce/...jpeg",
    "videoPlayUrl": "https://v26-webf.douyinvod.com/.../?a=6383&...",
    "width": 1920,
    "height": 1080,
    "musicTitle": "@仙游县鲤南镇林弼箱包经营部（个体工商户）创作的原声",
    "categoryTags": ["舞蹈", "专业舞蹈", "街舞"],
    "isAd": false,
    "isPinned": true
}
```

**Trending topic**

```json
{
    "type": "trend",
    "rank": 1,
    "word": "我国科学家研制成功核光钟",
    "hotValue": 12042324,
    "videoCount": 10,
    "label": "hot",
    "eventTime": "2026-10-07T23:41:25.000Z",
    "searchUrl": "https://www.douyin.com/search/%E6%88%91%E5%9B%BD..."
}
```

**Error (free)**

```json
{
    "type": "error",
    "input": "MS4wLjABAAAAinvalid",
    "secUid": "MS4wLjABAAAAinvalid",
    "errorCode": "PROFILE_UNAVAILABLE",
    "error": "Profile not found or not public (UserId不合法)."
}
```

Possible `errorCode` values: `INVALID_INPUT`, `SINGLE_VIDEO_NOT_SUPPORTED`, `SHORT_LINK_FAILED`, `PROFILE_UNAVAILABLE`, `NO_VIDEOS`, `TRENDING_FAILED`, `SCRAPE_FAILED`.

The dataset has ready-made views in Apify Console: **Overview**, **Videos**, **Profiles** and **Trending**.

### Pricing

Pay-per-event: you only pay for rows you get. Platform usage is included.

| Event | Price | When it is charged |
|---|---|---|
| `video` | **$0.003** per video ($3 / 1,000) | Each video row |
| `profile` | **$0.003** per profile | Each profile-stats row |
| `trend` | **$0.0005** per topic ($0.50 / 1,000) | Each trending topic row |
| Errors | **Free** | Invalid links, missing or private profiles, unsupported links |

Examples:

| Job | Cost |
|---|---|
| 1 creator, profile + 20 videos | $0.003 + 20 × $0.003 = **$0.063** |
| 10 creators, profile + 20 videos each | **$0.63** |
| Full trending board (50 topics), once a day for 30 days | 1,500 × $0.0005 = **$0.75** |

Tip: set **Max cost per run** in the run options. The Actor stops cleanly when your budget is reached.

### Use with AI agents (MCP)

This Actor works as a tool in Apify's MCP server, so Claude, ChatGPT, Cursor and other MCP clients can call it. Add it to your client with the server URL `https://mcp.apify.com/?actors=openharvest/douyin-scraper` and ask, for example, "What is trending on Douyin right now?" or "Get the last 10 videos and follower count of this Douyin creator".

Example tool input:

```json
{
    "profileUrls": ["https://www.douyin.com/user/MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ"],
    "maxVideosPerProfile": 10,
    "includeTrending": true,
    "maxTrending": 10
}
```

### FAQ

**Do I need a Douyin account or cookies?**
No. The Actor visits douyin.com as an anonymous visitor in a real browser. It never logs in and never asks for your cookies.

**Can it search Douyin by keyword?**
No. Since 2026 Douyin requires a logged-in account for keyword search ("请先登录，再继续搜索吧"). This Actor does not use accounts, so it does not offer search. Use the trending list to discover topics and creator profiles to follow accounts.

**Can I scrape a single video link?**
Not on its own. Douyin asks for a captcha before it shows a single video page to servers. Paste the creator's profile link instead: the profile video list contains the same stats (likes, comments, shares, saves, hashtags). Single video links are reported as a free `SINGLE_VIDEO_NOT_SUPPORTED` row.

**How many videos per profile can I get?**
Douyin shows anonymous visitors only the newest page of a profile, which is about 20–45 videos (pinned videos included). Older videos need a login and are not available.

**Why is `plays` usually null?**
Douyin does not publish view counts on the web for most videos. When it does, the Actor returns them.

**Do `videoPlayUrl` and image links expire?**
Yes. Douyin's media links are signed and expire after some hours. Download files soon after scraping if you need them.

**How do I find a creator's profile link?**
Open the creator on douyin.com and copy the address (`https://www.douyin.com/user/MS4wLjABAAAA...`), or use the share link from the app (`https://v.douyin.com/...`).

**Can I run it on a schedule?**
Yes. Use Apify Schedules, for example every hour for the trending list or every day for a list of creators.

### Is it legal to scrape Douyin?

This Actor collects only **publicly available data** that douyin.com shows to any visitor without logging in: public video statistics, captions, hashtags and the public name and ID of each creator. It does not log in, does not read private accounts or messages, and removes emails, phone numbers and messenger IDs from bios. Douyin's terms of service restrict automated access, and the data can include personal data and copyrighted content. Make sure your use complies with the laws that apply to you (for example GDPR or China's PIPL) and with Douyin's terms. Do not use the data for spam, harassment or unsolicited contact. If you are unsure, ask a lawyer.

### Related actors

Related actors by the same developer:

- **Bilibili Scraper – Videos, Search, Rankings, Comments & Danmaku**
- **Weibo Scraper – Hot Search, Trending Posts, Comments & Profiles**
- **Douban Scraper – Movies, Books, Ratings, Comments & Reviews**
- **Taobao & Tmall Product Scraper**

### Support & feedback

Found a bug or a missing field? Open an issue in the **Issues** tab. Feature requests are welcome.

# Actor input Schema

## `profileUrls` (type: `array`):

Public Douyin (抖音) creator profiles. For each one you get the profile stats (followers, total likes, video count, bio) and the creator's newest videos with likes, comments, shares, saves, hashtags and music. Accepts https://www.douyin.com/user/\<sec_uid> links, v.douyin.com short links or a bare sec_uid (MS4wLjABAAAA...). Leave empty to get only the trending list.

## `maxVideosPerProfile` (type: `integer`):

How many of the newest videos to return for each profile (0 = profile stats only). Douyin shows visitors without login only the newest ~20-45 videos of a profile, so larger values return what is available. Each video is one billable result.

## `includeProfileInfo` (type: `boolean`):

Add one row per creator with nickname, Douyin ID, bio, followers, following, total likes and video count.

## `includeTrending` (type: `boolean`):

Also return the live Douyin hot search board (热榜, up to 50 topics with rank and hot value). When no profiles are given, the trending list is returned automatically.

## `maxTrending` (type: `integer`):

How many trending topics to return (1-50).

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

Usually not needed. If Douyin starts blocking requests, enable Apify Proxy here.

## Actor input object example

```json
{
  "profileUrls": [
    "https://www.douyin.com/user/MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ"
  ],
  "maxVideosPerProfile": 20,
  "includeProfileInfo": true,
  "includeTrending": true,
  "maxTrending": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All scraped items in the default dataset (JSON, CSV, Excel and more via the dataset export).

## `files` (type: `string`):

Records saved in the default key-value store, e.g. the run summary.

# 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 = {
    "profileUrls": [
        "https://www.douyin.com/user/MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ"
    ],
    "maxVideosPerProfile": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("openharvest/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 = {
    "profileUrls": ["https://www.douyin.com/user/MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ"],
    "maxVideosPerProfile": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("openharvest/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 '{
  "profileUrls": [
    "https://www.douyin.com/user/MS4wLjABAAAAGhTVHcr1tmaen43gOCk7JxI2ZHioZL3UzgmydgHUFFQ"
  ],
  "maxVideosPerProfile": 10
}' |
apify call openharvest/douyin-scraper --silent --output-dataset

```

## MCP server setup

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