TikTok Comments Scraper — Comments & Replies, No Cookies avatar

TikTok Comments Scraper — Comments & Replies, No Cookies

Pricing

from $0.20 / 1,000 delivered comment or replies

Go to Apify Store
TikTok Comments Scraper — Comments & Replies, No Cookies

TikTok Comments Scraper — Comments & Replies, No Cookies

TikTok comments scraper/API for video URLs and profiles. Export public comments and replies without login or cookies. From $0.20/1,000 delivered rows; Free $0.24/1,000.

Pricing

from $0.20 / 1,000 delivered comment or replies

Rating

0.0

(0)

Developer

Meka.im

Meka.im

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Use this TikTok comments scraper and API to collect public comments and replies from full video URLs or profile usernames. Export comment text, likes, dates, public author fields and reply IDs to JSON, CSV or Excel. No TikTok login or cookies are needed. Result pricing starts at $0.20 per 1,000 delivered comments or replies; Free is $0.24 per 1,000 delivered comments or replies, Starter $0.23/1,000 and Scale $0.22/1,000. Apify platform usage is included in the published customer pricing.

  • Collect replies deliberately: separate total, top-level and per-parent reply caps; main comments are collected first.
  • Discover profile videos: choose latest, popular or oldest videos, public reposts, publication dates and pinned-post exclusion.
  • Pay for delivered rows: invalid inputs, duplicates and undelivered failures have no result charge. No startup or automatic Dataset result-event fee.
  • Inspect completion: verified partial results remain available; the run summary explains source failures and budget stops.

Quick start: scrape TikTok comments and replies

  1. Paste full public video URLs into TikTok video URLs.
  2. Set the total, top-level and reply limits, then start the run in Apify.
  3. Open the Comments and replies Dataset view and export JSON, CSV or Excel.

This example requests up to 20 comments and replies from one public Nike video:

{
"postURLs": ["https://www.tiktok.com/@nike/video/7693986066830839054"],
"commentsPerPost": 20,
"topLevelCommentsPerPost": 10,
"maxRepliesPerComment": 5,
"maxConcurrency": 1
}

Defaults are 100 total comments and replies, 100 top-level comments and zero replies. Set maxRepliesPerComment above zero and set the top-level cap below the total cap to leave room for replies. Every reply counts toward the total. Caps are ceilings, not promised quantities.

Scrape comments from a TikTok profile

Enter usernames in Profile usernames, separately from video URLs. This example discovers up to two recent videos from Nike and collects a bounded discussion from each:

{
"profiles": ["nike"],
"resultsPerPage": 2,
"profileSorting": "latest",
"profileScrapeSections": ["videos"],
"commentsPerPost": 20,
"topLevelCommentsPerPost": 10,
"maxRepliesPerComment": 5,
"maxConcurrency": 1
}

Profiles accept an optional @. You can combine up to 100 video URLs and 100 profiles. Videos discovered from profiles use their actual video URL in the Dataset's input and submittedVideoUrl. Photos are skipped and reported. Explicit video targets are excluded from profile discovery; overlapping rows are deduplicated before delivery and charging.

Ready-made samples and recurring exports

Start with the small top-level comment sample or the comments and replies sample, then replace the example URL. Save your input as an Apify task and schedule fresh samples for audience research, campaign feedback or spreadsheet review. Each run is a separate snapshot; scheduling does not automatically track deleted or edited comments.

Input reference

InputDefaultMeaning
postURLs[]Up to 100 full HTTPS TikTok video URLs.
profiles[]Up to 100 usernames, with optional @.
commentsPerPost100Total unique comments plus replies per video, 1–10,000.
topLevelCommentsPerPost100Top-level comments per video, 1–10,000.
maxRepliesPerComment0Replies per parent, 0–500. Zero disables replies.
resultsPerPage1Discovered posts per profile, 1–100; applies across selected sections.
profileSortinglatestNative video order: latest, popular or oldest. Reposts retain source order.
profileScrapeSections["videos"]Videos, public reposts or both, in selection order.
oldestPostDateUnifiedNoneInclusive UTC publication day YYYY-MM-DD or days back 1–36500; 1 means today, 2 yesterday.
newestPostDateNoneInclusive UTC publication day YYYY-MM-DD.
excludePinnedPostsfalseExclude pinned profile videos; does not filter comments.
maxConcurrency16Process 1–16 video/profile units at once; each profile handles its videos sequentially.

Direct inputs require https://www.tiktok.com/@username/video/ID or the equivalent https://tiktok.com form. Short links, query strings, fragments and profile URLs in postURLs are unsupported. Invalid URLs are skipped independently. Repeated video IDs retain the first valid occurrence. Empty API input {} returns zero rows and zero result charges; no paid example is inserted by default.

Date filters apply to profile discovery before comments are collected. Relative days freeze at each profile's first request and survive continuation; profiles starting across UTC midnight can use different date bases. Pin exclusion uses verified profile pin metadata and fails closed for conflicting or malformed flags. See native discovery evidence and limits.

Rows within a video follow source traversal order. Concurrent targets can arrive in completion order; use maxConcurrency: 1 when direct-video input order matters. There is no custom comment sorting, keyword filtering or media download.

Output: comment text, likes, dates and reply IDs

Each Dataset row is one verified comment or reply. The published fields include cid, text, createTime (Unix seconds), createTimeISO, diggCount (likes), replyCommentTotal, uid, uniqueId, avatarThumbnail, likedByAuthor, pinnedByAuthor, mentions, detailedMentions, repliesToId, videoWebUrl, submittedVideoUrl and input. The additional _anyfetch object contains recovery identity, not cookies or credentials.

repliesToId is null for top-level comments. For replies it identifies the directed reply target when available, otherwise the parent; the referenced row can fall outside your sample. Missing values remain null. Pins and mentions reflect verified metadata, with no text-based mention inference; see verified mention limits. Avatar URLs can expire.

Representative output

The following is a field selection from actual public results captured on October 11, 2026, using the same URL and limits as Quick start. It illustrates one comment and one reply; it is not a promised result for a future run.

[
{
"cid": "7694035405498286869",
"text": "Chicago and Dream being the assistants and the cashiers I’m crying",
"createTimeISO": "2026-10-07T21:07:14.000Z",
"diggCount": 5062,
"replyCommentTotal": 2,
"repliesToId": null,
"videoWebUrl": "https://www.tiktok.com/@nike/video/7693986066830839054"
},
{
"cid": "7694171768512348959",
"text": "And they’re scanning a million things 😂😂",
"createTimeISO": "2026-10-08T05:57:14.000Z",
"diggCount": 57,
"replyCommentTotal": null,
"repliesToId": "7694035405498286869",
"videoWebUrl": "https://www.tiktok.com/@nike/video/7693986066830839054"
}
]

The default Dataset view highlights text, likes, reported replies, dates, reply IDs and video links. Open all fields for the full record. OUTPUT reports delivered and charged counts, skipped/duplicate inputs, source errors and budget completion. No result cache is used. See current field comparison for the verified compatibility boundary.

Pricing

One comment-delivered event is one unique comment or reply successfully committed to the Dataset. Verified partial results incur only delivered-row result charges; invalid inputs, duplicates and undelivered failures have none.

Apify tierPer 1,000 delivered comments or replies
Free$0.24
Starter$0.23
Scale$0.22
Business and higher$0.20

On Free, 20 delivered rows cost $0.0048; 100 cost $0.024; 1,000 cost $0.24 in result-event charges. Comments and replies have the same price. Apify platform usage is included in the published customer pricing. Owner-run resource usage is tracked separately from customer event pricing; benchmark owner costs are not customer invoices.

Set a maximum total charge in Apify to bound spending. Delivery stops when the remaining budget cannot cover the next result. A budget-limited run can appear ABORTED; check OUTPUT.stopReason: "budget" and the retained Dataset. A Dataset write followed by a billing failure can leave a delivered row uncharged; recovery does not back-charge earlier committed rows.

Measured comparison with Clockworks

On October 13, 2026, we ran this Actor and Clockworks TikTok Comments Scraper once against the same 16 public video URLs. Both received the same per-video limits: 20 total comments and replies, 10 top-level comments and up to 5 replies per parent. Failed targets were retained in the comparison rather than replaced.

Observed resultThis ActorClockworks
Published build1.0.120.0.470
Memory used for the run256 MB1,024 MB (its published minimum)
Concurrency setting16Not exposed
Whole-run elapsed time16.606 s112.257 s
Valid unique rows200128, plus 1 error row
Top-level comments / replies120 / 80121 / 7
Videos with at least one row15/16 (93.75%)15/16 (93.75%)
Confirmed completed targets14/16Unknown; no equivalent run summary was available
Peak Actor memory53.52 MiB359.67 MiB
Observed result-event charge$0.038$0.129, including the error row

This Actor finished the batch about 6.76 times sooner in this run and returned substantially more replies. This was not a same-memory benchmark: Clockworks required at least 1,024 MB, and its internal concurrency was not observable. Benchmark resource usage is tracked separately from customer event pricing; owner-run charges are not customer invoices. One convenient 16-video batch does not establish sustained 16 QPS, future availability or an all-video accuracy rate.

The two Datasets shared 92 comment IDs. For those shared rows, comment text, timestamps, public author ID and handle, reply target, input and video URL matched. Some live counts, avatar URLs, pin values and mention metadata differed; overlap and field agreement are not proof that either Dataset was complete. One Bella Poarch target returned no comments on either side (source_schema_failure here and POST_NOT_FOUND_OR_PRIVATE on Clockworks). One MrBeast target retained 11 rows here but ended with source_cursor_stalled. This is why a platform status of SUCCEEDED and “video has data” must not be read as “every requested target completed.”

See the full sanitized methodology, per-video results and field comparison, or inspect the official Meka run and Clockworks run.

Reliability and coverage limits

A removed, restricted, blocked or unavailable video can fail. Generic transport or source errors do not prove a video is deleted or private. Confirmed empty pages can complete normally with zero rows; uncertain empty source responses are reported as errors. Requested limits and live reply counts do not guarantee a complete conversation.

SUCCEEDED means the Actor finished, not that every target completed. Check OUTPUT.completed, partial, errors, completedTargets and failedTargets. Targets count requested video/profile units; videoCounts reports profile-discovered video outcomes separately. Failed videos and discovery sections are isolated so other confirmed videos can continue, while partial remains true. Verified rows remain in the Dataset. If every target fails technically with no retained results, the run is FAILED; fatal authentication or contract errors also fail the run.

Source limits can stop large collections early. Same-run recovery is best effort within the source session's 15-minute validity. Interrupting an in-flight request can leave an unknown outcome that cannot safely be replayed. Export retained rows and inspect the summary; a new run may deliver previous comments again. Compatibility and recovery reference covers saved inputs, checkpoints, retries and dated acceptance tests.

API and automation

Use the Apify API tab for generated request and authentication examples, with the same JSON input shown above. Save tasks for recurring runs, use schedules, and connect webhooks or Apify integrations to completed Datasets. Apify's MCP server can expose available Actor tools to an agent. No TikTok login or cookies are required.

FAQ and troubleshooting

Can I scrape a profile or short URL? Use usernames in profiles. Short URLs are unsupported; direct videos require full @username/video/ID URLs.

Why are no replies returned? The default reply limit is zero. Set maxRepliesPerComment above zero and leave room under the total cap after top-level comments; the source can still return fewer replies.

Why are there fewer rows than requested? Caps limit delivery. Public availability and source or budget limits can reduce results. Check OUTPUT for the reason.

Why did a successful run return partial results? One or more targets did not finish. Check OUTPUT.completed, partial and errors. Verified rows remain available and are the only billable results; fatal configuration or contract errors can still fail a run after delivery.

Are replies priced separately? No. A delivered reply has the same event price as a top-level comment. Platform usage is included in the published customer pricing.

Can I keep using a saved task? Current tasks use the latest Actor semantics. The former fixed apiVersion: 2 remains accepted for old saved inputs; remove it when editing. Legacy v1 checkpoints require their original build. See the compatibility reference.

How do I report a problem? Open an issue on this Actor's Apify page with the run ID and a safe description. Do not post tokens, cookies or credentials.

Use public data responsibly and follow applicable law and platform rules. This Actor is independently developed and is not affiliated with or endorsed by TikTok or Nike. Names describe the source and public example.