# YouTube Channel Audit — Growth, Engagement & Est. Ad Revenue (`hebaabdalaziz/youtube-channel-audit-scraper`) Actor

Vet a YouTube channel in seconds: subscribers, exact lifetime views, upload cadence, engagement rate, monetization eligibility, and an estimated monthly ad revenue range, plus per-video stats for its recent uploads.

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

## Pricing

from $350.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.

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 Audit — Growth, Engagement & Estimated Ad Revenue 📈

Vet a YouTube channel in one click. This Actor turns a channel handle into a **ready-made creator report**: subscribers, exact lifetime views, upload cadence, real engagement rate, YouTube Partner Program eligibility, and an estimated monthly ad-revenue range — plus full stats for its recent uploads.

No YouTube Data API key needed, no quota limits, no browser required. Fast and cheap to run because it reads the same data YouTube already renders on every channel page.

### What you get, per channel

- **Subscribers (approx.), exact lifetime view count, total videos, and channel age** since it joined YouTube
- **Country, verified badge, and full channel description**
- **Engagement rate** — average likes as a percentage of views across the channel's recent uploads
- **Upload frequency** (videos per week) and days since the last upload
- **Monetization eligibility** — whether the channel clears the public 1,000-subscriber threshold
- **Estimated monthly ad revenue**, as a low–high range you control via the RPM input, built from the channel's real recent view rate and upload pace
- **A risk / authenticity level** (low / medium / high) with plain-language reasons — unnaturally fast subscriber growth, weak engagement for the channel's size, long gaps between uploads, and more
- The **full list of sampled videos** — title, exact views, approximate likes, publish date, duration, category, and tags

### Who this is for

- **Brands and agencies** vetting YouTube creators before a sponsorship or ad placement
- **Talent managers** benchmarking their own channels against competitors
- **Buyers of channels or MCN networks** doing quick due diligence on growth and monetization health
- **Marketers** shortlisting channels for a campaign by genuine performance, not subscriber count alone
- **Creators** checking their own numbers or a collaborator's before agreeing to a deal

### How to use it

1. Paste one or more channel handles, `@handles`, or full channel URLs, e.g. `mkbhd`, `@mkbhd`, or `https://www.youtube.com/@mkbhd`.
2. Set how many recent uploads to sample (10 is a good default).
3. Optionally adjust the RPM range used for the revenue estimate — the default ($0.50–$4 per 1,000 views) is a broad, niche-agnostic range; narrow it if you know the channel's content category.
4. Click **Start**. Each channel becomes one row, with its sampled videos nested inside.

### Output example

```json
{
  "handle": "@mkbhd",
  "channelUrl": "https://www.youtube.com/@mkbhd",
  "title": "Marques Brownlee",
  "verified": true,
  "country": "United States",
  "subscribers": 21200000,
  "totalViews": 5567706915,
  "totalVideos": 1846,
  "channelAgeDays": 6744,
  "engagementRatePct": 2.11,
  "uploadsPerWeek": 1.17,
  "monetizationEligible": true,
  "estimatedMonthlyRevenueLowUsd": 10390.41,
  "estimatedMonthlyRevenueHighUsd": 83123.27,
  "riskLevel": "low",
  "riskFlags": [],
  "videos": [ { "title": "...", "views": 2677485, "likesApprox": 53000, "publishedAt": "2026-09-05T21:18:49.000Z" } ]
}
```

### About the estimates

- **Subscriber counts and video like counts** are approximate, the same rounded figures ("21.2M", "53K") YouTube itself shows publicly — YouTube stopped exposing exact subscriber counts to everyone in 2019, so no tool can get more precise than this.
- **View counts and the total lifetime view count are exact**, pulled straight from YouTube's own numbers.
- **The ad revenue estimate is exactly that: an estimate.** It comes from real recent view volume and upload pace, multiplied by an RPM (revenue per 1,000 views) range you set. Actual creator earnings depend on audience country, niche, ad formats, and YouTube's cut, none of which are public. Use it to compare channels relative to each other, not as a guaranteed number.
- **Monetization eligibility** checks only the public 1,000-subscriber requirement. The YouTube Partner Program also requires either 4,000 watch hours in the past year or 10 million Shorts views in 90 days, which YouTube does not expose publicly, so a channel can pass this check and still not be monetized.

### Reliability

This Actor reads channel and video pages directly, the same way any visitor's browser does, with no login, no API key, and no browser automation needed on our side. That keeps it fast and inexpensive to run. A channel that can't be found returns a clear `status: "not_found"` row instead of failing the whole job, so one bad handle never costs you the rest of your list.

### Legal note

This Actor collects only information YouTube shows publicly to any visitor. Revenue figures are estimates for informational purposes only and are not financial advice or a guarantee of actual earnings. You are responsible for using the data in line with applicable law and YouTube's terms. This Actor is not affiliated with or endorsed by YouTube or Google.

### Questions or a metric you need?

Open an issue on the **Issues** tab. Requests for extra scoring signals, niche-specific RPM presets, or channel-comparison views are welcome.

# Actor input Schema

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

Channel handles, @handles, channel URLs, or /channel/UC... IDs. One audit per channel, e.g. `mkbhd`, `@mkbhd`, or `https://www.youtube.com/@mkbhd`.

## `videosPerChannel` (type: `integer`):

How many of the channel's most recent uploads to analyse for engagement and upload cadence.

## `includeVideoDetails` (type: `boolean`):

Include the list of sampled videos (title, views, likes, published date, duration, category) inside each channel's result.

## `estimatedRpmUsd` (type: `object`):

The low/high revenue-per-mille range used to estimate monthly ad earnings. Defaults are a broad, conservative-to-generous range that fits most niches; narrow it if you know the channel's niche.

## Actor input object example

```json
{
  "channels": [
    "mkbhd"
  ],
  "videosPerChannel": 10,
  "includeVideoDetails": true,
  "estimatedRpmUsd": {
    "low": 0.5,
    "high": 4
  }
}
```

# Actor output Schema

## `audits` (type: `string`):

One row per audited YouTube channel, with growth, engagement, monetization status, and estimated revenue.

# 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"
    ],
    "estimatedRpmUsd": {
        "low": 0.5,
        "high": 4
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("hebaabdalaziz/youtube-channel-audit-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": ["mkbhd"],
    "estimatedRpmUsd": {
        "low": 0.5,
        "high": 4,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("hebaabdalaziz/youtube-channel-audit-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": [
    "mkbhd"
  ],
  "estimatedRpmUsd": {
    "low": 0.5,
    "high": 4
  }
}' |
apify call hebaabdalaziz/youtube-channel-audit-scraper --silent --output-dataset

```

## MCP server setup

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