YouTube Comments Scraper — Author, Likes, Replies & Text
Pricing
from $0.40 / 1,000 results
YouTube Comments Scraper — Author, Likes, Replies & Text
Scrape all comments from any YouTube video, channel or search in bulk. Get comment text, author, verified/creator flags, like count, reply count and timestamp — plus video title and channel. Fast, keyless YouTube comment export for research and sentiment analysis.
Pricing
from $0.40 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
24
Total users
5
Monthly active users
a day ago
Last modified
Categories
Features
Share
YouTube Comments Scraper — Bulk Video, Channel & Keyword Comment Extractor
Extract thousands of YouTube comments in bulk from any video URL, channel handle, or search keyword. Pull complete top-level comment threads with author display name, channel ID, verified/creator badges, full comment text, numeric like count, reply count, relative timestamp, and parent video metadata — structured for sentiment analysis, audience intelligence, content strategy, competitor benchmarking, and social listening. No YouTube Data API key, no Google Cloud quota limits, and no account login required.
⚡ At a glance
| Capability | Details |
|---|---|
| Target Platform | YouTube (youtube.com, youtu.be, YouTube Shorts, @channels) |
| Input Modes | Topic dropdowns · Custom search keywords · Video URLs / 11-char IDs · Channel URLs / @handles |
| Extracted Entities | Comment text · Author name & channel ID · Verified & creator flags · Likes · Replies · Video context |
| Sort Modes | Top comments (highest engagement first) · Newest first (chronological real-time stream) |
| Pagination & Scale | Automatic deep continuation pagination — 1,000 to 100,000+ comments per video or across multi-video searches |
| Deduplication | Built-in per-video and global deduplication by unique commentId (0% duplicate records) |
| Authentication | None required — 100% keyless public data extraction |
| Export Formats | JSON, JSONL, CSV, Excel (XLSX), XML, HTML Table, REST API, Webhooks |
🔎 Why scrape YouTube comments?
YouTube comment sections are the largest unfiltered focus group on the internet. Every product review, software tutorial, movie trailer, keynote broadcast, and competitor launch generates thousands of candid viewer reactions — questions, feature requests, bug reports, price objections, praise, and comparisons written in the audience's own language.
However, getting that YouTube comment data into a spreadsheet or analytics pipeline is notoriously difficult:
- Infinite scroll traps data in the UI: YouTube loads only ~20 comments at a time as you scroll manually, with no native export button.
- Official API quota walls: The YouTube Data API v3 requires a Google Cloud project, credential management, and strict daily unit quotas that quickly run out when collecting thousands of comments across channels.
- Messy engagement numbers: Abbreviated counters (
1.2K,220K) and unlinked comment rows make downstream quantitative analysis painful without normalization.
This YouTube comments scraper solves all three problems. Point it at specific videos, entire @channels, or broad search keywords, and it automatically paginates through YouTube's comment feed, normalizes abbreviated like counts into clean integers alongside display text, attaches the parent video's title, channel, and view count to every single row, and exports an analysis-ready dataset in seconds.
✨ Key features of this YouTube data extractor
- 🎯 Four flexible targeting modes in one actor:
- Popular Topics Dropdown: Instant one-click presets (
iphone review,ai explained,world news,gaming,stock market,tech unboxing, etc.). - Custom Search Keywords: Discover trending videos for any brand, product, or niche query and extract their comments automatically.
- Direct Video URLs & IDs: Paste standard watch links (
youtube.com/watch?v=...), short links (youtu.be/...),/shorts/links, or raw 11-character video IDs. - Channel URLs & Handles: Pass
@mkbhd,youtube.com/@channel, orUC...channel IDs to scrape comments across a creator's latest uploads.
- Popular Topics Dropdown: Instant one-click presets (
- 🔄 Unlocked 1,000+ deep pagination: Follows continuation tokens page after page to extract hundreds or thousands of comments per video (
maxCommentsPerVideoup to100,000) and scales across up to10,000videos per search source. - 📊 Normalized numeric & display metrics: Converts shorthand counts like
220Kinto exact numeric strings ("220000") while preservinglikeCountText("220K"), and normalizes blank zero-like states to"0". - 👤 Author & influencer signals: Captures
author,authorChannelId(UC...),authorIsVerified("true"/"false"), andauthorIsCreator("true"/"false") to spotlight verified voices and creator replies. - 🎬 Self-contained video context on every row: When
includeVideoDetailsis enabled (default), every comment includesvideoId,videoUrl,videoTitle,channel, andvideoViewCountso exported CSVs and BI tables never lose context. - ⚡ High-speed parallel execution: Configurable
maxConcurrency(1–15 parallel video workers) with automatic IP rotation via Apify Proxy.
🎯 High-value use cases & B2B intelligence
1. Brand Sentiment & Product Launch Monitoring
Track consumer reaction under hands-on reviews, unboxings, and comparison videos for your brand and your competitors. Measure positive vs. negative sentiment shifts within hours of a product release.
2. Voice-of-Customer (VoC) & Feature Discovery
Mine thousands of viewer comments under category-leading tutorials and reviews to uncover recurring pain points, unmet customer needs, buyer objections, and exact phrasing for ad copy.
3. Content Strategy & Video Topic Ideation
Filter comments containing question marks (?, "how do you", "can you make", "part 2") sorted by highest likeCount to build a data-backed content calendar that answers what viewers are actively asking for.
4. Influencer Vetting & Sponsorship Due Diligence
Before sponsoring a YouTube creator, scrape the last 20 videos on their channel (channelUrls) to audit real audience engagement, detect bot/spam comment patterns, and verify buyer intent in their community.
5. AI, LLM & NLP Dataset Construction
Build large-scale, multi-topic conversational corpora labeled with engagement weights (likeCount, replyCount) and timestamp metadata for training sentiment classifiers, topic models, and summarization pipelines.
6. Community Management & Crisis Auditing
Export complete comment logs from your organization's official YouTube channel or campaign videos for compliance archiving, moderation audits, and rapid FAQ response workflows.
📥 Input configuration
All input fields are optional. Running the actor with default/empty settings automatically collects a fast, diverse sample across trending topics.
| Parameter | Type | Default / Prefill | Description |
|---|---|---|---|
topics | array<string> | Prefill: ["iphone review"] | Select one or more curated topic presets from the dropdown to discover top videos and scrape their comments automatically. |
searchKeywords | array<string> | Prefill: ["iphone 16 review"] | Custom search queries in your own words (e.g., "tesla model y review", "notion tutorial"). |
videoUrls | array<string> | [] | Specific YouTube watch URLs, youtu.be links, /shorts/ URLs, or 11-character video IDs. |
channelUrls | array<string> | [] | Channel URLs, @handles (e.g., @veritasium), or UC... channel IDs to scrape comments from recent uploads. |
sortBy | string | "top" | Sort order for comments: "top" (Most popular / highest engagement) or "newest" (Newest first). |
includeVideoDetails | boolean | true | Attach videoTitle, channel, and videoViewCount to every comment record. |
maxCommentsPerVideo | integer | Default 100 (Prefill 50) | Maximum top-level comments to extract per video (1 to 100,000). Set to 1000+ for deep per-video pulls. |
maxVideosPerSource | integer | Default 20 (Prefill 2) | Maximum videos to discover per topic, search keyword, or channel (1 to 10,000). |
maxComments | integer | Default 0 (Prefill 100) | Optional global cap across the entire run. 0 = unlimited (governed by maxCommentsPerVideo × videos). |
maxConcurrency | integer | 5 | Number of videos processed in parallel (1 to 15). |
proxyConfiguration | object | { "useApifyProxy": true } | Apify Proxy configuration. Enabled by default to rotate IPs and prevent rate-limiting on large runs. |
🛠️ Input recipes & examples
Recipe 1: Deep 1,000+ comment extraction from specific videos
Extract up to 2,500 top comments per video from specific YouTube URLs or IDs:
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/arj7oStGLkU"],"sortBy": "top","includeVideoDetails": true,"maxCommentsPerVideo": 2500,"maxComments": 5000}
Recipe 2: Channel-wide audience audit (@handle)
Pull the 200 newest comments across each of the latest 15 videos from a target channel (3,000 comments total):
{"channelUrls": ["@mkbhd"],"sortBy": "newest","includeVideoDetails": true,"maxVideosPerSource": 15,"maxCommentsPerVideo": 200,"maxComments": 3000,"maxConcurrency": 5}
Recipe 3: Multi-keyword market & competitor research
Discover 25 videos per search query and collect 100 comments from each video to build a 5,000-comment market intelligence dataset:
{"searchKeywords": ["iphone 16 pro review","samsung galaxy s24 ultra review"],"sortBy": "top","maxVideosPerSource": 25,"maxCommentsPerVideo": 100,"maxComments": 5000,"maxConcurrency": 8}
📤 Output schema & field reference
Every dataset item represents one unique YouTube comment enriched with its parent video metadata. All fields are formatted as clean strings for zero-friction compatibility with CSV, Excel, Google Sheets, and SQL pipelines.
💬 Comment Content & Engagement Fields
| Field | Type | Coverage | Description |
|---|---|---|---|
commentId | string | 🟢 High (100%) | Unique YouTube comment identifier (used as primary deduplication key). |
text | string | 🟢 High (~100%) | Full text content of the comment with whitespace normalized. |
likeCount | string | 🟢 High (100%) | Normalized numeric like count as an integer string (e.g., "220000", "0"). |
likeCountText | string | 🟢 High (100%) | Human-readable like count as displayed on YouTube (e.g., "220K", "1.4K", "0"). |
replyCount | string | 🟢 High (100%) | Total number of replies to this top-level comment (e.g., "612", "0"). |
publishedTime | string | 🟢 High (100%) | Relative publication timestamp (e.g., "2 days ago", "6 years ago", "3 hours ago (edited)"). |
👤 Comment Author & Badge Fields
| Field | Type | Coverage | Description |
|---|---|---|---|
author | string | 🟢 High (100%) | Author's YouTube handle or display name (stripped of leading @). |
authorChannelId | string | 🟢 High (100%) | Unique YouTube channel ID (UC...) of the commenter. |
authorIsVerified | string | 🟢 High (100%) | "true" if the commenter holds a verified YouTube badge, otherwise "false". |
authorIsCreator | string | 🟢 High (100%) | "true" if the comment was posted by the video uploader/creator, otherwise "false". |
🎬 Parent Video Context & Metadata Fields
| Field | Type | Coverage | Description |
|---|---|---|---|
videoId | string | 🟢 High (100%) | 11-character YouTube video ID. |
videoUrl | string | 🟢 High (100%) | Canonical watch URL (https://www.youtube.com/watch?v=...). |
videoTitle | string | 🟢 High (~99%) | Full title of the YouTube video (populated when includeVideoDetails: true). |
channel | string | 🟢 High (~99%) | Name of the YouTube channel that published the video. |
videoViewCount | string | 🟢 High (~98%) | Numeric view count of the video at scrape time (e.g., "1832861734"). |
scrapedAt | string | 🟢 High (100%) | ISO-8601 UTC timestamp indicating when the comment was extracted. |
error | string | 🟡 Conditional | Present only if a run targets a single video where comments are disabled or unavailable. |
📋 Sample JSON output
{"videoId": "dQw4w9WgXcQ","videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","videoTitle": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channel": "Rick Astley","videoViewCount": "1832861734","commentId": "Ugw10bSluCDSZMIxUSB4AaABAg","author": "LK-ht7qz","authorChannelId": "UCHpvHTRSILoOFKWX5oFCYDA","authorIsVerified": "false","authorIsCreator": "false","text": "Let’s put the meme aside, this is actually a banging song.","likeCount": "220000","likeCountText": "220K","replyCount": "612","publishedTime": "6 years ago","scrapedAt": "2026-11-10T02:30:00.000Z"}
🔁 Pagination, scale & deduplication
YouTube serves comments in batches of ~20 items per continuation request. This actor automatically extracts and follows every continuation cursor across both video discovery (search results and channel video tabs) and comment threads:
- Deep Per-Video Comment Pagination: Set
maxCommentsPerVideo: 1000(or up to100000) to walk hundreds of continuation pages on high-traffic videos without hitting artificial page caps. - Multi-Source Scaling: Combine multiple
topics,searchKeywords,channelUrls, andvideoUrlsin a single run. SetmaxComments: 0(or5000+) to collect thousands of comments across dozens of videos in parallel. - Strict Two-Level Deduplication: Comments are deduplicated per video and across the entire run by
commentId, guaranteeing 0 duplicate records even when the same video is discovered by overlapping search keywords.
💻 API & integration examples
cURL — Start a run and fetch CSV output
# 1. Start the actor runcurl -X POST "https://api.apify.com/v2/acts/haketa~youtube-comments-scraper/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"videoUrls": ["dQw4w9WgXcQ"],"maxCommentsPerVideo": 1000,"sortBy": "top"}'# 2. Download the dataset as CSVcurl "https://api.apify.com/v2/acts/haketa~youtube-comments-scraper/runs/last/dataset/items?token=YOUR_APIFY_TOKEN&format=csv" > youtube_comments.csv
Python (apify-client)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/youtube-comments-scraper").call(run_input={"searchKeywords": ["iphone 16 review"],"maxVideosPerSource": 10,"maxCommentsPerVideo": 150,"maxComments": 1500,"sortBy": "top",})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(f"Extracted {len(items)} unique YouTube comments")
Node.js (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/youtube-comments-scraper').call({channelUrls: ['@mkbhd'],maxVideosPerSource: 5,maxCommentsPerVideo: 250,sortBy: 'newest',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Saved ${items.length} comments`);
🗂️ Built-in topic presets reference
When you want an instant dataset without hunting for URLs, select one or more presets in topics:
| Topic Preset Value | Category Title | Typical Videos & Comment Signals |
|---|---|---|
iphone review | Phone reviews | Smartphone comparisons, camera tests, battery life & buyer feedback |
world news | World news | Breaking global events, geopolitical debates & public opinion |
nba highlights | NBA highlights | Game recaps, player performance discussions & sports fan sentiment |
premier league | Premier League | Match highlights, tactical analysis & football club reactions |
new music | New music | Official music videos, lyric discussions & artist fanbase engagement |
gaming | Gaming | Gameplay walkthroughs, patch notes feedback & game review threads |
ai explained | AI explained | LLM tutorials, AI news, developer tool comparisons & tech ethics |
movie trailer | Movie trailers | Teaser reactions, box-office predictions & casting discussions |
cooking recipe | Cooking recipes | Ingredient substitutions, kitchen tips & recipe success stories |
travel vlog | Travel vlogs | Destination recommendations, itinerary questions & budget breakdowns |
workout routine | Workout routines | Fitness form checks, routine results & coaching questions |
tech unboxing | Tech unboxing | Hardware impressions, pricing objections & feature wishlists |
makeup tutorial | Makeup tutorials | Shade matches, product longevity & skincare routine questions |
stock market | Stock market | Earnings reactions, macro commentary & retail investor sentiment |
car review | Car reviews | Owner reliability feedback, EV range discussions & trim comparisons |
podcast highlights | Podcast highlights | Long-form interview takeaways, guest debates & timestamp highlights |
🔌 Workflow automation & BI integrations
Connect your extracted YouTube comment data directly into your analytics and automation stack:
- Google Sheets & Excel Dashboards: Schedule daily or weekly runs in the Apify Console and sync the dataset to Google Sheets to track comment velocity, top questions, and average likes per comment across product launch videos.
- Make, Zapier & n8n Pipelines: Trigger a webhook as soon as a run finishes (
ACTOR.RUN.SUCCEEDED), filter for comments withNumber(likeCount) >= 50orauthorIsVerified == "true", and post summaries to Slack, Microsoft Teams, Discord, or Notion. - LLM & Sentiment Classification Pipelines: Stream JSONL records into OpenAI, Anthropic Claude, or Gemini batch pipelines to tag each comment with sentiment (
Positive,Neutral,Negative), intent (Bug Report,Feature Request,Competitor Mention,Purchase Intent), and topic clusters. - Data Warehouses (BigQuery, Snowflake, PostgreSQL): Partition by
scrapedAtand join onvideoIdandcommentIdto track how individual comment like counts and reply counts grow over time.
💡 Pro tips for best results
- Choose the right sort mode: Use
sortBy: "top"to capture high-signal, community-validated opinions with the most likes; usesortBy: "newest"for real-time monitoring after a launch or live event. - Scale horizontally or vertically: For broad market sentiment across a niche, use
maxVideosPerSource: 25andmaxCommentsPerVideo: 100. For deep analysis of a single viral video, pass its URL invideoUrlsand setmaxCommentsPerVideo: 5000withmaxComments: 0. - Filter influential commenters downstream: Sort or filter your exported CSV/JSON on
authorIsVerified == "true",authorIsCreator == "true", orNumber(likeCount) >= 100to isolate key opinion leaders. - Keep Apify Proxy enabled: Default datacenter proxy rotation keeps parallel requests fast, cost-effective, and resilient against rate limits during multi-thousand-comment runs.
⚠️ Known limitations
- Top-level comments: The actor extracts all top-level comments along with each comment's
replyCountmetric; nested sub-thread replies under a top-level comment are not expanded individually. - Disabled comment sections: Videos that have comments turned off by the uploader (or restricted as "Made for Kids") cannot yield comments. When scraping multiple videos, the actor cleanly skips disabled videos so your dataset stays 100% populated with real comments.
- Relative timestamps: YouTube provides relative publication strings (
"3 days ago","1 year ago") rather than exact ISO timestamps on public comment feeds; combinepublishedTimewithscrapedAtfor temporal bucketing.
❓ Frequently Asked Questions
Do I need a YouTube Data API key or Google login?
No. This actor is 100% keyless and requires no Google Cloud project, OAuth token, or cookies.
How many comments can I scrape in a single run?
You can extract from 50 comments on a quick test run up to 100,000+ comments across single or multiple videos. Set maxComments: 0 and increase maxCommentsPerVideo and maxVideosPerSource to scale freely.
Does it support YouTube Shorts and @handle URLs?
Yes. You can pass /shorts/ links, youtu.be/ short links, standard watch URLs, 11-character IDs, and @handle channel links.
How fast is the scraper?
Because it uses lightweight HTTP requests with parallel video concurrency (maxConcurrency), a typical run of 100–600 comments completes in 10 to 25 seconds, and 1,000+ comments typically finish in under a minute.
Can I combine topics, searchKeywords, videoUrls, and channelUrls in one run?
Yes! The actor merges all video sources into a single deduplicated queue, so you can pass direct video URLs alongside search terms and channel handles in the same run.
How does deduplication work when two search keywords find the same video?
Video IDs are deduplicated during the discovery phase (seen video set), and individual comments are deduplicated both per video and globally by commentId. Even if multiple search queries surface the same trending video, it is scraped once and produces zero duplicate comments.
What happens if I run the actor with completely empty input ({})?
An empty run automatically seeds a curated sample of popular topics (iphone review, world news, nba highlights, new music, gaming, ai explained, movie trailer, cooking recipe) and returns ~100 fresh comments so you never get an empty dataset.
What export formats are available?
Export directly from the Apify Console or REST API in JSON, JSONL, CSV, Excel (XLSX), HTML table, or XML, or connect directly to Google Sheets, Make, Zapier, n8n, Slack, and webhooks.
🔗 Related scrapers
- YouTube Contact Scraper — Extract channel business emails, social links, and subscriber metrics.
- Patreon Scraper — Creator tiers, patron counts, and membership earnings data.
- Bilibili Scraper — Video, creator, and engagement data from Bilibili.
- Xiaohongshu / RedNote Scraper — Posts, engagement, and creator insights.
- Linktree Scraper — Creator bio links, social profiles, and contact channels.
📋 Changelog
| Version | Date | Highlights |
|---|---|---|
| v1.2 | 2026-11 | Unlocked 1,000+ deep pagination & global cap control: Added maxComments global cap (0 = unlimited), raised continuation pagination guards to support 1,000–100,000 comments per video and up to 10,000 videos per source, added strict cross-video commentId deduplication, and optimized default prefill for sub-20s execution. |
| v1.1 | 2026-11 | Normalized zero-like whitespace strings to "0", added fallback view-count extraction, and improved proxy IP rotation on watch pages. |
| v1.0 | 2026-05 | Initial release with topic presets, keyword video discovery, channel handle support, and top/newest comment sorting. |