# YouTube Channel Scraper – Profiles, Counts & Links (`scrapingmonkey/youtube-channel-details-scraper`) Actor

Extract public YouTube channel profiles from handles or IDs. Get descriptions, subscriber counts, branding, links, and available About details in one row per channel.

- **URL**: https://apify.com/scrapingmonkey/youtube-channel-details-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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?

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

Turn known YouTube handles or channel IDs into a public channel directory. **YouTube Channel Scraper** returns names, descriptions, subscriber and video counts, avatar and banner images, and available About information in one row per submitted channel.

Use it to qualify creators, enrich channel records, or compare public profile snapshots. No YouTube account or cookies are required.

| At a glance | Details |
| --- | --- |
| 📥 Input | Channel handles or UC IDs |
| 📤 Output | Channel identity, description, audience figures, branding, links, and available About details |
| 🔐 Login required | No |
| 📄 Collection | One metadata lookup per input |
| 💾 Delivery | One row per channel result, in one table |

### What the YouTube channel details scraper collects 🔎

The Actor combines the channel's public profile with its About information when available.

- Channel ID, handle, name, canonical URL, and vanity URL
- Description, keywords, external links, and RSS feed URL
- Subscriber, video, and view counts with the original displayed labels
- Avatar and banner URLs with available image sizes
- Country, displayed join date, and exposed country-availability metadata
- Verification, family-safety, and subscriber-count visibility flags

Counts describe the channel. The output does not contain the channel's individual videos or subscriber identities.

### How to scrape YouTube channel details 🚀

1. Prepare the channel handles or IDs you want to collect.
2. Add them to `inputList`, one value per item.
3. Start the Actor.
4. Check `status` and export the fields needed for your workflow.

```json
{
  "inputList": [
    "NASA"
  ]
}
```

### YouTube channel details data fields and output 📦

| Field group | Included data |
| --- | --- |
| Identity | ID, handle, name, canonical and vanity URLs |
| Profile | Description, keywords, external links, and RSS URL |
| Audience | Subscriber, video, and view counts with displayed text |
| Branding | Avatar and banner URLs with size variants |
| About and flags | Country, join-date text, availability metadata, and account flags |

Complete illustrative success item. The fictional values below demonstrate the output and are not a live result:

```json
{
  "input": "TrailJournal",
  "status": "success",
  "id": "UCabcdefghijklmnopqrstuv",
  "handle": "@TrailJournal",
  "name": "Trail Journal",
  "url": "https://www.youtube.com/channel/UCabcdefghijklmnopqrstuv",
  "canonical_url": "https://www.youtube.com/@TrailJournal",
  "vanity_url": "https://www.youtube.com/@TrailJournal",
  "description": "Weekend walks, route guides, and quiet places.",
  "avatar_url": "https://example.com/trail-large.jpg",
  "avatar_thumbnails.url": [
    "https://example.com/trail-small.jpg",
    "https://example.com/trail-large.jpg"
  ],
  "avatar_thumbnails.width": [
    160,
    800
  ],
  "avatar_thumbnails.height": [
    160,
    800
  ],
  "banner_url": "https://example.com/trail-large.jpg",
  "banner_thumbnails.url": [
    "https://example.com/trail-small.jpg",
    "https://example.com/trail-large.jpg"
  ],
  "banner_thumbnails.width": [
    1060,
    2120
  ],
  "banner_thumbnails.height": [
    175,
    350
  ],
  "subscribers": 12000,
  "subscribers_text": "12K subscribers",
  "videos_count": 25,
  "videos_count_text": "25 videos",
  "views": 500000,
  "views_text": "500K views",
  "country": "United States",
  "joined_date": "Joined Jan 1, 2020",
  "keywords": [
    "hiking",
    "trail guides"
  ],
  "keywords_raw": "hiking \"trail guides\"",
  "external_links.title": [
    "Website"
  ],
  "external_links.url": [
    "https://example.com"
  ],
  "external_links.display_url": [
    "example.com"
  ],
  "external_links.icon_url": [
    "https://example.com/trail-large.jpg"
  ],
  "rss_url": "https://www.youtube.com/feeds/videos.xml?channel_id=UCabcdefghijklmnopqrstuv",
  "available_countries": [
    "US",
    "GB"
  ],
  "is_verified": false,
  "is_family_safe": true,
  "is_subscriber_count_hidden": false
}
```

The table and JSON use the same flat field names, including literal dotted keys. Avatar, banner, and external-link fields use aligned lists. For example, the first external\_links.title matches the first external\_links.url. Keywords and available countries remain ordinary ordered lists.

Optional values can be `null`, empty strings, `false`, or empty lists. Missing counts are normally `null`; numeric values parsed from abbreviated labels remain approximate. Failed rows preserve `input` and `status` and set the result-data fields to `null`.

### Input requirements and coverage ⚙️

| Parameter | Type | Default | Rules |
| --- | --- | --- | --- |
| `inputList` | array of strings | Required | One or more channel handles, with or without @, or UC channel IDs. Full channel URLs are not accepted. No fixed batch-size maximum. |

Handles allow 1–100 Unicode word characters, periods, hyphens, or middle dots after an optional @. A channel ID must be UC followed by 22 letters, digits, underscores, or hyphens. Other valid values are treated as handles. Leading and trailing spaces are removed.

There is no pagination parameter. Each input starts its own lookup, so repeating an input can produce another row.

### YouTube channel details use cases 🎯

#### Creator qualification

Compare channel descriptions, subscriber figures, country, and branding when reviewing a shortlist of creators.

#### Directory enrichment

Add channel IDs, canonical links, public websites, and RSS URLs to records that already contain handles.

#### Branding audits

Review channel names, descriptions, avatar images, and banners across a portfolio of known accounts.

#### Profile snapshots

Schedule a saved input list and compare exports for changes in public profile text and audience figures.

### Pricing and billable channel rows 💰

Check the Actor's **Pricing** tab for the current pricing model and rate.

Under dataset-item pricing, each saved success or failed row can be billable. Automatic retry attempts do not independently add rows. A successful lookup saves one metadata row for its input. Invalid or unavailable inputs save failed rows, and repeated input entries can each produce a result.

Image variants and other list fields remain in their parent row and do not create separate dataset items.

### YouTube Channel Details Scraper API and integrations 🔌

Use the Actor ID from the **API** tab as $ACTOR\_ID and your Apify token as $APIFY\_TOKEN.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["NASA"]}'
```

The request starts a run. Retrieve the dataset when it finishes, or use a completion webhook to send results to your application. Apify schedules can repeat collection; exports and integrations support JSON, CSV, Excel, Google Sheets, Make, and Zapier workflows.

### Reliability and limits ⚠️

Up to five requests run concurrently, with automatic retries for temporary failures. Invalid, unavailable, or unresolved inputs are visible as failed rows. YouTube can restrict public access or omit fields.

About fields depend on the information YouTube exposes. If a required About request fails, the channel can produce a failed row even when its main page is accessible. A hidden or missing subscriber label produces a null numeric count; the visibility flag reflects the absence of that label. Displayed join dates are preserved as text, and abbreviated counts such as 12K are converted estimates, not exact private analytics.

### Frequently asked questions ❓

#### Can I submit a full channel URL?

No. Use a handle with or without @, or a UC channel ID.

#### Does it return the channel's videos?

No. It returns a channel profile and aggregate counts. Use Channel Videos, Shorts, or Streams for individual items.

#### Can it extract an email address?

The output includes published external links but has no dedicated email or phone field.

#### Are subscriber counts exact?

They are parsed from the public displayed label. A label such as 12K is a rounded figure, and hidden or missing counts can be null.

#### Why are About fields missing?

YouTube may omit country, join date, views, or external links from the accessible channel data.

### Support, responsible use, and related actors 🛟

For support, share the run ID and a safe public example input through the Actor's support channel. Keep tokens and credentials out of messages.

Use public data and media within the privacy, copyright, and other obligations that apply to your project.

# Actor input Schema

## `inputList` (type: `array`):

Add channel handles or UC channel IDs, one per item. You may include @ before a handle. Do not enter channel links.

## Actor input object example

```json
{
  "inputList": [
    "NASA"
  ]
}
```

# Actor output Schema

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

Success and failed rows. Check the status column.

# 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 = {
    "inputList": [
        "NASA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/youtube-channel-details-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 = { "inputList": ["NASA"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/youtube-channel-details-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 '{
  "inputList": [
    "NASA"
  ]
}' |
apify call scrapingmonkey/youtube-channel-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/youtube-channel-details-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/DjOSfgKmyFExEr2wz/builds/9cHcH3nEkrLyiV2Cq/openapi.json
