YouTube Comments Scraper — Text, Likes & Replies, No Names
Pricing
from $0.40 / 1,000 comments
YouTube Comments Scraper — Text, Likes & Replies, No Names
Comments of any public YouTube video: text, likes, reply counts, age, pinned, creator-hearted and from-the-channel flags, plus optional replies. Top or newest order. No commenter names or handles are collected. Run again to see new comments and rank changes since the last run. No login.
Pricing
from $0.40 / 1,000 comments
Rating
0.0
(0)
Developer
Northbell
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
Give it a list of YouTube videos — watch links, youtu.be links, Shorts or plain video IDs — and get one clean row per comment: text, likes, reply count, age, and whether it is pinned, hearted by the channel or written by the channel itself, with the replies too if you want them. Top or newest order, up to 5,000 comments per video. $0.50 per 1,000 comments, no login, no API key — and no commenter names, handles, channel IDs or avatars are collected.
Run it again — or put it on a schedule — and every comment also tells you what changed since the last run: is it new, how far did it move up or down in the top order, how many likes did it gain. Each video also gets a free summary row with the number of new comments, which YouTube does not show you anywhere.
What you get
| Field | What it is |
|---|---|
type, videoId, commentId, url | the row type (comment), the video, the comment, and a link that opens that comment on YouTube |
text | the comment text with email addresses and phone numbers removed and @mentions replaced by @user |
likes, likesRounded | likes as YouTube shows them: exact below 1,000, rounded above ("4.8M" → 4800000, likesRounded true) |
replyCount, replyCountRounded | replies under the comment (0 for a reply itself), rounded the same way above 999 |
publishedAgo, publishedDaysAgo, isEdited | YouTube's own wording ("3 weeks ago"), an approximate day count (month = 30 days, year = 365), and whether it was edited |
isPinned, isCreator, isHearted | pinned by the channel, written by the video's own channel, hearted by the channel |
isReply, parentCommentId | true for a reply and the comment it belongs to (null on top-level comments) |
rank | position in the list as read, 1 = first (top-level comments only; null on replies) |
isNewSinceLastRun, previousRank, rankChange, likesChangeSinceLastRun | the change since your previous run of the same video and order (null on the first run) |
observedAt | when the row was read |
Every video also gets one free summary row (type video): videoId, url, title, channelName, commentCountShown (the total YouTube shows, rounded above 999 and including replies), commentCountRounded, commentsOff, sortUsed, commentsRead, topLevelRead, repliesRead, finished, stopReason (all-read, limit, comments-off, no-comments, stalled or error), newCommentsSinceLastRun and hoursSinceLastRun (both null on the first run), replyPagesFailed, note (set when comments are off or the order you asked for was not offered), input (what you typed) and observedAt.
Use it for
- Audience research — what people ask, praise and complain about under your videos or a competitor's, in their own words
- Text analysis and AI pipelines — clean comment text with no personal data to scrub afterwards
- Tracking a launch or a controversy — schedule it on the newest order and see how many new comments came in since the last run
Input
{ "videos": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"], "maxCommentsPerVideo": 200, "sort": "top", "includeReplies": false, "maxRepliesPerComment": 10 }
maxCommentsPerVideo— the most comments read per video (1–5,000, default 200). Replies count toward it, so it is also the most you can be charged for per video.sort—top(YouTube's default order) ornewest. Usenewestto track new comments.includeReplies/maxRepliesPerComment— also read the replies under each comment (oldest first), up to this many per comment.
What changed is remembered per video and order in a named key-value store in your Apify account, so the second run of the same Actor already shows changes. Schedule it (Apify → Schedules) to follow a video over time.
Pricing
$0.50 per 1,000 comments (replies count as comments), plus $0.01 per run. A default run of 200 comments costs $0.11. The per-video summary rows and error rows (removed, private or mistyped videos) are free. The $0.01 run-start fee is the one charge every run pays, even one that returns nothing.
Notes
- Public data only, and no people. What anyone sees under a video without signing in. Commenter names,
@handles, channel IDs and profile pictures are never returned. The only identity in a row isisCreator: the comment was written by the video's own channel. Email addresses and phone numbers are removed from the text, and a@handlewritten in a comment becomes@user. A name at the start of a reply that matches a commenter of the same video becomes@usertoo. A name typed as ordinary words anywhere else in a comment cannot be recognised and stays in the text. Phone-number removal is deliberately greedy: a number written with spaces or dots between digit groups ("10 000 000", "100.000.000") looks like a phone number and is removed too. likesis exact below 1,000 and rounded above (YouTube writes "1.2K", "4.8M").likesChangeSinceLastRunis only filled when both the previous and the current count are exact.rank,previousRankandrankChangemean something in the top order:rankChangeis positive when the comment moved up. In the newest order a new comment pushes every other one down, sorankis just the position and the other two stay empty.isNewSinceLastRunistruefor a comment that was not among those the previous run read. It isnullwhere the previous run could not have seen it, for example comments 201 and beyond when the last run stopped at 200. In the top order a comment that climbed into the range you read also counts as new; for strict new-comment tracking usenewest. A reply is only called new when the last run read that thread's replies to the end.- The total in
commentCountShownincludes replies, and YouTube holds some comments for review or hides them, so the number you can read is usually lower.finishedistruewhen the whole list was read;stopReasonlimitmeans it stopped at yourmaxCommentsPerVideo. - A video with comments turned off (including videos made for kids) and a live stream with only live chat get a free summary row with
commentsOfftrueand anote, and no comment rows. Live chat messages are not comments and are not read. - Comment text longer than 10,000 characters is cut. Emoji come through as characters; stickers and images do not.
parentCommentIdis empty on top-level comments.isHeartedistruewhen the channel gave the comment a heart.- If YouTube stops answering part way, you keep the comments already read, get an error row (free) and a summary row with
stopReasonerror. If it keeps refusing across several videos in a row, the Actor stops waiting and returns the remaining videos as free error rows; run it again later.
To follow the video itself — exact views, likes and views per day — see YouTube Video Stats Tracker. To follow a whole channel, see YouTube Channel Stats & Growth Tracker.
For AI agents
{"videos": ["https://www.youtube.com/watch?v=jNQXAC9IVRw"], "maxCommentsPerVideo": 50} returns up to 50 rows of type comment (text, likes, replyCount, publishedAgo) and one video summary row. Rows have type: comment, video or error. Pass several videos in one call to pay the run fee once, and set sort to newest with a schedule to get only what is new.