# YouTube Channel Info $1/1k: Subscribers, Links, Country (`wiseus-labs/youtube-channel-info-scraper`) Actor

$1.00 per 1,000 channels, failed inputs are free. Subscribers, views, video count, join date, country and external links for any YouTube channel.

- **URL**: https://apify.com/wiseus-labs/youtube-channel-info-scraper.md
- **Developed by:** [Wiseus Labs](https://apify.com/wiseus-labs) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 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 Info Scraper

Get YouTube channel profiles in bulk for $1.00 per 1,000 channels. You get one row per channel with subscribers, total views, video count, join date, country, external links, description, keywords, avatar, banner and verified badges. Paste channel URLs, @handles or channel IDs, and export the results to CSV, Excel or JSON.

### 📦 Example output

A real row for `@mkbhd` (the description is shortened here):

```json
{
  "channelId": "UCBJycsmduvYEL83R_U4JriQ",
  "handle": "@mkbhd",
  "name": "Marques Brownlee",
  "url": "https://www.youtube.com/channel/UCBJycsmduvYEL83R_U4JriQ",
  "description": "MKBHD: Quality Tech Videos | YouTuber | Geek | Consumer Electronics | Tech Head | Internet Personality!...",
  "subscriberCount": 21400000,
  "subscriberCountText": "21.4M subscribers",
  "videoCount": 1863,
  "viewCount": 5860083118,
  "joinedDate": "2008-03-21",
  "country": "United States",
  "keywords": [
    "MKBHD",
    "MarquesBrownlee",
    "Marques",
    "Brownlee"
  ],
  "links": [
    {"title": "Twitter", "url": "http://twitter.com/MKBHD"},
    {"title": "Instagram", "url": "http://instagram.com/MKBHD"},
    {"title": "The Studio", "url": "http://youtube.com/c/TheStudio"},
    {"title": "Reddit", "url": "http://reddit.com/r/MKBHD"},
    {"title": "Discord", "url": "http://discord.gg/MKBHD"}
  ],
  "avatar": "https://yt3.googleusercontent.com/qu4TmIaYUlS41-dJ9gZ7DUR3nilvmB5_11i6OKSdvNnBNiyOusZP1bMN6ICnuxtjFBb6ioKgRQ=s160-c-k-c0x00ffffff-no-rj",
  "banner": "https://yt3.googleusercontent.com/zi_48HwHU4s0Hnb6tZuvRzTfCPHrLEnrtIMDLzMauDEyDmURh9JZ4wrNd3lKr7m9uVnT4YjYKw=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
  "isVerified": true,
  "isVerifiedArtist": false,
  "input": "@mkbhd",
  "status": "ok",
  "reason": null
}
```

### ⌨️ Input

Add channels in any of these forms:

- Channel URL: `https://www.youtube.com/@mkbhd` or `https://www.youtube.com/channel/UC...`
- Handle: `@NASA`
- Channel ID: `UCBJycsmduvYEL83R_U4JriQ`
- Old custom URL: `https://www.youtube.com/c/veritasium`
- Old user URL: `https://www.youtube.com/user/PewDiePie`

Example input:

```json
{
  "channels": [
    "https://www.youtube.com/@mkbhd",
    "@NASA",
    "https://www.youtube.com/c/veritasium"
  ],
  "maxConcurrency": 10
}
```

| Input | Description | Default |
| --- | --- | --- |
| `channels` | List of channels in any of the forms above. If empty, we use `@mkbhd` as an example. | empty |
| `maxConcurrency` | How many channels we process at the same time, from 1 to 20. | 10 |

### 📋 Output fields

Every row has the same 20 fields, so CSV and Excel exports have clean columns. A value the channel does not show is `null`. Lists are empty when there is nothing to show.

| Field | Type | Description |
| --- | --- | --- |
| `channelId` | string | Channel ID, starts with `UC` |
| `handle` | string | Channel handle as YouTube shows it, like `@mkbhd` |
| `name` | string | Channel name |
| `url` | string | Channel URL |
| `description` | string | Full channel description, as written by the channel |
| `subscriberCount` | integer | Subscribers as a number, made from the rounded text |
| `subscriberCountText` | string | Subscribers as YouTube shows them, like `21.4M subscribers` |
| `videoCount` | integer | Number of public videos |
| `viewCount` | integer | Total views of the channel |
| `joinedDate` | string | Date the channel was created, `YYYY-MM-DD` |
| `country` | string | Country set by the channel |
| `keywords` | list of strings | Channel keywords |
| `links` | list of objects | Links on the channel page, each with `title` and `url` (the real target address) |
| `avatar` | string | Avatar image URL, largest size |
| `banner` | string | Banner image URL, largest size |
| `isVerified` | boolean | Channel has the verified check mark |
| `isVerifiedArtist` | boolean | Channel has the Official Artist Channel badge (music note) |
| `input` | string | The input this row belongs to |
| `status` | string | Row status, see below |
| `reason` | string | Short reason when the status is not `ok` |

Status values:

| Status | Meaning |
| --- | --- |
| `ok` | Channel found, all fields filled where YouTube shows them |
| `channel_not_found` | The channel does not exist or is not available |
| `invalid_input` | The input is not a YouTube channel URL, handle or ID |
| `error` | The channel could not be loaded this time. Try it again later. |
| `run_summary` | Added only when no channel was found in the run, with the most common reason |

### 💰 Pricing and cost

You pay only for channels we find. Inputs that are not found, invalid or failed are free. If the same channel is in your list more than once, in any form, you get one row and pay for it once.

| Item | Price |
| --- | --- |
| Channel, Free plan | $1.00 per 1,000 channels |
| Channel, Starter plan | $0.80 per 1,000 channels |
| Channel, Scale plan | $0.65 per 1,000 channels |
| Channel, Business plan | $0.50 per 1,000 channels |
| Start fee | $0.00005 per run |

Example: 1,000 channels on the Free plan cost $1.00 plus the start fee.

You can set a maximum cost per run. When it is reached, the run stops cleanly and you keep all rows collected so far.

Tested on 960+ channels in one run in under 80 seconds.

### 🎯 Common uses

- Influencer research: check the size and activity of many channels at once.
- YouTube channel statistics in bulk: subscribers, views and video counts for a whole list.
- Subscriber count checker for one channel or thousands.
- Competitor analysis: compare channels in your niche side by side.
- Find a channel's website and social links.
- Export YouTube channel data to CSV, Excel or JSON.

### ❓ FAQ

**Why are subscriber counts rounded?**
YouTube shows subscriber counts rounded on public pages, for example 21.4M. We give you that text in `subscriberCountText` and the same value as a number in `subscriberCount`.

**Why is `subscriberCount` empty for some channels?**
The channel hides its subscriber count, so YouTube does not show it.

**Do I need a YouTube API key?**
No. Add your channels and start the run.

**What happens with wrong inputs?**
Every input gets a row, except repeats of a channel that is already in your list. A wrong or unknown input gets a free row with a `status` and a short `reason`.

**Is there a channel search by keyword?**
Not in this Actor. It works with the channels you give it.

### 💬 Support

Found a problem or need a field we do not have? Open an issue on the Issues tab. We answer fast.

Made by Wiseus Labs.

# Actor input Schema

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

YouTube channels to look up. Use a channel URL, an @handle, a channel ID (UC...), or an old /c/ or /user/ URL. One row per channel.

## `maxConcurrency` (type: `integer`):

How many channels are processed at the same time.

## Actor input object example

```json
{
  "channels": [
    "https://www.youtube.com/@mkbhd",
    "@NASA",
    "https://www.youtube.com/c/veritasium"
  ],
  "maxConcurrency": 10
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `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": [
        "https://www.youtube.com/@mkbhd",
        "@NASA",
        "https://www.youtube.com/c/veritasium"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("wiseus-labs/youtube-channel-info-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": [
        "https://www.youtube.com/@mkbhd",
        "@NASA",
        "https://www.youtube.com/c/veritasium",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("wiseus-labs/youtube-channel-info-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": [
    "https://www.youtube.com/@mkbhd",
    "@NASA",
    "https://www.youtube.com/c/veritasium"
  ]
}' |
apify call wiseus-labs/youtube-channel-info-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wiseus-labs/youtube-channel-info-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/ZChtEKjR3RdfsGa9G/builds/AzapffI5lmobupHsX/openapi.json
