YouTube Channel Scraper - All Videos, Views & Subscribers
Pricing
from $1.20 / 1,000 scraped videos
YouTube Channel Scraper - All Videos, Views & Subscribers
Scrape any YouTube channel by @handle, URL or UC id: subscriber count, description, keywords, avatar and RSS, plus every uploaded video with title, URL, duration, views and publish age. No API key, no proxy. $0.0015 per video; channel row free.
Pricing
from $1.20 / 1,000 scraped videos
Rating
0.0
(0)
Developer
Broke to Built
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
YouTube Channel Scraper — All Videos, Views & Subscribers
Scrape any YouTube channel without an API key. Give it an @handle, a channel URL or a UC channel id and get back the channel's profile — subscriber count, total video count, description, keywords, avatar, channel id and RSS feed — plus every uploaded video, newest first, with title, watch URL, duration in seconds, view count and publish age. One row per video, with the channel's id, handle and subscriber count repeated on every row so a CSV export needs no join.
No YouTube Data API quota, no Google Cloud project, no login, no browser.
Use it for influencer research, competitor channel tracking, building a video list to feed a transcript or comments scraper, content audits, and finding which of a creator's uploads took off.
Input
{"channels": ["@mkbhd", "https://www.youtube.com/@3blue1brown", "UCYO_jab_esuFRV4b17AJtAw"],"maxVideosPerChannel": 50,"maxChannels": 20}
| Field | What it does |
|---|---|
channels | @handles, channel URLs (/@name, /channel/UC…, /c/…, /user/…) or bare UC… ids. A bare name without @ is treated as a handle. Duplicates removed. |
maxVideosPerChannel | Newest-first cap per channel (default 50, up to 2,000). This is also your cost cap: each video row is one charged result. |
maxChannels | Safety cap per run (default 20, up to 100). |
Run it with no input at all and it scrapes the 50 newest videos from @3blue1brown, so you can see the output shape before you spend anything meaningful.
Output
One free channel row per channel:
{"type": "channel","channelId": "UCBJycsmduvYEL83R_U4JriQ","channelTitle": "Marques Brownlee","channelHandle": "@mkbhd","channelUrl": "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ","subscriberCountText": "21.3M subscribers","subscriberCount": 21300000,"videoCountText": "1.8K videos","videoCount": 1800,"description": "MKBHD: Quality Tech Videos | YouTuber | Geek | ...","keywords": "...","avatarUrl": "https://yt3.googleusercontent.com/...","rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UCBJycsmduvYEL83R_U4JriQ","videosReturned": 50,"moreVideosAvailable": true}
One charged row per video:
{"type": "video","position": 1,"videoId": "pOX1l1edBME","title": "The Apple Watch Has a Problem","url": "https://www.youtube.com/watch?v=pOX1l1edBME","durationText": "15:06","durationSeconds": 906,"viewCountText": "3.8M views","viewCount": 3800000,"publishedText": "2 days ago","isLive": false,"thumbnail": "https://i.ytimg.com/vi/pOX1l1edBME/hqdefault.jpg","channelId": "UCBJycsmduvYEL83R_U4JriQ","channelTitle": "Marques Brownlee","channelHandle": "@mkbhd","channelSubscriberCount": 21300000}
A channel that cannot be read (wrong handle, terminated channel) comes back as a type: "error"
row with a plain-English reason and is not charged.
Pricing
$0.0015 per video row (pay per event, video-scraped). 1,000 videos = $1.50.
- The channel profile row is free.
- Channels that fail, do not exist, or have no public long-form videos are free.
- The run stops cleanly at your spending limit rather than billing past it.
Limits
- Long-form uploads only. This reads the channel's Videos tab. Shorts and past livestreams live
on other tabs and are not included, which is why
videoCount(YouTube's all-tabs total) can be larger than the rows you get. - View counts and subscriber counts are YouTube's rounded display values ("2.1M" → 2,100,000), not exact figures. Publish dates are relative ("6d ago") as YouTube shows them on the channel page.
- No likes, comments or full descriptions per video — pipe the URLs into our YouTube Comments Scraper or YouTube Transcript actor for that.
- Uses YouTube's public web pages, so a layout change on YouTube's side can break it until we ship a
fix. Every row says
ok: trueor carries anerror— never a silent empty list.
FAQ
How do I get all videos from a YouTube channel without the API?
Put the channel's @handle or URL in channels and raise maxVideosPerChannel to cover the channel.
The channel row tells you moreVideosAvailable: true if you stopped short.
How do I get a YouTube channel's subscriber count in bulk?
List the channels, set maxVideosPerChannel to 1, and read the free channel rows — each channel
then costs one video row ($0.0015).
Does it work with old /user/ and /c/ URLs? Yes, along with /@handle and /channel/UC….
Can I find a channel's id from its handle? Yes — channelId on the channel row is the UC… id,
and rssUrl is its public RSS feed.
Do I need proxies? No. It runs on plain Apify datacenter IPs with no proxy cost.
Use from code or an AI agent
curl -s "https://api.apify.com/v2/acts/EliAI~youtube-channel-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-X POST -H 'Content-Type: application/json' \-d '{"channels": ["@mkbhd"], "maxVideosPerChannel": 20}'
Agents: connect Apify MCP and call EliAI/youtube-channel-scraper.
- Capability: list a YouTube channel's profile and uploaded videos without an API key
- Required input:
channels(array of handles, URLs or UC ids) - Returns: one
channelrow (free) and onevideorow per upload (charged) - Bounded:
maxVideosPerChannel≤ 2,000,maxChannels≤ 100 - Side effects: none — read-only
Changelog
- 2026-09-24 — First release: channel profile + newest-first uploads, handle/URL/UC-id input, both of YouTube's view-count display formats parsed.