YouTube Channel Scraper
Pricing
Pay per event
YouTube Channel Scraper
Scrape YouTube channel metadata and video listings. Get subscriber counts, video views, titles, durations, and more. Uses the InnerTube API — no browser needed, fast and reliable. Export to JSON, CSV, Excel, or connect via API.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Actor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Extract channel metadata and video listings from any YouTube channel — subscriber counts, total views, video titles, view counts, durations, thumbnails, and more. Uses YouTube's internal InnerTube API directly (no browser, no Selenium, no Playwright). Fast, reliable, and low-cost.
What Does It Do?
YouTube Channel Scraper fetches two types of data from any YouTube channel:
- Channel metadata — name, handle, description, subscriber count, total videos, total views, avatar, banner, verification status, keywords, and external links.
- Video listings — all public videos with their title, URL, view count, duration, thumbnail, and relative publish time (e.g., "3 days ago", "2 years ago").
It handles all common channel URL formats: @handles, /channel/UCxxxxxxx IDs, and full youtube.com URLs.
Who Is It For?
- Content creators researching competitors and trending channels in their niche
- Marketing teams building influencer databases or tracking channel growth
- Data analysts building YouTube datasets for modeling and reporting
- Developers integrating YouTube channel data into dashboards, CRMs, or apps
- Researchers studying social media, digital culture, or media trends
- SEO professionals tracking video publishing cadence and view velocity
Why Use This Scraper?
- No browser required — pure HTTP via InnerTube API means fast runs and minimal memory
- 256 MB memory — runs efficiently without expensive compute instances
- Handles pagination — fetches up to 5,000 videos per channel with automatic continuation
- Flexible input — accepts @handles, channel IDs, or full YouTube URLs
- Structured output — two clean item types (channel + video) ready for export
- Cost-efficient pricing — pay per channel scraped and per video listed, not per page loaded
Data Fields
Channel Item (type: "channel")
| Field | Type | Description |
|---|---|---|
type | string | Always "channel" |
channelId | string | YouTube channel ID (UCxxxxxxx) |
channelName | string | Display name of the channel |
channelHandle | string | @handle (e.g. @MrBeast) |
channelUrl | string | Canonical channel URL |
description | string | Full channel description |
subscriberCount | number | Subscriber count as a number (null if hidden) |
totalVideos | number | Total public videos on the channel |
totalViews | number | All-time total views across all videos |
joinedDate | string | Date the channel was created |
location | string | Channel's stated location |
country | string | Country from channel metadata |
avatarUrl | string | URL to the channel avatar image |
bannerUrl | string | URL to the channel banner image |
isVerified | boolean | Whether the channel has a verified badge |
isFamilySafe | boolean | Whether the channel is marked family-safe |
keywords | array | Channel keywords/tags |
links | array | External links with {text, url} for each |
Video Item (type: "video")
| Field | Type | Description |
|---|---|---|
type | string | Always "video" |
videoId | string | YouTube video ID |
title | string | Video title |
url | string | Full YouTube video URL |
thumbnailUrl | string | URL to the video thumbnail |
viewCount | number | Total views as a number (null if hidden) |
duration | string | Duration in HH:MM:SS or MM:SS format |
publishedText | string | Relative publish time (e.g. "2 months ago") |
channelName | string | Name of the channel this video belongs to |
channelId | string | ID of the channel this video belongs to |
Pricing
This actor uses pay-per-event pricing — you only pay for results:
| Event | Price | Description |
|---|---|---|
| Run start | $0.005 | One-time charge when the actor starts |
| Channel scraped | $0.003 | Per channel metadata item extracted |
| Video scraped | $0.001 | Per video listing extracted |
Example costs:
- 1 channel + 50 videos: $0.005 + $0.003 + $0.050 = $0.058
- 5 channels + 100 videos each: $0.005 + $0.015 + $0.500 = $0.520
- 1 channel + 500 videos: $0.005 + $0.003 + $0.500 = $0.508
Compute costs (memory/time) are minimal since this is HTTP-only with no browser.
How to Use
- Open the actor on Apify Store
- Enter channel URLs in the "Channels to Scrape" field — one per line. Accepts
@handles, full URLs, or channel IDs. - Set max videos — how many videos to collect per channel (default: 50, max: 5,000)
- Choose what to include — toggle channel info and/or video listings on/off
- Click Start and wait for results (usually seconds for small channels, minutes for large ones)
- Download results as JSON, CSV, or Excel from the dataset tab
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
channels | array | required | Channel URLs, @handles, or channel IDs to scrape |
maxVideosPerChannel | integer | 50 | Max videos to fetch per channel (0 = skip videos) |
includeChannelInfo | boolean | true | Include channel metadata item in output |
includeVideos | boolean | true | Include individual video items in output |
Accepted Channel Input Formats
All of the following are valid entries in the channels array:
@MrBeasthttps://www.youtube.com/@MrBeasthttps://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVAUCX6OQ3DkcsbYNE6H8uQQuVAhttps://www.youtube.com/c/MrBeast6000
Output Example
Channel item
{"type": "channel","channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA","channelName": "MrBeast","channelHandle": "@MrBeast","channelUrl": "https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA","description": "SUBSCRIBE FOR A COOKIE\n\nOr don't. I'm a description, not a cop.","subscriberCount": 350000000,"totalVideos": 800,"totalViews": 60000000000,"joinedDate": "Feb 19, 2012","location": "","country": "US","avatarUrl": "https://yt3.googleusercontent.com/...","bannerUrl": "https://yt3.googleusercontent.com/...","isVerified": true,"isFamilySafe": true,"keywords": ["mrbeast", "challenge", "philanthropy"],"links": [{ "text": "Instagram", "url": "https://www.instagram.com/mrbeast/" },{ "text": "Twitter", "url": "https://twitter.com/MrBeast" }]}
Video item
{"type": "video","videoId": "dQw4w9WgXcQ","title": "I Spent 50 Hours Buried Alive","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg","viewCount": 45000000,"duration": "14:32","publishedText": "3 months ago","channelName": "MrBeast","channelId": "UCX6OQ3DkcsbYNE6H8uQQuVA"}
Tips and Best Practices
Scraping many channels efficiently
- Use an array of channels in a single run — the actor processes them sequentially without extra cost.
- Set
includeChannelInfo: falseif you only need video listings for channels you already have metadata for. - Set
maxVideosPerChannel: 0if you only want channel metadata without any videos.
Getting more than 50 videos
The default is 50 videos per channel for quick runs. To get all videos from a large channel, set maxVideosPerChannel to a high value like 5000. The actor handles pagination automatically.
Channels with hidden subscriber counts
Some channels (especially smaller creators) hide their subscriber count. In that case, subscriberCount will be null rather than a number.
Private or removed channels
If a channel URL is invalid, private, or the channel has been terminated, the actor will log a warning and skip it — it will not fail the entire run.
Integrations
Google Sheets / Spreadsheets
Use the Apify → Google Sheets integration to automatically push scraped channel or video data into a spreadsheet. Go to Integrations tab → Google Sheets → connect your account.
Webhooks and Zapier
Trigger downstream workflows when the actor finishes using webhooks. Compatible with Zapier, Make (Integromat), and n8n for no-code automations like sending results to Slack or updating a CRM.
Scheduled Runs
Use Apify's built-in scheduler to run this actor daily or weekly to track channel growth over time. Combine with a Google Sheet integration to build a live dashboard.
API Usage
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/youtube-channel-scraper').call({channels: ['@MrBeast', '@mkbhd'],maxVideosPerChannel: 25,includeChannelInfo: true,includeVideos: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient(token="YOUR_API_TOKEN")run = client.actor("automation-lab/youtube-channel-scraper").call(run_input={"channels": ["@MrBeast", "@mkbhd"],"maxVideosPerChannel": 25,"includeChannelInfo": True,"includeVideos": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~youtube-channel-scraper/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"channels": ["@MrBeast"],"maxVideosPerChannel": 10}'
Use with Claude AI (MCP)
This actor is available as a tool in Claude AI through the Model Context Protocol (MCP). Add it to Claude Desktop, Cursor, Windsurf, or any MCP-compatible client.
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com"}}}
Example prompts
- "Get the last 50 videos from @LinusTechTips along with their view counts and durations."
- "Scrape the channel metadata for these 10 YouTube channels and compare their subscriber counts."
- "Fetch all videos from @mkbhd and list the ones with over 5 million views."
Learn more in the Apify MCP documentation.
Legal and Ethical Use
This actor accesses publicly available YouTube channel pages and video listings using the same InnerTube API that YouTube's own web client uses. All data extracted is publicly visible to any visitor on YouTube.
Important notes:
- Only public channels and public videos are accessible
- Private videos, private channels, and age-restricted content cannot be accessed
- Do not use this tool for harassment, doxxing, or bulk-tracking individual creators without legitimate purpose
- Respect YouTube's Terms of Service and use data responsibly
- This tool does not download video files, only metadata
FAQ
Q: Does this work with brand accounts or YouTube Music channels? A: Yes — any public YouTube channel with a UC... channel ID works, including brand accounts and music channels.
Q: Why is subscriberCount null for some channels?
A: YouTube allows creators to hide their exact subscriber count. When a channel has fewer than 1,000 subscribers or has opted to hide the count, the API returns no number. The actor returns null in that case.
Q: Can I get video comments or descriptions? A: This actor focuses on channel and video listing data. For video transcripts and metadata including descriptions, use YouTube Transcript Scraper.
Q: Why are some videos missing from large channels?
A: YouTube sometimes limits how many videos appear in the videos tab for very large channels (1,000+ videos). This is a YouTube platform limitation, not an actor bug. Setting a high maxVideosPerChannel value will fetch all available videos.
Q: Why is publishedText relative ("2 months ago") instead of an exact date?
A: YouTube's InnerTube API returns relative time for the videos listing tab. To get exact publish dates, you would need to call the individual video page, which would significantly increase cost. The relative text is sufficient for most use cases.
Q: How do I get data for multiple channels at once?
A: Simply enter multiple channels in the channels array. Each channel is processed in the same run — there's no need to run the actor separately for each one.
Q: The actor skipped my channel — what happened? A: The actor logs a warning and continues when a channel cannot be resolved. Check the actor log for details. Common causes: typo in the handle, channel deleted or suspended, or channel set to private.
Related Scrapers
- YouTube Transcript Scraper — Extract full video transcripts and captions
- YouTube Shorts Scraper — Scrape YouTube Shorts with engagement data
- Google News Scraper — Collect news articles from Google News
- Google Trends Scraper — Track keyword trends over time