YouTube Comments Scraper — Comments API & Export | $0.40/1k avatar

YouTube Comments Scraper — Comments API & Export | $0.40/1k

Pricing

from $0.32 / 1,000 results

Go to Apify Store
YouTube Comments Scraper — Comments API & Export | $0.40/1k

YouTube Comments Scraper — Comments API & Export | $0.40/1k

Export YouTube comments and replies without an API key: text, likes, reply count, posting time, pinned, hearted and creator flags. Privacy-safe: no commenter names, handles or profiles. Built for sentiment analysis and market research. $0.40 per 1,000 comments.

Pricing

from $0.32 / 1,000 results

Rating

0.0

(0)

Developer

Raffy

Raffy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Features

Limited permissions

Share

What does YouTube Comments Scraper do?

YouTube Comments Scraper exports the comments and replies of any public YouTube video as clean JSON, CSV or Excel: comment text, like count, reply count, posting time, and whether the comment is pinned, hearted or written by the creator. It works as a YouTube comments API alternative: paste video links or IDs - or a channel, a playlist or a search term - and get the comments back in seconds, with no YouTube API key, no Google account, no quota and no browser.

It is privacy-safe by design: rows never contain commenter names, @handles, commenter channel IDs, avatars or profile links, and @mentions inside the text are masked. You get what you need for sentiment analysis and market research, without collecting personal profiles.

Use it to:

  • run sentiment analysis on the comments under your own videos, a competitor's launch video or a product review;
  • do market research and product feedback mining: what viewers praise, complain about and ask for, in their own words;
  • build training and evaluation data for text classifiers, topic models and LLM pipelines from real audience language;
  • monitor new comments on chosen videos or a whole channel (sort by newest, commentsSince: "1 day") for community management or brand monitoring;
  • find what people say about a product across the top videos of a search (searchQueries + keywords).

Why use YouTube Comments Scraper?

  • No API key, no quota. YouTube's own Data API needs a Google Cloud project and caps you at a daily quota; this Actor needs neither.
  • Privacy-safe output. No commenter identity in any row, so the dataset is easier to store, share and process under GDPR-style rules.
  • Creator signals included. isPinned, isHearted and isCreator show which comments the creator promoted or answered.
  • Whole channels, playlists and searches. Give channels, playlists or searchQueries and the Actor reads the comments of their videos (up to maxVideosPerSource each) in one run.
  • Filters that save money. commentsSince, keywords and minLikes drop comments before they are saved; filtered-out comments are never charged.
  • Video context on demand. includeVideoDetails adds the video's views, likes, upload date and the channel's subscribers to every row at no extra cost.
  • Replies on demand. Switch on includeReplies to get each thread's replies, linked to their parent with parentCommentId.
  • Honest rows. A video with comments turned off returns one free not_found row that says so; the run does not fail and you are not charged for it.
  • Fast and light. Plain HTTP requests to the same JSON endpoint youtube.com uses; about 20 comments per request. The default run finishes in well under a minute.

What data can YouTube Comments Scraper extract?

FieldTypeDescription
commentIdstringYouTube's comment id. A reply's id is <parent id>.<reply id>.
textstringThe comment text. @mentions of other users are replaced with @user. Empty for the rare sticker-only comment.
likeCountintegerLikes on the comment. YouTube rounds large numbers (291K becomes 291000).
replyCountintegerReplies under the comment (top-level comments only).
publishedTimeTextstringPosting time as YouTube shows it, e.g. 3 weeks ago.
publishedAtstringEstimated ISO 8601 time computed from publishedTimeText (YouTube shows only relative times, so "6 years ago" is accurate to the year).
isEditedbooleanThe comment was edited.
isCreatorbooleanWritten by the video's own channel.
isPinnedbooleanPinned by the creator.
isHeartedbooleanHearted by the creator.
isReplybooleanThe row is a reply to another comment.
parentCommentIdstringFor replies: the commentId of the comment it answers.
positioninteger1-based position in the chosen sort order (for replies: within the thread).
videoIdstringThe video's id.
videoUrlstringThe video's URL.
videoTitlestringThe video's title.
channelNamestringThe name of the channel that published the video (never a commenter).
videoCommentCountintegerThe comment total YouTube shows for the video (rounded like on the page).
sortBystringtop or newest, as requested.
inputUrlstringThe input entry the row came from (the video link, or the channel / playlist link or search term).
sourcestringOnly on videos found through a source: channel, playlist or search.
videoPositionintegerOnly with a source: position of the video in the channel (newest first), playlist or search results.
videoViewCountintegerWith includeVideoDetails: the video's views.
videoLikeCountintegerWith includeVideoDetails: the video's likes.
videoPublishedAtstringWith includeVideoDetails: the video's upload date (YYYY-MM-DD).
videoPublishedTimeTextstringWith includeVideoDetails: upload time as YouTube shows it, e.g. 2 weeks ago.
channelIdstringWith includeVideoDetails: the ID of the video's channel (never a commenter's).
channelUrlstringWith includeVideoDetails: link to the video's channel.
channelSubscriberCountintegerWith includeVideoDetails: the video channel's subscribers (rounded like on YouTube).
urlstringDirect link to the comment (watch?v=<video>&lc=<comment id>).

Not included, on purpose: commenter display names, @handles, commenter channel IDs, avatar images and profile links.

Result status (tri-state output)

statusMeaningBilled?
okOne comment or reply.Yes
not_foundThe video has comments turned off (for example videos made for kids), has no comments yet, is a live stream with chat only, or is unavailable; or no comment of the video matched your filters; or a channel, playlist or search has no videos. error says which.No
errorYouTube could not be read after retries, or the input was not a video link. error says why.No

How to scrape YouTube comments with YouTube Comments Scraper

  1. Open the Actor in Apify Console and go to the Input tab.
  2. Paste one or more YouTube video URLs or IDs (watch links, youtu.be links, Shorts, live links or bare 11-character IDs), or fill Channels, Playlists or Search terms to read the comments of many videos at once.
  3. Set Max comments per video, choose Top comments or Newest first, add filters (Only comments since, Only comments containing, Minimum likes) and switch on Include replies if you need them.
  4. Click Start. The default input finishes in about 10 to 30 seconds.
  5. Download the comments as JSON, CSV, Excel or HTML, or read them through the API.

Need comments for every video of a channel, a playlist or a search? Put it in Channels, Playlists or Search terms; Max videos per channel, playlist or search sets how many videos each one contributes.

How much does it cost to scrape YouTube comments?

The Actor uses pay-per-event pricing: you pay for the comments you get, Apify platform usage is included.

EventPrice
Actor start$0.005 per run
Result (status: ok row: one comment or reply)$0.0004 per comment ($0.40 per 1,000)

Example: 1,000 comments cost about $0.41 ($0.40 plus the $0.005 start fee). Rows with status not_found or error are never billed, and neither are comments dropped by a filter. includeVideoDetails costs nothing extra. The free Apify plan includes enough credit to try the Actor on a several thousand comments. You can cap spending per run with Maximum results and in the run's Max total charge option.

Input

FieldTypeDefaultDescription
startUrlsarray of stringsone sample videoVideo URLs or IDs, one per line. Channel, playlist and youtube.com/results links work here too.
channelsarray of strings-Channel links, @handles or UC... IDs: comments of each channel's newest videos.
playlistsarray of strings-Playlist links or PL... IDs: comments of the playlist's videos, in order.
searchQueriesarray of strings-Search terms: comments of the top video results.
maxVideosPerSourceinteger10Videos read from each channel, playlist or search term.
maxCommentsinteger50Top-level comments per video. Replies come on top of this number.
sortBystringtoptop (YouTube's "Top comments") or newest ("Newest first").
commentsSincestring-Only comments posted since a date (2026-10-01) or a span (7 days, 2 weeks, 3 months). Approximate, because YouTube shows relative times.
keywordsarray of strings-Only comments containing at least one of these (case-insensitive).
minLikesinteger0Only comments with at least this many likes.
includeVideoDetailsbooleanfalseAdd the video's views, likes, upload date and channel facts to every row.
includeRepliesbooleanfalseAlso save the replies of each saved comment.
maxRepliesPerCommentinteger10Replies per comment when includeReplies is on.
maxItemsinteger1000Total rows across all videos; each ok row is one billable result.
proxyConfigurationobjectApify Proxy (datacenter)Spreads requests over datacenter IPs so large runs stay clean. Residential proxies are not needed.

Example input (the prefill):

{
"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"maxComments": 20,
"sortBy": "top",
"includeReplies": false,
"maxItems": 20
}

Newest comments and replies of two videos:

{
"startUrls": ["https://youtu.be/plN7JMbadRg", "jNQXAC9IVRw"],
"maxComments": 100,
"sortBy": "newest",
"includeReplies": true,
"maxRepliesPerComment": 5,
"maxItems": 1000
}

Comments of the 5 newest videos of a channel from the last week, with video details:

{
"channels": ["@MrBeast"],
"maxVideosPerSource": 5,
"sortBy": "newest",
"commentsSince": "7 days",
"includeVideoDetails": true,
"maxComments": 200,
"maxItems": 1000
}

Well-liked comments mentioning the battery under the top 10 review videos:

{
"searchQueries": ["iphone 17 review"],
"maxVideosPerSource": 10,
"keywords": ["battery"],
"minLikes": 5,
"maxItems": 500
}

Output

Two real rows from the default run (text shortened):

[
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ&lc=UgzKYksqeQ5gA3t0g0F4AaABAg",
"status": "ok",
"scrapedAt": "2026-10-16T12:51:29.783Z",
"commentId": "UgzKYksqeQ5gA3t0g0F4AaABAg",
"text": "I Rick rolled my entire French class because we had to study a city in France and make a quiz about it ...",
"publishedTimeText": "6 years ago",
"publishedAt": "2020-10-16T00:51:29.782Z",
"isEdited": true,
"likeCount": 104000,
"replyCount": 604,
"isCreator": false,
"isPinned": false,
"isHearted": false,
"isReply": false,
"position": 1,
"videoId": "dQw4w9WgXcQ",
"videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"videoTitle": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channelName": "Rick Astley",
"videoCommentCount": 2400000,
"sortBy": "top",
"inputUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
},
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ&lc=Ugxzbv_ZeZXNRcfwsSF4AaABAg",
"status": "ok",
"commentId": "Ugxzbv_ZeZXNRcfwsSF4AaABAg",
"text": "Is everyone going to ignore the fact that Rick Astley looks like a twelve year old boy but has a uniquely deep voice?",
"publishedTimeText": "6 years ago",
"likeCount": 291000,
"replyCount": 678,
"isCreator": false,
"isPinned": false,
"isHearted": false,
"isReply": false,
"position": 2,
"videoId": "dQw4w9WgXcQ"
}
]

A video with comments turned off:

{
"url": "https://www.youtube.com/watch?v=IimtbuqYIE8",
"status": "not_found",
"error": "Comments are turned off for this video (free row, not charged).",
"videoId": "IimtbuqYIE8",
"videoTitle": "LIVE: NHK WORLD-JAPAN News",
"channelName": "NHK WORLD-JAPAN"
}

Tips

  • Sentiment over time: use sortBy: "newest" and a fixed maxComments, schedule the run daily, and compare the batches.
  • Most influential opinions: the default top order puts the most liked and discussed comments first; likeCount and replyCount let you weight them.
  • Creator engagement: filter isHearted or isCreator to see which comments the creator promoted or answered.
  • Whole channels: put the channel in channels and set maxVideosPerSource; for full video metadata (descriptions, durations) use YouTube Scraper.
  • Cheaper monitoring: sortBy: "newest" with commentsSince stops reading each video at the first older comment, so a daily run only pays for new comments.

Limitations

  • YouTube publishes only relative times ("3 weeks ago"), so publishedAt is an estimate: precise to the minute for fresh comments, to the month or year for old ones.
  • Like counts above 1,000 are rounded the way YouTube shows them (1.2K, 291K).
  • With Include replies on, replies are fetched as soon as their comment is found, so a low Maximum results can fill up with replies before later top-level comments arrive. Set maxItems to at least maxComments x (1 + maxRepliesPerComment) per video when you need both in full.
  • commentsSince works on YouTube's relative times, so the cut is approximate ("3 weeks ago" can be 21-27 days). With a filter on, at most max(200, 4 x maxComments) comments are looked at per video, and max(30, 3 x maxRepliesPerComment) replies per thread (raise maxComments to search deeper). A video where nothing matched gets one free not_found row.
  • Channels contribute the newest videos of their Videos tab (not Shorts or live streams); searches use YouTube's relevance order, videos only.
  • Live streams that are on air have live chat, not comments; they return a free not_found row. Live chat is not scraped.
  • Results reflect what YouTube shows a logged-out visitor in the US at the time of the run; if YouTube changes its page data, rows come back as error and the Actor is updated quickly (report it in the Issues tab).

FAQ

Do I need a YouTube API key or a Google account?

No. The Actor reads the same public data the youtube.com watch page shows a logged-out visitor. There is no API key, no quota and nothing to sign in to.

Does it collect commenter names or profiles?

No. Rows never include display names, @handles, channel IDs, avatars or profile links, and @mentions in the text are masked as @user. Only the video's own channel (channelName, and with includeVideoDetails its channelId, channelUrl and subscriber count) is included, because it describes the video, not a commenter.

How many comments can I get per video?

As many as YouTube shows, set with Max comments per video. YouTube serves about 20 comments per request, so 1,000 comments take about 50 requests and roughly a minute.

What happens when comments are turned off?

The video gets one free not_found row saying "Comments are turned off for this video". The run still succeeds and other videos are scraped normally.

Scraping publicly available data is generally legal, but you are responsible for how you use the output. Comments are written by people; this Actor leaves out their identities, but the text itself can still mention personal details. Read the legal notice below and YouTube's terms of service.

Can I use this Actor from an AI agent or MCP client?

Yes. Call it through the Apify API or the Apify MCP server with a list of video URLs; every row has a fixed set of fields and a status, so an agent can tell "no comments" from "could not read".

Why did I get fewer rows than maxItems?

maxItems is a ceiling. You get fewer rows when the videos have fewer comments than Max comments per video, when comments are turned off, or when maxComments x the number of videos is below maxItems.

What if a field is missing?

Optional fields are omitted when YouTube does not show them (for example replyCount on replies, or videoTitle when YouTube leaves it out). If a field that should always be present is missing, open an issue in the Issues tab with the run ID.

  • YouTube Scraper - full video metadata for channels, playlists and searches: descriptions, durations, views, likes and comment counts.
  • Google Trends Scraper - check whether the topic people are discussing is rising or fading.
  • Keyword Suggestions API - turn the themes you find in comments into the searches people actually type.
  • Substack Scraper - compare a creator's video audience with their newsletter readers.
  • Telegram Channel Scraper - follow the same community's discussion on public Telegram channels.
  • YouTube Transcript Scraper - use it to pull the full captions of the videos you find, as timed segments or plain text.

This Actor extracts only data that YouTube publishes publicly to logged-out visitors; it does not extract private user data such as e-mail addresses, phone numbers, gender or precise location, it deliberately leaves out commenter names, handles, commenter channel IDs, avatars and profile links, and it does not log in or get around access controls. Comment texts are written by people and could still contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you are unsure whether your reason is legitimate, consult your lawyers. You are responsible for complying with YouTube's terms of service and applicable law when using the extracted data.

This Actor is an independent tool and is not affiliated with, endorsed by or sponsored by YouTube or Google. All trademarks belong to their respective owners.