# YouTube Channel Scraper — Subscribers & Channel Data (`scrapersdelight/youtube-channel-scraper`) Actor

Scrape YouTube channels by handle, ID or URL: title, channel ID, subscribers, video count, description, keywords, country, avatar and RSS feed. Bulk-friendly. No login, no API key.

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

## Pricing

$3.60 / 1,000 per channel returneds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## What is YouTube Channel Scraper?

YouTube Channel Scraper pulls **channel data** from YouTube in bulk — subscribers, total video
count, description, keywords, country, avatar and the channel's RSS feed. **No login, no API key,
no quota.**

Paste channel handles (`@NASA`), channel IDs (`UCLA_DiR1FfKNvjuUpBHmylQ`) or full channel URLs and
run it. All three formats work, mixed together.

- **Bulk-friendly** — pass hundreds of channels in one run
- **No API key, no quota** — reads the public channel page directly, so you're not limited by the
  YouTube Data API's daily quota
- **Full channel profile** — subscribers, video count, description, keywords, country
- **RSS feed URL** for every channel, ready to plug into a monitor
- **Runs light and cheap** — plain HTTP on standard proxies, no browser needed
- Export to Excel, CSV, JSON or HTML; schedule it or run it from the API

### What data can this scraper extract?

| | | |
|---|---|---|
| 📺 Channel title | 🆔 Channel ID | 🔗 Channel & vanity URLs |
| 🏷️ Handle | 👥 Subscribers | 🎬 Video count |
| 📝 Description | 🔑 Keywords | 🌍 Country |
| 🖼️ Avatar URL | 📡 RSS feed URL | 👨‍👧 Family-safe flag |

### How do I use it?

#### ⬇️ Input

```json
{
  "channels": ["@NASA", "@MrBeast", "https://www.youtube.com/@TED"]
}
```

Handles, `UC…` channel IDs and full channel URLs can be mixed freely. If you pass two forms of the
same channel (e.g. a handle and its ID), they're **deduplicated by channel ID** so you're never
charged twice for one channel.

#### ⬆️ Output

One row per channel:

```json
{
  "channel_id": "UCLA_DiR1FfKNvjuUpBHmylQ",
  "title": "NASA",
  "handle": "NASA",
  "channel_url": "https://www.youtube.com/channel/UCLA_DiR1FfKNvjuUpBHmylQ",
  "description": "NASA's mission is to pioneer the future in space exploration…",
  "keywords": "nasa space iss shuttle astronauts planets earth",
  "country": "US",
  "subscribers": 15000000,
  "subscribers_text": "15M subscribers",
  "video_count": 6100,
  "avatar_url": "https://…",
  "rss_url": "https://www.youtube.com/feeds/videos.xml?channel_id=UCLA_DiR1FfKNvjuUpBHmylQ",
  "scraped_at": "2026-07-30T…"
}
```

Subscriber and video counts are returned both as the display text (`"15M subscribers"`) and parsed
to a number (`15000000`).

### Common uses

- **Influencer marketing** — vet channels by subscriber count and country before outreach; the
  description and keywords tell you what a channel is about
- **Agency prospecting** — build creator shortlists by niche
- **Competitor tracking** — monitor rival brand channels over time on a schedule; the RSS URL lets
  you watch for new uploads
- **Media research** — compare channel size, output and focus across a set

### Frequently asked questions

**Do I need a YouTube account or API key?**
No. This reads the public channel page directly — no account, no Data API key, and no daily quota.

**Do I need residential proxies?**
No — it was measured at 14/15 successful fetches on standard Apify datacenter proxies, so the cheap
default is the right one.

**Does it return the channel's videos?**
No, and that's deliberate. YouTube does not include a channel's video list in the channel page in a
scrapeable form — that loads from a separate signed endpoint, which is a different job and belongs
in its own actor. This one does channel profiles properly. Use the `rss_url` for the latest uploads.

**What if a handle doesn't exist?**
It's reported in the log and skipped — one bad handle never fails the run.

**Is it legal?**
It reads publicly visible channel pages with no login. Channel data can still include personal
information, so you're responsible for complying with YouTube's Terms of Service and applicable
privacy law in how you store and use it.

### Your feedback

Hit a bug or want another field? Open an issue on the Issues tab.

# Actor input Schema

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

One per line. Accepts '@NASA', 'NASA', a UC… channel ID, or any youtube.com channel URL.

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

Apify Proxy is enough — measured at 14/15 successful fetches on standard datacenter proxies. Residential is not required.

## `requestConcurrency` (type: `integer`):

How many channels to fetch at once.

## `requestDelayMs` (type: `integer`):

Pacing per worker.

## Actor input object example

```json
{
  "channels": [
    "@NASA",
    "@MrBeast",
    "@TED"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "requestConcurrency": 5,
  "requestDelayMs": 300
}
```

# Actor output Schema

## `channels` (type: `string`):

Title, channel ID, handle, subscribers, video count, description, keywords, country, avatar and RSS feed URL.

# 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": [
        "@NASA",
        "@MrBeast",
        "@TED"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/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": [
        "@NASA",
        "@MrBeast",
        "@TED",
    ] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "@NASA",
    "@MrBeast",
    "@TED"
  ]
}' |
apify call scrapersdelight/youtube-channel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapersdelight/youtube-channel-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/qa6Ca0Gg1GEqEQsRA/builds/fEomnAqULtwdNObib/openapi.json
