> ## Documentation Index
> Fetch the complete documentation index at: https://rocketyard.dev/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> These Actors run on the Apify platform and charge per result. Call one with POST https://api.apify.com/v2/acts/rocketyard~<actor-id>/run-sync-get-dataset-items and the header Authorization: Bearer <APIFY_TOKEN>, or connect Apify's MCP server at https://mcp.apify.com?tools=rocketyard/<actor-id>.

# YouTube Channel Scraper - Subscribers, Views & Links

> $0.70 per 1,000 channels, no subscription. Get public YouTube channel data (channel id, handle, name, description and more) as JSON or CSV, no login.

Rocketyard's YouTube Channel Scraper returns the public profile of YouTube channels with their latest uploads and returns one clean record per channel: channel id, handle, name, description, subscriber count, subscriber count text and more. It runs on the Apify platform, so you can start it from the Apify Console, the REST API, an AI agent or a no-code tool.

> [card] [Run it on Apify](https://apify.com/rocketyard/youtube-channel-scraper)
>
> \$0.70 per 1,000 channels, no subscription. You run it with your own Apify account, and Apify handles billing.

## Who it's for

* Influencer marketing agencies and brands vetting creators
* Marketers tracking competitor channels
* Developers and analysts building creator databases
* Researchers studying YouTube channels

## What you can do with it

* Turn a list of channels into a spreadsheet of subscribers, views, video counts, countries and links
* Track channel growth and new uploads every week
* Vet creators before a campaign by their latest videos' views

## How it works

YouTube embeds each channel's data in the HTML of its public About and Videos pages. The Actor fetches those two pages over plain HTTP, without a browser, login or cookies, honours YouTube's robots.txt, and reads the embedded data: subscriber, video and total view counts, the join date and country, the description, the links the channel publishes, its avatar and banner, and its latest uploads with views, duration and age. A channel that cannot be read gets an error item that says why, and is not charged.

## Example output

A real record from a test run on youtube.com on 2026-11-07. Fields the page didn't publish are left out here; the Actor returns them as `null`.

```json theme={null}
{
  "url": "https://www.youtube.com/@Google",
  "type": "Channel",
  "channelId": "UCK8sQmJBp8GCxrOtXWBpyEA",
  "handle": "@Google",
  "name": "Google",
  "description": "Here to help. \n\nReimagining how AI can make your life better and help you explore your creativity, connect with the world, and discover new possibilities. Browse our latest product demos, unboxings, developer roundtables, podcasts, tips, tricks and more. Subscribe for the latest product updates,…",
  "subscriberCount": 14700000,
  "subscriberCountText": "14.7M subscribers",
  "videoCount": 2796,
  "viewCount": 6753156352,
  "joinedDate": "2005-09-18",
  "isVerified": true,
  "isFamilySafe": true,
  "avatarUrl": "https://yt3.googleusercontent.com/bAseQlKvNmjdLQrvYWm_q3QDp8C8YKyYI-nYJewgOkPi0JU1_3X9oFgjrEdzkOlXzLGFxFbnsw=s900-c-k-c0x00ffffff-no-rj",
  "bannerUrl": "https://yt3.googleusercontent.com/H9gGqPJUwNvqOwEZBewLZiW_gV2nFdeQOugRyKv1qclCvIH4ucb6E5z5zYUOZJE4Z2E0KcS6=w2560-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj",
  "keywords": [
    "Google",
    "Technology",
    "Science",
    "Android",
    "Google app",
    "Google Doodles",
    "Google Gemini",
    "Gemini AI",
    "Google AI",
    "Google Chrome",
    "Google Search",
    "YouTube",
    "Google Play Store",
    "AI",
    "Artificial Intelligence",
    "Tech",
    "Innovation",
    "Machine Learning",
    "Quantum Computing",
    "Google I/O",
    "Made by Google",
    "Google Doodle",
    "Team Google",
    "Explained",
    "How-to",
    
```

## Fields

| Field | Description | Filled in latest test |
| - | - | - |
| `channelId` | Channel ID (UC...) | 100% |
| `handle` | Handle (@name) | 100% |
| `name` | Channel name | 100% |
| `description` | Full channel description | 100% |
| `subscriberCount` | Subscribers as a number, from the count YouTube displays (rounded for large channels) | 100% |
| `subscriberCountText` | Subscribers as YouTube displays them ("14.7M subscribers") | 100% |
| `videoCount` | Number of public videos (exact) | 100% |
| `viewCount` | Total channel views (exact) | 100% |
| `joinedDate` | Date the channel was created (YYYY-MM-DD) | 100% |
| `country` | Country the channel set, when public | 0% |
| `isVerified` | `true` when the channel has a verified badge | 100% |
| `isFamilySafe` | YouTube family-safe flag | 100% |
| `avatarUrl` | Largest avatar image | 100% |
| `bannerUrl` | Largest banner image | 100% |
| `keywords` | Channel keywords | 100% |
| `links` | Links the channel publishes (title and URL) | 100% |
| `videos` | Latest uploads: ID, URL, title, views, age and duration | 100% |
| `url` | the page the record came from | 100% |
| `scrapedAt` | ISO timestamp of the extraction | 100% |

A field is filled when the source publishes it. The Actor never guesses a value: a missing field comes back as `null`. "Filled in latest test" is the share of records from the latest test run (youtube.com) that had the field; other sources publish more or less.

## Pricing

You pay $0.70 per 1,000 channels, plus a start fee of $0.00005 per run. Channels that cannot be read produce an error item, which is not charged.

| Channels | Cost |
| - | - |
| 1,000 | \$0.70 |
| 10,000 | \$7.00 |
| 100,000 | \$70.00 |

Set `maxItems` or the run's **Maximum cost per run** in Apify to cap spending.

## API

Call it from any language with the Apify REST API, or with Apify's JavaScript and Python clients. You need an Apify API token.

```bash theme={null}
curl -s -X POST "https://api.apify.com/v2/acts/rocketyard~youtube-channel-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'content-type: application/json' \
  -d '{"startUrls":[{"url":"https://www.youtube.com/@Google"}],"channels":["@NASA"],"maxVideosPerChannel":30}'
```

```js theme={null}
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('rocketyard/youtube-channel-scraper').call({"startUrls":[{"url":"https://www.youtube.com/@Google"}],"channels":["@NASA"],"maxVideosPerChannel":30});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python theme={null}
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("rocketyard/youtube-channel-scraper").call(run_input={"startUrls":[{"url":"https://www.youtube.com/@Google"}],"channels":["@NASA"],"maxVideosPerChannel":30})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

The synchronous endpoint returns the records directly. For long crawls, start the run asynchronously and read the dataset when it finishes.

## MCP

Apify's MCP server exposes this Actor as a tool to Claude, Cursor and other MCP clients. [Open this Actor's MCP setup page](https://mcp.apify.com?tools=rocketyard/youtube-channel-scraper) for setup steps per client, or connect it with this URL:

```text theme={null}
https://mcp.apify.com?tools=rocketyard/youtube-channel-scraper
```

Claude Code:

```bash theme={null}
claude mcp add --transport http apify "https://mcp.apify.com?tools=rocketyard/youtube-channel-scraper"
```

Cursor (`.cursor/mcp.json`) and other clients that read an `mcpServers` config:

```json theme={null}
{
  "mcpServers": {
    "apify": { "url": "https://mcp.apify.com?tools=rocketyard/youtube-channel-scraper" }
  }
}
```

On first use your browser opens so you can sign in to Apify. Then ask the agent, for example: "Turn a list of channels into a spreadsheet of subscribers, views, video counts, countries and links". The tool returns JSON records, and the runs are billed to that Apify account at \$0.70 per 1,000 channels.

## Automation

n8n, Make and Zapier all connect to Apify. Each example below uses Actor `rocketyard/youtube-channel-scraper` with this input:

```json theme={null}
{
  "startUrls": [
    {
      "url": "https://www.youtube.com/@Google"
    }
  ],
  "channels": [
    "@NASA"
  ],
  "maxVideosPerChannel": 30
}
```

### n8n

Copy this workflow and paste it onto an n8n canvas. It runs the Actor every morning through an HTTP Request node and returns the records as n8n items.

```json theme={null}
{
  "name": "YouTube Channel Scraper daily",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "days",
              "daysInterval": 1,
              "triggerAtHour": 7
            }
          ]
        }
      },
      "id": "c1f6a2d0-4a57-4b5e-9d7a-0a1b2c3d4e01",
      "name": "Every day at 07:00",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        0,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.apify.com/v2/acts/rocketyard~youtube-channel-scraper/run-sync-get-dataset-items",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "{\n  \"startUrls\": [\n    {\n      \"url\": \"https://www.youtube.com/@Google\"\n    }\n  ],\n  \"channels\": [\n    \"@NASA\"\n  ],\n  \"maxVideosPerChannel\": 30\n}",
        "options": {
          "timeout": 300000
        }
      },
      "id": "c1f6a2d0-4a57-4b5e-9d7a-0a1b2c3d4e02",
      "name": "Run YouTube Channel Scraper",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        260,
        0
      ],
      "credentials": {
        "httpBearerAuth": {
          "name": "Apify API token"
        }
      }
    }
  ],
  "connections": {
    "Every day at 07:00": {
      "main": [
        [
          {
            "node": "Run YouTube Channel Scraper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {}
}
```

Then open the HTTP Request node and create an **HTTP Bearer Auth** credential named `Apify API token`, with your token from [Apify Console](https://console.apify.com/settings/integrations) as the bearer token. The token stays in n8n's credential store; the workflow only names the credential. Change the input in the node's JSON body to your own.

The node waits up to 300 seconds, which is also the limit of Apify's synchronous endpoint. An input that yields nothing comes back as an item with an `error` field, which you can drop with a Filter node. Apify also publishes a community node, `@apify/n8n-nodes-apify`, with a **Run an Actor and get dataset** operation.

### Make

1. Add Apify's **Run an Actor** module and connect your Apify account.
2. Choose `rocketyard/youtube-channel-scraper`, paste the input above and set **Run synchronously** to **Yes**. Make limits how long a synchronous run can take, depending on your plan. For longer runs, start the scenario from **Watch Actor Runs** instead.
3. Add **Get Dataset Items** with the run's default dataset ID.
4. Send the items wherever you need them, for example with Google Sheets **Add a Row**, mapping `channelId`, `handle`, `name` and `description`.

### Zapier

1. Add Apify's **Run Actor** action, connect your Apify account, choose `rocketyard/youtube-channel-scraper` and paste the input above.
2. Zapier stops synchronous runs after 30 seconds. For anything larger than a small run, let the run continue in the background and start a second Zap from the **Finished Actor run** trigger.
3. Add **Fetch dataset items** with the run's dataset ID, then map `channelId`, `handle`, `name` and `description` into your app.
4. Test with a small input and check that the Zap handles every record before you turn it on.

## Limits

* The video list holds the latest uploads YouTube shows on the channel's Videos tab (up to 30). Older uploads load through YouTube's internal API, which robots.txt disallows.
* Subscriber counts are as YouTube displays them, rounded for large channels (14.7M). Video and total view counts are exact.
* Contact emails that some channels show only after a sign-in and a CAPTCHA are never collected.

## FAQ

### How much does it cost?

$0.70 per 1,000 channels plus $0.00005 per run, billed by Apify. 10,000 channels cost \$7.00. There is no subscription, and you can cap any run with **Maximum cost per run**.

Your Apify plan sets your discount tier (Platinum and Diamond are enterprise tiers):

| Tier | Per 1,000 channels |
| - | - |
| Free | \$0.70 |
| Bronze | \$0.70 |
| Silver | \$0.56 |
| Gold | \$0.46 |
| Platinum | \$0.46 |
| Diamond | \$0.46 |

### How do I call it from the API?

One request starts a run and returns its results, using your [Apify API token](https://console.apify.com/settings/integrations):

```bash theme={null}
curl -X POST "https://api.apify.com/v2/acts/rocketyard~youtube-channel-scraper/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"startUrls":[{"url":"https://www.youtube.com/@Google"}],"channels":["@NASA"],"maxVideosPerChannel":30}'
```

### What happens when a URL fails?

The dataset gets one free error item for it, with a code and the reason, and the other inputs in the run carry on. [Error codes](https://rocketyard.dev/errors.md) explains each code, whether a retry helps and what to do.

### Which channels does it work on?

Any public YouTube channel: @handle URLs, /channel/UC... IDs, legacy /c/ and /user/ URLs, or just the handle or ID.

### What happens when a field is missing?

The field comes back as `null`. The Actor reports what the source publishes and never fills in guesses.

### Is it allowed to scrape this data?

The Actor reads only public pages that YouTube's robots.txt allows, without logging in, without cookies and without bypassing consent or bot checks. It returns no comment text and no data about commenters or viewers. You are responsible for how you use the data under YouTube's terms and the law (for example copyright and GDPR).

### Can I use it from an AI agent?

Yes. Connect Apify's MCP server as shown in [MCP](#mcp), and the agent can call the Actor as a tool.

## Alternatives

See [how it compares with other youtube channel scrapers](https://rocketyard.dev/youtube-channel-scraper-alternatives.md) on price, users and run success, from Apify Store data. Need a field or site behaviour that isn't covered? Open an issue on the [Actor page](https://apify.com/rocketyard/youtube-channel-scraper).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.