YouTube Comment Scraper: Export Comments Without API Limits
I needed YouTube comments for a sentiment analysis project — about 50,000 comments across 300 competitor videos. The YouTube Data API's `commentThreads.list` looked perfect: 1 unit per request, up to 100 comments per page, meaning 10,000 requests to get 1,000,000 comments theoretically. The problem: the daily quota is 10,000 units total, shared across all API calls. My comment collection alone would max it out — and I hadn't touched search, video metadata, or anything else.
A YouTube comment scraper that bypasses the quota entirely is what I ended up building. This guide covers the working methods in 2026: the API (when it makes sense), direct page scraping, and the YouTube comment extractor workflow that gets you from video URL to CSV in under two minutes without any API credentials.
Export YouTube comments to CSV without touching your API quota
Clura reads YouTube comment sections directly in your Chrome browser. Open any video, scroll comments, click Clura, export. No API key, no quota, no code. Free for up to 500 rows.
Add to Chrome — Free →Why the YouTube Comment API Breaks at Scale
The YouTube commentThreads.list API returns up to 100 comments per request at 1 unit each. With a 10,000 unit daily quota, you can pull 1,000,000 comments — but only if you use zero quota on anything else. In practice, search and metadata calls eat most of the budget, leaving far fewer units for comment collection than the math suggests.
The API math looks fine in isolation: 1 unit per `commentThreads.list` call, 100 comments per page, 10,000 units daily = 1 million comments. The reality: that quota is shared. If your pipeline also calls `search.list` (100 units each), `videos.list` (1 unit each), and `channels.list` (1 unit each), your daily comment budget shrinks fast. A pipeline that does 50 keyword searches uses 5,000 units before pulling a single comment.
The other issue: comment replies. `commentThreads.list` returns top-level comments only. Replies require a separate `comments.list` call per thread — another unit each, another quota drain. For a video with 500 top-level comments and average 3 replies each, you're looking at 500 (threads) + 500 (reply calls) = 1,000 units for one video's full comment tree.
| Scenario | API Calls | Units Used | % of Daily Quota |
|---|---|---|---|
| 50 keyword searches (discovery) | 50 search.list | 5,000 units | 50% |
| 300 video metadata lookups | 300 videos.list | 300 units | 3% |
| 1 video — 500 top-level comments | 5 commentThreads.list | 5 units | 0.05% |
| 1 video — full comment tree (500 + replies) | ~1,000 calls | ~1,000 units | 10% |
| 10 videos — full comment trees | ~10,000 calls | ~10,000 units | 100% — quota gone |
How to Scrape YouTube Comments Without the API
YouTube's comment section loads via JavaScript as you scroll — the same infinite scroll pattern as Twitter and Reddit. A real browser session reads comments as they render, bypassing API quota entirely. Clura detects the comment structure automatically: author name, comment text, like count, reply count, and timestamp for each visible comment.
YouTube loads comments in batches of 20 as you scroll down the comment section. The first batch appears a second or two after the video page loads — you have to wait for it. Subsequent batches load as you scroll. This is a different rendering pattern from the video content itself, which is why scrapers that work on the video page often miss the comments: the comment container is still empty when they capture the HTML.
- Open the YouTube video page and let it fully load. Scroll down past the video description until the comment section appears.
- Wait 2–3 seconds for the first batch of 20 comments to render. You'll see them appear below the description.
- Scroll down slowly through the comments. YouTube loads the next batch when you reach the bottom of the current set. Pause briefly at each batch load.
- Once you've scrolled through all the comments you want to capture, click the Clura extension icon.
- Clura detects the repeating comment card structure — author name, comment text, like count, reply count, timestamp, and pinned/creator badge status.
- Export to CSV. Each row is one top-level comment with all metadata.
For videos with thousands of comments, this workflow takes time proportional to how many batches you scroll through — roughly 20 comments per scroll stop, with a 1–2 second load between each. For 500 comments that's about 25 scroll stops and maybe 3–4 minutes of scrolling. For sentiment analysis datasets where you need specific videos rather than random sampling, this is faster than debugging quota errors.
Pull 500 YouTube comments in under 5 minutes
No API setup, no quota tracking, no code. Open the video, scroll through comments, click Clura, export CSV. Works on any public YouTube video.
Add to Chrome — Free →YouTube Comment Extractor: Bulk Export Across Multiple Videos
For bulk comment collection across many videos — competitor analysis, trend research, brand monitoring — the API's commentThreads.list is actually efficient at 1 unit per request if you're not also running expensive search calls. The practical split: use Clura for single-video spot checks, use the API's comment endpoint for programmatic bulk collection where video IDs are already known.
The word 'extractor' versus 'scraper' captures a real use case difference. A scraper implies pulling data from pages — interactive, one video at a time. An extractor implies a programmatic pipeline: give it 300 video IDs, get 300 comment CSVs. For that workflow, the API is actually worth using — `commentThreads.list` at 1 unit per call is cheap enough to be practical once you're not also spending quota on search.
The split that makes sense in practice: get your video IDs through a page scraper (no quota cost), then use the API's `commentThreads.list` endpoint to pull comments for those specific videos. You avoid the 100-unit `search.list` calls entirely, leaving almost all 10,000 daily units for comment extraction. At 100 comments per page request, that's up to 1,000,000 comments per day.
- Step 1 — Get video IDs: Scrape YouTube search results or channel pages with Clura. Each video card contains the video URL with the ID.
- Step 2 — Pull comments via API: Call commentThreads.list with your video IDs. At 1 unit per call, 100 comments per page, you can pull ~500,000 comments before hitting quota.
- Step 3 — Get replies: For each top-level comment with replies, call comments.list with the parent comment ID. This costs 1 unit per call.
- Step 4 — Export: Parse the JSON response and write to CSV — comment text, author, like count, reply count, published date, and whether it's the top comment.
Python YouTube Comment Scraper: What Works and What Breaks
Python requests returns empty HTML on YouTube comment sections — comments are JavaScript-injected and don't exist in the initial server response. The working Python approaches are: the YouTube Data API's commentThreads.list (quota-limited), Playwright with scroll simulation (slower, ~25% block rate), or the youtube-comment-downloader library (uses an internal YouTube endpoint, no auth required).
The most common mistake: using `requests.get('https://www.youtube.com/watch?v=...')` and trying to parse the comment section. That HTML contains a JavaScript bundle and an empty comment container. Comments are fetched by the YouTube frontend via a separate XHR call after the page loads — requests never triggers that call.
The `youtube-comment-downloader` library (pip installable) works by calling YouTube's internal `youtubei/v1/next` endpoint directly — the same endpoint the YouTube frontend uses to load comments. It doesn't require an API key or OAuth, handles pagination automatically, and returns comments as Python dictionaries with full metadata. Block rate at moderate volumes: ~10%. It stops working occasionally when YouTube updates the internal endpoint format, which happens every few months.
| Method | Block Rate | Setup | Quota | Best For |
|---|---|---|---|---|
| Clura (Chrome extension) | ~2% | 2 min | None | Single video research, spot checks |
| YouTube Data API commentThreads.list | ~0% | 15 min | 1 unit/request | Bulk programmatic collection |
| youtube-comment-downloader (Python) | ~10% | 5 min | None | Script-based collection, no API key |
| Playwright + scroll simulation | ~25% | 2–4 hours | None | Custom pipelines needing full control |
| Python requests | ~95% | fails | None | Not viable — empty HTML |
Frequently Asked Questions
What is a YouTube comment scraper?
A YouTube comment scraper extracts comment text, author names, like counts, reply counts, and timestamps from YouTube video comment sections — either through the official API (quota-limited) or by reading the page directly with a browser-based tool. Common use cases: sentiment analysis, brand monitoring, competitive research, and building training datasets.
What is the difference between a YouTube comment scraper and extractor?
In practice, 'scraper' refers to interactive, page-based collection (open a video, scroll comments, export) while 'extractor' refers to programmatic bulk collection across many videos from a list of video IDs. Clura handles the scraper use case. The YouTube Data API's commentThreads.list or youtube-comment-downloader handles the extractor use case.
How do I scrape YouTube comments without the API?
Two methods: (1) Clura — open the video in Chrome, scroll through the comment section to load comments, click Clura, export CSV. Takes 2–5 minutes per video, no quota or setup. (2) youtube-comment-downloader Python library — calls YouTube's internal comment endpoint without authentication, ~10% block rate, handles pagination automatically.
Why does my Python script return empty comments on YouTube?
YouTube comment sections are injected by JavaScript after the page loads — they don't exist in the HTML that requests.get() fetches. The comment container is an empty div in the initial server response. Use Clura (real browser session) for page-based extraction, or call YouTube's internal youtubei/v1/next endpoint directly via youtube-comment-downloader.
How many YouTube comments can I scrape per day with the API?
The YouTube Data API gives 10,000 units per day. commentThreads.list costs 1 unit per call and returns up to 100 comments — theoretical maximum of 1,000,000 comments per day. In practice, if your pipeline also runs search.list (100 units each) or other expensive calls, the comment budget is much smaller. If you use video IDs from page scraping instead of API search, you can dedicate most of the 10,000 units to comment collection.
Can I scrape YouTube comment replies?
Yes. Top-level comments from commentThreads.list include a reply count. To get the actual reply text, call comments.list with the parent comment ID — this costs 1 unit per call and returns up to 100 replies. For videos with hundreds of top-level comments that each have multiple replies, this can consume significant quota. Clura captures replies that are visible on the page after you click 'View replies' on each comment.
Is scraping YouTube comments legal?
Scraping public YouTube comments — which any logged-out user can read — is generally legal in the US under the CFAA framework (hiQ v. LinkedIn). YouTube's Terms of Service prohibit automated collection, but ToS violations aren't criminal acts. The higher-risk use case is republishing comment content in a way that identifies individuals, which can implicate privacy regulations depending on jurisdiction.
Conclusion
The comment scraping problem comes down to what you're optimizing for. Single video research — a specific competitor's video, a trending topic thread — Clura handles in minutes with no setup. Bulk collection across a list of video IDs — sentiment analysis datasets, brand monitoring pipelines — the API's commentThreads.list is worth using once you've stopped wasting quota on search.list. Get your video IDs via page scraping, then use the API for comments only.
The one method that doesn't work: Python requests on the video page. The comment section doesn't exist in the server-rendered HTML. Switch to youtube-comment-downloader for script-based access or Clura for browser-based access, and the data is immediately accessible.
Explore related guides:
- YouTube Scraper Hub — General YouTube scraping — search results, video metadata, transcripts, and API quota strategy.
- YouTube Channel Scraper — Subscriber counts, video stats, and channel metadata for competitive research.
- Social Media Scraper Guide — All eight platforms compared — YouTube, TikTok, Reddit, Instagram, X, Facebook, Pinterest, Telegram.
- Scraping Dynamic Websites — Why JavaScript-rendered pages like YouTube require a different approach from static HTML.
- Avoid Getting Blocked — Rate limiting, behavioral detection, and how YouTube's anti-scraping layers work.
Export YouTube comments without worrying about API quotas
Clura reads the YouTube comment section directly in your Chrome browser. Open any video, scroll comments to load them, click Clura, export CSV. Author, text, likes, replies, timestamp — all in one file. Free for up to 500 rows.
Add to Chrome — Free →