To scrape YouTube comments, paste a video link into a comment scraper and save each public comment as a row: the text, the author, likes, reply count, creator heart and publish time, plus the video it belongs to. The fastest way is the YouTube Comments Scraper on Scrape.ly: no Google Cloud project, no API key and no daily quota, at $1.20 per 1,000 comments.
This guide covers the no-code route and the API (curl, Python, Node.js and AI agents over MCP), compares it with the official YouTube Data API, and shows a real run we made on 22 October 2026 on a video from the verified NASA Jet Propulsion Laboratory channel: the input, the output, the log and the cost.
What data you can get from YouTube comments
The YouTube Comments Scraper writes one row per comment, and every row carries the video, so a CSV of comments from ten videos still sorts cleanly.
| Field | What it holds |
|---|---|
comment | The comment text |
author | The author's handle or name |
authorIsChannelOwner | Whether the video's channel wrote it |
voteCount | Likes on the comment (YouTube's "104K" becomes 104000) |
replyCount | How many replies it has |
hasCreatorHeart | Whether the creator hearted it |
publishedTimeText | YouTube's relative time, such as "2 weeks ago" or "2 weeks ago (edited)" |
type, replyToCid | Row type and parent comment ID |
cid | The comment's ID |
videoId, pageUrl, title | The video the comment belongs to |
commentsCount | The video's total comment count |
Rows are top-level comments; each one tells you how many replies it has through replyCount. If a video can't be read (private, deleted, age-restricted or with comments off), no row is saved and nothing is charged: the run's OUTPUT record lists it under failedInputs with a code such as NO_COMMENTS and a reason.
How to scrape YouTube comments without code
- Open the Actor's page in the Scrape.ly Store.
- Pick a ready-made input, for example the preset Top comments on Gangnam Style, 10 comments. "Try this input" opens it in the console.
- Paste your own video links. Our run used the same settings with a NASA JPL video and 5 comments:
{
"startUrls": [{ "url": "https://www.youtube.com/watch?v=DOhJpThqrxs" }],
"maxComments": 5,
"sortCommentsBy": "TOP_COMMENTS"
}- Click Start. A few comments take seconds.
- Download the results as JSON, CSV or Excel from the Output tab.
The fields that matter most:
startUrls: links to public videos. Watch,youtu.be, Shorts, embed and live links all work, and you can mix them; the preset Comments from a video and a Short shows both.maxComments: how many comments per video (default 10). Set it high and the Actor pages through every top-level comment.sortCommentsBy:NEWEST_FIRSTorTOP_COMMENTS.oldestCommentDate: only comments after a date, such as2026-10-01, or a relative value such as1 dayor2 weeks. A date filter always reads newest first.
How to scrape YouTube comments with the API
Create an API token under Settings → API & Integrations in the dashboard and export it as SCRAPELY_TOKEN.
Our run finished in 5 seconds, so the synchronous endpoint works: it starts the run, waits up to 45 seconds and returns the comments as a JSON array (?format=csv for CSV).
curl -X POST "https://api.scrape.ly/v2/actors/echofield~youtube-comments-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $SCRAPELY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"startUrls": [{"url": "https://www.youtube.com/watch?v=DOhJpThqrxs"}], "maxComments": 5, "sortCommentsBy": "TOP_COMMENTS"}'For all comments of a busy video the run can take longer than 45 seconds; the call then answers 408 while the run keeps going. Don't call it again (that starts a second run); use a client, which waits as long as needed.
Python (pip install scrapely-client-python), here saving every comment of the last week to a CSV for a sentiment model:
import csv
import os
from scrapely_client import ScrapelyClient
client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")
run = client.actor("echofield/youtube-comments-scraper").call(
run_input={"startUrls": [{"url": "https://www.youtube.com/watch?v=DOhJpThqrxs"}], "maxComments": 1000, "oldestCommentDate": "7 days"}
)
print(run.status) # SUCCEEDED, FAILED, ABORTED or TIMED-OUT
with open("comments.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["comment", "likes", "replies", "published"])
for c in client.dataset(run.default_dataset_id).iterate_items():
writer.writerow([c["comment"], c["voteCount"], c["replyCount"], c["publishedTimeText"]])Node.js (npm install scrapely-client):
import { ScrapelyClient } from 'scrapely-client';
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });
const run = await client.actor('echofield/youtube-comments-scraper').call({
startUrls: [{ url: 'https://www.youtube.com/watch?v=DOhJpThqrxs' }],
maxComments: 5,
sortCommentsBy: 'TOP_COMMENTS',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((c) => [c.voteCount, c.replyCount, c.comment.slice(0, 60)]));For AI agents, add the Scrape.ly MCP server. In Cursor, ~/.cursor/mcp.json:
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}In Claude Code, run claude mcp add --transport http scrapely https://api.scrape.ly/mcp and sign in with /mcp. Then ask: "Use scrapely to run echofield/youtube-comments-scraper on https://www.youtube.com/watch?v=DOhJpThqrxs, 200 top comments, and group them by topic." The agent reads the input schema, runs the Actor and works with the rows. The MCP docs and the Python client docs have the details, and the YouTube API page lists this Actor next to the other YouTube Actors.
A real run: top comments on a NASA JPL video
We ran the input above on 22 October 2026 on "NASA's SkyFall Mars Helicopters" from the verified NASA Jet Propulsion Laboratory channel. It returned 5 comments in 5 seconds and was charged $0.0068.
| Author | Comment | Likes | Replies | Published |
|---|---|---|---|---|
| [commenter 1] | Nice JPL! Ingenuity lives on in blueprint! | 252 | 0 | 2 weeks ago |
| [commenter 2] | We announcing Space Missions like movie trailers now. Can't say I'm complaining. | 238 | 7 | 2 weeks ago |
| [commenter 3] | Ingenuity brothers and sisters are here!! | 155 | 1 | 2 weeks ago |
| [commenter 4] | Woah, this is the Space Week as well. Edit: Thanks for the likes! | 58 | 0 | 2 weeks ago (edited) |
| [commenter 5] | Now we need the government to give NASA a bigger budget and we will be set | 40 | 3 | 2 weeks ago |
Commenters are private people, so we show them as [commenter 1] to [commenter 5]; NASA JPL is named because its channel is the one we chose on purpose. Every row also carried the video ID, the URL, the title and the video's total of 446 comments. None of the five was hearted by the creator or written by the channel. "Top comments" means YouTube's own ranking: the likes fall from 252 to 40, and the second comment started the biggest thread with 7 replies. For the video's views and likes, our YouTube scraping guide ran the same channel the same day.
The log, without the platform's start-up lines:
2026-10-22T18:27:04.555Z [Scrapely] Container started (setup 0.8 s)
2026-10-22T18:27:05.767Z [scrapely.actor] INFO videos=1 max_comments=5 sort=TOP_COMMENTS
2026-10-22T18:27:08.516Z [scrapely.actor] INFO [Status message]: Saved 5 comments from 1 video link(s).
2026-10-22T18:27:08.980Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=falseUnder three seconds from start to saved comments, on the default datacenter proxy.
What it costs
The Actor charges one event, $0.0012 per comment, which is $1.20 per 1,000 comments. Videos that can't be read cost nothing. Platform usage (compute and datacenter proxy) is added on top and is small.
For our run: 5 comments × $0.0012 = $0.006 in comment fees. The run was charged $0.0068 in total, because it also used $0.0007 of compute, $0.00007 of datacenter proxy traffic and under $0.0001 of storage writes. All 446 comments on this video would come to about $0.54 in comment fees, and 10,000 comments across a channel's videos to $12.00. The Free plan's $5 of monthly credit covers over 4,000 comments.
Scraping vs the YouTube Data API
Google's official route is the YouTube Data API's commentThreads.list method. These are its terms as documented on developers.google.com, next to the Actor:
| YouTube Data API | YouTube Comments Scraper | |
|---|---|---|
| Setup | A Google Cloud project with the YouTube Data API enabled | A Scrape.ly token, or the console with no code |
| Daily limit | Default 10,000 quota units per day for all endpoints except search.list and videos.insert, reset at midnight Pacific Time | No quota; you pay per comment |
| Per request | commentThreads.list costs 1 unit and returns up to 100 threads (default 20) | One run takes any number of videos and comments |
| Output | JSON resources you page through with pageToken | Flat rows with the video's title and total comment count, exported as JSON, CSV or Excel |
| Errors | commentsDisabled, videoNotFound and other API errors | failedInputs with a reason, never charged |
Sources: Google's commentThreads.list reference and quota calculator, checked on 22 October 2026. The 10,000 units are shared by every other call your project makes, such as videos.list and channels.list, so a dashboard that also reads video stats spends the same budget.
What to watch out for
- Relative dates.
publishedTimeTextis YouTube's "2 weeks ago", not a timestamp. Store the run's date next to it, or useoldestCommentDateto collect only a known window. - Rounded likes. Like counts YouTube shows in short form, such as 104K, are rounded by YouTube; the Actor converts them to numbers as shown.
- Unreadable videos. Private, deleted, age-restricted videos and videos with comments turned off return no rows. Check
OUTPUT.failedInputsafter a big batch; those inputs are free. - Date filters read newest first. With
oldestCommentDate, the sort is always newest first, whatever you choose. - Short runs include start-up. A few seconds of container start-up are part of every run; batch many videos into one run rather than starting one run per video.
- Handles are personal data. Comment authors are private people. If you only need the text and the numbers, drop
authorbefore you store or share the data.
Is it legal to scrape YouTube comments?
The Actor reads public comments that anyone can see without logging in. YouTube's Terms of Service (effective December 15, 2023) still set limits: they say you may not "access the Service using any automated means (such as robots, botnets or scrapers)" except for public search engines following YouTube's robots.txt or "with YouTube's prior written permission", and may not "collect or harvest any information that might identify a person (for example, usernames or faces)" unless that person permits it or one of those exceptions applies. Whether those terms bind you, and how, depends on your jurisdiction and your use.
Privacy law is the bigger practical point. A commenter's handle and words can identify a private person under the GDPR and the CCPA. Collect only what you need, aggregate or pseudonymise before you publish, and have a lawful basis for processing. This is not legal advice: if comments feed a product, a model or a public report, ask a lawyer.
Why Scrape.ly for YouTube comments
- No Google Cloud project, no quota math. Paste links and run. You never budget units across endpoints or wait for a midnight Pacific reset.
- Rows ready for analysis. Every comment carries the video's title, ID and total comment count, in CSV or Excel straight from the run.
- Honest billing. $1.20 per 1,000 comments, nothing for videos that fail, and a maximum charge per run if you want a hard cap.
- One platform for the whole channel. Pair it with the YouTube Scraper for views and likes, schedule both, and let an AI agent summarize the comments over MCP.
FAQ
Can you scrape YouTube comments without an API key?
Yes. The Actor needs no Google API key, no Cloud project and no login. You need a Scrape.ly account; the Free plan includes $5 of monthly credit.
How many comments can you scrape from one video?
As many as the video has. Set maxComments high and the Actor pages through all top-level comments. Our test video had 446.
Does it scrape replies?
It returns top-level comments, and each row includes replyCount, so you can see which comments started a thread. In our run the most-replied comment had 7 replies.
How do I get only new comments every day?
Set oldestCommentDate to 1 day and schedule the run daily. "1 day" keeps today's comments; "2 days" keeps yesterday's and today's.
Can I scrape comments from YouTube Shorts and live streams?
Yes. Shorts, live, embed, watch and youtu.be links all work and can be mixed in one run.
Can I export YouTube comments to Excel?
Yes. Download the dataset as Excel or CSV from the run's Output tab, or add ?format=csv to the API call.




