# Douyin Comments Scraper - Text, Likes, IP Region & Authors (`parseforge/douyin-comments-scraper`) Actor

Scrape every comment under Douyin (抖音) videos and image posts: text, likes, reply count, date, commenter IP region and profile, plus the post's details. No login. Export CSV, Excel, JSON, XML.

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

## Pricing

from $1.70 / 1,000 result items

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 💬 Douyin Comments Scraper

> 🚀 **Export Douyin (抖音) comments in seconds.** 26 fields per comment, privacy-safe by default, 1,000 comments in under four minutes, no login needed.

Douyin is China's TikTok, and its comment sections are where hundreds of millions of people react to products, creators and news. This Actor reads the comments under any public Douyin video or image post the way Douyin's own website does and turns each one into a clean row: text, likes, reply count, time, pinned, hot and author flags, attached pictures, the commenter's nickname and profile link, and the post the comment sits under. The commenter's IP region, Douyin ID, numeric ID and avatar are available as opt-ins.

Coverage: any public post, from a handful of comments to tens of thousands. In a cloud test the Actor read 500 comments from each of two posts (47,000 and 6,000 comments in total) in 215 seconds with zero errors, and with the IP region opt-in on, all 1,000 rows carried one, spread over 38 provinces and countries.

| 🎯 Target Audience | 💡 Primary Use Cases |
| --- | --- |
| 📣 Brand and marketing teams | Read what Chinese consumers say about a product or campaign |
| 🔍 Market researchers | Measure sentiment and regional reaction to a topic |
| 🛍 Cross-border sellers | Mine buyer questions and complaints under product videos |
| 🎤 Creators and agencies | Find the most liked comments and recurring questions |
| 🤖 Data and AI teams | Build Chinese sentiment and intent datasets |
| 🎓 Researchers | Study public discourse on Douyin by region |

### 📋 What the Douyin Comments Scraper does

Give it Douyin post links. It reads the top-level comments of each post and writes one row per comment.

- 🔗 **Any post link.** www.douyin.com/video and /note links, iesdouyin.com share links or v.douyin.com short links from the app.
- 📍 **IP region on request.** The province or country Douyin shows next to each commenter, when you opt in.
- ❤️ **Engagement per comment.** Likes, reply count, and flags for pinned, hot, written by the post's author, and liked by the post's author.
- 🖼 **Picture comments.** Attached images are returned as links.
- 🔒 **Privacy by default.** Each commenter is identified only by nickname and profile link; Douyin ID, numeric ID and avatar are opt-in, and emails, phone numbers and QQ/WeChat IDs are removed from comment text.
- 🎬 **Post context.** Caption, author, likes, comment total and date of the post on every row.
- ↕️ **Your order.** Douyin's own order, or most liked, newest, oldest or most replied.

> 💡 **Why it matters:** with the IP region opt-in, a comment section becomes a regional survey. You can see which provinces talk about a product, where the complaints come from, and where a campaign lands.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

| Field | Description |
| --- | --- |
| 🖼 imageUrl | Cover of the post the comment sits under |
| 🆔 commentId | Comment ID |
| 💬 text | Comment text, contact details replaced by \[removed] |
| ❤️ likeCount | Likes on the comment |
| ↩️ replyCount | Replies under the comment |
| 📅 createdAt | Time the comment was posted |
| 📍 ipRegion | Commenter's IP region (IP属地), opt-in, otherwise Not Requested |
| 📌 isPinned | Pinned by the post's author |
| 🔥 isHot | Marked hot by Douyin |
| ✍️ isByPostAuthor | Written by the post's author |
| 👍 likedByPostAuthor | Liked by the post's author |
| 🖼 commentImageUrls | Pictures attached to the comment |
| 👤 authorNickname | Commenter name |
| 🔗 authorUrl | Commenter profile page |
| 🪪 authorDouyinId | Commenter's Douyin number (抖音号), opt-in |
| 🔢 authorId | Commenter's numeric ID, opt-in |
| 🧑 authorAvatarUrl | Commenter avatar, opt-in |
| 🎬 videoId | Post ID |
| 🔗 videoUrl | Post page |
| 🎤 videoAuthor | Author of the post |
| 📝 videoTitle | Caption of the post |
| ❤️ videoLikeCount | Likes on the post |
| 💬 videoCommentCount | Total comments on the post |
| 📅 videoCreatedAt | Publish time of the post |
| 🕒 scrapedAt | Time the row was collected |
| ❌ error | Error message, null on success |

Three real rows with the default privacy settings, sorted by most liked:

```json
[
  {
    "imageUrl": "https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/94a496468886f3ae6dbfb26d5c6f0bef~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2105661600&x-signature=I%2FFKi7WKbFTxJIpOmp%2F3N034ryk%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=2026092510002092E072E92A3B517D2872",
    "commentId": "7686515024492135205",
    "text": "终于理解18岁那时候不会打扮没化妆都被大人夸好看的原因了[杀马特]青春活力不加任何修饰",
    "likeCount": 467094,
    "replyCount": 1722,
    "createdAt": "2026-09-17T14:44:01.000Z",
    "ipRegion": "Not Requested",
    "isPinned": "No",
    "isHot": "Yes",
    "isByPostAuthor": "No",
    "likedByPostAuthor": "No",
    "commentImageUrls": [],
    "authorNickname": "～怀念",
    "authorUrl": "https://www.douyin.com/user/MS4wLjABAAAA4PN1yuJ2JX2fvIpLUkCCGZb2aMw9CN36Z0i74p3p0fY",
    "authorDouyinId": "Not Requested",
    "authorId": "Not Requested",
    "authorAvatarUrl": "Not Requested",
    "videoId": "7686432847778982833",
    "videoUrl": "https://www.douyin.com/video/7686432847778982833",
    "videoAuthor": "拉小提琴的王主任🎻",
    "videoTitle": "当你在2026年再次听到这首歌（第5集）#ladygaga #pokerface #高中生",
    "videoLikeCount": 5156130,
    "videoCommentCount": 47182,
    "videoCreatedAt": "2026-09-17T09:40:14.000Z",
    "scrapedAt": "2026-09-25T02:00:21.404Z",
    "error": null
  },
  {
    "imageUrl": "https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/94a496468886f3ae6dbfb26d5c6f0bef~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2105661600&x-signature=I%2FFKi7WKbFTxJIpOmp%2F3N034ryk%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=2026092510002092E072E92A3B517D2872",
    "commentId": "7686454535091143434",
    "text": "左边pe姐@Dazzling🌟 ，右边转姐@恩恩恩恩恩 ，两个人今年高二[举手]",
    "likeCount": 85491,
    "replyCount": 424,
    "createdAt": "2026-09-17T10:49:18.000Z",
    "ipRegion": "Not Requested",
    "isPinned": "No",
    "isHot": "Yes",
    "isByPostAuthor": "Yes",
    "likedByPostAuthor": "No",
    "commentImageUrls": [],
    "authorNickname": "拉小提琴的王主任🎻",
    "authorUrl": "https://www.douyin.com/user/MS4wLjABAAAAePhr9XGmGokc2XGCYzRq7kQFv7JyzOlfZ8hThXYhBgE",
    "authorDouyinId": "Not Requested",
    "authorId": "Not Requested",
    "authorAvatarUrl": "Not Requested",
    "videoId": "7686432847778982833",
    "videoUrl": "https://www.douyin.com/video/7686432847778982833",
    "videoAuthor": "拉小提琴的王主任🎻",
    "videoTitle": "当你在2026年再次听到这首歌（第5集）#ladygaga #pokerface #高中生",
    "videoLikeCount": 5156130,
    "videoCommentCount": 47182,
    "videoCreatedAt": "2026-09-17T09:40:14.000Z",
    "scrapedAt": "2026-09-25T02:00:21.451Z",
    "error": null
  },
  {
    "imageUrl": "https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/94a496468886f3ae6dbfb26d5c6f0bef~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2105661600&x-signature=I%2FFKi7WKbFTxJIpOmp%2F3N034ryk%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=2026092510002092E072E92A3B517D2872",
    "commentId": "7686461043649135395",
    "text": "在福建应该都知道，泉五，厦一，双十，这三首高中的含金量[柴犬]",
    "likeCount": 1560,
    "replyCount": 16,
    "createdAt": "2026-09-17T11:14:33.000Z",
    "ipRegion": "Not Requested",
    "isPinned": "No",
    "isHot": "Yes",
    "isByPostAuthor": "No",
    "likedByPostAuthor": "No",
    "commentImageUrls": [],
    "authorNickname": "你猜",
    "authorUrl": "https://www.douyin.com/user/MS4wLjABAAAAvIxOSzGK5bK22n5b49wA9L46zrrV-BvOlspVLjZeO4gA530CpnY2VXRXxhZAn14W",
    "authorDouyinId": "Not Requested",
    "authorId": "Not Requested",
    "authorAvatarUrl": "Not Requested",
    "videoId": "7686432847778982833",
    "videoUrl": "https://www.douyin.com/video/7686432847778982833",
    "videoAuthor": "拉小提琴的王主任🎻",
    "videoTitle": "当你在2026年再次听到这首歌（第5集）#ladygaga #pokerface #高中生",
    "videoLikeCount": 5156130,
    "videoCommentCount": 47182,
    "videoCreatedAt": "2026-09-17T09:40:14.000Z",
    "scrapedAt": "2026-09-25T02:00:21.469Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- 🔓 **No login, no cookies.** It reads public comments only, so no Douyin account of yours is at risk.
- 🔒 **Privacy-safe defaults.** Nickname and profile link only, contact details stripped, and the IP region and commenter IDs only when you opt in.
- ⚡ **One browser for the whole run.** A single session serves every comment page of every post: 1,000 comments took 215 seconds.
- 🔁 **Duplicate-free.** Douyin reshuffles hot comments between pages; rows are deduplicated by comment ID so you never pay twice.
- 🧾 **Post context on every row.** Caption, author and counts of the post travel with each comment.

### 📈 How it compares to alternatives

| | This Actor | Logged-in scrapers | Manual browsing |
| --- | --- | --- | --- |
| Douyin account or cookies needed | ❌ No | ✅ Yes, and accounts get flagged | ❌ No for top-level comments |
| Top-level comments | ✅ Hundreds to thousands per post | ✅ | Slow scrolling |
| Commenter IP region | ✅ Opt-in | Varies | ✅ One by one |
| Reply threads | ❌ Reply count only | ✅ | ✅ When logged in |
| Sort by likes, date or replies | ✅ | Varies | ❌ |

Douyin does not show reply threads to visitors who are not logged in, so this Actor returns every top-level comment with its true reply count rather than the replies themselves. It never logs in and never asks for your cookies.

### 🚀 How to use

1. Create a free Apify account with $5 credit: [sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Douyin Comments Scraper and paste one or more post links.
3. Set how many comments to read per post and the order you want.
4. Set Max Items and click Start. The browser warms up in about 15 seconds, then comments arrive at roughly 5 per second.
5. Download the dataset as CSV, Excel, JSON or XML, or read it through the API.

A minimal run looks like this:

```json
{ "videoUrls": [{ "url": "https://www.douyin.com/video/7686432847778982833" }], "maxCommentsPerVideo": 500, "sortBy": "most-liked", "maxItems": 500 }
```

### 💼 Business use cases

#### 📣 Campaign feedback

Collect the comments under your brand's or a creator's campaign posts and read the most liked reactions first, split by province.

#### 🛍 Product research

Run the comments of viral product videos through a sentiment or keyword model to find the questions and complaints buyers repeat.

#### 🗺 Regional insight

Switch on **Include commenter IP region** when you have a lawful reason to process it, then count comments by `ipRegion` to see where a topic resonates.

#### 🎤 Community management

Find the most liked and most replied comments on your own posts, and check which ones your team has already liked.

### 🔌 Automating Douyin Comments Scraper

- ⏰ **Schedules.** Re-read a post's comments daily to follow the conversation.
- 🔗 **Make and Zapier.** Send new comments to Google Sheets, Airtable or a helpdesk.
- 💬 **Slack.** Alert your team when a comment passes a like threshold.
- 🔄 **Airbyte.** Load comments into your warehouse.
- 🐙 **GitHub Actions.** Trigger runs from your pipeline through the API.
- 📁 **Google Drive.** Export each run as a spreadsheet automatically.

### 🌟 Beyond business use cases

- 🎓 **Research.** Study public opinion on Douyin by topic and region.
- 🙋 **Personal.** Save the best comments of a post you love.
- 🤝 **Non-profit.** Monitor public reaction to health or safety messages.
- 🧪 **Experimentation.** Build a Chinese comment corpus for language models.

### 🤖 Ask an AI assistant about this scraper

Paste this page into ChatGPT, Claude or Gemini and ask things like "Which provinces commented most on this post?" or "Summarise the top 50 most liked comments in English".

### ❓ Frequently Asked Questions

#### 🔑 Do I need a Douyin account or cookies?

No. Top-level comments are public, and the Actor reads them the way Douyin's website does for a visitor who is not logged in.

#### ↩️ Do I get the replies?

No. Douyin does not show reply threads to visitors who are not logged in. Every comment carries its true `replyCount`, so you can see which comments started a conversation.

#### 🔢 How many comments can I get per post?

Hundreds to thousands. In testing, 800 comments were read from one post in about 30 seconds, and the Actor keeps paging until it reaches your limit or Douyin has no more.

#### 📍 What is the IP region?

The province or country Douyin shows next to each commenter (IP属地), based on where they posted from. It is personal data, so `ipRegion` reads `Not Requested` unless you switch on **Include commenter IP region** and have a lawful reason to process it. With it on, it was present on all 1,000 comments of our cloud test.

#### 🔒 What do I get about each commenter?

By default only the nickname and the profile link. Switch on **Include commenter IDs and avatar** to add the Douyin ID, numeric ID and avatar, again only with a lawful reason to process them. Emails, phone numbers and QQ/WeChat IDs in comment text are always replaced by `[removed]`.

#### ↕️ How does sorting work?

Douyin's own order puts hot comments first. Most liked, newest, oldest and most replied sort the comments collected for each post; pinned comments always stay on top.

#### 🖼 What are image posts?

Posts made of pictures instead of a video (/note/ links). Their comments are collected the same way.

#### 🧾 Am I charged for errors?

No. A post that is private, deleted or has comments turned off is written as an error row and never charged.

#### 🔁 Why can the same comment not appear twice?

Douyin reorders its hot comments between pages. The Actor removes duplicates by comment ID before anything is delivered.

#### 🛡️ Do I need a proxy?

No. The Actor runs without one by default, and if Douyin does not answer it retries once through a residential exit by itself.

#### 🔗 Where do I find post links?

Copy the address of a post on www.douyin.com, use the app's share button (v.douyin.com links work), or take `url` from the Douyin Search & Videos Scraper.

### 🔌 Integrate with any app

Use the Apify API, the JavaScript and Python clients, webhooks, or ready-made integrations for Make, Zapier, Slack, Google Sheets, Airbyte and more to send Douyin comments wherever you need them.

### 🔗 Recommended Actors

- [TikTok Comments Scraper](https://apify.com/parseforge/tiktok-comments-scraper) for every comment under a TikTok video.
- [TikTok Profile Scraper](https://apify.com/parseforge/tiktok-profile-scraper) for TikTok creators and their videos.
- [RedNote Notes Scraper](https://apify.com/parseforge/rednote-notes-scraper) for Xiaohongshu posts.
- [YouTube Comments Scraper](https://apify.com/parseforge/youtube-comments-scraper) for YouTube comment sections.
- [Weibo Scraper](https://apify.com/parseforge/weibo-scraper) for Chinese microblog posts.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more social media Actors.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** independent tool, not affiliated with Douyin or ByteDance; only publicly available data is collected.

# Actor input Schema

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

Douyin posts to read the comments of: www.douyin.com/video/<id> or /note/<id> links, iesdouyin.com share links or v.douyin.com short links from the app.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxCommentsPerVideo` (type: `integer`):

Stop reading a post after this many unique comments. Douyin serves top-level comments 20 at a time; 800 took about 30 seconds in testing.

## `sortBy` (type: `string`):

Order of the comments collected for each post. Pinned comments always stay first. Sorting runs over the comments collected, so with a small limit it reorders Douyin's top comments rather than the whole post.

## `includeVideoInfo` (type: `boolean`):

Add the post's caption, author, likes, comment total and date to every comment row.

## `includeIpRegion` (type: `boolean`):

Off (default): ipRegion reads Not Requested. On: it is filled with the province or country Douyin shows for the commenter (IP属地). This is personal data, so turn it on only when you have a lawful reason to process it.

## `includeCommenterProfile` (type: `boolean`):

Off (default): authorDouyinId, authorId and authorAvatarUrl read Not Requested. On: they are filled from the commenter's public profile. Personal data: turn it on only when you have a lawful reason to process it.

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

Apify proxy settings for the browser session.

## Actor input object example

```json
{
  "videoUrls": [
    {
      "url": "https://www.douyin.com/video/7686432847778982833"
    }
  ],
  "maxItems": 10,
  "maxCommentsPerVideo": 100,
  "sortBy": "default",
  "includeVideoInfo": true,
  "includeIpRegion": false,
  "includeCommenterProfile": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields

## `fullData` (type: `string`):

Complete dataset with all 26 fields

# 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 = {
    "videoUrls": [
        {
            "url": "https://www.douyin.com/video/7686432847778982833"
        }
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/douyin-comments-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 = {
    "videoUrls": [{ "url": "https://www.douyin.com/video/7686432847778982833" }],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/douyin-comments-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 '{
  "videoUrls": [
    {
      "url": "https://www.douyin.com/video/7686432847778982833"
    }
  ],
  "maxItems": 10
}' |
apify call parseforge/douyin-comments-scraper --silent --output-dataset

```

## MCP server setup

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