TikTok Comments Scraper API - Replies, Handles, No Login ✅ avatar

TikTok Comments Scraper API - Replies, Handles, No Login ✅

Pricing

from $4.00 / 1,000 results

Go to Apify Store
TikTok Comments Scraper API - Replies, Handles, No Login ✅

TikTok Comments Scraper API - Replies, Handles, No Login ✅

Scrape TikTok video comments AND their threaded replies in one Actor. Get text, like counts, reply counts, commenter handles, timestamps. Built for sentiment analysis, customer voice research, brand monitoring, and creator engagement audits. No login, no API key.

Pricing

from $4.00 / 1,000 results

Rating

5.0

(3)

Developer

Unseen User

Unseen User

Maintained by Community

Actor stats

4

Bookmarked

3

Total users

2

Monthly active users

15 days ago

Last modified

Share

TikTok Comments Scraper API - Replies, Handles, No Login

Pull every comment on a TikTok video PLUS the threaded replies underneath, with the commenter's handle, nickname, like count, and (optionally) LLM-generated sentiment + intent + a per-video audience summary. No TikTok login, no cookies, no session token.

Two scrapers in one - top-level comments AND full reply threads. Optional AI enrichment tier (bring your own Anthropic key) adds per-row sentiment, per-row intent classification, and one structured summary row per video with themes, top audience questions, and buyer-intent count.

A brand goes viral (good or bad) on TikTok. The top-level reactions tell you part of the story. The reply threads tell you how the conversation actually evolved. The AI tier tells you what people are asking, complaining about, and trying to buy. This Actor delivers all three in a single run.


Free plan limit

Free Apify users get up to 50 results per run. Paying users are not affected and receive results normally.

This limit was set by the Actor developer, not by Apify. To remove it and receive unlimited results, upgrade to any paid Apify plan: https://apify.com/pricing

When a free plan run hits the cap, the Actor finishes successfully (status SUCCEEDED) and the run's status message explains what happened. No error is raised, so the first 50 results are fully usable as normal.


What does this scraper return?

Every row in the dataset is one of comment, reply, comment_error, reply_error, or (with the LLM tier on) video_summary. A default comment or reply row carries the commenter's handle + nickname + avatar URL, the comment text, the like count, the reply count, the creation timestamp (both Unix and ISO 8601), the comment ID, and (for reply rows) the parent comment ID so you can rebuild threads exactly.

Turn on any of the opt-in input flags and rows pick up extra fields with zero extra upstream cost: video ID, pinned / author-liked flags, TikTok's language code and buyer-intent flag, @-mentions, hashtags, algorithm scores, verified badges, secure user ID. See the Inputs table below for the full list.

Turn on the LLM tier (v1.2+, paste your Anthropic API key in the input) and rows also get sentiment_score + sentiment_label, intent (question / complaint / praise / spam / purchase_intent / mention / other), plus one video_summary row per video with themes, top audience questions, sentiment breakdown, and buyer-intent count.


How many comments can I scrape per video?

No hard cap. max_comment_pages defaults to 0, which means "keep fetching until every comment on the video has been pulled." Each batch is one upstream request that returns roughly 20-50 comments, so 1,000 comments takes about 20-50 batches. If you set a number explicitly, the safety cap is 50,000 batches (roughly 1-2.5 million comments) - not a technical limit, just a mis-typed-run protection.

The Actor stops early automatically once the video has no more comments.


Can I get reply threads?

Yes - two ways to trigger them:

  1. Automatic: set auto_fetch_replies=true and every top-level comment with at least min_replies_threshold replies gets its full thread pulled in the same run.
  2. Manual: add ::commentId after a URL in video_urls. That expands only the specified thread and skips the top-level scrape for that video. Useful when you already know which comments matter (e.g. from a previous run).

Bare URLs and URL::cid pairs can appear together in the same video_urls list. Reply rows carry parent_comment_id pointing to the top-level comment, so the exact thread structure can be reconstructed on your side.

Most competing TikTok comment actors stop at top-level. This one walks the full thread depth.


Can I run many videos at once?

Yes. video_urls is an array - paste as many URLs as you want. Videos are processed sequentially with isolated error handling, so a failure on one video (private account, deleted video, upstream hiccup) does not stop the others. Each failure becomes a dedicated comment_error or reply_error row in the dataset plus a summary in the ERRORS key-value record, so triage is easy.

Portfolio-wide failure rate across 176,512 real runs is 0.20%.


Can I export to CSV or Excel?

Yes. Every Apify dataset can be downloaded as JSON, CSV, or XLSX from the Console, or pulled via the Apify REST API in any format you want. The same video_urls input works whether you want one video or many, and the dataset ships with several pre-defined views (Clean, Overview, Top-level comments, Replies, Errors, Authors, Enriched, Video summaries) that switch between raw JSON and clean tabular displays.


Is there a TikTok comments API I can call directly?

TikTok's official Research API is gated for academics and journalists. Their Business API is for advertisers. Neither exposes the full public comment thread at the depth this Actor returns. This is the closest practical alternative for anyone outside those programs - one URL in, every top-level comment plus threaded replies out, no login, results in JSON.

The Actor itself is exposed through Apify's REST API and official SDKs (Python, Node.js, others). Start a run, fetch results, or schedule recurring runs entirely from code. See https://docs.apify.com/sdk.


Do I need a TikTok login or cookies?

No. Zero credentials of yours pass through this Actor. There is nothing to configure on your side beyond an Apify account. Actors that require you to paste session cookies expose you to real risk - cookie theft is common in this category, and a stolen cookie can get your TikTok account banned or locked. This Actor sidesteps that entire class of problem.


Can I get sentiment, intent, or the top audience questions?

Yes - v1.2 added an opt-in LLM tier (bring your own Anthropic API key, paste it into the anthropic_api_key input field). Three independent flags:

  • enable_sentiment → adds sentiment_score (-1 to 1) and sentiment_label (positive/neutral/negative) to every comment and reply row.
  • enable_intent_classification → adds intent (question / complaint / praise / spam / purchase_intent / mention / other) to every row.
  • enable_audience_summary → writes one video_summary row per video with themes[], top_questions[] (verbatim, most-asked first), sentiment_breakdown, and buyer_intent_count. Uses the top 200 comments by likes to control cost on huge videos.

Each flag fires a distinct billable event so you only pay for what you use. Sentiment and intent share the same LLM call when both are on, so enabling both costs no more than enabling one.


How much does it cost?

Three billable events:

EventPriceWhen it fires
result$4.00 per 1,000Every dataset row (base scrape)
enriched-comment$5.00 per 1,000Every comment/reply row that received sentiment and/or intent
video-summary$2.00 per eventEvery video_summary row written

Concrete numbers for a single-video run:

What you turned on100 comments500 comments1,000 comments
Nothing (base scrape only)$0.40$2.00$4.00
+ sentiment or intent (or both)$0.90$4.50$9.00
+ audience summary+$2.00+$2.00+$2.00

If you enable an LLM flag, Anthropic bills you directly for Claude Haiku tokens on your own account - typically fractions of a cent per row for classification, pennies per video summary.


What isn't included? (limitations - honest)

Some things this Actor deliberately does not do, so you can decide up front whether it fits:

  • No commenter profile enrichment by default. Rows carry the commenter's handle, nickname, and avatar URL, but not their follower count, bio, region, or full profile. That would need a separate upstream call per unique commenter and roughly doubles per-run cost. On the roadmap for v1.2+ behind its own opt-in flag.
  • No video metadata beyond IDs. The Actor is focused on comments - it does not fetch the video's own view count, share count, description, hashtags, or author info. Use TikTok Profile Posts (Bulk Video Scraper) upstream for that.
  • No filtering by comment date. Every comment on the video comes back. Filter client-side on create_time_iso. Server-side date filtering is on the v1.2+ roadmap.
  • No client-side pinned filter (yet). Every comment including the pinned one comes back. Use include_video_metadata=true to get the is_pinned flag and filter on your side.
  • The 200-comment cap on audience summaries is intentional. For videos with thousands of comments, the summary is computed from the top 200 by likes. This keeps LLM cost bounded regardless of video size. The input_comment_sample_size field on the summary row tells you exactly how many comments were used.
  • user.predicted_age_group is experimental. TikTok returns it, but they do not publish the value-to-age mapping. Do not use it as a minor-protection filter without verifying the mapping with TikTok directly.
  • Cookies / login not supported. Some deep-thread behavior on TikTok is only accessible when logged in. This Actor deliberately does not go there - the trade-off keeps your account safe.
  • Free plan is capped at 50 rows per run. Standard Apify plan-limit pattern; see the section above.

How does this compare to alternatives?

ActorUsersPrice / 1kReply threadsRequires cookiesAI enrichmentNotes
This Actorgrowing$4.00 base, opt-in enrichment on topYesNoYes (opt-in)Only actor in the category with per-row sentiment + intent and per-video audience summaries
clockworks/tiktok-comments-scraper30k+$1.25PartialNoNoCategory leader on raw scrape, but no threaded replies, no enrichment
apidojo/tiktok-comments-scraper5k+$0.30PartialNoNoCheapest, but users report inconsistent user info and missing time-frame filter
Various $0.30-$0.50 actorsfew hundred each$0.30-$0.50NoSomeNoUndercut on price; typically no replies, no enrichment

If your job is to pull raw top-level comments at the lowest possible per-row cost, use clockworks or apidojo. If you need full reply threads, per-comment sentiment / intent, or a per-video audience summary in the same run - this Actor is the only option in the category.


Use cases

  • Community management - drill into customer feedback on your brand TikToks
  • Crisis monitoring - when a brand TikTok goes negative, get the full picture of the dissent (top-level reactions are only half the story)
  • Customer feedback intelligence - surface common complaints and praise on your product videos, or auto-classify each comment as question / complaint / praise / purchase_intent
  • Influencer vetting - read what audiences actually say about a creator before partnership, with sentiment breakdown per video
  • Product research - use per-video audience summaries to see the top questions people ask about a competitor's launch
  • Trend conversation analysis - understand WHY a video went viral via comment patterns and reply chains
  • Brand reputation research - see what's said about competitors in their comment sections
  • Academic research - analyze conversation dynamics around viral content

Quick start

  1. Click Try for free on this Actor's page
  2. Paste one or more TikTok video URLs into video_urls. Each entry is either a URL (fetches top-level comments) or URL::commentId (fetches only that comment's reply thread)
  3. (Optional) Turn on auto_fetch_replies to expand reply threads automatically for the bare-URL entries
  4. (Optional, v1.2+) Paste an Anthropic API key into anthropic_api_key and turn on any of enable_sentiment, enable_intent_classification, enable_audience_summary
  5. Run the Actor
  6. Download results as JSON, CSV, or XLSX, or pull via the Apify API. Open the Clean dataset view for a scannable table

Inputs

InputTypeRequiredDescriptionExample
video_urlsarray of stringsYesOne entry per line. Each entry is either a TikTok video URL (fetches top-level comments) or a URL::commentId pair (fetches replies under that specific comment). Mix and match freely; bulk-friendly.["https://www.tiktok.com/@stoolpresidente/video/7623818255903329566", "https://www.tiktok.com/@user/video/123::7623828115408274207"]
max_comment_pagesintegerNoMax comment batches to fetch per video. Each batch is one request that returns about 20-50 comments. Only applies to bare-URL entries. 0 = all comments (default).0
auto_fetch_repliesbooleanNoIf true, automatically fetch replies for top-level comments that meet min_replies_threshold. Only applies to bare-URL entries. Default false.false
min_replies_thresholdintegerNoWhen auto_fetch_replies=true, only expand replies for comments with at least N replies. 0 = every comment (default).0
max_reply_pages_per_commentintegerNoMax reply batches per comment. Each batch is one request that returns about 20-50 replies. 0 = all replies (default).0
include_video_metadatabooleanNoAdds video_id, video_url, is_pinned, is_author_liked, language, share_url, sort_tags, is_translatable, and (for replies) is_high_purchase_intent, reply_to_reply_id, thread_id. Free (no extra upstream cost). Default false.false
include_author_detailsbooleanNoAdds user.verified (bool) + user.verify_reason (string) + user.sec_uid (stable secure ID). Free. Default false.false
include_parsed_textbooleanNoAdds mentions[] and hashtags[] parsed from the comment text_extra structure. Free. Default false.false
include_algorithm_scoresbooleanNoAdds algorithm_score.reply_score + algorithm_score.show_more_score (TikTok's own comment ranking numbers). Free. Default false.false
include_experimental_fieldsbooleanNoAdds user.predicted_age_group (TikTok's own age-bucket estimate, raw string, mapping not published). Experimental - consider minor-protection obligations before using as a filter. Default false.false
anthropic_api_keystring (secret)Nov1.2+ LLM tier. Your own Anthropic API key. Only needed when any enable_* LLM flag below is on. Stored as a secret - never logged. Anthropic charges you directly for the tokens used; this Actor's billable events are separate.sk-ant-...
enable_sentimentbooleanNov1.2+ LLM tier. Adds sentiment_score (-1 to 1) and sentiment_label (positive/neutral/negative) to every comment and reply row. Fires the enriched-comment billable event per row. Requires anthropic_api_key. Default false.false
enable_intent_classificationbooleanNov1.2+ LLM tier. Adds intent (question/complaint/praise/spam/purchase_intent/mention/other) to every row. Batched with sentiment when both are on - same one event per row. Requires anthropic_api_key. Default false.false
enable_audience_summarybooleanNov1.2+ LLM tier. Writes ONE video_summary row per video with themes[], top_questions[], sentiment_breakdown, buyer_intent_count. Uses the top 200 comments by likes to control cost. Fires the video-summary billable event once per video processed at $2.00 per summary (Apify normalizes this to a $2,000 / 1,000 display across the whole pricing panel; a typical single-video run pays $2 for this feature, not $2,000). Requires anthropic_api_key. Default false.false
enable_translationbooleanNov1.3+ LLM tier. Adds translated_text to every row. Batched with sentiment / intent / bot detection in one LLM call - if any of those is also on, translation is included for free (same enriched-comment event). If only translation is on, one enriched-comment event fires per row. Requires anthropic_api_key. Default false.false
translation_target_languagestringNov1.3+ LLM tier. Target language for translation (e.g. en, es, fr, de, ja). Ignored when enable_translation is off.en
enable_bot_detectionbooleanNov1.3+ LLM tier. Adds is_bot_likely (boolean) + bot_confidence (0-1) to every row. Piggybacks on the classification batch - no extra event cost when any other row-level LLM flag is also on. Requires anthropic_api_key. Default false.false
exclude_pinnedbooleanNov1.3+ filter. Drops the video creator's pinned comment(s) from the output. Filtered client-side after fetch. Default false.false
date_fromstring (YYYY-MM-DD)Nov1.3+ filter. Only include comments created on or after this date. Empty = no lower bound. Filtered client-side after fetch, so upstream credits are still consumed for dropped rows.2026-01-01
date_tostring (YYYY-MM-DD)Nov1.3+ filter. Only include comments created on or before this date. Empty = no upper bound. Same client-side-filter caveat as date_from.2026-06-30

Videos are processed sequentially with isolated error handling - a failure on one video does not stop the others. If a URL appears only as URL::commentId (never bare) in video_urls, the top-level comments scrape is skipped for that video and only the specified reply threads are fetched.


Output

Every row is written to the Apify dataset and is one of four type values: comment, reply, comment_error, or reply_error.

Fields

FieldDescription
typecomment (top-level), reply (threaded), or comment_error / reply_error for failed pages
cidComment ID. Add it back to video_urls as URL::cid to fetch its replies.
textComment text as authored
digg_countLike count on the comment
reply_comment_totalNumber of replies on a top-level comment (0 for replies)
create_time / create_time_isoUnix timestamp + ISO 8601
user.uidTikTok internal user ID
user.unique_idPublic TikTok handle (@handle)
user.nicknameDisplay name
user.avatar_urlAvatar image URL
parent_comment_idNull for top-level. The parent cid for reply rows.
rawRaw upstream payload for the row (useful for advanced consumers)
_metadata{ page, fetched_at, input_identifier } so you can trace every row back to the page and URL it came from

Opt-in extra fields (v1.1+)

Every field below is off by default. Turn on the matching input flag and each row picks up the new field. All are sourced from the raw upstream response, so there is no extra upstream cost and no LLM cost - your bill under the results event stays the same.

Extra fieldTurned on byWhat it is
video_idinclude_video_metadataTikTok's internal video ID (aweme_id) for this row's video
video_urlinclude_video_metadataEcho of the input URL for cross-referencing
is_pinnedinclude_video_metadataTrue if the video's creator pinned this comment
is_author_likedinclude_video_metadataTrue if the video's creator liked (dug) this comment
languageinclude_video_metadataTikTok's detected language code for the comment text (e.g. en)
share_urlinclude_video_metadataDirect share URL for the comment (may be empty for replies)
sort_tagsinclude_video_metadataTikTok's algorithm labels for the comment, parsed as an object
is_translatableinclude_video_metadataTrue if TikTok offers a translate button on the comment
is_high_purchase_intentinclude_video_metadataTikTok's own buyer-intent flag. Present on replies; may be null on top-level comments
reply_to_reply_idinclude_video_metadataFor nested replies, the cid of the reply being replied to
thread_idinclude_video_metadataTikTok's thread identifier for a reply chain
user.verifiedinclude_author_detailsTrue if the commenter has any verification badge
user.verify_reasoninclude_author_detailsThe verification badge label / reason string, when present
user.sec_uidinclude_author_detailsStable secure user ID, useful for linking rows across runs
mentions[]include_parsed_textUser IDs of @-mentions parsed from the comment
hashtags[]include_parsed_textHashtag names parsed from the comment
algorithm_scoreinclude_algorithm_scoresTikTok's own ranking numbers: { reply_score, show_more_score }. Useful for surfacing top-ranked comments
user.predicted_age_groupinclude_experimental_fieldsExperimental. TikTok-provided age-bucket estimate as a raw string. TikTok does not publish the value-to-age mapping. Do not use as a minor-protection filter without verifying the mapping via TikTok directly

LLM enrichment tier (v1.2+)

Off by default. Turn on any of the three flags below and each request goes through a Claude Haiku pass. You bring your own Anthropic API key - paste it into the anthropic_api_key input field (it is stored as a secret). Anthropic charges you directly for the tokens; this Actor's billable events (enriched-comment and video-summary) are separate and cover the pipeline, batching, and result curation. Each flag fires a distinct billable event so pricing is proportional to usage.

Extra fieldTurned on byWhat it is
sentiment_scoreenable_sentimentNumber from -1 (strongly negative) to 1 (strongly positive)
sentiment_labelenable_sentimentpositive / neutral / negative
intentenable_intent_classificationquestion / complaint / praise / spam / purchase_intent / mention / other
translated_textenable_translationLLM-translated text in the language set by translation_target_language (default en)
is_bot_likelyenable_bot_detectionBoolean - true if the comment reads as automated / spam-style
bot_confidenceenable_bot_detectionNumber 0-1, LLM confidence in the bot flag
type: "video_summary" row (one per video)enable_audience_summaryAdditional per-video row with the fields below
themes[]enable_audience_summaryUp to 5 short recurring-topic labels
top_questions[]enable_audience_summaryUp to 5 verbatim audience questions, most-asked first
sentiment_breakdownenable_audience_summary{ positive, neutral, negative } integer counts across the sample
buyer_intent_countenable_audience_summaryInteger count of purchase-intent comments in the sample
input_comment_sample_sizeenable_audience_summaryHow many comments the summary was computed from (capped at 200 by likes)

Billable events (configured in Apify Console pricing model):

  • enriched-comment fires once per row that received ANY row-level LLM enrichment (sentiment, intent, translation, and/or bot detection). All four are computed in one shared LLM call, so turning on multiple flags does not multiply the event count or the LLM cost.
  • video-summary fires once per video_summary row written

Typical bill

To ground the pricing in real numbers, here is what a single-video run costs at each level of enrichment (all Apify prices, before your own Anthropic token cost if any LLM flag is on):

What you turned on100 comments500 comments1,000 comments
Nothing (base scrape only)$0.40$2.00$4.00
enable_sentiment OR enable_intent_classification$0.90$4.50$9.00
enable_sentiment AND enable_intent_classification (batched, same event)$0.90$4.50$9.00
enable_audience_summary only$2.40$4.00$6.00
All three LLM flags on$2.90$6.50$11.00

Notes:

  • The base result event stays $4.00 per 1,000 - unchanged from v1.0.
  • enriched-comment is $5.00 per 1,000, so a 100-row run adds $0.50 for enrichment.
  • video-summary is a flat $2.00 per video summary written. It does not scale with comment count. A 10-video batch of summaries is $20, not $20,000 - the Apify UI's $2,000 / 1,000 display is a per-thousand normalization, not a per-run number.
  • Sentiment and intent share one LLM call when both are on, so turning on both costs the same as turning on one.
  • If you enable an LLM flag, Anthropic bills you separately for Claude Haiku tokens on your own account - typically fractions of a cent per row for classification and pennies per video summary.

Dataset views

The Apify Console renders the dataset with four pre-defined views:

  • Overview - all rows with author handle, text, likes, and reply count
  • Top-level comments - just top-level comments, with user.* flattened for a clean table
  • Replies - just reply rows, keyed by parent_comment_id
  • Errors - only failed pages, for quick triage
  • Authors - author-focused columns (best when include_author_details is on)
  • Enriched (sentiment + intent) - LLM-enriched view (best when enable_sentiment and/or enable_intent_classification are on)
  • Video summaries - one row per video with themes, top audience questions, sentiment breakdown, buyer-intent count (best when enable_audience_summary is on)

Sample output (a top-level comment plus a reply under it)

{
"type": "comment",
"cid": "7623828115408274207",
"text": "this take is sending me",
"digg_count": 4213,
"reply_comment_total": 87,
"create_time": 1714421567,
"create_time_iso": "2024-04-29T20:12:47.000Z",
"user": {
"uid": "6918391...",
"unique_id": "examplefan",
"nickname": "ExampleFan",
"avatar_url": "https://p16-sign-..."
},
"parent_comment_id": null,
"_metadata": { "page": 1, "fetched_at": "2026-05-05T13:01:22.114Z", "input_identifier": "https://www.tiktok.com/@stoolpresidente/video/7623818255903329566" }
}
{
"type": "reply",
"cid": "7623828999911223344",
"text": "lmaooo exactly what I was thinking",
"digg_count": 312,
"reply_comment_total": 0,
"create_time": 1714422001,
"create_time_iso": "2024-04-29T20:20:01.000Z",
"user": {
"uid": "6611112...",
"unique_id": "anotheruser",
"nickname": "AnotherUser",
"avatar_url": "https://p16-sign-..."
},
"parent_comment_id": "7623828115408274207",
"_metadata": { "page": 1, "fetched_at": "2026-05-05T13:01:24.778Z", "input_identifier": "https://www.tiktok.com/@stoolpresidente/video/7623818255903329566" }
}

Key-value store

A compact SUMMARY record is written to the key-value store on every run with: target URLs, per-video counts, totals, cap state, and timing. Inspect it from the Apify Console's Key-value store tab.


FAQ

Most operational questions ("how many comments", "reply threads", "bulk URLs", "cost", "export format", "no login") are answered in the question-headers section near the top. What follows is legal-adjacent and edge-case only.

Q: Is this legal? A: Your downstream use of the data is your responsibility - see the Terms of Service and Actor-specific addendum below.

Q: Do I need any third-party account? A: An Apify account is required. An Anthropic API key is required only if you turn on any of the v1.2 LLM enrichment flags (paste it into the anthropic_api_key input). Nothing else.

Q: How many URLs can I process in one run? A: As many as you want on a paid plan. On the free plan, the Actor stops once the 50-result cap is reached, regardless of how many URLs are queued.

Q: How do I get a comment cid? A: Run the Actor once with the video URL alone in video_urls. Every top-level comment row includes its cid. Add those values back to video_urls as URL::cid entries, or enable auto_fetch_replies to do it automatically.

Q: How do I know whether a comment has replies? A: Check the reply_comment_total field on top-level comment rows. Anything above 0 has a reply thread.

Q: What happens if one video URL fails? A: The other URLs continue. The failure is written to the dataset as an error row and aggregated into the ERRORS record in the key-value store.

Q: Are there rate limits? A: The Actor handles retries internally with exponential backoff on transient errors. You generally do not need to throttle on your side.

Q: Is there a free way to scrape TikTok comments? A: Free GitHub projects and browser extensions exist, but most break when TikTok changes its layout or require manual scrolling per video. This Actor is paid ($4 per 1,000 results, plus opt-in enrichment) and maintained.

Q: Can I search TikTok comments by a specific user instead of by video? A: This Actor takes TikTok video URLs as input, not usernames. Every output row includes the commenter's handle (user.unique_id), so you can filter by user on your side. For username-based discovery, see TikTok User Search Scraper.

Q: What about TikTok's anti-scraping enforcement? A: TikTok's Terms restrict automated extraction. Your downstream use must comply with TikTok's Terms.

Q: What if TikTok sends a cease-and-desist? A: Notify UnseenUser within 48 hours via the Apify profile contact form (https://apify.com/UnseenUser) and stop using the Actor immediately.

Q: Can I use this data to train AI? A: NO. TikTok's Terms prohibit AI training on TikTok data, and creators retain copyright in their content. This applies to both raw scraped comments AND the v1.2 LLM-enriched output.

Q: What about minors? A: TikTok has many under-18 users. This Actor's Terms strictly prohibit using data of users you know or suspect are minors. See the addendum below.


Technical details

  • Output: streamed to the Apify dataset (multiple presentation views available in the Console)
  • Format: JSON, CSV, XLSX, or via the Apify API
  • Bulk: sequential per URL with isolated error handling
  • Retries: 3 with exponential backoff (1s, 2s, 4s) on transient errors
  • Key-value store: a compact SUMMARY record per run is written for quick inspection
  • Live view: the running Actor exposes a small HTTP API (/health, /progress, /cap, /summary) documented by an OpenAPI schema in the Actor definition

Demo video

New to Apify? Schedule this Actor to run automatically:

Connect this Actor to your stack:


GDPR note

Comment text and commenter handles are personal data. Use only in compliance with applicable privacy laws (GDPR, UK GDPR, CCPA, Israeli PPL Amendment 13, etc.). You are the data controller for any downstream processing.


Cross-platform sentiment + engagement intelligence:

See all scrapers by unseenuser



Terms of Service

Version: 4.0 Effective Date: May 5, 2026

These Terms of Service ("Terms") form a binding legal agreement between you ("User," "you," "your") and UnseenUser, the Publisher of this Apify actor ("UnseenUser," "the Publisher," "we," "us," "our").

0. Acceptance by use - IMPORTANT

0.1 How you accept these Terms

You accept these Terms by any of the following actions, each of which constitutes a clear, affirmative act of acceptance:

  • (a) Running the Actor - initiating any execution of the Actor on the Apify platform
  • (b) Using any output returned by the Actor for any purpose
  • (c) Continuing to access the Actor's listing or documentation after these Terms are visible

0.2 Continuing acceptance

Each time you run the Actor or use its outputs, you reaffirm your acceptance of the then-current Terms. If you do not agree to these Terms or any subsequent update, you must stop using the Actor immediately.

0.3 No anonymous acceptance

You cannot disclaim acceptance by failing to read these Terms before running the Actor, running the Actor through automated systems, or sharing your Apify account with others who may not have read these Terms.

0.4 If you do not accept

If you do not agree to these Terms, you must not run the Actor. No use is authorized without acceptance.

Preamble - understanding the architecture

You (User) -> Apify Platform -> Actor (software) -> Source Platform
You (User) <- Apify Platform <- Actor (software) <-
  • You (the User): run the Actor on the Apify platform with input parameters you choose
  • Apify: operates the cloud infrastructure that hosts and executes Actors (Apify Technologies s.r.o., Czech Republic)
  • The Publisher (us): publishes software code (the Actor) on Apify's platform. The Publisher does not operate scraping infrastructure. The Publisher does not store or retain data returned by the Actor. The Publisher does not see, log, or process the personal data of any individuals returned in the Actor's outputs beyond what is incidental to passing the data through.
  • Source Platform: TikTok, whose publicly visible data is accessed.

Your relationship with the Publisher is that of a software user to a software vendor.

These Terms operate alongside but do not replace:

  • Apify's Terms of Service and Acceptable Use Policy
  • Source Platform terms (TikTok) governing the public data accessed
  • Applicable law in your jurisdiction and the jurisdictions of data subjects

1. Nature of the service

1.1 What the Actor is

The Actor is a software program published on the Apify platform. It accepts structured input from you, retrieves publicly visible data, and returns it to you in a structured format on the Apify platform. The Actor runs on Apify's cloud, not on the Publisher's servers.

1.2 What the Actor is not

The Actor is not a data storage or retention service, not a licensed access channel to TikTok, and not affiliated with, endorsed by, sponsored by, or authorized by TikTok or any source platform.

1.3 The Publisher's limited role

The Publisher's role is limited to designing and writing the Actor's source code, publishing it on Apify, maintaining it, and providing documentation and support via Apify's contact mechanism. The Publisher is a software vendor, similar to a developer publishing an app on an app store. The Publisher is not a data provider, data broker, data processor, or data controller for purposes of GDPR, CCPA, Israel's Privacy Protection Law, or equivalent.

2. Who may use the Actor

2.1 Eligibility

You may use the Actor only if:

  • (a) You are at least 18 years old or the age of majority in your jurisdiction
  • (b) You have legal capacity to enter into binding contracts
  • (c) You are not located in or resident of a country subject to comprehensive sanctions by the United States, European Union, United Kingdom, or Israel
  • (d) You are not on any prohibited persons list

2.2 User representations

By using the Actor, you represent and warrant that your identity and intended use are accurately disclosed, your intended use complies with applicable law, you will independently comply with TikTok's Terms of Service, and you will respect data subject rights where output includes personal data.

3. Permitted uses

The Actor may be used for any lawful purpose, including market research, competitive analysis, academic research, journalism and investigative reporting, internal business intelligence, brand monitoring, and recruitment research where consistent with applicable employment law.

4. Prohibited uses

You may not use the Actor for any of the following:

4.1 Illegal activity

Activity illegal under the law of your jurisdiction, the User's jurisdiction, or the jurisdiction of any data subjects.

4.2 Harassment, stalking, and personal targeting

Compiling profiles for harassment, stalking, or doxxing; tracking individuals' movements or activities without their knowledge; building profiles of journalists, activists, dissidents, or vulnerable populations for retaliatory purposes.

4.3 Discrimination

Using outputs for discriminatory employment, lending, housing, or insurance decisions based on protected characteristics. Building lists for discriminatory purposes.

4.4 Spam and unsolicited commercial communication

Sending unsolicited marketing in violation of CAN-SPAM, CASL, GDPR, PECR, Israeli Anti-Spam Law, or equivalent. Building "lead lists" from scraped contacts without proper consent infrastructure. Reselling contact data for spam purposes.

4.5 Fraud and deception

Identity theft, impersonation, generation of fake reviews or coordinated inauthentic behavior, election interference, political disinformation, securities fraud.

4.6 Source platform abuse

Using outputs to circumvent TikTok's technical protection measures, creating fake accounts on TikTok based on Actor outputs, vote / engagement manipulation, building services that competitively substitute for TikTok.

4.7 Reselling the Actor's service

Reselling raw Actor outputs as your own data product or scraping-as-a-service. Sharing your Apify credentials to provide third parties indirect access. Building competing API services using Actor outputs.

4.8 AI training without authorization

Using Actor outputs as training data for commercial AI / ML models without separate licensing authority from TikTok.

4.9 Sensitive targeting

Specifically targeting or profiling based on health conditions, sexual orientation, religious beliefs, political opinions, or other sensitive characteristics. Targeting children under 16 (or the local age of consent for data processing).

4.10 Privacy law violations

Processing personal data of EU / UK / California / Israeli residents without complying with applicable privacy law. Failing to honor data subject access, deletion, or objection requests. Processing data for purposes incompatible with its publication context.

5. Source platform terms - your responsibility

5.1 Acknowledgment

The Actor accesses publicly visible data on TikTok. You acknowledge that you are solely responsible for ensuring your downstream use of data obtained through the Actor complies with TikTok's Terms of Service.

5.2 Review TikTok terms before commercial use

5.3 Cease-and-desist compliance

If you receive a cease-and-desist letter or other legal demand from TikTok regarding your use of Actor outputs, you must:

  • (a) Cease the contested use immediately
  • (b) Notify UnseenUser within 48 hours via the Apify profile contact form (https://apify.com/UnseenUser)
  • (c) Cooperate with the Publisher as needed to mitigate
  • (d) Not assert against the Publisher any claim arising from your inability to use the Actor for that Source Platform

6. Data protection - reflecting actual architecture

6.1 Roles under privacy law

For purposes of GDPR, UK GDPR, CCPA, Israel's Privacy Protection Law (PPL) including Amendment 13, and equivalents:

  • You (the User) are the Data Controller of any personal data you obtain through the Actor and subsequently process for your own purposes
  • The Publisher acts solely as a software vendor, not as a data controller or processor, because the Publisher does not store, retain, or substantively process personal data

6.2 No data retention by the Publisher

The Publisher confirms it does not maintain a database of personal data obtained through the Actor. The Actor passes data directly to you on the Apify platform. Apify's standard execution and operational logging may include limited information about Actor runs (input parameters, run duration, data volume) - this is governed by Apify's own privacy practices.

6.3 Your obligations as data controller

Where your use of the Actor involves processing personal data, you are responsible for: establishing a lawful basis for your processing, providing transparent notice to data subjects, honoring data subject access / rectification / erasure / restriction / portability requests, implementing appropriate security measures, conducting Data Protection Impact Assessments where required, appointing a Data Protection Officer if your operations require one, registering databases with applicable supervisory authorities, honoring opt-out requests for direct marketing, and cross-border transfer safeguards where data crosses borders.

6.4 Israel's Amendment 13 - user compliance

If your use of the Actor involves Israeli residents' personal data, you must comply with the Privacy Protection Law as amended (Amendment 13, effective August 14, 2025). These obligations are yours as the data controller, not the Publisher's as the software vendor.

6.5 Sensitive data targeting restrictions

You will not use the Actor to specifically target, profile, or build datasets focused on health or medical conditions, religious beliefs, political opinions, sexual orientation or gender identity, genetic or biometric data, criminal history, or children under 16.

7. Intellectual property

7.1 Actor code

The Actor's source code, schemas, documentation, and branding are owned by the Publisher. You receive a limited, non-exclusive, non-transferable, revocable license to use the Actor for permitted purposes during your active subscription / run with Apify.

7.2 Output data

The Publisher claims no ownership over the public data the Actor returns. TikTok may have copyright, database rights, or other rights in their data; data subjects may have copyright in user-generated content. Your use of output data must respect these rights independently.

7.3 Restrictions

You may not reverse engineer, decompile, or reuse the Actor's code in a competing actor.

7.4 Feedback

Feedback you provide may be used by the Publisher to improve products without compensation to you.

8. Pricing and payment

8.1 Apify platform billing

Pricing is administered through Apify's pricing models. Apify processes all payments. Apify's payment terms govern refunds and disputes.

8.2 Pricing changes

The Publisher may change Actor pricing with at least 14 days' notice via the Actor's Apify listing.

8.3 No refunds for misuse

If your access is suspended or terminated for breach of these Terms, you forfeit any unused balance and are not entitled to refunds.

9. Service availability and changes

9.1 No uptime guarantee

The Actor depends on the Apify platform and TikTok's continued public accessibility. Any of these may change behavior, restrict access, or become unavailable without notice. The Publisher makes no uptime guarantees.

9.2 Service discontinuation

The Publisher may discontinue the Actor at any time. Reasonable notice will be provided when feasible.

10. Disclaimers

10.1 "AS IS" service

THE ACTOR IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTIES OF ANY KIND, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR PURPOSE, NON-INFRINGEMENT, OR ACCURACY OF DATA.

10.2 No representation of lawfulness

The Publisher makes no representation that your specific use of the Actor or the data it returns is lawful in your jurisdiction or under TikTok's terms. The burden of determining lawfulness for your use case is yours.

10.3 No endorsement of source content

Content returned by the Actor was created by third parties. The Publisher does not endorse, verify, or take responsibility for it.

11. Limitation of liability

11.1 Aggregate liability cap

TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL THE AGGREGATE LIABILITY OF THE PUBLISHER FOR ALL CLAIMS RELATING TO THE ACTOR EXCEED THE GREATER OF:

  • (a) ONE HUNDRED U.S. DOLLARS (US $100), OR
  • (b) THE AMOUNTS YOU PAID THROUGH APIFY FOR USE OF THE ACTOR IN THE THREE (3) MONTHS IMMEDIATELY PRECEDING THE EVENT

11.2 Excluded damages

THE PUBLISHER IS NOT LIABLE FOR INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR LOSS OF PROFITS, REVENUE, OR DATA, EVEN IF ADVISED OF THE POSSIBILITY.

11.3 Time limit

Any claim must be brought within one (1) year of the event.

12. Indemnification

12.1 Your indemnification of the Publisher

You agree to defend, indemnify, and hold harmless the Publisher from any claims arising from your use of the Actor, your violation of these Terms, your violation of any law (including privacy law), your violation of TikTok's Terms of Service, your processing of personal data obtained through the Actor, and reasonable attorneys' fees and costs of defending such claims.

12.2 Defense

The Publisher may assume defense at your expense. You will cooperate with the Publisher's defense.

12.3 Scope

The indemnification covers reasonable, foreseeable third-party claims arising from your use. It does not extend to claims arising from the Publisher's gross negligence or willful misconduct, or claims regarding the Actor's source code itself.

13. Suspension and termination

13.1 Termination by the Publisher

The Publisher may terminate your access for material breach, illegal use, breach of warranty, or upon credible legal demand.

13.2 Effects of termination

Your license ends, you must cease use, and applicable provisions survive.

13.3 Termination by you

You may stop using the Actor at any time on Apify.

14. Dispute resolution

14.1 Informal resolution first

Send a detailed written description of the dispute via UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) and wait 60 days for resolution attempt before any formal claim.

14.2 Governing law

These Terms are governed by the substantive laws of the State of Israel, without regard to conflict of law principles.

14.3 Exclusive jurisdiction

Any dispute shall be brought exclusively in the competent civil courts of Tel Aviv-Jaffa, Israel.

14.4 No class actions

You agree to bring claims only in your individual capacity.

14.5 Attorneys' fees

The prevailing party recovers reasonable attorneys' fees.

15. Miscellaneous

15.1 Entire agreement

These Terms (with Addendum and incorporated documents) are the entire agreement.

15.2 Severability

Unenforceable provisions are reformed to the minimum extent or severed.

15.3 Assignment

You may not assign without the Publisher's consent. The Publisher may assign to affiliates, successors, or acquirers.

15.4 Force majeure

Neither party is liable for failure due to events beyond reasonable control.

15.5 Third-party beneficiaries

Apify is an intended third-party beneficiary of Sections 4 (Prohibited Uses), 5 (Source Platform Compliance), and 12 (Indemnification).

15.6 Survival

Sections 0 (Acceptance), 4, 5, 6, 7, 10, 11, 12, 14, and 15 survive termination.

15.7 Language

English controls. Translations are for convenience only.

The Publisher operates on the Apify platform under the username UnseenUser (https://apify.com/UnseenUser). The Publisher is a registered legal entity. Upon receipt of valid legal process directed through Apify's official channels, the Publisher's full legal identity may be disclosed as required by law.

16. Acknowledgment

By using the Actor, you acknowledge that you have read these Terms, understand the architecture, accept responsibility for your use, accept that your indemnification obligations cover third-party claims arising from your use, accept that disputes are resolved in Israeli courts, and accept that the Publisher's identity, while not publicly disclosed in this listing, can be obtained through valid legal process via Apify.

For questions, use UnseenUser's Apify profile contact form (https://apify.com/UnseenUser) before running the Actor.


Actor-specific Terms of Service Addendum

This addendum supplements the Master Terms of Service V4.0 above. By running this Actor, you accept both the Master ToS and this addendum.

A. Architectural disclosure

This Actor is a software wrapper. It accepts your input parameters, retrieves publicly visible TikTok comment and reply data, and returns the response data to you on the Apify platform. UnseenUser does not store, log, or substantively process the data returned.

B. Nature of data returned

This Actor returns top-level comments on a TikTok video (text, comment ID, like count, reply count, create_time, commenter handle / nickname) plus optional threaded replies to specified comment IDs (full reply text and commenter info per reply).

Where the Actor's output includes individual people's names, photos, contact details, or content authored by them, that data constitutes personal data subject to GDPR, CCPA, Israeli Privacy Protection Law (including Amendment 13), and equivalent privacy laws in your downstream processing - but only in your hands as the data controller, not in UnseenUser's hands as the software vendor.

C. Permitted use cases

You may use this Actor for the following purposes (non-exhaustive list):

  • Community management - drill into customer feedback on your brand TikToks
  • Crisis monitoring - when a brand TikTok goes negative, get the full picture of the dissent
  • Customer feedback intelligence - surface common complaints / praise on your product videos
  • Influencer vetting - read what audiences actually say about a creator before partnership
  • Trend conversation analysis - understand WHY a video went viral via comment patterns
  • Brand reputation research - see what's said about competitors in their comment sections
  • Academic research - analyze conversation dynamics around viral content

D. Specifically prohibited uses

In addition to Master ToS Section 4 prohibitions, you may NOT:

  • Build cold-DM tools targeting commenters who engaged with sensitive content
  • Republish individuals' comments outside the TikTok context for commercial purposes
  • Build "who commented on this" databases for sale - this is data broker territory
  • Use comment data to identify and harass commenters whose views you disagree with
  • Track reactions to sensitive content (mental health, illness, layoffs) to identify vulnerable people for predatory targeting
  • Aggregate comments across many videos to profile individuals without consent
  • Use comment data to train commercial AI / LLMs without proper licensing

E. Platform terms of service considerations

TikTok's Terms of Service prohibit automated extraction. TikTok has VERY MANY minor users - comment scraping is high-risk under minor protection laws (COPPA, GDPR Article 8, Israeli Privacy Law). If TikTok issues a cease-and-desist, notify UnseenUser within 48 hours via the Apify profile contact form (https://apify.com/UnseenUser).

F. Two-step flow

This Actor combines two steps:

  1. Comments step - returns top-level comments with cid (comment IDs) and reply counts
  2. Replies step - for each comment_id with replies > 0 (or for IDs you specify), fetches the threaded replies

You can control behavior with auto_fetch_replies (default false) and min_replies_threshold (default 0 - expand every comment). Adding ::commentId to an entry in video_urls overrides both - only the specified reply thread is fetched for that video.

G. Commenter personal data - heightened care

TikTok commenters skew younger than LinkedIn - many are minors. Commenter unique_id (handle), nickname, and avatar URLs constitute personal data. Apply:

  • Strict minor protection (see Section H)
  • GDPR documentation if you have any EU exposure
  • Israeli Anti-Spam Law compliance for any outreach
  • CCPA / state privacy law compliance for US

H. Minor protection - CRITICAL

TikTok has significant under-18 user populations. Many commenters do not disclose age. You MUST:

  • NOT use this Actor to extract comments from videos targeting or featuring minors
  • NOT use this Actor for any product targeted at minors without parental consent (COPPA, GDPR Article 8, Israeli Privacy Law)
  • DELETE any commenter data you discover relates to a minor unless you have valid parental consent
  • If commenter usernames, bios, or content signals indicate minor status, treat as minor by default

This restriction is non-negotiable - minor data protection violations carry the highest regulatory penalties.

Each comment is independently copyrighted by its author. The same fair-use rules apply:

  • Quote with attribution: typically fair use
  • Aggregate metrics: no copyright issue
  • Republish verbatim in commercial products: NOT permitted
  • AI training without licensing: NOT permitted

J. Sensitive comment threads

Some TikTok video comment sections attract particularly sensitive engagement:

  • Mental health content - commenters often disclose their own struggles
  • Tragedy / news content - commenters reveal political and emotional positions
  • Beauty / body content - commenters reveal insecurities that bad actors exploit
  • Children's content - commenters may include minors and predators

DO NOT use this Actor to harvest such threads for commercial use. Even where technically public, downstream commercial use without consent is non-compliant under GDPR / Israeli / CCPA frameworks AND may violate TikTok's special protections for vulnerable users.

K. Aggregation limit - the critical line

UseStatus
Pulling comments on ONE video for community managementPermitted
Pulling comments across a brand's ~10 videos for sentiment analysisGenerally permitted with lawful basis
Building a database of comments across THOUSANDS of videosProhibited (surveillance / data broker territory)
Profiling specific commenters by aggregating their comments across many videosProhibited

Example tasks

Pre-built, ready-to-run tasks for the most common workflows: