YouTube Comments Scraper | Comments & Replies by URL avatar

YouTube Comments Scraper | Comments & Replies by URL

Pricing

from $0.25 / 1,000 comment or replies

Go to Apify Store
YouTube Comments Scraper | Comments & Replies by URL

YouTube Comments Scraper | Comments & Replies by URL

Get YouTube comments and replies for videos and Shorts: comment text, exact like count, reply count, author, pinned/hearted flags and date. Many URLs per run, newest-first for full coverage, no login or API key.

Pricing

from $0.25 / 1,000 comment or replies

Rating

0.0

(0)

Developer

Flowo

Flowo

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Features

Limited permissions

Share

YouTube Comments Scraper | Comments & Replies by URL

This actor returns the comments and replies of YouTube videos and Shorts as one dataset row each. Every row has the comment text, the like count, the reply count, the author handle and channel link, pinned and hearted flags, and an approximate publish date. It needs no login, cookies or YouTube API key.

What does YouTube Comments Scraper do?

You give it YouTube video or Shorts URLs. For each video it reads the comment section, optionally follows the reply threads, and writes one row per comment or reply. Replies point to their parent through parentCommentId, and every row carries the video context (videoId, videoTitle, channelName, commentsCount).

It is meant for marketers doing audience research, creators and agencies moderating comments, researchers building text datasets, and AI agents that need to know what people say about a video.

How to scrape YouTube comments and replies

How YouTube Comments Scraper works: Reads the video page for its title and comments token; Pages the comment section in Top or Newest order; Opens reply threads up to your per-thread cap; Returns one

  1. Open the actor in Apify Console and paste one or more video or Shorts URLs into Video or Shorts URLs.
  2. Set how many comments per video you want (0 = all), and whether to include replies.
  3. Pick the order: Top comments or Newest first. Optionally set Only comments newer than or a total row limit.
  4. Click Start and download the dataset as JSON, CSV, Excel or via the API.

How much does it cost to scrape YouTube comments?

Price per event by Apify plan:

EventFreeBronzeSilverGold and above
Comment or reply$0.36 per 1,000$0.324 per 1,000$0.288 per 1,000$0.252 per 1,000
Actor start$0.00005$0.00005$0.00005$0.00005

A test run with the API example input below returned 121 rows in 22 s.

  • Comment or reply: $0.00036 each, about $0.36 per 1,000 rows on the Free plan.
  • Actor start: $0.00005 per run (per GB of memory).

Videos without comments and skipped URLs are free. Costs on the Free plan, start fee included:

ScenarioRowsCost
100 top-level comments of one video, no replies100about $0.036
The example input below (2 videos, 100 comments, up to 10 replies each) test run121about $0.044
One video, 1,000 comments and replies1,000about $0.36
Ten videos, 1,000 rows each10,000about $3.60

Input

YouTube Comments Scraper input example: Video or Shorts URLs, Max comments per video, Include replies, Max replies per comment, Sort comments by

FieldMeaning
startUrls (required)Video URLs: watch?v=, youtu.be/, /shorts/, /live/, /embed/, m.youtube.com, or a bare 11-character ID
maxCommentsPerVideoTop-level comments per video, default 100, 0 = all
includeRepliesAlso fetch replies, default on
maxRepliesPerCommentReplies per thread, default 10, 0 = all
sorttop (default, about 90% of all comments) or newest (reaches every comment; falls back to Top with a warning if YouTube offers no Newest order for a video)
oldestCommentDateSkip older rows: 2026-10-01 or a relative age like 7 days. With Newest, paging stops at the first older comment; pinned comments are kept regardless of date
maxItemsTotal row cap for the whole run
proxyConfigurationApify datacenter proxy by default; residential is not needed

Example input:

{
"startUrls": [
{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ" },
{ "url": "https://www.youtube.com/shorts/41UzbuW6wJs" }
],
"maxCommentsPerVideo": 100,
"includeReplies": true,
"maxRepliesPerComment": 10,
"sort": "top"
}

What data can you extract from YouTube comments?

YouTube Comments Scraper output example: Comment, Author, Likes, Replies, Reply, Pinned

One row is one comment or one reply. Main fields:

FieldDescription
commentId, parentCommentId, isReplyIdentity and thread link (parentCommentId is null for top-level comments)
textComment text in its original language
likeCount, replyCountLikes (exact below 1M) and replies of the thread
isPinned, isHearted, isEditedComment flags
author, authorUrl, authorChannelId, authorAvatarUrlAuthor handle, channel link, ID and avatar
authorIsVerified, authorIsChannelOwnerVerified badge, creator comment or reply
publishedTimeText, publishedAtYouTube's relative date and an approximate ISO date
videoId, videoUrl, videoTitle, channelName, channelId, commentsCountThe video the comment belongs to
url, scrapedAtLink to the comment and scrape time

Example row (shortened):

{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ&lc=Ugw10bSluCDSZMIxUSB4AaABAg",
"commentId": "Ugw10bSluCDSZMIxUSB4AaABAg",
"parentCommentId": null,
"isReply": false,
"text": "Let’s put the meme aside, this is actually a banging song.",
"author": "@LK-ht7qz",
"likeCount": 220926,
"replyCount": 613,
"isPinned": false,
"isHearted": false,
"publishedTimeText": "6 years ago",
"publishedAt": "2020-11-02T12:59:34.719Z",
"videoId": "dQw4w9WgXcQ",
"videoTitle": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channelName": "Rick Astley",
"commentsCount": 2461240,
"scrapedAt": "2026-11-03T00:59:42.712Z"
}

Use cases

  • Sentiment and audience research: collect the top comments of several videos and analyse text and likes.
  • Complete export or archive: use sort: newest with maxCommentsPerVideo: 0 and maxRepliesPerComment: 0 to export every comment and reply YouTube shows.
  • Monitoring new comments: schedule a run with sort: newest and oldestCommentDate: "1 day".
  • Shorts comments: pass Shorts URLs with includeReplies: false for a fast list of top-level comments.
  • Moderation and engagement: filter rows by isPinned, isHearted, authorIsChannelOwner and likeCount.

Limitations

  • Dates are relative on YouTube ("6 years ago"), so publishedAt is approximate, precise to the unit only.
  • Like counts of 1 million and above are rounded (for example 1000000).
  • Only video and Shorts URLs are supported. Channel, playlist and search URLs are skipped with a warning when at least one other URL is a video; if none of the URLs is a video or Shorts URL, the run fails with an input error.
  • Videos with comments turned off, live streams that are running now, and unavailable videos return no rows; the reason is written to the log and the run continues.
  • With Top order YouTube exposes about 90% of all comments. Newest reaches every comment, but if YouTube gives no Newest option for a video, the actor falls back to Top for it and logs a warning.
  • With oldestCommentDate, replies are fetched only for kept top-level comments, so a new reply under an older dropped comment is not returned. With Newest, pinned comments are exempt from the date stop and appear even if older than the cutoff.
  • text can be empty for media-only comments, and some author or video fields can be null.

Tips and troubleshooting

  • For every comment, set sort: newest, maxCommentsPerVideo: 0 and maxRepliesPerComment: 0.
  • For only new comments, combine sort: newest with oldestCommentDate; with Top order the date only filters rows and does not stop paging early.
  • A run that fails at once with an input error means none of the URLs is a video or Shorts URL: use watch?v=, youtu.be/ or /shorts/ links.
  • Fewer rows than expected? Check the log: comments turned off, a live stream, or an unavailable video give 0 rows with a reason. Also check maxItems and the per-thread reply cap.
  • Newest order falling back to Top shows as a warning in the log.
  • The default datacenter proxy is enough; residential proxy is not needed.

API, MCP and integrations

Run the actor from your code with the same JSON input as in Console. Your API token is in Console → Settings → API & Integrations.

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("genial_candlestand/youtube-comments-and-replies-scraper").call(run_input={
"startUrls": [
{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"},
{"url": "https://www.youtube.com/shorts/41UzbuW6wJs"},
],
"maxCommentsPerVideo": 20,
"maxRepliesPerComment": 3,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Node.js (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('genial_candlestand/youtube-comments-and-replies-scraper').call({
"startUrls": [
{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"},
{"url": "https://www.youtube.com/shorts/41UzbuW6wJs"},
],
"maxCommentsPerVideo": 20,
"maxRepliesPerComment": 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

HTTP — one request runs the actor and returns the results (runs up to 5 minutes; longer ones: run asynchronously):

curl -X POST "https://api.apify.com/v2/acts/genial_candlestand~youtube-comments-and-replies-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"},{"url":"https://www.youtube.com/shorts/41UzbuW6wJs"}],"maxCommentsPerVideo":20,"maxRepliesPerComment":3}'

AI agents (MCP). Add the actor as a tool of the Apify MCP server. Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=genial_candlestand/youtube-comments-and-replies-scraper"

Claude Desktop, Cursor or VS Code: {"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=genial_candlestand/youtube-comments-and-replies-scraper"}}}. Then ask, for example:

  • "Get the 100 newest comments of youtube.com/watch?v=dQw4w9WgXcQ without replies"
  • "Export all comments and replies of https://youtu.be/xYLmZFZOTa8"
  • "Get top-level comments from the last 7 days for this YouTube Short"

Integrations. Run it on a schedule with Apify Schedules and send the results to Google Sheets, Slack, Zapier, Make, n8n or your webhook — see Apify integrations.

FAQ

Is it legal to scrape YouTube comments?
The actor reads comments that YouTube shows publicly without login. Comments contain personal data such as handles, so you are responsible for using the data in line with the law (such as GDPR) and YouTube's terms.

Do I need a YouTube API key or login?
No.

How is it different from other YouTube comment scrapers?
It prices one event per row at about $0.36 per 1,000 rows on the Free plan, against $2 per 1,000 for the leading actor on the niche data. It does not need residential proxies, adds an approximate ISO publishedAt date next to the relative text, and exposes the pinned, hearted, edited, verified and channel-owner flags on every row.

Why are some likes rounded?
YouTube shows only rounded numbers from 1 million upward.

Also useful