Douyin 抖音评论 Comments Scraper - Replies, No Login avatar

Douyin 抖音评论 Comments Scraper - Replies, No Login

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Douyin 抖音评论 Comments Scraper - Replies, No Login

Douyin 抖音评论 Comments Scraper - Replies, No Login

抖音评论 from public Douyin (抖音) videos: top-level comments and reply threads (up to about 50 replies each), with each commenter's public IP region. No login. Incomplete threads are marked partial, never hidden. $4.99 per 1,000 results + $0.04 per run.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

Lantern Lab

Lantern Lab

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Douyin 抖音评论 Comments Scraper

Collect the comments (抖音评论) under public Douyin (抖音) videos - top-level comments, their reply threads, and the IP region Douyin shows next to each commenter - from video links or IDs. No login, no cookies, no account of your own; the Actor only reads what Douyin shows a signed-out visitor. $4.99 per 1,000 results, plus $0.04 per run. See Pricing.

Input:

{
"videos": ["https://www.douyin.com/video/7357472760722951433"],
"maxCommentsPerVideo": 200,
"includeReplies": true,
"maxRepliesPerComment": 50
}

Output - one row per comment or reply (recordType: "comment" / "reply"), plus a free video_summary row per video. Sample from a real run; nickname and comment text masked:

{
"recordType": "comment",
"platform": "douyin",
"videoId": "7552116854651833639",
"videoUrl": "https://www.douyin.com/video/7552116854651833639",
"commentId": "7552935887613920060",
"parentId": null,
"replyToReplyId": null,
"text": "说了半天…",
"authorNickname": "c***",
"ipLabel": "山东",
"likeCount": 5,
"replyCount": 0,
"repliesCollected": null,
"publishedAt": "2025-09-22T15:28:49+00:00",
"collectedAt": "2026-10-23T16:39:37+00:00",
"source": "comment_list",
"accessMode": "direct",
"collectionStatus": "complete",
"partialReason": null
}

Limits:

  • Public data only. What a signed-out visitor sees; the Actor never logs in, and it collects less than the comment count Douyin displays (see How much you get).
  • Reply threads are capped by Douyin itself at about the first 50 replies per comment; longer threads are marked partial with the reason (see Reply completeness).
  • Every short collection is named, never hidden. A thread or video cut short carries collectionStatus and partialReason; a deleted, private or withheld video is reported as such - never as "0 comments".
  • Your limits stop collection and appear in the row: maxCommentsPerVideo, maxRepliesPerComment and the maximum cost per run (see Pricing).

What it does

  • Reads the top-level comments of each video, page by page, up to your limit.
  • Reads each comment's reply thread: the first page Douyin serves visitors, up to about 50 replies per comment, up to your limit per thread.
  • Records the commenter's public nickname and IP region (ipLabel, e.g. 山东) exactly as Douyin shows them.
  • Writes one video_summary row per input: video status, how many comments Douyin displays, how many were collected, and why anything is missing.
  • Runs without a proxy by default. If Douyin refuses a video's comment list, that one video is retried through an Apify residential proxy exiting in China (limited per run, can be turned off).

What it does not do

  • No search. Douyin requires a logged-in account to search, and this Actor never logs in. Bring video links or IDs.
  • No login-only content. Only what a signed-out visitor can see.
  • No user profiles. No user IDs, sec_uid, avatars or profile links - only the nickname and IP region shown beside the comment.
  • Long reply threads are cut short. Douyin serves visitors about the first 50 replies of a thread; longer threads are marked partial. See Reply completeness.
  • Not every comment counted on the video. Douyin counts more comments than it shows a signed-out visitor. See How much you get.
  • No video downloads, no live comments (danmaku), no scheduling built in.

Input

FieldDefaultMeaning
videos-Video links (https://www.douyin.com/video/...), share links (https://v.douyin.com/...), links with modal_id=..., or numeric video IDs.
maxCommentsPerVideo200Top-level comments per video.
includeRepliestrueAlso collect reply threads.
maxRepliesPerComment50Replies per thread.
proxyConfigurationno proxyStandard Apify proxy setting for all requests.
residentialFallbacktrueRetry a refused video through a residential proxy in China.
maxFallbackVideos3Videos per run that may use that fallback, at most 10. 0 turns it off.

Output

One dataset, three kinds of rows (recordType): comment, reply and video_summary. Two views are predefined: Comments and replies and Video summaries. A RUN_SUMMARY record in the key-value store has run totals.

Comment and reply fields:

FieldMeaning
recordTypecomment (top level) or reply.
videoId, videoUrlThe video.
commentIdThe comment or reply ID.
parentIdFor replies: the top-level comment's commentId.
replyToReplyIdFor a reply to another reply in the same thread: that reply's ID.
textComment text.
authorNicknamePublic display name shown on the page.
ipLabelIP region shown by Douyin, or null if none is shown.
likeCountLikes.
replyCountTop-level comments: replies Douyin reports for the thread.
repliesCollectedTop-level comments: replies of this thread in the dataset.
publishedAtPublication time (UTC).
collectedAtCollection time (UTC).
sourcecomment_list, reply_api (the thread's own reply list) or reply_preview (a reply Douyin shows inline under the comment).
accessModedirect, custom_proxy or residential_fallback.
collectionStatuscomplete or partial for the thread this row belongs to.
partialReasonWhy the thread is partial.

video_summary fields: input, videoId, videoStatus, videoTitle, videoPublishedAt, displayedCommentCount, topLevelCollected, threadsWithReplies, expectedReplies, repliesCollected, threadsComplete, threadsPartial, records, accessMode, collectionStatus, partialReason, elapsedMs.

Video status

videoStatusMeaning
availablePublic video, comments read.
deletedDouyin says the video was deleted.
privateThe author made the video private or friends-only.
unavailableDouyin refuses to show the video to visitors (removed, restricted or never existed) and gives its reason in partialReason.
invalid_inputThe input is not a Douyin video link or ID.
unknownDouyin did not say; comments were still attempted.

For deleted, private, unavailable and invalid_input the counts are null, not 0, and collectionStatus is not_collected.

What partial means

collectionStatus on a video_summary:

  • complete: every top-level comment Douyin returns was collected, and every reply thread was read to its end.
  • partial: something is missing. partialReason lists what, with a count per reason, for example:
    • cap:maxCommentsPerVideo=200, cap:maxRepliesPerComment=50: your limits.
    • replies:later_pages_refused x3: three threads are longer than the first page of replies Douyin serves to visitors (see below).
    • replies:fewer_than_reply_count x1: a thread was read to its end but holds fewer replies than replyCount.
    • replies:preview_only x2: Douyin refused the thread's reply list, or the page that requests it stopped answering; only the replies it shows inline under the comment are included (source: reply_preview).
  • blocked: Douyin refused the comment list even after the fallback.
  • not_collected: see video status.

On a comment or reply row, collectionStatus describes that comment's thread.

displayedCommentCount is the number Douyin prints on the video. It counts replies too, and it is higher than what a signed-out visitor is shown (see How much you get). A thread is complete only when it holds at least its replyCount; a thread that ends with fewer is partial with replies:fewer_than_reply_count (x of y), even when Douyin served nothing more, because Douyin's replyCount also counts replies it does not serve to visitors.

How much you get

Measured on 10 public videos on 2026-10-09, 8 of them about fertilizer and crop nutrition. Douyin changes its web client often, so results after a change may differ.

  • Replies: up to about 50 replies per comment.
  • Threads with up to 50 replies: about 99.6% of their replies were collected.
  • Threads with more than 50 replies: only about the first 50 are returned, and the comment and its replies are marked partial with the reason.
  • Against the count shown on the video: on the 9 videos whose comment list was read to the end, top-level comments plus replies collected came to about 65%-88% of the comment count Douyin displays. The rest is not shown to a signed-out visitor; Douyin's page says more comments can be seen after logging in, and why each one is hidden was not checked. Every video_summary row shows the displayed count next to what was collected.

Reply completeness

Douyin serves signed-out visitors the first page of each reply thread, up to about 50 replies. Later pages are refused ("blocked") whatever the page size, the way the request is sent or the exit country, so the replies of a longer thread beyond the first 50 cannot be collected without logging in, and this Actor never logs in. After the first such refusal in a run, the Actor stops asking for later pages and marks those threads partial with replies:later_pages_refused.

Measured on 10 public videos, 8 of them about fertilizer and crop nutrition (2026-10-09, no proxy, up to 500 top-level comments per video; 677 threads, 3,696 replies reported by Douyin):

Thread length (replyCount)ThreadsComplete threadsReplies collected
1-3464460668 / 672 (99.4%)
4-9103100580 / 583 (99.5%)
10-2096911,208 / 1,213 (99.6%)
21-501010266 / 266 (100%)
more than 5040198 / 962 (20.6%)
all threads6776612,920 / 3,696 (79.0%)
  • Threads with up to 50 replies: about 99.6% of their replies were collected.
  • Threads with more than 50 replies: only about the first 50 replies are returned, marked partial.
  • The overall share depends on how many long threads a video has: 79.0% above, where 4 threads of 124-512 replies hold 26% of the replies Douyin reports.

Every comment row carries replyCount and repliesCollected, and every video_summary carries expectedReplies and repliesCollected, so you can see per thread and per video what is missing.

Reply pages are requested through a live Douyin page. That page sometimes stops answering partway through a run (it was seen moving on to another video, hanging or crashing); the Actor then retries the thread with a fresh visitor straight away, which adds about a minute to the run. If Douyin refuses even the first page of replies for a visitor, the Actor also tries a fresh visitor. A run gets up to two fresh visitors for replies; after that it keeps only the replies Douyin shows inline under each comment (source: reply_preview, thread partial).

Pricing

Pay per event: $4.99 per 1,000 results, plus $0.04 per run. Apify platform usage, including the residential fallback, is included; you pay only these two events.

EventPriceCharged for
result$0.00499 ($4.99 per 1,000)Each comment or reply row in the dataset. video_summary rows are free.
run-start$0.04Once per run, when it starts.

Example: one video with 300 comments and replies costs $0.04 + 300 x $0.00499 = $1.54.

To cap a run, set Maximum cost per run in the run options. When the cap is reached, the Actor stores no further rows, stops before the next video, marks a video it cut short partial with cap:maxTotalChargeUsd, and records "fatal": "max total charge reached" in RUN_SUMMARY. Videos after it get no rows.

Resources

  • Runs with 1 GB memory by default; you can choose 1-8 GB in the run options. Reply requests need a live Douyin page in the background, and below 1 GB that page crashes and the run collects nothing. The run fee is the same at any memory.
  • A run opens a visitor session first (about 30 seconds), then takes roughly 10-120 seconds per video depending on its size; the 10-video run above took 14 minutes for 4,405 rows.

Notes

  • Respect Douyin's terms and local law, and only collect what you need. Nicknames and IP regions are personal data in many jurisdictions.
  • Douyin changes its web client often; a change can break reply collection before it breaks anything else. The RUN_SUMMARY record shows request outcomes per endpoint.