YouTube Comments Scraper
Pricing
$24.99/month + usage
YouTube Comments Scraper
Scrape YouTube video comments easily with the YouTube Comments Scraper. Extract usernames, comment text, timestamps, likes, and replies. Ideal for sentiment analysis, trend tracking, and audience research. Fast, reliable, and customizable for any video or channel URL.
Pricing
$24.99/month + usage
Rating
5.0
(2)
Developer
Scrapier
Maintained by CommunityActor stats
0
Bookmarked
37
Total users
3
Monthly active users
4 days ago
Last modified
Categories
Share
YouTube Comments Scraper — Extract Comments, Replies and Likes
YouTube Comments Scraper pulls comments and replies from any public YouTube video by URL or video ID, no YouTube Data API key or Google Cloud project required. Each row returns the comment text, author handle and avatar, like and reply counts, verified and creator-heart badges, pinned status, and the video's title and total comment count — structured JSON ready to pass to an LLM, load into a spreadsheet, or feed a sentiment-tracking pipeline. Add one video or a hundred in a single run.
What is YouTube Comments Scraper?
YouTube Comments Scraper is an Apify Actor that fetches every comment and reply YouTube's own comment feed exposes on a public video's watch page and returns them as structured, normalized dataset rows. It reads directly from YouTube's public web front end, so no YouTube account, Google login, or API credentials are required — only a video URL or ID. Point it at one video or a list of videos, and it pages through the comment feed until it hits your comment cap or YouTube stops returning more.
- Scrapes comments from any public YouTube video by full URL or bare 11-character video ID
- Sorts comments by YouTube's "top" (most liked/relevant) or "newest" (most recent) ordering
- Returns per-comment engagement data: like count, reply count, verified badge, and creator-heart status
- Flags pinned comments independently of channel-owner authorship, so a comment pinned by the creator but posted by someone else isn't misread as the creator's own words
- Processes multiple videos sequentially in a single run
- Supports a configurable interface language and region, which affect how YouTube localizes timestamps and orders comments
What data can you get with YouTube Comments Scraper?
YouTube Comments Scraper returns two row shapes from the same comment feed — top-level comments and their replies — each carrying the full set of author, engagement, and video-context fields.
| Result Type | Extracted Fields | Primary Use Case |
|---|---|---|
Top-level comments (type: "comment") | cid, comment, author, avatar, authorIsChannelOwner, isVerified, voteCount, hasCreatorHeart, isPinned, publishedTimeText, replyCount, videoId, pageUrl, commentUrl, title, commentsCount | Sentiment analysis, social listening, comment-volume tracking |
Reply comments (type: "reply", isChild: true) | Same field set, plus replyToCid linking the reply to its parent comment's cid | Conversation-thread analysis, identifying which comments spark the most discussion |
Reply comments
Every row carries a type of "comment" or "reply", with isChild and replyToCid linking a reply to its parent's cid. Reply rows appear whenever YouTube's response inlines them, but in practice its comment-continuation endpoint mostly serves a "load more replies" trigger rather than reply bodies, so most rows are top-level comments. The parent's own replyCount still shows how many replies exist even when the text isn't returned — useful for spotting which comments actually drive conversation.
How does YouTube Comments Scraper differ from the official YouTube API?
The YouTube Data API v3 returns comment data through an authenticated, quota-metered endpoint, while YouTube Comments Scraper reads the same public comments directly off the video page with no API key, OAuth, or quota to manage.
| Feature | YouTube Data API v3 | YouTube Comments Scraper |
|---|---|---|
| Setup | Requires a Google Cloud project, an enabled YouTube Data API v3, and an API key or OAuth credentials (Google for Developers docs) | Requires only an Apify account and a video URL or ID |
| Cost model | commentThreads.list costs 1 quota unit per call, metered against the project's daily quota in Google Cloud Console | Metered as Apify platform usage (compute time and dataset events) — no separate API unit quota |
| Multi-video runs | One commentThreads.list call, with its own pagination, per video | An array of video URLs/IDs processed in one run |
| Inline replies | part=replies returns up to 5 replies per thread inline, in the same call | Reply rows appear only when YouTube's own response inlines them (see the reply-coverage note above) |
| Verified / creator-heart badges | Not exposed in the commentThreads/comments resource schema | isVerified and hasCreatorHeart returned on every comment |
| Output format | Raw API JSON, normalized client-side by the caller | Dataset rows exportable directly from Apify as JSON, CSV, or Excel |
Use the official API when you're building against Google's supported terms of service or need OAuth-based write access (posting or moderating comments). Use YouTube Comments Scraper when you want read-only comment data extracted in bulk, immediately, without provisioning Google Cloud credentials or tracking a unit quota.
How to scrape YouTube with YouTube Comments Scraper?
- Open YouTube Comments Scraper on the Apify Store and click Try for free.
- Add one or more entries to
startUrls— full YouTube URLs (e.g.https://www.youtube.com/watch?v=VIDEO_ID) or bare 11-character video IDs. - Set
maxComments(0for every available comment) andsortOrder("top"or"newest"). - Optionally set
languageandregion, or configure a proxy if you expect YouTube to rate-limit the run. - Click Start, then open the dataset's OUTPUT tab once the run finishes and export to JSON, CSV, or Excel.
Example request body:
{"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"maxComments": 200,"sortOrder": "top"}
How to run multiple queries in one job
startUrls accepts an array, so you can queue any number of videos in a single run; the Actor processes them one after another, pushing each video's comments to the dataset in real time as they're fetched — you can start reading earlier videos' results in the dataset before the run finishes. maxComments and sortOrder apply run-wide, so every video in the batch shares the same cap and ordering.
⬇️ Input
startUrls is the only required field. Everything else has a working default, so the shortest valid input is a single video URL or ID.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array | Full YouTube video URLs or bare 11-character video IDs, one or more per run | ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"] |
maxComments | No | integer | Maximum comments to fetch per video; 0 fetches all available comments. Default 50 | 200 |
sortOrder | No | string | "top" (most liked/relevant first) or "newest" (most recent first). Default "top" | "newest" |
language | No | string | Language code sent as the Accept-Language/hl parameter; affects relative-time text. Default "en-GB" | "en-US" |
region | No | string | Two-letter region/country code sent as the gl parameter; can affect comment ordering. Default "US" | "GB" |
proxyConfiguration | No | object | Apify Proxy settings. No proxy is used by default | {"useApifyProxy": false} |
Example JSON input:
{"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/KrLj6nc516A"],"maxComments": 500,"sortOrder": "top","language": "en-GB","region": "US","proxyConfiguration": {"useApifyProxy": false}}
Common pitfall: language and region are forwarded to YouTube exactly as typed, with no validation. A typo or an unsupported code won't raise an input error — YouTube simply falls back to its own default locale for that request, so the run will still complete but the timestamp formatting or comment ordering may not be what you expected.
⬆️ Output
Every run writes one row per comment or reply to the Actor's dataset, with a consistent schema across every video and run. Export the dataset directly from Apify as JSON, CSV, Excel, or the other formats the platform's dataset export supports.
Scraped results
[{"cid": "Ugzge340dBgB75hWBm54AaABAg","type": "comment","isChild": false,"isPinned": true,"publishedTimeText": "1 year ago","comment": "can confirm: he never gave us up","author": "@YouTube","avatar": "https://yt3.ggpht.com/abc123/s88-c-k-c0x00ffffff-no-rj","authorIsChannelOwner": false,"isVerified": true,"voteCount": 269000,"hasCreatorHeart": true,"replyCount": 961,"replyToCid": null,"videoId": "dQw4w9WgXcQ","pageUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","commentUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ&lc=Ugzge340dBgB75hWBm54AaABAg","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","commentsCount": 2400000},{"cid": "UgyAbc123deFGhijKLm456AaABAg","type": "comment","isChild": false,"isPinned": false,"publishedTimeText": "3 months ago","comment": "The production on this track still holds up decades later.","author": "@musicfan88","avatar": "https://yt3.ggpht.com/def456/s88-c-k-c0x00ffffff-no-rj","authorIsChannelOwner": false,"isVerified": false,"voteCount": 342,"hasCreatorHeart": false,"replyCount": 2,"replyToCid": null,"videoId": "dQw4w9WgXcQ","pageUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","commentUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ&lc=UgyAbc123deFGhijKLm456AaABAg","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","commentsCount": 2400000},{"cid": "UgyAbc123deFGhijKLm456AaABAg.9zXyQwErTy1","type": "reply","isChild": true,"isPinned": false,"publishedTimeText": "2 months ago","comment": "Agreed, the mixing is what really sells it.","author": "@retrowave_fan","avatar": "https://yt3.ggpht.com/ghi789/s88-c-k-c0x00ffffff-no-rj","authorIsChannelOwner": false,"isVerified": false,"voteCount": 14,"hasCreatorHeart": false,"replyCount": 0,"replyToCid": "UgyAbc123deFGhijKLm456AaABAg","videoId": "dQw4w9WgXcQ","pageUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","commentUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ&lc=UgyAbc123deFGhijKLm456AaABAg.9zXyQwErTy1","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","commentsCount": 2400000}]
How can I use the data extracted with YouTube Comments Scraper?
- Audience sentiment research: Pull
comment,voteCount, andpublishedTimeTextfor a video (or a channel's recent uploads) and run them through a sentiment model to see how audience reaction shifts across a launch, an ad campaign, or a controversy. - Content strategy: Compare
voteCountandreplyCountacross a channel's videos to see which topics, hooks, or formats generate the most engaged comment sections, and feed that back into what to make next. - AI engineers and LLM developers: Have an agent call the Actor with a video URL, receive structured comment JSON back, and ground a summarization or Q&A response in what viewers actually said — instead of the model guessing at audience reaction.
- Brand monitoring: Track comments on videos that mention a brand, product, or campaign, filtering on
isVerifiedandhasCreatorHeartto surface which reactions the channel itself chose to spotlight.
How do you monitor YouTube comment sentiment over time?
Comment sentiment on a video isn't static — it shifts as a video ages, gets re-shared, or becomes the subject of a news cycle, and the only way to see that shift is to scrape the same video more than once and compare. Each run of YouTube Comments Scraper is a snapshot: the same cid will reappear across runs, while voteCount and replyCount on that comment climb, and entirely new comments show up with fresh publishedTimeText values.
To monitor a video, diff two runs on cid: comments that are new since the last run show you what's currently being said, while a rising voteCount on an existing comment tells you which reaction is gaining traction with the audience. Watching commentsCount between runs gives you the coarsest signal — a sudden jump usually means the video is getting fresh attention worth digging into.
A practical workflow: schedule a recurring run against a fixed list of video URLs (a product launch, a brand mention, a competitor's upload), keep each run's dataset, and diff on cid to isolate what changed. Apify's built-in Schedules feature can trigger this Actor on a recurring interval so you don't have to start each run by hand — see the integration section below for how to wire that up.
Integrate YouTube Comments Scraper and automate your workflow
YouTube Comments Scraper works with any language or tool that can send an HTTP request.
REST API with Python
import requestsTOKEN = "<YOUR_APIFY_TOKEN>"url = f"https://api.apify.com/v2/acts/scrapier~youtube-comments-scraper/run-sync-get-dataset-items?token={TOKEN}"payload = {"startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"maxComments": 200,"sortOrder": "top"}response = requests.post(url, json=payload)comments = response.json()print(comments[0]["comment"])
MCP for query-grounded AI agents
YouTube Comments Scraper is callable through Apify's MCP Server, which exposes any Apify Actor as a tool to an MCP-compatible client (Claude, Claude Code, and other MCP-aware agent frameworks). Register mcp.apify.com as an MCP server with your Apify token, then an agent can call the Actor by ID (scrapier/youtube-comments-scraper), pass a video URL, and receive comment JSON back to ground its answer in what viewers actually wrote.
Scheduled monitoring and delivery
Apify's built-in Schedules let you trigger this Actor on a recurring cron interval without any external orchestration. Pair a schedule with an Apify webhook on run completion to push each run's dataset to your own endpoint automatically, or poll the Actor's dataset via the REST API after each scheduled run.
Is it legal to scrape YouTube comments?
Yes — scraping publicly visible comments that any visitor can see without logging in is generally lawful; YouTube Comments Scraper only reads what's already public on the video page. It does not access private, unlisted, or age-restricted videos, and it doesn't bypass any login wall.
Comment data does include personal data — a commenter's display name, avatar, and comment text can identify a real person — so GDPR and CCPA considerations apply to how you store, process, and retain it, separately from whether the scraping itself is permitted. Scraping for one-off research carries a different risk profile than scraping for bulk storage, profiling, or AI training on personal data. Consult your legal team before using this data for commercial use cases involving bulk storage or profiling of commenters.
Frequently asked questions
How many comments does YouTube Comments Scraper return per video?
Up to maxComments per video, or every comment YouTube's continuation feed serves up if maxComments is set to 0. The default is 50. There's no separate platform-imposed cap beyond that — the Actor keeps paging until it hits your limit or YouTube stops returning a next continuation token.
Do I need a YouTube Data API key or Google Cloud project?
No. The Actor reads comments directly from YouTube's public web front end, so there's no API key, OAuth flow, or Google Cloud project to set up.
Can I scrape private, unlisted, or age-restricted videos?
No. Only videos that are publicly viewable with comments enabled can be scraped; the Actor doesn't authenticate as a user and can't access anything behind a login or age gate.
Does YouTube Comments Scraper return reply comments?
It labels rows with type: "reply", isChild: true, and replyToCid whenever YouTube's own response inlines reply content, but in practice YouTube's comment-continuation endpoint mostly serves a "load more replies" prompt rather than the reply text itself — so most scraped rows are top-level comments. The parent's replyCount still shows you how many replies exist even when the bodies aren't returned.
Can I choose whether comments are sorted by top or newest?
Yes — set sortOrder to "top" (most liked/relevant, YouTube's default) or "newest" (most recent first), matching the same sort control available on the YouTube page itself.
Can I control the language and region YouTube uses?
Yes — language sets the Accept-Language/hl value (affects relative-time text like "2 days ago"), and region sets the gl value (can affect which comments YouTube surfaces first). Both accept any code YouTube itself supports.
How does YouTube Comments Scraper handle YouTube's rate limiting or blocks?
It starts with no proxy, and if YouTube returns a blocked or rate-limited response, it automatically escalates to a datacenter proxy and then a residential proxy, retrying the request as it does. You can also enable Apify Proxy from the start via proxyConfiguration.
How do I monitor a video's comments over time?
Schedule a recurring run against the same video URL(s), keep each run's dataset, and diff on cid between runs — new cid values are new comments, and a rising voteCount on an existing cid shows which comment is gaining traction. See "How do you monitor YouTube comment sentiment over time?" above.
Does YouTube Comments Scraper work with Claude, ChatGPT, and AI agent frameworks?
Yes. It's reachable directly through Apify's MCP Server for MCP-compatible clients like Claude and Claude Code, and it's callable as a plain HTTP endpoint by any agent framework that can make a REST call — either path lets an agent retrieve live comment data before generating an answer.
How does YouTube Comments Scraper compare to other YouTube comment scrapers?
As observed on their public Apify Store listings on 2026-07-26, several competing YouTube comment scrapers expose a similar core field set (author, text, likes, replies), and some also separate pinned-comment status from channel-owner authorship. YouTube Comments Scraper's output additionally includes a direct commentUrl deep link to each comment and works with no proxy configured by default, escalating automatically only if YouTube blocks a request.
Can I use YouTube Comments Scraper without managing proxies or a YouTube account?
Yes. No YouTube account, login, or credentials are ever required, and no proxy is used by default — the Actor only reaches for Apify's datacenter and then residential proxies automatically if YouTube blocks a request.
Your feedback
Found a bug, a missing field, or a video type the Actor doesn't handle correctly? Let Scrapier know through the Issues tab on the Actor's Apify Store page — reports are used to keep the field set accurate as YouTube's own page structure changes.