# YouTube Channel Scraper — Subscribers, Views, Emails & Stats (`intelscrape/youtube-channel-scraper`) Actor

YouTube Channel Scraper: subscribers, total views, video count, join date, country, links and public emails for any list of YouTube channels, plus engagement stats (average & median views, views per subscriber, upload frequency). No API key, no quota. Pay per channel.

- **URL**: https://apify.com/intelscrape/youtube-channel-scraper.md
- **Developed by:** [IntelScrape](https://apify.com/intelscrape) (community)
- **Categories:** Social media, Videos, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## YouTube Channel Scraper — Subscribers, Views, Emails & Stats

![YouTube Channel Scraper — Subscribers, Views, Emails & Stats](https://api.apify.com/v2/key-value-stores/hRabN9WfDGrT4nSvV/records/youtube-channel-scraper-banner.png)

🇨🇳 **YouTube 频道数据采集器**：批量获取任意 YouTube 频道的订阅数、总播放量、视频数、注册日期、国家、外链和公开邮箱，并计算互动数据（平均/中位播放量、播放订阅比、更新频率）。无需 API 密钥，没有配额限制，按频道付费。

🇸🇬 **Pengikis Saluran YouTube**: dapatkan pelanggan, jumlah tontonan, bilangan video, negara, pautan dan e-mel awam bagi senarai saluran YouTube, serta statistik penglibatan. Tiada kunci API, tiada kuota.

#### 🤖 NEW: Connect This To Your AI!

Use this actor from Claude, ChatGPT, Cursor or any MCP client through the **[IntelScrape MCP Server](https://apify.com/intelscrape/skip--trace)**, or call it directly over the Apify API.

#### 🏆 Featured Bots by IntelScrape

- [Skip Trace Pro](https://apify.com/intelscrape/skip-trace-pro)
- [TruePeopleSearch Scraper](https://apify.com/intelscrape/truepeoplesearch-scraper)
- [TikTok Email Scraper](https://apify.com/intelscrape/tiktok-scraper)
- [Amazon Product Reviews Scraper](https://apify.com/intelscrape/amazon-product-review-scraper)
- [Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper)
- [Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)

⚡ Works with n8n, Make, Zapier, Google Sheets and the Apify API.

![price](https://img.shields.io/badge/price-%243%20per%201K%20channels-blue) ![billing](https://img.shields.io/badge/billing-pay%20per%20channel-green) ![API key](https://img.shields.io/badge/API%20key-not%20required-brightgreen) ![quota](https://img.shields.io/badge/quota-none-orange)

**Channel size, activity and real engagement for any list of YouTube channels: subscribers, views, upload cadence, views per subscriber, links and public emails.**

> **Honest coverage & billing:** Subscriber counts are rounded by YouTube; total views and video counts are exact. You pay only for results actually delivered, and a built-in cost guard stops the run at your max-charge limit.

🌍 Built for teams in the **US, China and Singapore**, and anyone who needs this data in a spreadsheet or pipeline.

⭐ Found it useful? Please leave a review; it helps others find it.

⚖️ **Lawful business use only.** Collect public data only, and comply with the source site's terms, copyright and data-protection laws (GDPR, CCPA, China PIPL, Singapore PDPA).

*Examples below are illustrative; names and values may be fictional or out of date.*

### What is YouTube Channel Scraper?

Whether you are vetting creators for a sponsorship, tracking competitors or building a creator database, the first questions are always the same: how big is this channel, is it still active, and do its videos actually get watched? **YouTube Channel Scraper** answers all three for hundreds of channels in one run. It reads the public channel pages, so there is no YouTube Data API key to set up, no daily quota to run out of and no Google Cloud project to manage.

### What does it do?

- **Any channel input**: @handles, channel URLs (/@name, /channel/UC…, /c/…, /user/…) or bare channel IDs
- **Profile data**: channel name, ID, handle, subscribers (exact number and text), total views, video count, join date, country, verified badge, keywords, avatar and RSS feed
- **Links & public emails**: every external link on the About page (Instagram, X, website, shop) plus any email written in the channel description
- **Engagement stats (on by default)**: average, median and max views of the latest videos, views per subscriber %, uploads per week, days since last upload, latest video and best recent video
- **Bulk & fast**: 4 channels in parallel, no browser
- **Clean JSON / CSV / Excel** output with one row per channel

### Why choose us over cheaper scrapers?

- **Honest output**: limits are documented, missing data is labeled, never invented
- **Clean, consistent schema** ready for Excel, Sheets, BI tools or an LLM
- **No account risk**: no logins, no cookies, no API keys
- **Pay per result** with a built-in cost guard; no subscription, failed items are never charged
- **Fast and light**: no residential proxy, so runs finish in seconds and stay cheap
- **Maintained by IntelScrape** and fixed fast when the source changes

### Who is it for?

- **Influencer marketing**: shortlist creators by real views, not vanity subscriber counts
- **Agencies & brands**: vet a creator list before outreach and spot inactive channels
- **Competitor tracking**: schedule weekly runs and watch subscriber and view growth
- **Creator databases & lead lists**: enrich channel lists with links and public business emails
- **Investors & analysts**: measure channel health across a portfolio of media brands
- **AI agents**: answer "how big is this channel?" from Claude or ChatGPT through MCP

### How to use it

#### In Apify Console (no code)

1. Click **Try for free** / **Start**. The form is prefilled with a working example.
2. Change the inputs (see examples below).
3. Click **Start**, then export the results as **JSON, CSV, Excel, XML or HTML**, or open them in Google Sheets.
4. Optional: **Schedule** the actor to run hourly, daily or weekly.

#### Via API

```bash
curl -X POST "https://api.apify.com/v2/acts/intelscrape~youtube-channel-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channels": ["@mkbhd", "@veritasium"], "engagementStats": true, "recentVideos": 30}'
```

Or use the official [Apify JavaScript](https://docs.apify.com/api/client/js/) and [Python](https://docs.apify.com/api/client/python/) clients:

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("intelscrape/youtube-channel-scraper").call(run_input={"channels": ["@mkbhd", "@veritasium"], "engagementStats": true, "recentVideos": 30})
for item in client.dataset(run["default_dataset_id"]).iterate_items():
    print(item)
```

#### With AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) or the [IntelScrape MCP Server](https://apify.com/intelscrape/skip--trace) to Claude Desktop, Cursor, ChatGPT or any MCP client, then ask in plain language, e.g. *"Run intelscrape/youtube-channel-scraper with the default input and summarise the results."*

### Input examples

**Two channels with engagement stats (default)**

```json
{
  "channels": ["@mkbhd", "@veritasium"],
  "engagementStats": true,
  "recentVideos": 30
}
```

**Mixed inputs, profile only**

```json
{
  "channels": [
    "https://www.youtube.com/@LinusTechTips",
    "UCX6OQ3DkcsbYNE6H8uQQuVA",
    "https://www.youtube.com/c/TED"
  ],
  "engagementStats": false
}
```

**Deep activity check on the last 100 videos**

```json
{
  "channels": ["@nasa"],
  "recentVideos": 100
}
```

### Output fields

| Field | Description |
|---|---|
| `channelId / channelName / handle` | Channel identity |
| `channelUrl / inputUrl` | Canonical channel URL and what you entered |
| `subscriberCount / subscriberCountText` | Subscribers as a number (YouTube rounds public counts, e.g. 21.4M) and as shown |
| `totalViews` | Lifetime channel views (exact) |
| `videoCount` | Public videos |
| `joinedDate / country` | Join date and country from the About page |
| `isVerified / isFamilySafe` | Verified badge and family-safe flag |
| `description` | Full About description |
| `emailsInDescription` | Emails written in the description |
| `hasBusinessEmailButton` | Channel has a hidden business email (sign-in required to view; we do not bypass it) |
| `externalLinks` | Title + URL of every About-page link |
| `keywords / avatarUrl / rssUrl` | Channel keywords, avatar and RSS feed |
| `engagement.avgViewsRecent / medianViewsRecent / maxViewsRecent` | View stats of the latest videos |
| `engagement.viewsPerSubscriberPct` | Average views as % of subscribers |
| `engagement.uploadsPerWeek / daysSinceLastUpload` | Upload cadence and recency |
| `engagement.latestVideo / topRecentVideo` | Newest video and best recent video |

#### Sample output

```json
{
  "channelId": "UCBJycsmduvYEL83R_U4JriQ",
  "channelName": "Marques Brownlee",
  "handle": "@mkbhd",
  "subscriberCount": 21400000,
  "totalViews": 5802580406,
  "videoCount": 1861,
  "joinedDate": "Mar 21, 2008",
  "country": "United States",
  "emailsInDescription": ["business@MKBHD.com"],
  "externalLinks": [{ "title": "Twitter", "url": "http://twitter.com/MKBHD" }],
  "engagement": {
    "recentVideosAnalyzed": 30,
    "avgViewsRecent": 3100000,
    "medianViewsRecent": 2600000,
    "viewsPerSubscriberPct": 14.49,
    "uploadsPerWeek": 2.1,
    "daysSinceLastUpload": 0.5
  }
}
```

### Pricing (pay per event)

| Event | When it is charged | Price |
|---|---|---|
| **Actor start** | once per run | $0.005 |
| **Channel** | per channel profile row | $0.003 |
| **Engagement stats** | per channel analysed (on by default; turn off to skip) | $0.002 |

#### Cost examples

| Run | Cost |
|---|---|
| Default run: 2 channels with stats | $0.015 |
| 100 channels with stats | $0.505 |
| 1,000 channels, profile only | $3.005 |

Platform usage is included in these prices. Set **Max charge per run** in the run options to cap spend; the actor stops cleanly when the limit is reached and keeps everything collected so far.

### Tips for best results

- Use @handles where you can; they are the most reliable input.
- Turn off engagement stats for the cheapest bulk profile pass, then re-run stats only on your shortlist.
- Schedule a weekly run with the same list to build a growth history in your own sheet.
- Raise recentVideos for channels that post several times a day.

### FAQ

#### Do I need a YouTube Data API key?

No. The actor reads the public channel pages, so there is no key, no Google Cloud project and no 10,000-unit daily quota.

#### Why is the subscriber count rounded?

YouTube itself only shows rounded subscriber counts publicly (e.g. 21.4M). We return the number and the original text. Total views and video counts are exact.

#### Can it get the hidden business email?

No. YouTube hides that email behind a sign-in and captcha, and we never bypass it. We return emails written in the description and flag channels that have the hidden email button so you know where to look.

#### How are engagement stats calculated?

From the latest long-form videos on the Videos tab (30 by default). Shorts and live streams are listed separately by YouTube and are not mixed in.

#### What if a channel does not exist?

It is logged, skipped and not charged.

#### Can I scrape every video of a channel?

This actor focuses on channel-level metrics. Use our YouTube Playlist Scraper or YouTube Shorts Scraper for video-level lists.

### Honest limits

- Subscriber counts are rounded by YouTube; total views and video counts are exact.
- Hidden business emails (behind YouTube sign-in) are not collected.
- Upload frequency is estimated from relative dates ("3 days ago"), so it is approximate.
- Very new or terminated channels may return partial data.

### Related IntelScrape bots

- [YouTube Shorts Scraper](https://apify.com/intelscrape/youtube-shorts-scraper): every Short on a channel with views
- [YouTube Playlist Scraper](https://apify.com/intelscrape/youtube-playlist-scraper): all videos in any playlist
- [YouTube Transcript Scraper](https://apify.com/intelscrape/youtube-transcript-scraper-pro): captions & timestamps in bulk
- [YouTube Search Scraper](https://apify.com/intelscrape/youtube-niche-url-finder): find videos & channels by keyword
- [TikTok Email Scraper](https://apify.com/intelscrape/tiktok-scraper): creator & influencer leads
- [Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace): IntelScrape tools for AI agents

### Legal

This actor collects publicly available data only. You are responsible for using the results lawfully and in line with the source's terms and applicable privacy laws (GDPR, CCPA, PIPL, PDPA). Process personal data only with a legitimate purpose. IntelScrape is not affiliated with, endorsed by or sponsored by the data source; all trademarks belong to their owners.

# Actor input Schema

## `channels` (type: `array`):

YouTube handles (@mkbhd), channel URLs or channel IDs (UC…). One per line.

## `engagementStats` (type: `boolean`):

Analyse the latest videos: average & median views, views per subscriber, uploads per week, days since last upload, latest and top video. Charged per channel.

## `recentVideos` (type: `integer`):

How many of the latest long-form videos feed the engagement stats.

## `proxyConfiguration` (type: `object`):

Not needed normally. The actor switches to Apify Proxy automatically if the source starts rate-limiting.

## Actor input object example

```json
{
  "channels": [
    "@mkbhd",
    "@veritasium"
  ],
  "engagementStats": true,
  "recentVideos": 30,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "channels": [
        "@mkbhd",
        "@veritasium"
    ],
    "engagementStats": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("intelscrape/youtube-channel-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "channels": [
        "@mkbhd",
        "@veritasium",
    ],
    "engagementStats": True,
}

# Run the Actor and wait for it to finish
run = client.actor("intelscrape/youtube-channel-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "channels": [
    "@mkbhd",
    "@veritasium"
  ],
  "engagementStats": true
}' |
apify call intelscrape/youtube-channel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,intelscrape/youtube-channel-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mddEMFWrrO8qwzSPr/builds/W7UsXENxK3vhclglI/openapi.json
