Douyin 抖音 Comments Scraper - Comments & Replies
Pricing
from $5.99 / 1,000 comments
Douyin 抖音 Comments Scraper - Comments & Replies
Scrape Douyin (抖音) video comments and replies. Each row is one top-level comment with author info, like count, region, and (optionally) all replies nested. Supports any Douyin video URL or aweme ID.
Pricing
from $5.99 / 1,000 comments
Rating
0.0
(0)
Developer
Zen Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Douyin Comments Scraper (抖音) — Comments, Replies, Author Profiles & Engagement (2026)
Scrape every top-level comment (评论) on any Douyin (抖音) video — with author profile, like count, region, pinned / author-liked flags, and the full reply tree (回复) nested under each row — one row per comment, clean structured JSON, billed per result.

Copy to your AI assistant
zen-studio/douyin-comments-scraper on Apify. Scrapes Douyin video comments and (optionally) nested replies. One row per top-level comment with 15 top-level fields + 4-field user object + replies[] array of the same shape. Call ApifyClient("TOKEN").actor("zen-studio/douyin-comments-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: awemeUrls (string[] — full douyin.com/video/<id> URLs, iesdouyin.com share URLs, or bare numeric aweme IDs; short v.douyin.com share links not supported). Optional: maxCommentsPerAweme (int 1–5000, default 100), includeReplies (bool, default false), maxRepliesPerComment (int 1–2000, default 100). Pricing: $5.99 per 1,000 items — each comment AND each reply counts as one item (replies are nested in parent rows). Full spec: GET https://api.apify.com/v2/acts/zen-studio~douyin-comments-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations
| Zen Studio · 抖音 + 西瓜视频 (Xigua) • Full-stack China short-video data: search, profiles, posts, comments, transcripts | ||||
|
Douyin Comments ➤ You are here |
Douyin Search Keyword search + filters |
Douyin Profiles 博主 followers, posts, hashtags |
Douyin Video Metadata + MP4 download |
Douyin Transcripts 字幕 + 50-language translation |
How to Scrape Douyin Comments (抖音评论)
Basic — one video, top 100 comments
{"awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],"maxCommentsPerAweme": 100}
Top 500 comments + every reply tree under each one
{"awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],"maxCommentsPerAweme": 500,"includeReplies": true,"maxRepliesPerComment": 200}
Batch — many videos at once, comments only
{"awemeUrls": ["https://www.douyin.com/video/7577614489533680959","https://www.douyin.com/video/7579679818335175483","7610711200906065509","https://www.iesdouyin.com/share/video/7584089129034761019/"],"maxCommentsPerAweme": 250}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
awemeUrls | string[] | required | Douyin video URLs or aweme IDs. See accepted formats below. |
maxCommentsPerAweme | integer | 100 | Top-level comments to fetch per video (1–5,000). Cost scales with the number of unique comments delivered. |
includeReplies | boolean | false | Also fetch every reply tree under each top-level comment. Replies are nested inside replies[] on the parent row and billed at the same per-item price. |
maxRepliesPerComment | integer | 100 | Cap on replies fetched under each top-level comment (1–2,000). Only effective when includeReplies is on. |
Accepted aweme formats
| Format | Example |
|---|---|
| Browser address bar | https://www.douyin.com/video/7577614489533680959 |
| Legacy share link | https://www.iesdouyin.com/share/video/7577614489533680959/ |
| Bare numeric aweme ID | 7577614489533680959 |
Short app share links like
https://v.douyin.com/iAbc123/are not supported. Open them in a browser first and paste the fulldouyin.com/video/<id>URL.
Duplicate aweme IDs (across formats) are deduped automatically, so you never pay twice for the same video's comments.
What Data Can You Extract from Douyin Comments (抖音评论)?
One row per top-level comment. Each row carries 15 top-level fields including the commenter's user object (4 fields nested under user). When includeReplies is on, every reply for that comment is nested under replies[] in the same shape.
Output Example
Every top-level field is shown below. Long avatar URLs and the reply array are trimmed with ….
{"id": "7578047136747717434","text": "猪蹄爆米花,他们这么这么会吃[懵]","createTime": 1764401595,"createDate": "2025-11-29","likeCount": 429409,"replyCount": 8165,"isAuthorLiked": false,"isPinned": false,"isLiked": false,"region": null,"user": {"id": "74136233600","secUid": "MS4wLjABAAAAXX8Vg_PQJIvUQivRx6JFGTQrI45qmEi7UZJSgb6dwlk","nickname": "aiqi","avatarUrl": "https://p11.douyinpic.com/aweme-avatar/tos-cn-i-0813c000-ce_oYItx6w3nEABEAJpA4AaQoIlfGAEeCEoXD39kF~tplv-dy-shrink:64:64.jpeg?from=2956013662"},"replies": [{"id": "7580014842238174006","text": "[泪奔]也不是卤鸭脖卤鸭头","createTime": 1764859738,"createDate": "2025-12-04","likeCount": 2624,"replyCount": 0,"isAuthorLiked": false,"isPinned": false,"isLiked": false,"region": null,"user": {"id": "94540959329","secUid": "MS4wLjABAAAA8fN97d6ydIoiGVTCU2_yv8gZWjNAaECgm-21MiXqPsU","nickname": "_ 雷小姐","avatarUrl": "https://p26.douyinpic.com/aweme-avatar/tos-cn-i-0813c001_740645b1532d4fc88fbcadc6585267cd~tplv-dy-shrink:64:64.jpeg?from=2956013662"}},{"id": "7606775985363927848","text": "更不是干噎酸奶僵尸肉巨大串串[黑脸]","createTime": 1771090555,"createDate": "2026-02-14","likeCount": 748,"replyCount": 0,"isAuthorLiked": false,"isPinned": false,"isLiked": false,"region": null,"user": {"id": "102079005652","secUid": "MS4wLjABAAAAlQzbs1EDN7DefE-lGo0SSUSd8oPkfUeq02PqOD38gtU","nickname": "Cheese","avatarUrl": "https://p26.douyinpic.com/aweme-avatar/tos-cn-i-0813_o0BZ1NvoAM4V0iAAgi2CA3CCifIAaEpge9DA5z~tplv-dy-shrink:64:64.jpeg?from=2956013662"}}],"awemeId": "7579679818335175483","awemeUrl": "https://www.douyin.com/video/7579679818335175483","inputUrl": "https://www.douyin.com/video/7579679818335175483"}
Field reference
| Field | Type | Notes |
|---|---|---|
id | string | Comment ID (Douyin cid). Stable across runs. |
text | string | Comment body (评论内容), including emoji codes like [流泪] Douyin renders as stickers. |
createTime | integer | Unix seconds. |
createDate | string | ISO date (YYYY-MM-DD) derived from createTime. |
likeCount | integer | Number of likes on this comment. |
replyCount | integer | Server-reported total replies on this comment. May exceed replies.length when a thread is long or rate-shaped by Douyin. |
isAuthorLiked | boolean | True when the video's creator liked this comment. |
isPinned | boolean | True when the creator pinned this comment to the top. |
isLiked | boolean | True when the account currently signed in liked this comment — for a scraper account this is effectively always false. |
region | string | null | Chinese province the commenter posted from (when public). Often null for non-Mainland users. |
user.id | string | Commenter's numeric Douyin user ID. |
user.secUid | string | Commenter's stable sec_uid (use this as the cross-actor key — feeds into the Profile scraper). |
user.nickname | string | Display name. |
user.avatarUrl | string | Signed CDN URL for the commenter's avatar (≈64×64). Short-lived — see FAQ. |
replies | object[] | Nested array of replies (回复) in exactly the same shape as the parent row. Empty when includeReplies is off or the comment has none. |
awemeId | string | Parent video's aweme ID. |
awemeUrl | string | Canonical video URL (https://www.douyin.com/video/<id>), or the original URL you supplied if it was already a full one. |
inputUrl | string | The exact string you supplied — useful for joining results back to your source list. |
Advanced Usage
Tracking the conversation under a viral video
{"awemeUrls": ["https://www.douyin.com/video/7579679818335175483"],"maxCommentsPerAweme": 5000,"includeReplies": true,"maxRepliesPerComment": 200}
Pulls every top-level comment Douyin will surface plus the full reply tree under each. Use the isPinned and isAuthorLiked flags to separate creator-endorsed threads from organic discussion. The 3-rule stop policy ensures you don't pay for runaway pagination once Douyin starts repeating itself.
Sentiment / topic mining across a creator's catalog
{"awemeUrls": ["https://www.douyin.com/video/7577614489533680959","https://www.douyin.com/video/7579679818335175483","https://www.douyin.com/video/7584089129034761019","https://www.douyin.com/video/7610711200906065509","..."],"maxCommentsPerAweme": 500}
Up to 10 videos run in parallel. Each row carries awemeId so you can group by video downstream. Pair with the Profile scraper to enumerate a creator's catalog first.
Audience location — who's commenting from where
{"awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],"maxCommentsPerAweme": 2000}
Group by region to see which Chinese provinces engage most with a given video. Non-Mainland commenters surface as null — useful in itself as an overseas-engagement signal.
Author engagement signal — what does the creator like back?
{"awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],"maxCommentsPerAweme": 1000,"includeReplies": false}
Filter rows where isAuthorLiked === true to see which top-level comments the video's creator endorsed. A reliable proxy for which audience reactions resonate.
Cross-actor pipeline — comments → commenter profiles
{"awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],"maxCommentsPerAweme": 500}
Take user.secUid from every row and feed it into the Douyin Profile scraper to enrich each commenter with follower count, bio, total likes received, gender, IP location, and verified status. The secUid is the canonical cross-actor key.
Pricing — Pay Per Event (PPE)
$5.99 per 1,000 items. Each top-level comment counts as one item. Each reply nested under a comment counts as one item too. Failed pages, retries, and unparseable comments are not billed.
| Event | Per call | Per 1,000 |
|---|---|---|
result (one comment OR one reply) | $0.00599 | $5.99 |
Because replies are delivered inside the parent row's replies[] array (not as separate dataset rows), your dataset row count will be lower than your billed item count when replies are on. Set a per-run charge cap on your Apify run to control spend.
Free tier
10 lifetime runs, capped at 2 pages of comments per video, replies disabled, and up to 3 videos per run. No credit card. Plenty for evaluation; combine 3 videos × ~40 comments = a ~120-row sample per run.
FAQ
How many fields are returned per comment?
15 top-level fields per row, with user containing 4 fields nested (id, secUid, nickname, avatarUrl). When includeReplies is on, the replies[] array carries replies in the exact same shape.
How many comments can I expect per video? Most videos surface 200–5,000 unique comments before Douyin's backend stops returning new ones, even on videos with comment counts in the hundreds of thousands. The actor uses a 3-rule stop policy — when Douyin starts returning mostly duplicates or repeats the same window, pagination ends early. You're only billed for unique comments delivered to your dataset.
Are pinned comments included?
Yes. Pinned comments are returned alongside all other top-level comments, with isPinned: true. They typically come first in the result order because that's how Douyin surfaces them.
Are likes-on-replies returned?
Yes. When includeReplies is on, each reply carries its own likeCount. Replies don't have their own nested replies[] (Douyin's comment threads are 2-level deep — top-level comment + flat reply list), so reply rows have replies: [].
Does the order of comments matter?
Comments are returned in the order Douyin surfaces them — typically a mix of recency, like count, and platform signals (hot, pinned, author-liked). The exact algorithm is server-side and not documented; if you need a strict sort, do it client-side after collection using likeCount or createTime.
Can I get the full commenter profile (followers, bio, etc.)?
Not from this actor. Each row carries the commenter's user.secUid and user.id — feed secUid into the Douyin Profile scraper to enrich each commenter with 46 author fields. The 5-actor suite is designed for exactly this fan-out.
How fresh is the data? Live — every comment and reply is fetched on demand at run time. No caching.
Are the avatar URLs permanent?
No. user.avatarUrl is a short-lived signed CDN URL that typically expires within 7–14 days. If you need long-term avatars, copy user.secUid and use the Profile scraper, which returns multiple avatar size variants per run — or download the image bytes during your own pipeline.
Can I scrape direct messages / private comments? No. Public top-level comments and their replies only — anything a logged-out web visitor can see on the video page.
What's the maximum maxCommentsPerAweme?
5,000. In practice most videos cap out below this — Douyin returns increasingly duplicate pages once you exhaust the surfaced pool, and the 3-rule stop policy ends pagination automatically when yield drops.
Does the actor work for any Douyin video? Any public video. Private videos, age-gated content, and region-restricted videos may return zero or partial results depending on what Douyin's public comment endpoint exposes.
Support
- Bugs: Issues tab
- Features: Issues tab
Legal Compliance
Extracts publicly available data from Douyin (抖音). Users must comply with Douyin's terms of service and applicable data protection regulations (GDPR, CCPA).
Structured Douyin video comments — full author profile, region, like count, pinned / author-liked flags, nested replies — one row per comment, in clean JSON.