TikTok Comments Scraper API - Replies, Handles, No Login ✅
Pricing
from $4.00 / 1,000 results
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
Maintained by CommunityActor stats
4
Bookmarked
3
Total users
2
Monthly active users
15 days ago
Last modified
Categories
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:
- Automatic: set
auto_fetch_replies=trueand every top-level comment with at leastmin_replies_thresholdreplies gets its full thread pulled in the same run. - Manual: add
::commentIdafter a URL invideo_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→ addssentiment_score(-1 to 1) andsentiment_label(positive/neutral/negative) to every comment and reply row.enable_intent_classification→ addsintent(question / complaint / praise / spam / purchase_intent / mention / other) to every row.enable_audience_summary→ writes onevideo_summaryrow per video withthemes[],top_questions[](verbatim, most-asked first),sentiment_breakdown, andbuyer_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:
| Event | Price | When it fires |
|---|---|---|
result | $4.00 per 1,000 | Every dataset row (base scrape) |
enriched-comment | $5.00 per 1,000 | Every comment/reply row that received sentiment and/or intent |
video-summary | $2.00 per event | Every video_summary row written |
Concrete numbers for a single-video run:
| What you turned on | 100 comments | 500 comments | 1,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=trueto get theis_pinnedflag 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_sizefield on the summary row tells you exactly how many comments were used. user.predicted_age_groupis 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?
| Actor | Users | Price / 1k | Reply threads | Requires cookies | AI enrichment | Notes |
|---|---|---|---|---|---|---|
| This Actor | growing | $4.00 base, opt-in enrichment on top | Yes | No | Yes (opt-in) | Only actor in the category with per-row sentiment + intent and per-video audience summaries |
clockworks/tiktok-comments-scraper | 30k+ | $1.25 | Partial | No | No | Category leader on raw scrape, but no threaded replies, no enrichment |
apidojo/tiktok-comments-scraper | 5k+ | $0.30 | Partial | No | No | Cheapest, but users report inconsistent user info and missing time-frame filter |
| Various $0.30-$0.50 actors | few hundred each | $0.30-$0.50 | No | Some | No | Undercut 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
- Click Try for free on this Actor's page
- Paste one or more TikTok video URLs into
video_urls. Each entry is either a URL (fetches top-level comments) orURL::commentId(fetches only that comment's reply thread) - (Optional) Turn on
auto_fetch_repliesto expand reply threads automatically for the bare-URL entries - (Optional, v1.2+) Paste an Anthropic API key into
anthropic_api_keyand turn on any ofenable_sentiment,enable_intent_classification,enable_audience_summary - Run the Actor
- Download results as JSON, CSV, or XLSX, or pull via the Apify API. Open the Clean dataset view for a scannable table
Inputs
| Input | Type | Required | Description | Example |
|---|---|---|---|---|
video_urls | array of strings | Yes | One 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_pages | integer | No | Max 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_replies | boolean | No | If true, automatically fetch replies for top-level comments that meet min_replies_threshold. Only applies to bare-URL entries. Default false. | false |
min_replies_threshold | integer | No | When auto_fetch_replies=true, only expand replies for comments with at least N replies. 0 = every comment (default). | 0 |
max_reply_pages_per_comment | integer | No | Max reply batches per comment. Each batch is one request that returns about 20-50 replies. 0 = all replies (default). | 0 |
include_video_metadata | boolean | No | Adds 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_details | boolean | No | Adds user.verified (bool) + user.verify_reason (string) + user.sec_uid (stable secure ID). Free. Default false. | false |
include_parsed_text | boolean | No | Adds mentions[] and hashtags[] parsed from the comment text_extra structure. Free. Default false. | false |
include_algorithm_scores | boolean | No | Adds algorithm_score.reply_score + algorithm_score.show_more_score (TikTok's own comment ranking numbers). Free. Default false. | false |
include_experimental_fields | boolean | No | Adds 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_key | string (secret) | No | v1.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_sentiment | boolean | No | v1.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_classification | boolean | No | v1.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_summary | boolean | No | v1.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_translation | boolean | No | v1.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_language | string | No | v1.3+ LLM tier. Target language for translation (e.g. en, es, fr, de, ja). Ignored when enable_translation is off. | en |
enable_bot_detection | boolean | No | v1.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_pinned | boolean | No | v1.3+ filter. Drops the video creator's pinned comment(s) from the output. Filtered client-side after fetch. Default false. | false |
date_from | string (YYYY-MM-DD) | No | v1.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_to | string (YYYY-MM-DD) | No | v1.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
| Field | Description |
|---|---|
type | comment (top-level), reply (threaded), or comment_error / reply_error for failed pages |
cid | Comment ID. Add it back to video_urls as URL::cid to fetch its replies. |
text | Comment text as authored |
digg_count | Like count on the comment |
reply_comment_total | Number of replies on a top-level comment (0 for replies) |
create_time / create_time_iso | Unix timestamp + ISO 8601 |
user.uid | TikTok internal user ID |
user.unique_id | Public TikTok handle (@handle) |
user.nickname | Display name |
user.avatar_url | Avatar image URL |
parent_comment_id | Null for top-level. The parent cid for reply rows. |
raw | Raw 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 field | Turned on by | What it is |
|---|---|---|
video_id | include_video_metadata | TikTok's internal video ID (aweme_id) for this row's video |
video_url | include_video_metadata | Echo of the input URL for cross-referencing |
is_pinned | include_video_metadata | True if the video's creator pinned this comment |
is_author_liked | include_video_metadata | True if the video's creator liked (dug) this comment |
language | include_video_metadata | TikTok's detected language code for the comment text (e.g. en) |
share_url | include_video_metadata | Direct share URL for the comment (may be empty for replies) |
sort_tags | include_video_metadata | TikTok's algorithm labels for the comment, parsed as an object |
is_translatable | include_video_metadata | True if TikTok offers a translate button on the comment |
is_high_purchase_intent | include_video_metadata | TikTok's own buyer-intent flag. Present on replies; may be null on top-level comments |
reply_to_reply_id | include_video_metadata | For nested replies, the cid of the reply being replied to |
thread_id | include_video_metadata | TikTok's thread identifier for a reply chain |
user.verified | include_author_details | True if the commenter has any verification badge |
user.verify_reason | include_author_details | The verification badge label / reason string, when present |
user.sec_uid | include_author_details | Stable secure user ID, useful for linking rows across runs |
mentions[] | include_parsed_text | User IDs of @-mentions parsed from the comment |
hashtags[] | include_parsed_text | Hashtag names parsed from the comment |
algorithm_score | include_algorithm_scores | TikTok's own ranking numbers: { reply_score, show_more_score }. Useful for surfacing top-ranked comments |
user.predicted_age_group | include_experimental_fields | Experimental. 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 field | Turned on by | What it is |
|---|---|---|
sentiment_score | enable_sentiment | Number from -1 (strongly negative) to 1 (strongly positive) |
sentiment_label | enable_sentiment | positive / neutral / negative |
intent | enable_intent_classification | question / complaint / praise / spam / purchase_intent / mention / other |
translated_text | enable_translation | LLM-translated text in the language set by translation_target_language (default en) |
is_bot_likely | enable_bot_detection | Boolean - true if the comment reads as automated / spam-style |
bot_confidence | enable_bot_detection | Number 0-1, LLM confidence in the bot flag |
type: "video_summary" row (one per video) | enable_audience_summary | Additional per-video row with the fields below |
themes[] | enable_audience_summary | Up to 5 short recurring-topic labels |
top_questions[] | enable_audience_summary | Up to 5 verbatim audience questions, most-asked first |
sentiment_breakdown | enable_audience_summary | { positive, neutral, negative } integer counts across the sample |
buyer_intent_count | enable_audience_summary | Integer count of purchase-intent comments in the sample |
input_comment_sample_size | enable_audience_summary | How many comments the summary was computed from (capped at 200 by likes) |
Billable events (configured in Apify Console pricing model):
enriched-commentfires 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-summaryfires once pervideo_summaryrow 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 on | 100 comments | 500 comments | 1,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
resultevent stays $4.00 per 1,000 - unchanged from v1.0. enriched-commentis $5.00 per 1,000, so a 100-row run adds $0.50 for enrichment.video-summaryis 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,000display 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_detailsis on) - Enriched (sentiment + intent) - LLM-enriched view (best when
enable_sentimentand/orenable_intent_classificationare on) - Video summaries - one row per video with themes, top audience questions, sentiment breakdown, buyer-intent count (best when
enable_audience_summaryis 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
SUMMARYrecord 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.
Related scrapers
Cross-platform sentiment + engagement intelligence:
- LinkedIn Post Comments & Reactions - same buyer logic, LinkedIn side
- TikTok Trends Scraper - find viral content to analyze
- Reddit Scraper + Ads Library - cross-platform sentiment
- TikTok Profile Posts (Bulk Video Scraper) - get TikTok video URLs in bulk, then feed them into this comments scraper
- Facebook Comment Scraper - Posts & Reels - same job on Facebook, full comment + reply threads
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 PlatformYou (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.
15.8 Publisher identification for legal process
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:
- Comments step - returns top-level comments with
cid(comment IDs) and reply counts - Replies step - for each
comment_idwith 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.
I. Comment author copyright
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
| Use | Status |
|---|---|
| Pulling comments on ONE video for community management | Permitted |
| Pulling comments across a brand's ~10 videos for sentiment analysis | Generally permitted with lawful basis |
| Building a database of comments across THOUSANDS of videos | Prohibited (surveillance / data broker territory) |
| Profiling specific commenters by aggregating their comments across many videos | Prohibited |
Example tasks
Pre-built, ready-to-run tasks for the most common workflows:
- Bulk Export TikTok Comments from Many Videos - paste a list of video URLs, export every top-level comment from each in one run.
- Scrape Every Comment and Reply Thread on a TikTok Video - one video in, top-level comments plus full reply threads out.
- TikTok Comments Monitoring for Brand Crisis Signals - track complaints, crisis cues, and sentiment on your brand's TikToks with full reply context.
- Vet TikTok Creators: Read Audience Comments First - before partnering with a creator, see what their audience actually says in the comments.
- Fetch Replies Under Specific TikTok Comment IDs - pass
URL::cidentries to pull every reply under each specified thread.