YouTube Video & Comments Scraper — No API Key Needed
Pricing
from $1.67 / 1,000 results
YouTube Video & Comments Scraper — No API Key Needed
Scrape YouTube video details and top-level comments - views, likes, description, upload date, comment text, author, likes and reply counts. No login, no API key.
Pricing
from $1.67 / 1,000 results
Rating
0.0
(0)
Developer
Axery
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
YouTube Video & Comments Scraper
Scrapes YouTube video details and top-level comments through YouTube's own internal API — the exact calls the watch page itself makes to render the page you see. No login, no API key, no quota.
Useful for social listening, sentiment research, video-performance tracking, and comment moderation research.
Two modes
- Video details — title, channel, view count, like count, upload date, description, category, thumbnail.
- Comments — one row per top-level comment: text, author, like count, reply count, pinned status, relative publish time.
What makes this different
Real engagement numbers, not just view count. Most lightweight YouTube scrapers stop at what the RSS/oEmbed feeds expose — title and view count. This one gets the actual like count (both video-level and per-comment), by working through YouTube's InnerTube API the same way the page's own JavaScript does.
A join that most scrapers get wrong or skip. YouTube's comment data isn't one clean nested object anymore — a comment's text/author and its like/reply counts are two different-looking keys on the same view model, and one of them (toolbarStateKey) looks exactly like a legitimate path to the counts but actually only carries whether the current anonymous viewer liked the comment, never a count. Reading through that key instead of the correct one returns rows that parse cleanly but are silently empty on every single like/reply figure. This Actor was built and verified against that exact trap.
Abbreviated counts are expanded. YouTube ships "305K likes" as display text, not a number. Both video-level and comment-level like counts are parsed into real integers ready to sort and sum.
Honest scope on replies. reply_count tells you how many replies a comment has, but this Actor does not walk into nested reply threads — that's a deliberately separate, heavier operation this Actor doesn't silently attempt and then under-deliver on.
Input
| Field | Type | Notes |
|---|---|---|
mode | enum | video or comments. |
videos | array | Full URLs (watch/youtu.be/shorts) or bare 11-character IDs. |
maxItems | integer | Comments per video. 0 walks every page available. |
proxyConfiguration | object | Not normally needed. |
Output
{"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channel_name": "Rick Astley","view_count": 1807600697,"like_count": 19000000,"published_at": "2009-10-25","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}
{"text": "can confirm: he never gave us up","author_name": "@YouTube","like_count": 305000,"reply_count": 963,"is_pinned": true,"published_time_display": "1 year ago"}
A video that's private, age-restricted, or removed fails with a clear message rather than returning an empty or wrong row. Each run also writes a RUN_COVERAGE record to the key-value store with what was requested, what came back, and any per-video failures.
Local development
pip install -r requirements.txtpython test_local.py --mode video dQw4w9WgXcQpython test_local.py --mode comments dQw4w9WgXcQ --max 120 --out sample_output.json
sample_output.json is real output from a live run: one video-detail row plus 15 comments.