Home › Guides › YouTube Comments Scraper

YouTube comments: every thread with replies, likes and a new-comment monitor

The YouTube Comments Scraper returns one row per comment or reply — for the videos you name, or for a channel's latest uploads — with replies, likes, pins, creator hearts, each author's channel and the video's exact comment count. "Newest first" lists every comment (YouTube's "Top comments" is a selection — 19% to 99% of them for five videos we checked); schedule it in monitoring mode and each run brings only what was written since, with a burst too large for one run carried over to the next rather than skipped. No YouTube API key, no login, no cookies.

Who it's for

What you get

GroupFields
CommentComment ID (stable key) & link, text, thread position, parent comment ID (on replies), edited flag
EngagementLikes (with a rounded flag), reply count, pinned flag, creator-heart flag
AgepublishedText ("3 weeks ago"), ageDaysMin/ageDaysMax range, and an exact date only for comments under a day old
AuthorName, @handle, channel ID & URL, verified flag, is-creator flag
Video contextVideo ID, URL, title, channel, @handle, and the video's exact comment count — on every row

A real comment row from a run on 2026-10-07 (every column, nothing shortened):

{
  "type": "comment",
  "videoId": "jjgJhYZXX1U",
  "videoTitle": "SkyRover X1 Drone Review",
  "videoChannelHandle": "@colibrifpv",
  "videoCommentsCount": 87,
  "commentId": "Ugyb2xCw4FPXOuTVLxV4AaABAg",
  "parentCommentId": null,
  "threadPosition": 34,
  "text": "Wow, awesomely stunning footage and scenery. Those waterfalls... Truly amazing!!!",
  "publishedText": "7 months ago",
  "publishedDate": null,
  "ageDaysMin": 208,
  "ageDaysMax": 247,
  "isEdited": true,
  "likes": 1,
  "likesAreRounded": false,
  "replyCount": 1,
  "isPinned": false,
  "isHearted": true,
  "authorHandle": "@MaxDelEcuador",
  "authorIsCreator": false
}

How the monitor carries a burst over

Tick onlyNewComments, name the list and schedule the run. Newest first and without filters, the list follows each video: the first run reads a video's first maxCommentsPerVideo comments and delivers them oldest first; every later run reads from the newest comment down to where the delivered ones begin and delivers what is new, oldest first. When more comments are due than a run can deliver, the rest stay above the delivered ones where the next run finds them — the status message says how many wait. In a measured test on a video getting three to four comments a minute, a run nine minutes after the first found 35 new comments, delivered the 30 oldest and said 5 were waiting; the next runs delivered those 5, then 2, then 3 — 70 comments across the runs, none twice and none missing.

With a filter or in "top" order each run looks at a window — the video's first maxCommentsPerVideo comments — and delivers what the list has not; a comment that passes the filter now and did not before is delivered now. Pick a window well above what a video gets between runs, or follow without filters and filter the rows afterwards.

Replies (maxRepliesPerComment above 0) come right after their comment, oldest first — the only order YouTube gives them in — each with the ID of the comment it answers. A thread that showed 782 replies delivered 782.

Input

InputWhat it does
videosVideo URLs or IDs, one per line: watch?v=…, youtu.be/…, /shorts/…, /live/… or the 11-character ID
channels · maxVideosPerChannel · videoTypesChannels to read the latest uploads of · how many per channel and kind (default 5) · videos / shorts / live
maxCommentsPerVideo · maxCommentsRows per video, comments and replies together (default 100) · total rows (default 1,000)
sortnewest (default — every comment) or top (YouTube's own selection)
maxRepliesPerCommentReplies per comment, oldest first (default 0 — no replies)
publishedWithinDays · minLikes · textContainsOnly recent comments · above a like count · containing any of these words or phrases
onlyNewComments · listNameDeliver only what the list has not delivered before — monitoring on a schedule

Every comment of a video with every reply:

{ "videos": ["https://www.youtube.com/watch?v=rN4hGxTE2hg"], "maxCommentsPerVideo": 5000, "maxComments": 5000, "maxRepliesPerComment": 100 }

Watch a channel's comments — schedule it, each run brings only what is new:

{ "channels": ["@mkbhd"], "maxVideosPerChannel": 5, "maxCommentsPerVideo": 100, "onlyNewComments": true, "listName": "mkbhd-comments" }

Measured data quality

Share of rows with a value, measured on the Apify platform on 2026-10-07:

Field1,000 newest10 videos, 945 rowsOne video to its end (8,047)With every reply (328)
Text1,000/1,000945/9458,047/8,047328/328
Author's channel ID1,000/1,000945/9458,047/8,047328/328
Like count1,000/1,000945/9458,047/8,047328/328
Age in days1,000/1,000945/9458,047/8,047328/328
Unique comment IDs1,000/1,000945/9458,047/8,047328/328

Followed to its end, the 8,047 comments carried 1,501 replies between them — together the 9,548 YouTube shows for the video. The largest list we followed, 119,554 comments, came back 6 short (one comment twice) over 99 minutes while the video kept getting comments. A comment nobody liked reads likes: 0 (7,091 of 8,047), never an empty field.

Honest limits

Speed

On the platform with the default 1 GB (2026-10-07): the prefilled 100-comment input took 2 to 5 seconds (10–15 when YouTube refused the run first and it switched to Apify Proxy); 1,000 newest comments 8 to 12 seconds; 945 comments of ten videos read side by side 4 to 5 seconds; a video's 8,047 comments to the end 55 to 76 seconds; 328 rows with every reply 7 seconds. Monitoring a busy video cost 5 to 11 requests a run. A run the platform restarts continues from the rows it already delivered, and an "only new" run reads back a killed run's rows so nothing is delivered twice.

Pricing

Pay per result: $0.0004 per delivered comment or reply, plus Apify's run-start event. Status rows, comments that were read but did not pass your filters, and comments an "only new" list had delivered before are all free. In an "only new" run what a spending limit leaves undelivered comes with the next run. Current prices are on the actor's Pricing tab on Apify.

Read the room under any video: every comment with its replies, likes, pins and author — or a monitor that delivers only what is new each run. Exportable to JSON, CSV or Excel.

Open the YouTube Comments Scraper →

Related

This Actor reads the comments; to find the videos by keyword first use the YouTube Search Scraper, to list a channel's uploads with exact stats use the YouTube Channel Videos Scraper and pass the URLs here, and to map the creators in a niche use the YouTube Channel Finder.

Frequently asked questions

Do I get all comments of a video?

With sort: "newest" (the default) and high enough limits, yes: for every video we followed to its end the comments and replies added up to the number YouTube shows — exactly for the smaller ones, within one for a video of 10,251 and within 6 for one of 119,554. "Top comments" is a YouTube selection and only a fraction of a large video.

Why is there no date on a comment?

YouTube shows only "3 weeks ago", not a date. The row carries that text and the range of days it can mean (ageDaysMin, ageDaysMax); an exact date is given only for comments less than a day old. Run daily with onlyNewComments and most arrive while YouTube still shows the age in hours.

What happens when a video gets more new comments than maxCommentsPerVideo between two runs?

Newest first and without filters, the run delivers the oldest of them and its status message says how many are waiting; the following runs deliver the rest, oldest first. Nothing is skipped and nothing has to be re-read by hand. With a filter or in "top" order nothing is carried over.

Are replies included?

When you set maxRepliesPerComment. Each comment is followed by up to that many of its replies, oldest first — the only order YouTube gives them in — each carrying the ID of the comment it answers. Replies count toward maxCommentsPerVideo.

Does it need a proxy or an API key?

No API key, and nothing to set up. Requests go out directly; when YouTube refuses a run's comment requests the Actor sends them through Apify Proxy by itself. On an account that cannot use Apify Proxy, a video YouTube refuses ends as "YouTube did not answer".

YouTube Comments Scraper — every thread, replies and likes, or a new-comment monitor. Pay per row, no API key.

Get YouTube comments on Apify →