# YouTube Channel Stats & Growth Tracker — Views, Subs, Uploads (`northbell/youtube-channel-growth-tracker`) Actor

YouTube channel stats with growth: subscribers, exact total views and video count, join date, country, links and the latest uploads (views, age, length). Run it again or on a schedule to get views per day, new videos and subscriber changes since the last run. @handles, URLs or channel IDs. No login.

- **URL**: https://apify.com/northbell/youtube-channel-growth-tracker.md
- **Developed by:** [Northbell](https://apify.com/northbell) (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

from $2.00 / 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 Stats & Growth Tracker

Give it a list of YouTube channels — `@handles`, channel URLs or `UC…` IDs — and get one clean row per channel: **subscribers, exact total views, exact video count, join date, country, links** and a summary of the **latest uploads** (views, age, length). **$2.50 per 1,000 channels**, no login, no API key.

Run it again — or put it on a daily schedule — and every row also tells you **what changed since the last run**: views added, new videos, subscriber change, and **views per day** measured since the first run. That is the number creators, agencies and brands actually compare, and YouTube only shows you today's totals.

### What you get

| Field | What it is |
|---|---|
| `name`, `handle`, `channelId`, `url`, `verified` | the channel |
| `subscribers`, `subscribersText` | subscribers as YouTube shows them — **YouTube rounds this** (21.4M), so `subscribersRounded` is always `true` |
| `totalViews`, `videoCount` | **exact** lifetime views and number of public videos, from the channel's About panel |
| `country`, `joinedAt`, `links` | where the channel says it is, when it started, and its external links (Instagram, website…) |
| `description` | the channel description with **email addresses and phone numbers removed** |
| `latestUploadAgo`, `latestUploadDaysAgo`, `uploadsLast30Days`, `uploadsLast30DaysIsMinimum` | how active the channel is (`IsMinimum` is `true` when it posted more than the videos read — raise *Latest uploads to read*) |
| `averageViewsRecent`, `medianViewsRecent`, `recentVideos` | views of the latest uploads, and the list itself (`videoId`, `title`, `views`, `publishedAgo`, `duration`) |
| `viewsAddedSinceLastRun`, `videosAddedSinceLastRun`, `subscribersChangeSinceLastRun`, `hoursSinceLastRun` | the change since your previous run (`null` on the first run) |
| `viewsPerDay`, `videosPerMonth`, `growthReliable`, `growthNote`, `firstSeenAt`, `observations` | growth measured from the first time this channel was read (after 20 hours) |

### Use it for

- **Influencer and sponsor research** — compare channels by real momentum (views per day, upload rhythm, median views of recent videos), not just subscriber totals
- **Competitor tracking** — schedule it daily for your niche and see who is accelerating
- **Your own channels and clients** — a growth log with history you own, exportable to Sheets or your BI tool

### Input

```json
{ "channels": ["@mkbhd", "https://www.youtube.com/@fireship", "UCX6OQ3DkcsbYNE6H8uQQuVA"], "recentVideos": 10 }
```

Growth is remembered per channel in a named key-value store in your Apify account, so the second run of the same Actor already shows changes. Schedule it (Apify → Schedules) for a daily history.

### Pricing

**$2.50 per 1,000 channels**, plus $0.01 per run. Error rows (unknown or removed channels) are free. The $0.01 run-start fee is the one charge every run pays, even one that returns nothing.

### Notes

- Public data only: what anyone sees on the channel page without signing in. No emails or phone numbers are returned — they are removed from descriptions.
- YouTube rounds subscriber counts to three digits, so for small day-to-day changes watch `viewsAddedSinceLastRun` and `viewsPerDay`, which are exact.
- Per-video statistics are read from the channel's Videos tab (views as YouTube shows them there, e.g. "9.4M views").

To track **where videos rank for a keyword**, see [YouTube Search Rank Tracker](https://apify.com/northbell/youtube-search-rank-tracker).

### For AI agents

`{"channels": ["@mkbhd"], "recentVideos": 5}` returns one row with subscribers, exact total views and the 5 latest uploads. Rows have `type`: `channel` or `error`.

# Actor input Schema

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

One channel per line: @handle, a channel URL (youtube.com/@name, /channel/UC…, /c/name, /user/name) or a channel ID (UC…).

## `recentVideos` (type: `integer`):

How many of the newest videos to read for each channel (views, age, length), used for the recent-upload summary. 0 skips them and makes the run faster. Read 30 to count uploads in the last 30 days for busy channels.

## Actor input object example

```json
{
  "channels": [
    "@mkbhd",
    "https://www.youtube.com/@fireship"
  ],
  "recentVideos": 10
}
```

# Actor output Schema

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

Subscribers, exact total views and video count, recent uploads and growth since the last run.

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

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

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

```

## MCP server setup

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

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/1soPUVaG55EsGMZ8m/builds/k1Yz1DRLAIVszQbgK/openapi.json
