YouTube Comments Scraper – Comments & Replies avatar

YouTube Comments Scraper – Comments & Replies

Pricing

from $0.50 / 1,000 youtube comment or replies

Go to Apify Store
YouTube Comments Scraper – Comments & Replies

YouTube Comments Scraper – Comments & Replies

Scrape YouTube comments and replies from videos and Shorts. Export text, authors, likes, timestamps, pinned comments, and direct links without an API key.

Pricing

from $0.50 / 1,000 youtube comment or replies

Rating

0.0

(0)

Developer

Arjun AI

Arjun AI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a few seconds ago

Last modified

Categories

Share

Export YouTube comments and replies

Turn public discussions from YouTube videos and Shorts into structured records. Add up to 20 URLs and receive one Dataset item per parent comment or reply, with comment text, authors, likes, timestamps, reply relationships, pinned status, creator hearts, membership badges, paid-comment indicators, and direct comment URLs.

Choose Top comments for a ranked sample, Newest first for chronological collection, or set the limit to 0 to traverse all public comment pages YouTube makes available. No YouTube Data API key is required.

Videos that cannot produce comment rows receive a visible, free videoStatus record, so an empty Dataset is not mistaken for a broken run.

This is an unofficial Actor and is not affiliated with, endorsed by, or sponsored by YouTube or Google. It collects publicly accessible comments only.

Ready-to-run examples

Common use cases

  • Brand, product, and campaign monitoring
  • Audience research and creator analysis
  • Sentiment, topic, and keyword analysis
  • Community feedback and moderation review
  • Market research and competitor tracking
  • NLP, LLM, and data-enrichment workflows

Supported URLs

URL typeExample
Standard videohttps://www.youtube.com/watch?v=VIDEO_ID
Short linkhttps://youtu.be/VIDEO_ID
Shortshttps://www.youtube.com/shorts/VIDEO_ID
Embedded videohttps://www.youtube.com/embed/VIDEO_ID
Live video pagehttps://www.youtube.com/live/VIDEO_ID

For live video pages, the Actor extracts the normal public comments section when available. It does not extract live-chat messages.

Quick start

This input returns up to 100 ranked parent comments:

{
"startUrls": [
{
"url": "https://www.youtube.com/watch?v=YE7VzlLtp-4"
}
],
"maxCommentsPerVideo": 100,
"sortBy": "top",
"includeReplies": false,
"maxRepliesPerThread": 10
}

Input reference

FieldTypeDefaultBehavior
startUrlsarrayRequired1–20 public video or Shorts URLs. Duplicate video IDs are processed once.
maxCommentsPerVideointeger1001–5000 limits combined parent and reply records per video. 0 requests all available public comment pages.
sortBystringtoptop for YouTube's ranked view or newest for chronological results. Full collection always uses newest.
includeRepliesbooleanfalseExpand and return replies under each parent comment. Disable for the fastest parent-only run.
maxRepliesPerThreadinteger101–500 replies per parent when includeReplies is enabled. It has no effect when replies are disabled.

Sorting and full collection

Result limitRequested sortEffective sortResult
Positive numbertoptopFixed-size ranked sample
Positive numbernewestnewestFixed-size chronological sample
0top or newestnewestAll available public comment pages

To collect all available parent comments and replies:

{
"startUrls": [
{
"url": "https://www.youtube.com/watch?v=VIDEO_ID"
}
],
"maxCommentsPerVideo": 0,
"sortBy": "newest",
"includeReplies": true,
"maxRepliesPerThread": 500
}

maxCommentsPerVideo: 0 removes the combined result limit, but maxRepliesPerThread still limits each reply thread. “All” means all comments YouTube exposes to a public, unauthenticated session—not private, deleted, held-for-review, or otherwise unavailable comments.

Dataset output

Each parent comment and included reply is a separate recordType: "comment" item.

Real comment example

This shortened record came from a real run. Public counters and relative dates can change.

{
"recordType": "comment",
"sourceType": "video",
"videoId": "YE7VzlLtp-4",
"videoUrl": "https://www.youtube.com/watch?v=YE7VzlLtp-4",
"videoTitle": "Big Buck Bunny",
"videoChannelName": "Blender",
"commentId": "UgyvM3zp3TKN8kEO4Yd4AaABAg",
"commentUrl": "https://www.youtube.com/watch?v=YE7VzlLtp-4&lc=UgyvM3zp3TKN8kEO4Yd4AaABAg",
"text": "still looks better than my renders",
"publishedTimeText": "3 years ago",
"publishedAtEstimated": "2023-08-31T06:21:28.917413Z",
"likeCount": 498,
"likeCountText": "498",
"replyCount": 5,
"parentCommentId": null,
"replyDepth": 0,
"isReply": false,
"isPinned": false,
"isHearted": false,
"isPaid": false,
"authorName": "@5MadMovieMakers",
"authorChannelId": "UCLkZVEXz_qObWr7hAEbS_pQ",
"authorChannelUrl": "https://www.youtube.com/@5MadMovieMakers",
"authorIsVerified": true,
"authorIsVideoOwner": false,
"authorIsMember": false,
"authorBadges": [
"Verified"
],
"sortBy": "top"
}

Field groups

GroupFields
SourcerecordType, sourceType, videoId, videoUrl, videoTitle, videoChannelId, videoChannelName
CommentcommentId, commentUrl, text, publishedTimeText, publishedAtEstimated
EngagementlikeCount, likeCountText, replyCount, isPinned, isHearted, isPaid, paidAmountText
Reply relationshipparentCommentId, replyDepth, isReply
AuthorauthorName, authorChannelId, authorChannelUrl, authorAvatarUrl, authorIsVerified, authorIsVideoOwner, authorIsMember, authorBadges
Run contextsortBy, scrapedAt

publishedAtEstimated is calculated from YouTube's relative label such as 3 years ago. It is useful for sorting, but it is not an exact publication timestamp supplied by YouTube. likeCount is normalized from the displayed value; likeCountText preserves the public label.

Reply records

A reply has isReply: true, replyDepth: 1, and its parent's ID in parentCommentId. Every reply is independently written to the Dataset and counts as one successful comment result.

Videos without comment rows

When comments are empty, disabled, unavailable, partially extracted, failed, or stopped by the maximum charge, the Dataset receives a free status record:

{
"recordType": "videoStatus",
"status": "noComments",
"inputValue": "https://www.youtube.com/watch?v=VIDEO_ID",
"sourceType": "video",
"videoId": "VIDEO_ID",
"commentCount": 0,
"parentCommentCount": 0,
"replyCommentCount": 0,
"truncated": false,
"errorCode": "NO_PUBLIC_COMMENTS",
"errorMessage": "No public comments were returned for this video.",
"suggestion": "No action is required. Verify the public comment section if comments were expected."
}

Possible status values are noComments, commentsDisabled, unavailable, partial, failed, and chargeLimitReached.

Pricing

This Actor uses pay-per-event pricing:

  • Actor start: $0.00005 per run.
  • Comment or reply result: $0.0005 each—$0.50 per 1,000 results.
  • Video status row: free.

Example event charges before any configured discounts:

Comment and reply recordsEvent charge including one start
1$0.00055
100$0.05005
1,000$0.50005

The Actor respects the user's maximum run charge. If the budget cannot cover another comment result, collection stops and the input receives a free chargeLimitReached status. The Pricing tab is the source of truth for current prices and discounts.

Run summary

The Dataset is the primary output. The default Key-Value Store record named OUTPUT is a compact run report for automation and troubleshooting. It contains totals plus a status for every input video, including successful, empty, disabled, unavailable, partial, failed, and charge-limited sources.

Use it when a source produced no comment records and you need to distinguish “no public comments” from “request failed.”

Run through the Apify API

For small runs, the synchronous endpoint returns Dataset items directly:

curl -X POST \
"https://api.apify.com/v2/acts/arjun_code~youtube-comments-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url": "https://www.youtube.com/watch?v=YE7VzlLtp-4"}],
"maxCommentsPerVideo": 100,
"sortBy": "top",
"includeReplies": false,
"maxRepliesPerThread": 10
}'

For large full-collection runs, start the Actor asynchronously and read the default Dataset after completion.

Performance guidance

  • Start with 10–100 comments when evaluating a source.
  • Leave replies disabled if you only need parent comments.
  • Use 0 only when complete public pagination is required; popular videos can contain many pages.
  • Up to three videos are processed concurrently. Pages for one video remain sequential because YouTube continuation tokens must be followed in order.

Troubleshooting

The Dataset contains only a status row

Read status, errorMessage, and suggestion. A video may genuinely have no comments, have comments disabled, be unavailable to a public session, or encounter a temporary request failure.

The collected total is lower than YouTube's displayed count

Displayed totals can include deleted, hidden, moderated, unavailable, or non-public comments. Replies are also capped by maxRepliesPerThread. The Actor stops when YouTube no longer provides a public continuation token.

includeReplies is false—does maxRepliesPerThread matter?

No. The setting is ignored until replies are enabled.

GoalActor
Discover videos, Shorts, or channels by keywordYouTube Search Scraper
Get metadata for known video or Shorts URLs or IDsYouTube Video and Shorts Details Scraper
Enrich known channel handles, IDs, or URLsYouTube Channel Details Scraper
Export a channel's videos, Shorts, and streamsYouTube Channel Content Scraper

FAQ

Does Top comments return every comment?

No. It is YouTube's ranked view. Set maxCommentsPerVideo to 0; the Actor automatically uses Newest first for the most complete public collection.

Does this support Shorts?

Yes. Supply a /shorts/VIDEO_ID URL. The output uses sourceType: "short".

Does this require a YouTube API key?

No.

Can it scrape private comments or live chat?

No. It returns comments visible to a public, unauthenticated visitor. It does not access private data, creator dashboards, held-for-review comments, or live chat.

Support and responsible use

For unexpected results, open the Actor's Issues tab and include the run ID, public video URL, input settings, expected behavior, and relevant status or log message. Do not post API tokens or private data.

Use the Actor only for lawful processing of publicly accessible information. Follow applicable laws, privacy requirements, and YouTube's terms. Do not use the output for spam, harassment, or invasive profiling.