YouTube Video & Comments Scraper — No API Key Needed avatar

YouTube Video & Comments Scraper — No API Key Needed

Pricing

from $1.67 / 1,000 results

Go to Apify Store
YouTube Video & Comments Scraper — No API Key Needed

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

Axery

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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

FieldTypeNotes
modeenumvideo or comments.
videosarrayFull URLs (watch/youtu.be/shorts) or bare 11-character IDs.
maxItemsintegerComments per video. 0 walks every page available.
proxyConfigurationobjectNot 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.txt
python test_local.py --mode video dQw4w9WgXcQ
python 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.