YouTube Comments Scraper - With Replies avatar

YouTube Comments Scraper - With Replies

Pricing

from $0.50 / 1,000 comment delivereds

Go to Apify Store
YouTube Comments Scraper - With Replies

YouTube Comments Scraper - With Replies

Scrape YouTube comments and full reply threads in bulk from videos, channels and playlists. Like counts, reply counts, author channel IDs, verified and creator flags, sorted by top or newest. Keyword and like filters run before billing, so filtered comments are free.

Pricing

from $0.50 / 1,000 comment delivereds

Rating

0.0

(0)

Developer

DONGMIN KIM

DONGMIN KIM

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

YouTube Comments Scraper — Bulk Comments & Replies with Likes, Authors and Dates

YouTube Comments Scraper — Bulk Comments & Replies with Likes, Authors and Dates

Pull every comment from a video, a whole channel, or a playlist in one run. Top-level comments and reply threads, with like counts, reply counts, author channel IDs, verified and creator flags, and a direct link to each comment.

What it does well

  • Bulk input — videos, @handles, channel URLs and playlists in the same run. Channels are expanded automatically.
  • Real pagination — pulls hundreds of comments per video, not just the first page. (Getting this right is subtle: YouTube's page token and its reply-thread tokens are the same shape, and matching on shape rather than position quietly paginates into one reply thread and stops at ~30 comments. This actor does not do that.)
  • Replies — optional full reply-thread expansion, flagged with isReply and replyLevel.
  • Sort control — Top comments, or Newest first for monitoring.
  • Server-side filtering — keep only comments containing your keywords, or above a like threshold. Filtered comments are not billed.
  • Throttle handling — datacenter → residential proxy escalation with per-video IP sessions.

Input

{
"videoUrls": ["https://www.youtube.com/watch?v=8S0FDjFBj8o", "@veritasium"],
"maxVideos": 25,
"maxCommentsPerVideo": 500,
"sortBy": "newest",
"includeReplies": true,
"filterKeywords": ["pricing", "alternative", "how do I"],
"minLikeCount": 2
}

Every option

The same wording you see in the Apify console, with the JSON key for API and MCP callers.

OptionWhat it doesDefault
YouTube URLsvideoUrls (required)Videos, channels or playlists. Any mix of watch URLs, youtu.be links, /shorts/, bare video IDs, @handles, /channel/UC…, or playlist URLs. Channels and playlists are expanded into their videos automatically.
Max videosmaxVideosCap on how many videos to visit, counting videos pulled out of channels and playlists.10
Max comments per videomaxCommentsPerVideoStop after this many comments on each video. Comments arrive 20 per request, so this is also the main cost control.100
Sort bysortByTop comments is YouTube's relevance ranking. Newest first is what you want for monitoring and alerting."top"
Include repliesincludeRepliesExpand reply threads as well as top-level comments. Replies are marked with isReply and replyLevel. This costs extra requests, so leave it off if you only need top-level sentiment.false
Only keep comments containingfilterKeywordsCase-insensitive keywords. A comment is kept if it contains any of them. Leave empty to keep everything. Useful for brand monitoring and lead detection.
Minimum likesminLikeCountDrop comments below this like count. Filtered-out comments are not billed.0
ConcurrencyconcurrencyHow many videos to process in parallel.5
ProxyproxyConfigurationLeave the default. The actor starts on cheap datacenter proxies and only escalates to residential if YouTube actually throttles it.{"useApifyProxy":true}

Output

One row per comment. Replies are rows too, marked with isReply.

{
"videoId": "8S0FDjFBj8o",
"commentId": "UgxRK6CK8oblNf__AHx4AaABAg",
"text": "This is the equivalent to adding random words to reach the word count.",
"likeCount": 12000,
"replyCount": 14,
"publishedTimeText": "7 years ago",
"isReply": false,
"replyLevel": 0,
"isPinned": false,
"authorName": "@davidrojas9668",
"authorChannelId": "UCzvkFTT6KgHZeMYf0gczw5Q",
"authorChannelUrl": "https://www.youtube.com/channel/UCzvkFTT6KgHZeMYf0gczw5Q",
"authorAvatarUrl": "https://yt3.ggpht.com/ytc/...",
"authorIsVerified": false,
"authorIsCreator": false,
"commentUrl": "https://www.youtube.com/watch?v=8S0FDjFBj8o&lc=UgxRK6CK8oblNf__AHx4AaABAg",
"videoTitle": "The Danger of Silence",
"videoUrl": "https://www.youtube.com/watch?v=8S0FDjFBj8o"
}

Every field

You are billed per comment delivered, so here is everything a row can contain. A field is absent when YouTube did not publish it for that comment.

FieldWhat it is
videoIdThe video the comment is on.
commentIdYouTube's comment id, unique and stable.
textThe comment body, entities decoded.
publishedTimeTextYouTube's relative text, e.g. "7 years ago". It publishes no exact timestamp here.
likeCountLikes, expanded from the abbreviated display text ("12K"12000).
replyCountReplies YouTube reports on the thread. 0 on replies themselves.
isReplytrue when the row is a reply rather than a top-level comment.
replyLevel0 for top-level, 1 for a reply.
isPinnedtrue when the creator pinned this comment to the top.
authorNameDisplay name, usually an @handle.
authorChannelIdThe commenter's UC… channel id.
authorChannelUrlTheir channel URL, built from the id.
authorAvatarUrlTheir avatar image.
authorIsVerifiedYouTube's verified badge.
authorIsCreatortrue when the commenter owns the video.
commentUrlA deep link that opens this exact comment.
videoTitleTitle of the video, so a multi-video run reads without a join.
videoUrlwatch?v= URL of the video, for the same reason.

Who this is for

  • Brand and community managers — complaints and feature requests arrive in comments long before they reach support.
  • Product and audience researchers — the questions your viewers ask, in their words, at the scale of a whole channel.
  • ProspectorsfilterKeywords on buying-intent phrases turns a comment section into a list of author channels worth approaching.
  • Moderation and sentiment teams — a labelled export with author metadata attached.

Common uses

  • Brand & competitor monitoring — watch a competitor's channel for complaints and feature requests.
  • Lead generationfilterKeywords on buying-intent phrases, then work the author channels.
  • Audience research — what your viewers actually ask, in their own words.
  • Sentiment & moderation datasets — export to CSV or JSON with author metadata attached.
  • Creator analytics — find your most-engaged commenters across a back catalogue.

Pricing

Pay per comment delivered. Comments removed by your keyword or like filters, videos with comments disabled, and failed requests cost nothing.

Starting a run costs $0.00001 — the platform's $0.00001 minimum, charged once per GB of memory, and these Actors run on 512 MB.

Other Actors in this family

Same engines, same billing, no account or API key on any of them.

YouTube & video

Search demand

E-commerce

Hiring

Run it from code

Nothing here needs a login to the source, only your Apify token.

HTTP — start a run and wait for the rows:

curl -X POST "https://api.apify.com/v2/acts/gganbukim~youtube-comments-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "content-type: application/json" \
-d @input.json

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('gganbukim/youtube-comments-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python

from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("gganbukim/youtube-comments-scraper").call(run_input=input)
items = client.dataset(run["defaultDatasetId"]).list_items().items

Scheduled or event-driven — attach a schedule to run it on a cron, or a webhook to push each finished run into your own endpoint. It also connects through Apify's Zapier, Make, n8n and LangChain integrations, and is reachable from an MCP server if you are driving it from an agent.

Standby / API mode — the run above is synchronous: one call in, rows out, no polling. That is the shape to use if you are calling this per request rather than in a batch.

Errors, limits and what you are charged for

  • You pay for delivered rows only. A row your filters removed, a page that failed, a retry — none of it is billed. Starting a run costs $0.00001: the platform minimum, charged once per gigabyte, and this Actor runs on 512 MB.
  • A run that delivers nothing still costs the start fee and nothing else. If the input resolved to zero items, the run fails loudly with the reason rather than finishing green on an empty dataset.
  • Blocking is handled by changing address, not by waiting. The Actor starts on cheap datacenter proxies and moves up only after a tier has actually been refused several times in a row, then drops back down once the cheap tier answers cleanly again. You are not paying for residential bandwidth that was never needed.
  • Rate limits belong to the source, not to this Actor. Very large inputs are worked through in batches; the run reports how many items succeeded, were filtered, and failed, so a partial result is never presented as a complete one.
  • Dataset retention follows your Apify plan. Export what you need, or push it out with a webhook, if you want it past that window.

This Actor reads pages and public endpoints that anyone can open in a browser without an account. It does not log in, does not defeat a paywall, and does not touch anything behind authentication.

Scraping public data is broadly lawful in the US and the EU, and courts have repeatedly said so — but "public" is not the same as "unrestricted", and what you may then do with the data is a separate question from whether you may collect it. Personal data pulls in the GDPR and similar regimes whatever the source, so if your rows contain people, you need a lawful basis for keeping them.

Apify publishes a fuller treatment in Is web scraping legal? and an ethical scraping guide. None of this is legal advice; if the use is commercial and the data is personal, ask someone qualified.

Something wrong, or missing?

Open an issue on the Actor's Issues tab — it goes straight to the developer and is the fastest route. Include the run ID; it carries the input and the log, which is usually enough to reproduce the problem without another round trip.

Sources change without warning, and a field that quietly goes null is worth reporting even if the run succeeded. A broken parser looks exactly like a quiet day in the data until someone says so.

FAQ

Will I get blocked, or my account banned? There is no account to ban — no login, no cookies. Each video gets its own IP session so one throttled video cannot poison the rest of the run, and the proxy tier escalates from datacenter to residential only when it has to. YouTube signals throttling with an HTTP 200 and an error body rather than an error code, which is the trap that silently halves most scrapers' results; this one detects it by reason and rotates.

Does it need a YouTube API key? No.

Comments disabled on a video? That video is skipped and reported in the run summary; you are not charged.

How many comments can I get per video? As many as YouTube will paginate — set maxCommentsPerVideo to control cost.

Can I run it on a schedule? Yes, via Apify Schedules, webhooks, or the API. Also available over MCP for AI agents.

Is it legal to scrape YouTube comments? This reads pages YouTube serves publicly, with no login and nothing bypassed. Public-data scraping is broadly treated as lawful in the US, and comment text is authored by the people who wrote it — so how you use what you collect (research and analysis versus republishing someone's words) matters more than the collection. YouTube's Terms of Service are a separate contract question. Not legal advice.

How much does 1,000 comments cost? $0.50, plus $0.00002 for the run. Comments your keyword or like filters remove are never billed.

Can I export the results to Excel or Google Sheets? Yes. Every run's dataset downloads as CSV, Excel, JSON, XML or RSS from the Storage tab, or straight from the API if you want a live link a spreadsheet can pull.

Can I connect it to Zapier, Make or n8n? Yes — Apify publishes integrations for all three, plus webhooks that fire when a run finishes. A common setup is a schedule here and a webhook into your own database or Slack.

Do I need to write code? No. Fill the form in the console and press Start. If you do want code, the Apify client libraries for Python and JavaScript call this the same way, and it is available over MCP so an AI agent can call it directly.