YouTube Comments Scraper - Text, Likes & Authors
Pricing
from $0.38 / 1,000 comments
YouTube Comments Scraper - Text, Likes & Authors
Scrape the comments under YouTube videos and Shorts. Each row has the comment text, likes, reply count and posting time, plus the author handle, channel ID, verified badge and avatar. Likes come back the way YouTube shows them, like "315K". $0.40 per 1,000 comments.
Pricing
from $0.38 / 1,000 comments
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
18 hours ago
Last modified
Categories
Share
Scrape YouTube comments from public videos: point it at watch links, youtu.be links, Shorts
links or bare video ids and you get the comments as flat rows with the text, the author handle and
channel id, the like and reply counts, the verified badge and the avatar. No API key to request.
Read the like count before you build anything on it. YouTube abbreviates it on the page, so a comment
with 315,000 likes arrives as the string "315K". Small numbers come through exact, large ones do
not, and the exact figure is not recoverable from the text.
| Input | Watch, youtu.be or Shorts links, or bare 11 character video ids |
| Output | One row per comment: text, author handle and channel id, verified badge, avatar, likes and replies as YouTube shows them, relative date |
| Ceiling | 10,000 comments per run |
| Account needed | None |
| Price | $0.40 per 1,000 comments on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 12,500 |
🔍 What YouTube Comments Scraper does
It reads each video's comment list in YouTube's own default order, which is roughly top comments rather than newest first, and pages through it until the budget runs out.
maxComments is the budget for the whole run, divided evenly across your videos. 500 over five
videos is about 100 from each, not 500 from the first. The division rounds down and the remainder is
not handed back, so 100 across three videos returns at most 99. Ask for fewer comments than you have
videos and each one gets exactly one.
Pass videoUrls and videoIds together if that is what you have. They are merged and deduplicated
before anything is fetched.
📋 What data you get from each YouTube comment
| What you get | Field |
|---|---|
| The comment as written | text |
| The video it sits under | videoId |
| Who wrote it: the handle as displayed and the stable channel id | author, authorChannelId |
| Verified tick and avatar | authorIsVerified, authorAvatar |
| Likes and replies, as YouTube shows them | likeCount, replyCount |
| When it was posted, as relative text | publishedTime |
| Whether it is a reply to another comment | isReply |
| A key to dedupe on | id |
▶️ How to scrape YouTube comments
- Open YouTube Comments Scraper and click Try for free.
- Paste links into Video URLs, or ids into Video IDs.
- Set Max comments. Start at 100 while you look at the output.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or read it over the Apify API.
Send at least one video. With nothing usable in either field the run fails rather than returning an explanatory row.
💰 How much does it cost to scrape YouTube comments?
$0.40 per 1,000 comments on the Free plan. Paid plans pay a little less: $0.395 on Starter, $0.39 on Scale and $0.385 on Business. On the free plan, the $5 Apify gives you each month covers about 12,500 comments.
You pay per comment row delivered. Diagnostic rows and duplicates dropped inside a run are never
billed, so a video with comments switched off delivers no charged rows. maxComments is the ceiling
on both the rows and the spend.
📥 What you give it
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/9bZkp7q19f0"],"maxComments": 500}
| Field | Default | What it is |
|---|---|---|
videoUrls | none | Watch links, youtu.be short links and /shorts/ links all parse. The form opens with one example link. |
videoIds | none | Or bare 11 character ids, if that is what your pipeline holds. |
maxComments | 100 | Total across every video in the run, 1 to 10,000. This is also your spend cap. |
notionConnector, notionParentId | none | Optional. Write each comment into a Notion database as well as the dataset. |
proxyConfiguration | none | Optional. Leave it empty unless you have your own servers you want the run to go out through. |
📤 What you get back
A real row from a real run, with the avatar link cut short:
{"ok": true,"type": "comment","id": "EhpVZ3pnZTM0MGRCZ0I3NWhXQm01NEFhQUJBZyAoKAE%3D","videoId": "dQw4w9WgXcQ","text": "can confirm: he never gave us up","publishedTime": "1 year ago","likeCount": "315K","replyCount": "963","isReply": false,"author": "@YouTube","authorChannelId": "UCBR8-60-B28hp2BmDPdntcQ","authorIsVerified": true,"authorAvatar": "https://yt3.ggpht.com/3s6evpqAiDU9tQR4sC2siJippbH2RWVPnwHgyl4V0th2iuQz0VDQZbUhQBGmsxLYo-..."}
| Field | How to read it |
|---|---|
text | Newlines and all. |
authorChannelId | Join on this, because handles change. |
likeCount, replyCount | Display strings, abbreviated by YouTube: "315K", "963". Not numbers. |
publishedTime | Relative text such as "1 year ago". There is no absolute timestamp to read. |
isReply | true when the row sits under another comment rather than at the top level. |
id | The comment's key from the page. Unique within a video, and stable enough to dedupe on. |
🧾 Reading the output
Two kinds of row land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| A comment | ok: true and type: "comment" | yes |
| A diagnostic | ok: false and an errorCode | no |
Filter on ok == true and you have your data. A video whose comment list could not be read gets one
uncharged NO_RESULTS row naming the videoId, and the run moves on. Any other errorCode means
that video would not answer this run, and re-running usually clears it.
Read a NO_RESULTS row as "the list did not come back", not as "this video has no comments."
Comments being switched off is the usual reason, and it is the reason the row text gives, but a
request that came back without the list looks the same from here. If a video you know has comments
returns NO_RESULTS, run it again on its own before believing it.
A TIME_LIMIT row means the run got close to its time limit and stopped on its own. The comments
delivered before that are in the dataset and charged as usual; give the run more time, or ask for
fewer comments, to get the rest. A run ends as failed only when the time limit stopped it before any
comment came back.
The Overview table shows the comment columns only, so a diagnostic reads as a blank line there. Open
the row or download the JSON for the errorCode.
💡 What people use it for
- Reading a launch video's reaction without scrolling for an hour. The upvoted comments come first, which is where the complaints sit as well as the praise.
- Pulling a few hundred comments off videos in your market and seeing which two or three questions keep coming back. That is what your own page should answer.
- Collecting quotes for research, with the handle and channel id attached for attribution.
From a keyword to the questions your market keeps asking, in three runs:
- Run YouTube Scraper on a keyword in your market
and copy the
urlcolumn. - Paste those links into Video URLs here and read down the
textcolumn. - Paste the same links into the Video URLs or IDs box of YouTube Transcript Scraper to compare what each video says with what its viewers asked.
🚧 What it does not do
- Reply threads are not expanded. Every row carries
replyCount, so you know how much conversation sits under a comment, and replies YouTube returns inline are markedisReply: true. It does not open each "view 963 replies" thread. If you need complete reply trees, this is not it. - No video-level data. Every row is about the comment. The title, view count and description are not in it, so use a video scraper for those.
- Top comments order only. There is no newest-first or sort option, because the page does not offer one without signing in.
- Like and reply counts are abbreviated strings. Sort on them and
"1.2K"orders as text. - No real timestamps.
publishedTimeis relative to when the run read the page. - The budget divides evenly, so one video in a long list cannot take more than its share.
- It is not an official YouTube tool. Dami's Studio is independent and is not affiliated with or endorsed by YouTube or Google, or by any other company named on this page.
🧭 Which YouTube scraper do you need?
| If you want | Use |
|---|---|
| Comments under a video | This one |
| Videos to run this on, by keyword or a channel's newest uploads | YouTube Scraper |
| A channel's uploads, up to 2,000 per run | YouTube Channel Scraper |
| What a video says, as text, SRT and VTT | YouTube Transcript Scraper |
| Shorts from a channel or a keyword, with exact view and like counts | YouTube Shorts Scraper |
| Comments under a TikTok video | TikTok Comments Scraper |
| Comments under an Instagram post or reel | Instagram Comments Scraper |
❓ Questions people ask
Do I need a YouTube or Google account?
No. Nothing here is signed in.
Is maxComments per video?
No, per run, split evenly across the videos you pass.
Can I get every comment on a big YouTube video?
Up to 10,000 in one run, in YouTube's top-comments order. There is no resume, so a second run starts at the top again.
Why are the like counts text?
Because that is what the page prints. "315K" is YouTube's own rounding, and the exact number is
not on the page to read.
Can I filter comments by keyword or date?
Not in the input. Pull the comments and filter text and publishedTime yourself.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/youtube-comments-scraper. Either way
the run happens on your Apify account at the same price.
Is scraping YouTube comments legal?
This reads public comments on public videos. They are personal data, which GDPR and similar laws cover, so have a reason for collecting them and be careful about republishing handles. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Include the video link you used and the run ID, and the log is enough for us to see what happened.