# YouTube Channel Statistics & Details (`steadydata/youtube-channel-details`) Actor

Channel statistics for up to 500 YouTube channels per run, by handle, id or URL: name, handle, subscribers, exact total views and video count, country, join date, description, verified badge, external links, avatar and banner. No e-mail addresses. Pay only for delivered channels.

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

## Pricing

$2.50 / 1,000 channel fetcheds

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?

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

## YouTube Channel Statistics & Details (bulk, by handle or id)

Channel statistics for **up to 500 YouTube channels per run**, by handle, channel id or
URL: name, handle, subscriber count, **exact** total views and video count, country,
description, verified or artist badge, external links, avatar and banner. **No e-mail
addresses, ever.** You only pay for channels that are actually delivered.

### Why this scraper

- **Exact numbers where YouTube shows rounded ones.** The channel page says "21.3M
  subscribers" and "1.8K videos". The about panel behind it carries the exact total view
  count (5,618,806,176 for one channel in testing on 13-09-2026) and the exact video
  count (1,850). Both are delivered.
- **Built for lists.** Handles, ids and URLs may be mixed in one list; every row comes
  back flat and in the same shape, ready for a spreadsheet or a database.
- **Lightweight route.** About 28 KB per channel through YouTube's own internal API,
  no browser, no page rendering, which is where the price comes from. The 600 KB page
  YouTube itself loads is never fetched.
- **Only delivered channels are charged.** A handle that does not exist comes back as a
  clear error record at no cost.

Pairs with the YouTube Channel Search Scraper (find channels by topic) and the YouTube
Channel Videos Scraper (their videos) from the same publisher.

### Who this is for

Creator economy research, influencer shortlisting by size and country, competitor
tracking over time, and dataset building for anyone studying YouTube channels.

### Who this is not for

**Read this before you buy.** This actor does not return the channel's business e-mail,
and it never will. YouTube shows that address only after a sign-in and a CAPTCHA, and
channel scrapers that sell it turn a channel record into a person record. If you are
building an outreach list, this is the wrong tool and you should not buy it.

### Input example

```json
{
    "channels": ["@mkbhd", "UCX6OQ3DkcsbYNE6H8uQQuVA", "https://www.youtube.com/@veritasium"],
    "language": "en"
}
```

### Output example

```json
{
    "channelId": "UCBJycsmduvYEL83R_U4JriQ",
    "channelUrl": "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ",
    "handle": "@mkbhd",
    "name": "Marques Brownlee",
    "description": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics | ...",
    "subscriberCount": 21300000,
    "subscriberCountText": "21.3M subscribers",
    "viewCount": 5618806176,
    "videoCount": 1850,
    "country": "United States",
    "joinedDate": "Mar 21, 2008",
    "isVerified": true,
    "isArtist": false,
    "links": [
        {"title": "Twitter", "url": "https://twitter.com/MKBHD"},
        {"title": "Instagram", "url": "https://instagram.com/MKBHD"}
    ],
    "avatarUrl": "https://yt3.ggpht.com/...",
    "bannerUrl": "https://yt3.googleusercontent.com/...",
    "status": "ok"
}
```

A channel that cannot be found produces an error record instead, and is **not** charged:

```json
{
    "input": "@this-channel-does-not-exist",
    "status": "error",
    "errorCode": "NOT_FOUND",
    "error": "No channel behind https://www.youtube.com/@this-channel-does-not-exist"
}
```

Error codes: `INVALID_CHANNEL`, `NOT_FOUND`, `BLOCKED`. `INPUT_TRUNCATED` appears once when your input is longer than this actor accepts.

### Related actors from steadydata

- [youtube-channel-search](https://apify.com/steadydata/youtube-channel-search): find channels by keyword first
- [youtube-channel-videos](https://apify.com/steadydata/youtube-channel-videos): every video of the channel
- [youtube-shorts](https://apify.com/steadydata/youtube-shorts): the Shorts of the channel

### Pricing

Pay per event: one `channel-fetched` event per delivered channel. No charge for channels
that fail, no separate platform-usage surcharge.

### FAQ

**Why is the subscriber count rounded while views are exact?**
Because that is what YouTube publishes: subscribers as "21.3M", total views and video
count as exact figures in the about panel. Both are passed on as published.

**Which links are included?**
The external links the channel owner lists on the about panel (site, socials, shop),
with title and URL. No links are inferred.

**Can I get the business e-mail?**
No. See "Who this is not for".

**Is personal data collected?**
Public channel metadata only: what the channel publishes about itself. No e-mail, no
contact details, no data about the people behind the channel.

**What happens when YouTube changes something?**
Internal routes shift from time to time. The actor is monitored daily and fixed fast, and
while it is broken you are not charged, because only delivered channels cost anything.

# Actor input Schema

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

Channel handles (@mkbhd), channel ids (UC...) or any youtube.com channel URL, one per row, up to 500. A channel that does not exist comes back as a free error record.

## `language` (type: `string`):

Interface language (hl) for the country name and labels, e.g. en, nl, de.

## Actor input object example

```json
{
  "channels": [
    "@mkbhd",
    "UCX6OQ3DkcsbYNE6H8uQQuVA",
    "https://www.youtube.com/@veritasium"
  ],
  "language": "en"
}
```

# 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",
        "UCX6OQ3DkcsbYNE6H8uQQuVA",
        "https://www.youtube.com/@veritasium"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("steadydata/youtube-channel-details").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",
        "UCX6OQ3DkcsbYNE6H8uQQuVA",
        "https://www.youtube.com/@veritasium",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("steadydata/youtube-channel-details").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",
    "UCX6OQ3DkcsbYNE6H8uQQuVA",
    "https://www.youtube.com/@veritasium"
  ]
}' |
apify call steadydata/youtube-channel-details --silent --output-dataset

```

## MCP server setup

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

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/2pwSnXP3bS2QeC0hV/builds/wXkwmDNk5CdSaeJNK/openapi.json
