YouTube Channel & Video Scraper

Eimantas V · @amethyst

Scrape YouTube channels and videos without a browser: subscriber counts, full video lists, exact view counts, durations, publish dates, keywords, and optional likes and comment counts.

About

YouTube Channel & Video Scraper

Channel stats and full video lists with exact view counts — no browser, no API key, no quota.

@mkbhd   Marques Brownlee   21.1M subscribers · 1.8K videos
         6 recent uploads · median 3,642,713 views · uploading every 7 days

  Google Pixel 11/Pro/Fold Impressions      1,562,071 views   11:14   14 hours ago
  Galaxy Z Fold 8 Review: Honeymoon's Over  4,097,984 views   11:35   12 days ago
  Framework 13 Pro: The Modular Laptop      3,187,441 views   12:48   2 weeks ago

One channel with 6 videos: 8 requests, 0.4 MB, 0.8 seconds.


Why it is fast and cheap

Most YouTube scrapers load the page in a headless browser. This one calls the same internal API youtube.com calls from your browser, and the difference is not small: a watch page is 1.25 MB of HTML wrapped around 16 KB of data. Reading the data directly makes runs roughly eighty times lighter, which is why the price below is what it is.


What you get

Per channel — channelId, handle, title, description, keywords, subscriberCount, videoCount, avatarUrl, rssUrl, plus rollups over the videos returned: medianViewsScraped and uploadIntervalDays, the mean gap between uploads.

Per video

GroupFields
ReachviewCount, viewCountIsExact, viewsPerDay, viewCountText
EngagementlikeCount (exact), commentCount, likesPerThousandViews — opt-in
TimingpublishedAt, publishedText, daysSincePublished
Contenttitle, descriptionSnippet, keywords, category, durationSeconds
FormatisShort, isLive, thumbnailUrl

viewsPerDay is the one that matters for comparison. A three-year-old video with 4M views and a three-week-old video with 4M views are not the same result, and raw view counts cannot tell you which is winning.


Who this is for

  • Influencer marketing — vet creators before you pay them. Subscriber count is vanity; medianViewsScraped against subscriberCount shows how many people actually watch, and uploadIntervalDays shows whether the channel is still active.
  • Content strategy — pull a competitor's last 200 uploads, sort by viewsPerDay, and read what worked.
  • Trend research — keywords and category across a set of channels, refreshed daily.
  • Media monitoring — watch specific channels for new uploads with publishedWithinDays: 1.

Pairs with the TikTok Creator Scraper: same buyer, the other half of the picture.


Input

{
  "channels": ["@mkbhd", "@MrBeast"],
  "maxVideosPerChannel": 100,
  "publishedWithinDays": 90
}

Accepts handles, channel URLs, UC… ids, legacy /c/ and /user/ paths, and — for videos — watch, youtu.be, /shorts/ and /live/ links.

OptionDefaultNotes
maxVideosPerChannel50Your main billing guard. 0 = channel stats only
includeShortsfalseSeparate tab. Shorts carry no duration or date of their own — those need exactVideoStats
publishedWithinDays—Applied after fetching; YouTube's tab has no date filter
exactVideoStatstrueExact views and timestamps; one small request per video
includeEngagementfalseLikes and comments — ~25× the data
includeDescriptionfalseOff keeps the dataset far smaller
language / countryen / USAffects display text and region-restricted videos

Four things worth knowing

Each was measured against live channels.

Subscriber counts are rounded, and that is YouTube's doing. The site itself publishes "21.1M subscribers" — the exact number has not been public since 2019. subscriberCount is that text parsed to 21100000, and subscriberCountText keeps the original so you can see it is rounded. Any tool quoting an exact subscriber figure is inventing precision.

View counts are exact, but only if you ask — and only if YouTube agrees. A channel listing gives "1.5M views"; resolving the video gives 1584034. exactVideoStats is on by default and costs one 16 KB request per video.

YouTube sometimes answers that request without describing the video, which datacenter addresses see routinely. When it does the Actor tries a second client, and if that is also refused it keeps the rounded listing figure rather than inventing one.

Two fields tell you exactly what you got, and they are deliberately separate:

  • viewCountIsExact — whether viewCount is the real number. It can be true even when the video lookup failed, because turning on engagement recovers the exact count from that payload.
  • publishedText — when it is set, publishedAt was estimated from wording like "2 weeks ago". Videos the lookup did describe have an exact timestamp and no publishedText.

keywords and category come only from the video lookup, so they are empty when it is refused. The run log reports both gaps separately.

Likes cost 25× more than everything else. The like total is not in the cheap endpoint — fetching it means a second request that is roughly 400 KB against 16 KB. That is why includeEngagement is off by default. Comment counts are rounded by YouTube itself: "2.4M" is as precise as the site is.

Publish dates are exact where possible, approximate otherwise. With exactVideoStats you get a real timestamp. Without it, "2 weeks ago" is anchored to the coarsest unit YouTube gave, and publishedText always carries the original wording so you can tell which you are looking at.


Output

{
  "recordType": "video",
  "videoId": "Z6z_feacXW8",
  "channelTitle": "Marques Brownlee",
  "title": "Galaxy Z Fold 8 Review: Honeymoon's Over",
  "viewCount": 4097984, "viewCountText": "4M views",
  "durationSeconds": 695, "durationText": "11:35",
  "publishedAt": "2026-08-01T…", "publishedText": "12 days ago",
  "daysSincePublished": 12, "viewsPerDay": 341499,
  "category": "Science & Technology", "isShort": false
}

Three ready-made views: Videos, Channels and Engagement. Set flattenOutput: true for CSV.


Honest limits

  • No transcripts. YouTube stopped serving caption tracks to anonymous clients; the endpoint returns zero bytes. Anything offering bulk transcripts is running a browser fleet or an authenticated session.
  • No comment text. Only the count, and only when engagement is enabled.
  • Subscriber counts are rounded. See above.
  • Region-restricted videos will not resolve outside their country. Set country to reach them.
  • videosScraped describes this run, not the channel. A cap of 10 gives cadence and median over the last 10 uploads, not the channel's lifetime.
  • A private, deleted or age-restricted video returns VIDEO_NOT_FOUND and is not charged. Failed rows carry no figures at all — a row that says it could not read the video will never also report a like count.
  • viewCountIsExact: false means viewCount came from YouTube's rounded display text. See above.
  • Empty keywords and a null category mean the per-video lookup was refused for that row; publishedAt is estimated in that case too.

Pricing

EventPriceWhen
Actor start$0.005Once per run
Channel scraped$0.004Per channel profiled
Video scraped$0.0003Per video returned, after filters

$0.30 per 1,000 videos. Tracking 50 creators with their 20 most recent uploads costs about $0.51. Channels and videos that cannot be resolved are never charged.


Tips

  • Rank by viewsPerDay, not viewCount. It is the only fair comparison across videos of different ages.
  • medianViewsScraped ÷ subscriberCount is the number influencer marketers actually want: what share of an audience shows up.
  • uploadIntervalDays climbing run over run means a channel is slowing down — usually before its view counts show it. It is null whenever some returned video has no date, because a gap measured across undated uploads reads far slower than the channel really is.
  • Scraping a Shorts-heavy channel without a proxy? A Shorts thumbnail carries no date, and /player is what supplies one. If the log says videos could not be resolved individually, turn on the proxy — or includeEngagement, which reads the date off the watch page instead.
  • publishedWithinDays: 1 with a daily schedule is a cheap new-upload feed across a whole competitive set.
  • Leave includeEngagement off unless you specifically need likes. It is the single biggest cost lever in this Actor.

FAQ

Why do some videos have rounded view counts?
YouTube does not give exact view counts or full video details to the default Bytewells network. Those rows come with viewCountIsExact: false and a count read from text like "1.5M views", and have no keywords or category. For exact counts, keywords and categories, set Proxy configuration to Residential in the input. The proxy traffic is billed to your Bytewells credits, about 1 cent per 100 videos.

More Actors from the same publisher.

View all from @amethyst