Douyin 抖音 Comments Scraper - Comments & Replies avatar

Douyin 抖音 Comments Scraper - Comments & Replies

Pricing

from $5.99 / 1,000 comments

Go to Apify Store
Douyin 抖音 Comments Scraper - Comments & Replies

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

Zen Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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.

Douyin Comments Scraper

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

ParameterTypeDefaultDescription
awemeUrlsstring[]requiredDouyin video URLs or aweme IDs. See accepted formats below.
maxCommentsPerAwemeinteger100Top-level comments to fetch per video (1–5,000). Cost scales with the number of unique comments delivered.
includeRepliesbooleanfalseAlso 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.
maxRepliesPerCommentinteger100Cap on replies fetched under each top-level comment (1–2,000). Only effective when includeReplies is on.

Accepted aweme formats

FormatExample
Browser address barhttps://www.douyin.com/video/7577614489533680959
Legacy share linkhttps://www.iesdouyin.com/share/video/7577614489533680959/
Bare numeric aweme ID7577614489533680959

Short app share links like https://v.douyin.com/iAbc123/ are not supported. Open them in a browser first and paste the full douyin.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

FieldTypeNotes
idstringComment ID (Douyin cid). Stable across runs.
textstringComment body (评论内容), including emoji codes like [流泪] Douyin renders as stickers.
createTimeintegerUnix seconds.
createDatestringISO date (YYYY-MM-DD) derived from createTime.
likeCountintegerNumber of likes on this comment.
replyCountintegerServer-reported total replies on this comment. May exceed replies.length when a thread is long or rate-shaped by Douyin.
isAuthorLikedbooleanTrue when the video's creator liked this comment.
isPinnedbooleanTrue when the creator pinned this comment to the top.
isLikedbooleanTrue when the account currently signed in liked this comment — for a scraper account this is effectively always false.
regionstring | nullChinese province the commenter posted from (when public). Often null for non-Mainland users.
user.idstringCommenter's numeric Douyin user ID.
user.secUidstringCommenter's stable sec_uid (use this as the cross-actor key — feeds into the Profile scraper).
user.nicknamestringDisplay name.
user.avatarUrlstringSigned CDN URL for the commenter's avatar (≈64×64). Short-lived — see FAQ.
repliesobject[]Nested array of replies (回复) in exactly the same shape as the parent row. Empty when includeReplies is off or the comment has none.
awemeIdstringParent video's aweme ID.
awemeUrlstringCanonical video URL (https://www.douyin.com/video/<id>), or the original URL you supplied if it was already a full one.
inputUrlstringThe 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.

EventPer callPer 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

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.