# YouTube Channel Scraper - Subscribers, Views & Stats, $1.50/1k (`smolder/youtube-channel-scraper`) Actor

$1.50 per 1,000 channels. Scrape YouTube channel stats from @handles, URLs or a keyword search: subscribers, total views, video count, join date, country, verified badge, description, keywords, avatar and banner. Find channels in any niche. No login.

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

## Pricing

from $1.00 / 1,000 channels

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 & Stats ($1.50 per 1,000)

Scrape **YouTube channel stats in bulk** from **@handles**, **channel URLs** or a **keyword search**. Every channel comes back as one clean row: name, handle, **subscribers**, **total views**, **video count**, **join date**, **country**, verified badge, description, keywords, avatar and banner.

**$1.50 per 1,000 channels**, platform and proxy costs included. Channels that don't exist are never charged. No login or API key needed.

### What can it do?

- 📊 **Channel stats:** subscribers, exact total views and exact video count for any public channel.
- 🔎 **Find channels by keyword:** search "fitness coach" or "moroccan cooking" and get every channel YouTube finds, with its rank.
- 🗓️ **Join date and country:** when the channel was created and the country it set.
- ✅ **Verified badge:** see which channels are verified or official artist channels.
- 🖼️ **Branding:** description, keywords, avatar and banner image URLs.
- ⚡ **Fast and cheap:** 300 channels in under 3 minutes, using cheap datacenter proxies with an automatic switch to residential proxies when YouTube shows its bot check.

### Use cases

- **Influencer marketing:** build a list of channels in a niche, then filter by subscribers, country and activity.
- **Competitor tracking:** schedule a daily run on your competitors' channels and chart their subscriber and view growth.
- **Market research:** see how big a niche is and who leads it.
- **Agency and sales prospecting:** qualify channels by size before you reach out through their public channel page.
- **Datasets for AI and analytics:** clean channel data for dashboards, spreadsheets and LLM pipelines.

### How to use it

1. Click **Try for free**.
2. Add **channels** (@handles, URLs or IDs) and/or **keywords** to find channels.
3. Click **Start**, then download your data as JSON, CSV or Excel, or use it through the API, Make, Zapier or n8n.

### Input examples

Stats for a list of channels:

```json
{
    "channels": ["@TED", "@mkbhd", "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ"]
}
```

The first 200 channels YouTube finds for two topics:

```json
{
    "searchQueries": ["fitness coach", "home workout"],
    "maxChannelsPerSearch": 100,
    "maxChannels": 200
}
```

### Output example

One row per channel (description shortened):

```json
{
    "channelId": "UCAuUUnT6oDeKwE6v1NGQxug",
    "name": "TED",
    "handle": "@TED",
    "url": "https://www.youtube.com/@TED",
    "channelUrl": "https://www.youtube.com/channel/UCAuUUnT6oDeKwE6v1NGQxug",
    "description": "The TED Talks channel features the best talks and performances from the TED Conference, …",
    "subscriberCount": 27900000,
    "subscriberCountText": "27.9M subscribers",
    "videoCount": 5876,
    "viewCount": 3268447317,
    "joinedDate": "2006-12-06",
    "country": "United States",
    "isVerified": true,
    "isFamilySafe": true,
    "keywords": ["TED talks", "ideas worth spreading", "TED Conferences"],
    "avatarUrl": "https://yt3.googleusercontent.com/…",
    "bannerUrl": "https://yt3.googleusercontent.com/…",
    "source": "channel: @TED",
    "position": null,
    "scrapedAt": "2026-10-31T20:52:21.261Z"
}
```

The **Output** tab describes every field. Inputs that produced no data (removed channels, invalid links, searches without results) are listed with the reason in the **FAILED_CHANNELS** record of the run's key-value store.

### How much does it cost?

**$1.50 per 1,000 channels**, plus a tiny start fee per run. Platform usage and proxies are included.

| Channels | Price  |
| -------- | ------ |
| 100      | $0.15  |
| 1,000    | $1.50  |
| 10,000   | $15.00 |

**Paid Apify plans pay less:** $1.30/1k on Starter, $1.20/1k on Scale, $1.00/1k on Business.

Missing channels are **never charged**. You can set a **maximum cost per run**; the scraper stops when it's reached and never charges more. The Apify Free plan's monthly credit covers thousands of channels.

### Tips

- **Track growth:** schedule the same channel list daily or weekly and compare `subscriberCount` and `viewCount` over time.
- **Bigger niche lists:** use several related keywords; YouTube returns up to a few hundred channels per search.
- **Need their videos too?** Use our [YouTube Scraper](https://apify.com/smolder/youtube-video-scraper) on the same channels, and our [YouTube Transcript Scraper](https://apify.com/smolder/youtube-transcript-scraper) for what they say.

### FAQ

**Do I need a YouTube API key or account?**
No. The scraper reads public channel pages the way the YouTube website does.

**Why is the subscriber count rounded?**
YouTube only shows subscribers rounded to three digits (for example 27.9M) to everyone, including its own website. Total views and video count are exact.

**Why are some fields empty?**
Channels can hide their subscriber count and leave country, description or keywords blank. Everything the channel shows publicly is returned.

**Does it collect emails or personal contact details?**
No. It returns public channel statistics and branding only, no emails, phone numbers or data about viewers.

**Is it legal?**
It collects publicly available channel information with no login. Respect YouTube's terms and privacy laws such as GDPR when you reuse the data. If in doubt, consult a lawyer. Read more about [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

**Do I need to configure proxies?**
No. The default setting handles YouTube's bot checks automatically.

### Limitations

- Subscriber counts are rounded by YouTube (see FAQ).
- Keyword search returns channels in YouTube's own order and usually stops after a few hundred results per keyword.
- Removed, terminated and private channels can't be scraped (they're listed in FAILED_CHANNELS and not charged).

### Support

Found a bug or need a feature? Open an issue in the **Issues** tab with your run ID.

# Actor input Schema

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

Channels to scrape. Use an @handle, a channel URL or a channel ID, for example "@mkbhd" or "https://www.youtube.com/@TED".

## `searchQueries` (type: `array`):

Search YouTube for channels about a topic, for example "cooking" or "fitness coach", and scrape every channel found.

## `maxChannelsPerSearch` (type: `integer`):

How many channels to take from each search (YouTube usually returns up to a few hundred per keyword).

## `maxChannels` (type: `integer`):

Safety cap on the number of channels in one run, across all inputs (up to 10,000).

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

Leave the default: the scraper uses Apify's datacenter proxies and automatically switches to residential proxies when YouTube shows its bot check. Only change this if you want to force a specific proxy.

## Actor input object example

```json
{
  "channels": [
    "@TED",
    "@mkbhd"
  ],
  "maxChannelsPerSearch": 20,
  "maxChannels": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `failedChannels` (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": [
        "@TED",
        "@mkbhd"
    ],
    "maxChannelsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("smolder/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": [
        "@TED",
        "@mkbhd",
    ],
    "maxChannelsPerSearch": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("smolder/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": [
    "@TED",
    "@mkbhd"
  ],
  "maxChannelsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call smolder/youtube-channel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,smolder/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/xgeayQdSbAMqckzf9/builds/NFaA4Cy1L2gRirP7e/openapi.json
