YouTube Comments Scraper with Replies
Pricing
from $0.75 / 1,000 comment scrapeds
YouTube Comments Scraper with Replies
Extract public YouTube comments and replies with text, likes, authors, badges, pinned and hearted signals, and creator interactions. No YouTube API key or login is required.
Pricing
from $0.75 / 1,000 comment scrapeds
Rating
0.0
(0)
Developer
Sebastián S
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
What is YouTube Comments Scraper with Replies?
YouTube Comments Scraper with Replies reads publicly available comments from individual YouTube videos, Shorts, and ended live VODs. Provide one or more supported video URLs or raw 11-character video IDs, and the Actor returns flat, structured rows for top-level comments and, optionally, replies. Use the resulting dataset to analyze conversations, creator interactions, links, and engagement without configuring a YouTube API key or signing in to YouTube.
- Accepts up to 1,000 video URLs or IDs per run.
- Uses YouTube's Top comments or Newest first order.
- Outputs each parent, its replies, then the next parent.
- Extracts text, likes, reply counts, authors, badges, pins, and creator hearts.
- Optionally adds video metadata, links, mentions, and hashtags.
- Deduplicates by
commentId, including during checkpoint recovery. - Emits typed status rows for invalid, empty, partial, or failed inputs.
It is HTTP-only and does not crawl channels, read live chat, post comments, translate text, or analyze sentiment.
What data can it extract or produce?
Each successful comment row can contain:
| Data group | Exact output fields |
|---|---|
| Video | videoId, videoUrl, videoTitle, videoChannelId, videoChannelName, videoDurationSeconds, videoPublishedAt, videoThumbnailUrl, isShort, isLive |
| Thread and order | commentId, commentUrl, threadId, parentCommentId, kind, depth, position, threadPosition, replyPosition, sourcePage, replyFetchStatus, repliesScraped |
| Content and counts | text, links, mentions, hashtags, likeCount, likeCountDisplay, likeCountPrecision, replyCount, replyCountDisplay, replyCountPrecision |
| Author | authorName, authorChannelId, authorUrl, authorAvatarUrl, authorIsVerified, authorIsVerifiedArtist, authorIsCreator, authorIsMember, authorBadges, memberBadgeName, memberBadgeUrl |
| Signals and timing | isPinned, isCreatorHearted, hasCreatorReply, isCreatorReply, isEdited, publishedAt, publishedTimeText, fetchedAt |
| Traceability | schemaVersion, recordType, status, inputIndex, input, resultKey, sort, provider, extractionAttempt, extractionMs, warnings |
Counts can be exact, approximate, or unknown. Source-dependent values may be null. Disabling metadata or author details makes those groups null; disabling text references makes links, mentions, and hashtags null. YouTube may provide only publishedTimeText, leaving publishedAt null.
What can you use the data for?
- Analyze audience questions and recurring themes around a video.
- Reconstruct reply threads for community or conversation research.
- Track pinned comments, creator hearts, and creator-authored replies.
- Compare engagement using likes and reported reply counts while respecting count precision.
How much does it cost?
The Actor uses pay-per-event pricing. The current Pricing tab lists:
| Billing event | Price | When it is charged |
|---|---|---|
| Actor Start | $0.00005 | Once when the Actor starts. |
comment-scraped | $0.00075 | Once for each successfully stored top-level comment or reply. |
Current formula: run price = $0.00005 + (comment rows x $0.00075). The minimal input below allows up to 100 top-level comments and no replies, for a maximum of $0.07505; fewer comments cost less. video-status rows do not trigger comment-scraped, but Actor Start still applies. Check the Pricing tab before a large run because prices can change.
How to use YouTube Comments Scraper with Replies
Quick start
- Open the Actor in Apify Console and add a video URL or ID.
- Set limits and enable replies only when needed.
- Start the run, then open Output or the default dataset.
This is the minimal valid input. Omitted settings use the defaults documented in the Input tab.
{"videoUrls": ["https://www.youtube.com/watch?v=aircAruvnKk"]}
What input does the Actor accept?
Accepted forms are raw 11-character IDs and individual youtube.com/watch, youtu.be, /shorts/, /embed/, /live/, youtube-nocookie.com/embed, music.youtube.com/watch, and mobile watch URLs. Only the video ID is retained. Other YouTube resource types return UNSUPPORTED_INPUT_TYPE.
| Field | Default | Limits and interaction |
|---|---|---|
videoUrls | Required | 1-1,000 strings; duplicate video IDs keep only the first input. |
sort | top | top or newest; this is YouTube's source order, not a local sort. |
maxTopLevelCommentsPerVideo | 100 | 0-100,000; 0 removes this cap, but hard result caps still apply. |
includeReplies | false | Enables public reply requests; replies are separate billable rows. |
maxRepliesPerThread | 20 | 0-10,000; used only with replies; 0 requests all available replies. |
maxResultsPerVideo | 1000 | 1-100,000; hard cap across parents and replies for one video. |
maxTotalResults | 10000 | 1-1,000,000; hard comment-row cap across the run. |
includeVideoMetadata | true | Adds a metadata request for available video and channel fields. |
includeAuthorDetails | true | Includes identity, avatar, verification, membership, and badges. |
includeTextReferences | true | Parses links, mentions, and hashtags from YouTube text runs. |
locale | en, US | Session language/country and count parsing; no translation. |
cleaning | All enabled | Entity decoding, Unicode NFC, whitespace/control cleanup, and trimming only. |
maxVideoConcurrency | 4 | 1-20 videos processed concurrently. |
maxReplyConcurrencyPerVideo | 3 | 1-20 concurrent reply threads per video page. |
maxRetriesPerRequest | 3 | 0-5 temporary retries on the same session and proxy identity. |
requestTimeoutSecs | 30 | 10-120 seconds per YouTube request. |
proxyConfiguration | Apify residential proxy | Supports Apify Proxy or custom proxy URLs; it can also be disabled. |
debug | false | Sanitized phases and codes; no content, identities, secrets, or proxy URLs. |
Replies, zero-as-unlimited settings, and high caps can increase requests, duration, and charge. Hard per-video, run-wide, and spending limits take precedence.
What output does the Actor produce?
The default dataset contains successful comment rows and free video-status rows with empty, partial, or error status. This compact, sanitized example uses the same video; see the Output tab for the complete schema.
{"recordType": "comment","status": "success","videoId": "aircAruvnKk","commentId": "example-comment-id","threadId": "example-comment-id","parentCommentId": null,"kind": "top-level","text": "Clear explanation, thank you!","likeCount": 42,"likeCountPrecision": "exact","replyCount": 3,"repliesScraped": 0,"replyFetchStatus": "not-requested","publishedAt": null,"publishedTimeText": "2 years ago"}
Top-level rows have depth: 0, a null parent, and their own ID as threadId. Replies have depth: 1 and the parent ID in threadId and parentCommentId.
Results are stored in the default dataset, with all, comments, topLevelComments, replies, creatorInteractions, errors, and partial views. Export JSON, JSONL, CSV, Excel, XML, HTML table, or RSS. The default key-value store contains aggregate OUTPUT and per-video VIDEO_SUMMARIES; CHECKPOINT and EMITTED-IDS-* are internal recovery state.
How are errors and partial results handled?
One bad video does not discard other results. If extraction stops after saving comments, they remain and a video-status row reports partial, commentsScraped, topLevelCommentsScraped, repliesScraped, completionReason, errorCode, errorMessage, retryable, and warnings. Empty or failed inputs get empty or error rows.
For empty results, inspect errors. For partial threads, check replyFetchStatus and repliesScraped; a reply failure does not invalidate its parent. Similar text is retained because deduplication uses commentId. For network or proxy errors, lower concurrency and retry only when retryable is true.
What are the limits, performance characteristics, and best practices?
Schema ceilings are 1,000 inputs, 100,000 rows per video, and 1,000,000 comment rows per run. They do not guarantee that YouTube will expose that much data. Availability, ordering, metadata, completeness, and duration remain source- and network-dependent; no throughput or completeness guarantee is published.
Start with defaults and a small sample. Replies require more pagination and each stored reply is billable. Lower concurrency when blocks or timeouts increase. Runs use 512 MB by default and allow 512-1,024 MB; more memory does not guarantee more speed.
How do API, scheduling, webhooks, and integrations work?
The API tab generates REST examples. Node.js and Python apify-client packages can call the Actor and read defaultDatasetId. API calls need an Apify token, not YouTube credentials.
Save settings as an Apify task and attach a schedule for recurring collection. Use ACTOR.RUN.SUCCEEDED or ACTOR.RUN.FAILED webhooks, then fetch the run's dataset. Relevant integrations are the Apify node in n8n and the Apify MCP server at https://mcp.apify.com?tools=sebastian-actors/youtube-comments-scraper.
Frequently asked questions
Does it need a YouTube API key or login?
No. It creates an anonymous YouTube session. Programmatic runs still require normal Apify authentication.
Does it support channels, playlists, live chat, or private content?
No. It accepts individual videos only. Public ended live VOD comments may work; active or upcoming content returns LIVE_CHAT_NOT_SUPPORTED. The Actor does not bypass access controls.
Will it return every comment and an exact publication timestamp?
Not necessarily. YouTube controls availability and ranking, and limits may stop early. publishedTimeText is source-provided; publishedAt can be null.
How are repeated inputs and comments handled?
Repeated URLs for one video are processed once using the first input index. Comments are deduplicated by commentId.
Is it legal to scrape YouTube comments?
This unofficial Actor is not affiliated with YouTube or Google. It accesses public comments without bypassing controls. Laws, platform terms, privacy duties, and permitted uses vary, so collect only data you have a lawful reason to process, minimize retention, and avoid harmful profiling or redistribution. This is not legal advice.
Which related Actors should you use?
For spoken content rather than discussion, use YouTube Transcript & Subtitle Scraper to extract available transcript text, timestamps, subtitles, and RAG chunks.
Where can you get support?
Report reproducible problems through the Actor's Issues tab. Include the run ID, sanitized input shape, relevant errorCode, and expected behavior; do not post Apify tokens, proxy URLs, cookies, private data, or raw production responses.