YouTube Channel Scraper avatar

YouTube Channel Scraper

Pricing

Pay per event

Go to Apify Store
YouTube Channel Scraper

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

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

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:

  1. Channel metadata — name, handle, description, subscriber count, total videos, total views, avatar, banner, verification status, keywords, and external links.
  2. 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")

FieldTypeDescription
typestringAlways "channel"
channelIdstringYouTube channel ID (UCxxxxxxx)
channelNamestringDisplay name of the channel
channelHandlestring@handle (e.g. @MrBeast)
channelUrlstringCanonical channel URL
descriptionstringFull channel description
subscriberCountnumberSubscriber count as a number (null if hidden)
totalVideosnumberTotal public videos on the channel
totalViewsnumberAll-time total views across all videos
joinedDatestringDate the channel was created
locationstringChannel's stated location
countrystringCountry from channel metadata
avatarUrlstringURL to the channel avatar image
bannerUrlstringURL to the channel banner image
isVerifiedbooleanWhether the channel has a verified badge
isFamilySafebooleanWhether the channel is marked family-safe
keywordsarrayChannel keywords/tags
linksarrayExternal links with {text, url} for each

Video Item (type: "video")

FieldTypeDescription
typestringAlways "video"
videoIdstringYouTube video ID
titlestringVideo title
urlstringFull YouTube video URL
thumbnailUrlstringURL to the video thumbnail
viewCountnumberTotal views as a number (null if hidden)
durationstringDuration in HH:MM:SS or MM:SS format
publishedTextstringRelative publish time (e.g. "2 months ago")
channelNamestringName of the channel this video belongs to
channelIdstringID of the channel this video belongs to

Pricing

This actor uses pay-per-event pricing — you only pay for results:

EventPriceDescription
Run start$0.005One-time charge when the actor starts
Channel scraped$0.003Per channel metadata item extracted
Video scraped$0.001Per 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

  1. Open the actor on Apify Store
  2. Enter channel URLs in the "Channels to Scrape" field — one per line. Accepts @handles, full URLs, or channel IDs.
  3. Set max videos — how many videos to collect per channel (default: 50, max: 5,000)
  4. Choose what to include — toggle channel info and/or video listings on/off
  5. Click Start and wait for results (usually seconds for small channels, minutes for large ones)
  6. Download results as JSON, CSV, or Excel from the dataset tab

Input Parameters

ParameterTypeDefaultDescription
channelsarrayrequiredChannel URLs, @handles, or channel IDs to scrape
maxVideosPerChannelinteger50Max videos to fetch per channel (0 = skip videos)
includeChannelInfobooleantrueInclude channel metadata item in output
includeVideosbooleantrueInclude individual video items in output

Accepted Channel Input Formats

All of the following are valid entries in the channels array:

@MrBeast
https://www.youtube.com/@MrBeast
https://www.youtube.com/channel/UCX6OQ3DkcsbYNE6H8uQQuVA
UCX6OQ3DkcsbYNE6H8uQQuVA
https://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: false if you only need video listings for channels you already have metadata for.
  • Set maxVideosPerChannel: 0 if 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 ApifyClient
client = 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.


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.