YouTube Comments Scraper: New Comments Alerts, Bulk by Video
Pricing
from $0.25 / 1,000 comment returneds
YouTube Comments Scraper: New Comments Alerts, Bulk by Video
Scrape YouTube comments for a list of videos, or only new comments since last run as alerts. One row per comment: text, likes, replies, author name and channel ID, pinned and creator flags. No login, no API key, no API quota. Comments to Google Sheets, Slack or n8n. Comments-off videos are free.
Pricing
from $0.25 / 1,000 comment returneds
Rating
0.0
(0)
Developer
Adrian Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Paste a list of YouTube videos and get one row per comment: the comment text, likes, reply count, the author's public display name and channel ID, whether the author is verified or is the video's own creator, whether the comment is pinned, and when it was posted. Scrape comments for a list of videos in one run, or switch on monitoring and get only new comments since last run, so a scheduled task becomes a comment alert for your brand's videos. No login, no Google API key and no API quota: it reads the same public comments a signed-out visitor sees, live, at request time.
Who it's for
A brand or creator team that wants to know what people said under its latest videos in the last hour, without someone refreshing YouTube Studio: new comments land in Slack, a Sheet or an n8n workflow on a schedule. A marketer or researcher who needs the top comments on twenty competitor videos as a table, not twenty browser tabs. A social listening or sentiment pipeline that needs comment text with a timestamp and an author channel ID in a fixed shape it can feed to a model. And an agent that already knows which videos matter and needs one HTTP call that answers "what are people saying under this video right now".
You pay per comment returned and nothing else: a video with comments turned off, a deleted video, or a monitored video with nothing new costs nothing.
Why this one
- Only new comments since last run. Turn on monitoring and each video's comments are checked against the comment IDs earlier runs already delivered. Already-seen comments are dropped before billing, so a quiet video costs nothing and your alert step only ever sees fresh comments. Memory is per video, so adding this week's upload to the list never re-sends last month's comments.
- Cheap monitoring runs. Sorted newest first, a monitor stops reading as soon as it reaches a comment it has already seen, usually after the first page of 20. It doesn't re-read hundreds of old comments every hour.
- No API quota, no key. The official YouTube Data API caps you at 10,000 quota units a day and needs a Google Cloud project. This reads the public watch page and YouTube's own comment feed, so there is no daily quota to budget and nothing to set up.
- Comments-off videos are free. A video with comments disabled is detected from the video page
itself, before any comment request is made, and comes back as a free
NOT_FOUNDrow that says so. - Privacy-minded author fields. Each comment carries the author's public display name and channel ID, plus YouTube's own verified and creator flags. Avatar images and every other author detail are deliberately left out.
- Newest or top. Newest first for alerts and monitoring, or YouTube's own "Top comments" ranking for a one-off export of the most-liked discussion.
What you get
Every row starts with the same five fields, then the video fields, then one comment.
| Field | Type | Description |
|---|---|---|
query | text | The video you submitted, echoed back |
found | boolean | true if the video's comments were read |
status | text | OK, or NOT_FOUND / BLOCKED / BAD_FORMAT / REQUEST_FAILED on a miss |
message | text | Plain-English reason for a miss, e.g. "Comments are turned off for this video" |
scrapedAt | ISO 8601 datetime | When the video was fetched |
videoId | text | The 11-character video ID |
videoTitle | text | The video's title |
videoUrl | link | The video's watch link |
sort | text | newest or top, the order YouTube actually applied |
totalCommentCount | number | Comments on the video in total, as YouTube counts them |
commentCount | number | Comments returned for this video in this run (what you're billed for) |
newCommentCount | number | With monitoring: comments not seen on an earlier run. Empty otherwise |
monitorStatus | text | With monitoring: NEW_COMMENTS, NO_NEW_COMMENTS or SEEDED |
commentId | text | YouTube's comment ID |
parentCommentId | text | For a reply, the comment it replies to. Empty for a top-level comment |
isReply | boolean | true for a reply |
text | text | The comment text |
publishedText | text | When it was posted, as YouTube shows it ("2 days ago", "3 weeks ago (edited)") |
publishedAtApprox | ISO 8601 datetime | That text turned into a date at fetch time. Approximate: "1 year ago" only means 12 to 23 months |
likeCount | number | Likes, as YouTube displays them (319K becomes 319,000) |
replyCount | number | Replies under a top-level comment. Empty on a reply |
authorName | text | The author's public display name (their @handle) |
authorChannelId | text | The author's UC... channel ID |
authorIsVerified | boolean | YouTube's verified badge |
authorIsCreator | boolean | The author is the video's own channel |
isPinned | boolean | The comment is pinned by the creator |
isNew | boolean | With monitoring or a named watchlist: first time a run returned it. Empty otherwise |
firstSeenAt | ISO 8601 datetime | With monitoring: the run that first returned it |
Turn off "One row per comment" to get one row per video instead, with the comments grouped in a
comments array. You pay per comment either way.
Price
- Comment returned: $0.5 per 1,000 comments
Plus a $0.00005 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.
1,000 comments cost about $0.50 on the free plan, and less on a paid Apify plan. You're charged per comment actually returned, after monitoring and keyword filters: a video with comments off, a video that no longer exists, or a monitored video with nothing new is never billed. "Most comments per video" is your budget control.
How to use
- In the Apify Console. Open the actor page and click Start — the
videosfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~youtube-comments-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"videos":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
- Paste your videos into "YouTube videos", one per line, as a link or a bare video ID.
- Set "Most comments per video". Leave "Try it first" on for a first look: it reads at most 5 videos and 20 comments per video.
- Pick "Newest first" for alerts, or "Top comments" for an export of the most-liked discussion. Tick "Include replies" if you want reply threads too.
- For alerts, tick "Only return comments that are new since the last run" and save the input as a Task with a schedule (see "Monitoring" below).
Typical uses: a new-comment alert on your brand's latest videos, exporting comments to Google Sheets for a sentiment review, collecting the top comments for a list of competitor videos, and a keyword-filtered comment feed ("refund", "broken", your product name) into Slack.
Input
{"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}
One video per line: a full link (watch, youtu.be, Shorts, live or embed) or just the 11-character video ID. No login, no API key and no API quota: this reads the same public comments a signed-out visitor sees. Accepted formats: https://www.youtube.com/watch?v=dQw4w9WgXcQ, https://youtu.be/dQw4w9WgXcQ, https://www.youtube.com/shorts/dQw4w9WgXcQ, dQw4w9WgXcQ.
A fuller input, for a monitor that alerts on complaints:
{"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://youtu.be/jNQXAC9IVRw"],"maxComments": 100,"sort": "newest","includeReplies": false,"deltaMode": true,"skipFirstRun": true,"includeKeywords": ["refund", "broken", "doesn't work"]}
Sample output
By default you get one row per comment (turn off "One row per comment" for one row per video):
| query | found | status | videoId | videoTitle | videoUrl | sort | totalCommentCount | commentCount | newCommentCount | monitorStatus | comments | commentId | parentCommentId | isReply | text | publishedText | publishedAtApprox | likeCount | replyCount | authorName | authorChannelId | authorIsVerified | authorIsCreator | isPinned | isNew | firstSeenAt | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| https://www.youtube.com/watch?v=dQw4w9WgXcQ | true | OK | <all comments found (full list)> | <replying to comment id (empty for top-level)> | <posted (as youtube shows it)> | <posted at (approximate)> | <author (public display name)> | <written by the video's creator> | <is this comment new?> | 1970-01-01T00:00:00.000Z |
A real row from a live run (2026-09-23, newest first; the pinned comment always leads):
{"query": "dQw4w9WgXcQ","found": true,"status": "OK","videoId": "dQw4w9WgXcQ","videoTitle": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","sort": "newest","totalCommentCount": 2457522,"commentCount": 20,"newCommentCount": null,"monitorStatus": null,"commentId": "Ugzge340dBgB75hWBm54AaABAg","parentCommentId": null,"isReply": false,"text": "can confirm: he never gave us up","publishedText": "1 year ago","publishedAtApprox": "2025-09-23T17:07:00.951Z","likeCount": 319000,"replyCount": 1000,"authorName": "@YouTube","authorChannelId": "UCBR8-60-B28hp2BmDPdntcQ","authorIsVerified": true,"authorIsCreator": false,"isPinned": true,"isNew": null,"firstSeenAt": null,"scrapedAt": "2026-09-23T17:07:00.950Z"}
A video with comments turned off comes back as a single free row:
{"query": "XqZsoesa55w", "found": false, "status": "NOT_FOUND", "message": "Comments are turned off for this video ..."}.
Monitoring: only new comments since last run
Turn on Only return comments that are new since the last run and this actor becomes a comment
alert. Each video's comments are checked against the comment IDs earlier runs already delivered,
and anything seen before is dropped before billing. A video with nothing new still returns one
free row with monitorStatus: NO_NEW_COMMENTS, so it never silently vanishes. Each run logs a
count like 3 new of 20 comments fetched.
The first run for a video has nothing to compare against. By default it returns every comment it reads and remembers them; tick Seed silently and it remembers them but returns and bills none, so alerts start from the next run.
To turn that into an alert:
- Save your video list as a task with monitoring on and "Newest first".
- Add a Schedule to that task, hourly or daily.
- Add a webhook on Run succeeded, pointing at Slack, n8n, Make or Zapier, or use Apify's Google Sheets integration to append each run's rows (comments to Google Sheets, no code).
Memory lives in a named key-value store, youtube-comments-lookup-delta, one record per video,
holding up to 5,000 comment IDs. It is kept per video, not per list: add or remove videos freely.
A comment no run has read for 90 days is forgotten. Leave monitoring off but fill in Watchlist
name and every comment comes back stamped with isNew and firstSeenAt for you to filter
yourself.
Sorted newest first with replies off, a monitoring run stops paging at the first page that contains a comment it has already seen, which is what keeps an hourly monitor cheap. With replies on it reads the full "Most comments per video" window, so new replies under recent comments are caught too.
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~youtube-comments-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"videos":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~youtube-comments-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"videos":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~youtube-comments-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"videos":["{{video}}"]}, mapping the row's video into the videos array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "YouTube Comments Scraper: New Comment Alerts | Apify" — the agent will find and run this actor.
Tips
- For alerts, keep "Most comments per video" at 100 or more on busy videos. A monitor only needs to reach the newest comment it already knows, and a bigger window covers a burst between runs.
likeCountandreplyCountare YouTube's own displayed figures: "319K" becomes 319,000, not an exact count.publishedAtApproxis only as precise as YouTube's wording. Use it to sort and bucket, not to audit.- Keyword filters match the comment text and the author name, case-insensitively. A comment that a filter drops is not billed.
- A
BLOCKEDrow means YouTube refused the request. Lower "Max concurrency" and try again later. ANOT_FOUNDrow says why: comments off, video unavailable, or no comments section. - The pinned comment is always first in YouTube's feed, whatever the sort. It is flagged
isPinnedso you can filter it out.
vs. alternatives
| What it costs | What you get | Trade-off | |
|---|---|---|---|
This actor (youtube-comments-lookup) | $0.50 per 1,000 comments (free plan, less on paid plans), nothing for a miss | One row per comment with author channel ID, creator/pinned flags, approximate date; newest or top; replies optional; only new comments since last run | Signed-out view only; like and reply counts are YouTube's rounded display figures |
| streamers/youtube-comments-scraper | Pay per comment, see its Store page | The most-used YouTube comments actor on Apify | No built-in "only new since last run" memory: a monitor re-bills comments you already have |
| apidojo YouTube comments | $0.50 per 1,000 comments plus $1 per 1,000 video queries | Comments per video | A per-video fee on top of the per-comment price |
| YouTube Data API v3 | Free up to 10,000 quota units a day | Official comment threads | Needs a Google Cloud project and key, and a daily quota you have to budget |
Prices for third-party tools are their published figures as of September 2026 and are not tracked here; check the vendor before relying on the comparison.
FAQ
Why does a row say found: false?
The message column says why: comments are turned off, the video isn't available, the input
isn't a YouTube video, or YouTube refused the request. None of these are billed.
Am I charged for comments I already had? Not with monitoring on. Already-seen comments are dropped before billing. Without monitoring, every comment returned is billed.
How many comments can I get per video? Up to 1,000 per video per run, top-level comments and replies together. Set it with "Most comments per video".
Does it need my Google account or an API key? No. It reads public comments the way a signed-out visitor does. There's no API quota to run out of.
How exact is the posted date?
Approximate. YouTube only shows relative times ("3 weeks ago"), so publishedAtApprox is that
text converted to a date at fetch time; publishedText keeps YouTube's own wording.
Is this GDPR-relevant? Comments are public, but they are written by people. This actor returns only the author's public display name and channel ID, never avatars or other profile details. You remain responsible for how you store and use the data.
Can I get comments to Google Sheets? Yes. Use Apify's Google Sheets integration on the task, or pull the dataset as CSV. Each run appends one row per comment.
Can an AI agent call this directly? Yes. It's on the Apify MCP server, or call the REST endpoint above from any script or workflow tool.
Related actors
- YouTube Channel Lookup: subscriber
count, views and recent uploads for a list of channels. Feed its newest
videoIds into this actor to monitor comments on every new upload.