YouTube Channel Scraper — All Videos, Views & Subscribers avatar

YouTube Channel Scraper — All Videos, Views & Subscribers

Pricing

from $3.00 / 1,000 video scrapeds

Go to Apify Store
YouTube Channel Scraper — All Videos, Views & Subscribers

YouTube Channel Scraper — All Videos, Views & Subscribers

Scrape every video from any YouTube channel: title, views, duration, publish date, plus channel subscribers and video count. No API key, no quota.

Pricing

from $3.00 / 1,000 video scrapeds

Rating

0.0

(0)

Developer

Mohanad Alshaka

Mohanad Alshaka

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Scrape every video from any YouTube channel without an API key, a quota or a login. Give it an @handle, a channel URL or a UC… ID.

Each row carries the video and the channel: title, views, duration, publish date, plus subscriber count, total video count, handle, description and avatar.

Output

{
"channelName": "Marques Brownlee",
"channelId": "UCBJycsmduvYEL83R_U4JriQ",
"channelHandle": "@MKBHD",
"subscriberCount": 21300000,
"videoCount": 1800,
"videoId": "6D__H_DO2Xk",
"url": "https://www.youtube.com/watch?v=6D__H_DO2Xk",
"title": "iPhone Duo: What We Missed!",
"viewCount": 8200000,
"viewCountText": "8.2M views",
"lengthText": "10:37",
"lengthSeconds": 637,
"publishedText": "1 day ago",
"publishedApprox": "2026-09-13T...",
"isShort": false
}

Why this one does not quietly return zero

YouTube is midway through changing how channel grids are built. The old shape was videoRenderer; channels now serve lockupViewModel, where the video ID sits in contentId and the view count and age are unlabelled strings.

Measured on a live channel page on 14 September 2026: 30 lockupViewModel, zero videoRenderer. Any scraper that only knows the old shape returns an empty dataset and reports success.

This Actor reads the new shape first and falls back to the old one, so it works on both sides of the rollout. A test asserts each path independently, so a future fallback removal fails loudly rather than silently.

Views and ages are classified by their format rather than their label, because in the new shape the labels move between layouts and the value formats do not.

Blocked pages are never charged

YouTube refuses some datacenter IPs with "Sign in to confirm you're not a bot" — returned as a normal 200 page with no data. Billing for that would charge you for this Actor's IP being refused, so those rows are written with blocked: true and error: "blocked_by_youtube" and no event fires.

To avoid it entirely, set proxyConfiguration to Apify Proxy with RESIDENTIAL groups.

Input

FieldWhat it does
channels@handles, channel URLs, or UC… IDs. All three work and can be mixed.
maxVideosPerChannelCap on videos per channel, and therefore on cost. One page carries about 30.
includeChannelInfoAttach channel name, subscribers, video count and avatar to every row.
language / countryTwo-letter codes affecting titles and regional availability.

Example

{
"channels": ["@MKBHD", "UCBJycsmduvYEL83R_U4JriQ"],
"maxVideosPerChannel": 60
}

Notes and limits

  • Public channel data only. No login, no cookies, no Google account.
  • View counts on channel grids are the abbreviated values YouTube displays ("8.2M views"), so they are rounded at source. Both the number and the original string are returned. For exact counts, run the video scraper on the IDs.
  • Publish dates are relative on this surface ("1 day ago"), so publishedApprox is derived and approximate by definition. The original text is kept in publishedText.
  • One request per channel returns roughly 30 videos. Deeper paging is not performed.

Development

npm install
npm test
node src/main.js