# Douyin Scraper \[Only $3] Video, Profile & Comments Data (`memo23/douyin-scraper`) Actor

\[Only $3 per 1000 results] Scrape Douyin (抖音, China's TikTok) — no login, no browser. Extract full video detail (likes, shares, collects, comments, author, music, hashtags, download URLs), creator profiles, and comments. Clean unified JSON.

- **URL**: https://apify.com/memo23/douyin-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Social media, Videos, AI
- **Stats:** 24 total users, 18 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper — Video, Profile & Comments Data

Extract structured data from **Douyin (抖音)** — China's original TikTok, with ~750M daily users — without a login, browser, or manual cookies. Paste video or creator URLs and get back clean JSON: full video metrics, creator profiles, and comment threads.

Great for **market research, influencer discovery, trend tracking, brand monitoring, and competitive analysis** on the Chinese short-video market.

![How the Douyin Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-douyin.png)

***

### What it does

| Mode | Input | You get |
|------|-------|---------|
| 🎬 **Video detail** | a video URL | Full post: likes, shares, collects, comment count, author, music, hashtags, cover, video & download URLs, dimensions |
| 👤 **Creator profile** | a user URL | Followers, following, total likes, video count, bio, verification, avatar, IP region |
| 💬 **Comments** | a video URL + toggle | Comment text, likes, reply counts, commenter, IP region |
| 🔎 **Keyword search** | keywords *(needs cookie)* | Videos matching a search term |
| 📹 **Creator's videos** | a user URL *(needs cookie)* | A creator's full posted catalog |

Videos, profiles, and comments work **out of the box — no account needed**. Keyword search and full creator catalogs require a logged-in cookie (see FAQ).

***

### Input

| Field | Type | Description |
|-------|------|-------------|
| `startUrls` | array | Douyin video URLs, creator-profile URLs, short `v.douyin.com` links, or bare IDs. Video URLs → post detail; user URLs → profile. |
| `includeComments` | boolean | For each video URL, also scrape its comments. |
| `maxComments` | integer | Max comments per video (default 50). |
| `includeUserPosts` | boolean | For each creator URL, also scrape their posted videos *(requires `douyinCookie`)*. |
| `maxUserPosts` | integer | Max videos per creator (default 30). |
| `searchKeywords` | array | Keyword video search *(requires `douyinCookie`)*. |
| `maxResultsPerSearch` | integer | Max results per keyword (default 30). |
| `douyinCookie` | string | Optional logged-in cookie to unlock search + creator catalogs. |
| `maxItems` | integer | Global cap on total results. |
| `proxyConfiguration` | object | Optional. A residential proxy is built in — leave this off unless you want to use your own. |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.douyin.com/video/7615930241370348219" },
    { "url": "https://www.douyin.com/user/MS4wLjABAAAAUT_tvNpyI5-tObkvU2xaaqyeDpek5UJXLG8mePjYxTQ" }
  ],
  "includeComments": true,
  "maxComments": 100,
  "maxItems": 500
}
```

***

### Output

Every row carries a `type` field (`video`, `user`, or `comment`) so you can filter mixed runs.

#### Video

```json
{
  "type": "video",
  "awemeId": "7615930241370348219",
  "url": "https://www.douyin.com/video/7615930241370348219",
  "isImagePost": false,
  "description": "夜宵简单吃个长沙滋啦冒油的炭烤牛肋排… #长沙美食",
  "createTime": "2026-03-11T09:39:01.000Z",
  "duration": 12600,
  "hashtags": ["饭搭子", "深夜放毒", "寻味烟火气", "长沙美食"],
  "likes": 139023,
  "comments": 11025,
  "shares": 598443,
  "collects": 13776,
  "authorName": "章章干嘛呢",
  "authorSecUid": "MS4wLjABAAAAUT_tvNpyI5-tObkvU2xaaqyeDpek5UJXLG8mePjYxTQ",
  "authorFollowers": 62679,
  "coverUrl": "https://...",
  "videoUrls": ["https://...", "..."],
  "downloadUrls": ["https://...", "..."],
  "width": 1080,
  "height": 1920,
  "musicTitle": "@章章干嘛呢创作的原声",
  "shareUrl": "https://..."
}
```

#### Creator profile

```json
{
  "type": "user",
  "secUid": "MS4wLjABAAAA...",
  "nickname": "章章干嘛呢",
  "uniqueId": "6346717",
  "signature": "在我喜欢的状态里记录我喜欢的生活🤳 美食｜看展｜旅游",
  "verified": false,
  "followers": 49659,
  "following": 304,
  "totalLikes": 5130107,
  "videoCount": 370,
  "avatarUrl": "https://...",
  "ipLocation": "湖南",
  "url": "https://www.douyin.com/user/MS4wLjABAAAA..."
}
```

#### Comment

```json
{
  "type": "comment",
  "awemeId": "7615930241370348219",
  "commentId": "7615932448664650533",
  "text": "已观，饿之，邀好友观之，共难受之。",
  "createTime": "2026-03-11T09:47:36.000Z",
  "likes": 2970,
  "replyCount": 1161,
  "ipLocation": "湖南",
  "userName": "yuki小蛋堡🍔",
  "userSecUid": "MS4wLjABAAAA...",
  "userUrl": "https://www.douyin.com/user/MS4wLjABAAAA..."
}
```

***

### Use cases

- **Influencer & KOL discovery** — pull follower counts, engagement, and bios to build creator shortlists for the China market.
- **Trend & hashtag tracking** — monitor how videos and topics accumulate likes, shares, and comments over time.
- **Brand & sentiment monitoring** — collect comment threads on videos mentioning your brand or product.
- **Competitive analysis** — benchmark competitors' creator accounts and content performance.
- **Content research** — gather hashtags, music, and formats that perform in a niche.

***

### FAQ

**Do I need a Douyin account?**
No — videos, creator profiles, and comments work with no login. Only keyword *search* and pulling a creator's *full video catalog* need a cookie.

**How do I get the cookie?**
Log in to `douyin.com` in your browser, open DevTools → Network, click any `douyin.com` request, and copy the full `Cookie` request header into the `douyinCookie` field.

**Do I need to set up a proxy?**
No. A residential proxy is built in so the actor works out of the box. You can supply your own proxy if you prefer.

**What time zone are the dates?**
All `createTime` values are ISO 8601 UTC.

**Can I get the raw video / image files?**
The output includes direct `videoUrls` / `downloadUrls` / `coverUrl` / `images` links you can download from.

***

### Support

Found a missing field or a URL format that isn't recognized? Open an issue on the actor's **Issues** tab with an example URL and it'll be added.

# Actor input Schema

## `startUrls` (type: `array`):

Douyin video URLs, user-profile URLs, short v.douyin.com links, or bare IDs. Video URLs return full post detail; user URLs return the profile.

## `includeComments` (type: `boolean`):

For each video URL, also scrape its comments (each comment becomes its own row).

## `maxComments` (type: `integer`):

Upper bound on comments collected per video when 'Include comments' is on.

## `includeUserPosts` (type: `boolean`):

For each user-profile URL, also scrape the creator's posted videos. Requires a logged-in cookie (see 'Douyin cookie').

## `maxUserPosts` (type: `integer`):

Upper bound on videos collected per creator when 'Include user's videos' is on.

## `searchKeywords` (type: `array`):

Keyword video search. Requires a logged-in cookie (see 'Douyin cookie').

## `maxResultsPerSearch` (type: `integer`):

Upper bound on videos collected per search keyword.

## `douyinCookie` (type: `string`):

Paste a logged-in douyin.com cookie string to unlock user-videos and keyword search. Get it from your browser DevTools (Network tab → any douyin.com request → Cookie header) while logged in. Videos, profiles and comments work without it.

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

Global cap on the number of dataset items across the entire run. Leave empty for no cap.

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

Optional proxy. Douyin's web API works direct from most regions; enable residential proxy only if you hit blocks.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.douyin.com/video/7615930241370348219"
    },
    {
      "url": "https://www.douyin.com/user/MS4wLjABAAAAUT_tvNpyI5-tObkvU2xaaqyeDpek5UJXLG8mePjYxTQ"
    }
  ],
  "includeComments": false,
  "maxComments": 50,
  "includeUserPosts": false,
  "maxUserPosts": 30,
  "searchKeywords": [],
  "maxResultsPerSearch": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.douyin.com/video/7615930241370348219"
        },
        {
            "url": "https://www.douyin.com/user/MS4wLjABAAAAUT_tvNpyI5-tObkvU2xaaqyeDpek5UJXLG8mePjYxTQ"
        }
    ],
    "searchKeywords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = {
    "startUrls": [
        { "url": "https://www.douyin.com/video/7615930241370348219" },
        { "url": "https://www.douyin.com/user/MS4wLjABAAAAUT_tvNpyI5-tObkvU2xaaqyeDpek5UJXLG8mePjYxTQ" },
    ],
    "searchKeywords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/douyin-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.douyin.com/video/7615930241370348219"
    },
    {
      "url": "https://www.douyin.com/user/MS4wLjABAAAAUT_tvNpyI5-tObkvU2xaaqyeDpek5UJXLG8mePjYxTQ"
    }
  ],
  "searchKeywords": []
}' |
apify call memo23/douyin-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rhGzw0qPDrqrfEbqp/builds/DgEwZkg4nnEkAsAik/openapi.json
