YouTube Comments Scraper avatar

YouTube Comments Scraper

Pricing

$0.50 / 1,000 comments

Go to Apify Store
YouTube Comments Scraper

YouTube Comments Scraper

Comments and replies of YouTube videos, playlists and channels: text, author, likes, replies, pinned and creator hearts, video metadata. Top or newest first, date cut. A row per video says why when there are none. No login, no browser.

Pricing

$0.50 / 1,000 comments

Rating

0.0

(0)

Developer

Steady Scrape

Steady Scrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

Comments and replies of any YouTube video, Short, playlist or channel, straight from YouTube's own app API: the text, the author (name, channel, avatar, verified, creator), likes, reply count, when it was posted, whether it is pinned or hearted by the creator, and the video's title, channel, views, likes and total comment count on every row. Top comments or newest first, an optional date cut, replies on request. Every video comes back as rows: when it has no comments to give, one free row says why (comments_off, no_comments, unavailable, blocked) instead of an empty dataset. You pay only for comments.

No browser, no login, no API key, no YouTube Data API quota: it asks the same endpoint the site uses, paces itself, and rotates IPs before YouTube's bot check shows up.

What you get

One row per comment, in YouTube's order for the sort you chose:

  • The comment: commentId, text (emoji included), publishedTimeText (YouTube only says "3 weeks ago") and publishedAt (that phrase counted back from scrapedAt), isEdited, likeCount (with likeCountText, since YouTube abbreviates "4.8M"), replyCount, isPinned, isHeartedByCreator, url (the watch page opened on that comment).
  • The author: author (handle), authorChannelId, authorUrl, authorAvatarUrl, authorIsVerified, authorIsCreator (the video's own channel), authorIsArtist.
  • Replies (includeReplies): rows with isReply true and parentCommentId; rank counts within the thread.
  • The video, on every row: videoId, videoUrl, videoTitle, channelName, channelId, videoPublishDate, videoViewCount, videoLikeCount, videoCommentCount.
  • What was asked: sortBy, rank, source (the video, playlist or channel the row came from), scrapedAt.
  • status and reason: ok, or one free row per video with comments_off ("Comments are turned off"), no_comments (nobody commented yet), unavailable (the video does not exist or is private), blocked (every IP route was refused; try again later).

Input

fieldwhat it does
urlsOne per line: a video link in any shape (watch?v=, youtu.be, Shorts, live, embed) or a bare id; a playlist link or id; a channel (@handle, /channel/UC…, /c/, /user/). Playlists and channels expand to their videos.
maxCommentsPerVideoTop-level comments per video (default 100, up to 100,000). YouTube pages by 20.
sortBytop (YouTube's default) or newest.
includeReplies, maxRepliesPerCommentRead the replies under each comment (default off; 50 per comment when on).
publishedAfterYYYY-MM-DD: walk newest first and stop at the first older comment. As exact as YouTube's "3 weeks ago".
maxVideosPerSourceHow many videos to take from each playlist or channel (default 20).
residentialFallbackRetry through residential proxies when YouTube refuses the datacenter IPs. Default on.
{
"urls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw", "@TED"],
"maxCommentsPerVideo": 200,
"sortBy": "top",
"includeReplies": true,
"maxRepliesPerComment": 20,
"maxVideosPerSource": 5
}

Output example

{
"videoId": "jNQXAC9IVRw",
"videoUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"status": "ok",
"reason": null,
"videoTitle": "Me at the zoo",
"channelName": "jawed",
"channelId": "UC4QobU6STFB0P71PMvOGN5A",
"videoPublishDate": "2005-04-23T20:31:52-07:00",
"videoViewCount": 433550174,
"videoLikeCount": 19873706,
"videoCommentCount": 10625130,
"sortBy": "top",
"rank": 1,
"commentId": "UgzuC3zzpRZkjc5Qzsd4AaABAg",
"parentCommentId": null,
"isReply": false,
"text": "We're so honored that the first ever YouTube video was filmed here!",
"author": "@SanDiegoZoo",
"authorChannelId": "UCC5NfQ6Mf0dq_eEwv4P_hWA",
"authorUrl": "https://www.youtube.com/@SanDiegoZoo",
"authorAvatarUrl": "https://yt3.ggpht.com/…",
"authorIsVerified": true,
"authorIsCreator": false,
"authorIsArtist": false,
"publishedTimeText": "6 years ago",
"publishedAt": "2020-09-18T21:00:00.000Z",
"isEdited": false,
"likeCount": 4800000,
"likeCountText": "4.8M",
"replyCount": 985,
"isPinned": true,
"isHeartedByCreator": true,
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw&lc=UgzuC3zzpRZkjc5Qzsd4AaABAg",
"source": { "type": "video", "id": "jNQXAC9IVRw" },
"scrapedAt": "2026-09-18T21:00:00.000Z"
}

Use cases

  • Sentiment and audience research: every comment of a launch video, a campaign or a competitor's channel, with likes to weigh them.
  • Brand monitoring: the newest comments of your channel's last videos on a schedule, with publishedAfter so each run only brings what is new.
  • Creator tools: pinned comments, creator hearts and reply threads, to see which comments the channel engages with.
  • Datasets for NLP and LLMs: clean text with author and engagement fields, thousands of comments per minute.

Limits and honesty

  • YouTube gives comments the way its page does: dates are relative ("3 weeks ago") and like counts abbreviated above 1,000 ("4.8M"). publishedAt and likeCount are those phrases turned into numbers, exact to the unit YouTube used.
  • YouTube's "top" order is its own ranking and can differ slightly between runs; "newest" is stable.
  • A pinned comment comes first in both orders, whatever its date; with publishedAfter it is judged on its own and never stops the walk.
  • Comment counts on the video (videoCommentCount) include replies; maxCommentsPerVideo counts top-level comments only.
  • YouTube refuses some datacenter IPs. The Actor retries through residential proxies (about 1.5 KB per comment of proxy traffic) and marks a video blocked only when every route was refused; those rows are free.

Pricing

Pay per event: one comment event per row with status ok, replies included, and nothing per video. Rows with any other status are free, and so is every request that gave nothing. Set a spending limit on the run and the Actor stops at it.

The Actor reads public comments that YouTube shows to anyone without logging in. Comments carry the author's public handle and channel id; use the data in line with YouTube's terms and the privacy law that applies to you.