# YouTube Channel & Influencer Engagement Rate: Stats Scraper (`vant47/youtube-influencer-engagement-rate`) Actor

Get the engagement rate (likes, comments and views vs subscribers) for a list of YouTube channels or influencers, e.g. @mkbhd, before paying for a sponsorship. $0.02 per channel, no login. Verdict and grade vs its size, avg views, uploads, Shorts split, growth, email, sponsor price.

- **URL**: https://apify.com/vant47/youtube-influencer-engagement-rate.md
- **Developed by:** [fortbrand](https://apify.com/vant47) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $16.00 / 1,000 youtube 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 & Influencer Engagement Rate: Stats Scraper

For brands, agencies and creator-marketing teams who want to know, before they pay a YouTuber, whether the channel's audience really watches and engages.

**$0.02 per channel. Checking 50 creators costs $1.** No login, no API key, no YouTube account. Paste @handles or channel links; each channel comes back as one row that starts with a plain verdict such as **"Strong engagement for its size (A-)"**, then the numbers behind it.

Subscriber counts are easy to fake and easy to misread. This Actor measures likes, comments and views on each channel's newest videos (20 by default) and compares them with what is normal for channels of the same size: one sortable table instead of an afternoon of clicking through channel pages.

### What you get for each channel

| Field | What it tells you |
|---|---|
| `verdict`, `grade`, `score` | Plain answer first: "Strong engagement for its size (A-)", a letter grade from A+ to F and a 0 to 100 score |
| `summary` | One sentence with the key numbers and how they compare with the norm |
| `engagementRate` | Likes plus comments divided by views, the median across recent videos (%) |
| `engagementNormForSize`, `engagementPercentileForSize` | The typical engagement rate for channels of its size, and where this channel sits (0 to 100) |
| `engagementRateBySubscribers` | Average likes plus comments per video divided by subscribers (%) |
| `viewsToSubscribersPct`, `viewsToSubscribersNormForSize`, `reachPercentileForSize` | Median views per video as a share of subscribers: how much of the audience still watches |
| `subscribers`, `sizeTier`, `totalViews`, `videoCount`, `joinedDate`, `channelAgeYears`, `verified` | Channel basics |
| `avgViews`, `medianViews`, `avgLikes`, `avgComments`, `commentsPer1000Views` | Averages over the recent videos |
| `longForm`, `shorts`, `shortsSharePct`, `measuredOn` | Separate numbers for long videos and Shorts, and the Shorts share of recent uploads |
| `uploadsPerWeek`, `uploadsLast30Days`, `uploadsLast90Days`, `daysSinceLastUpload`, `lastUploadDate`, `medianDaysBetweenUploads`, `uploadConsistency` | Upload cadence and how regular it is |
| `growthSignal`, `growthRatio`, `growthNote` | Growing, steady or declining: recent videos' median views against the uploads before them |
| `topVideos`, `recentVideos` | The best performers and every analyzed video with views, likes, comments and engagement |
| `redFlags`, `strengths` | What to check before you pay (low reach, inactivity, suspiciously high engagement, comments off) and what stands out |
| `businessEmail`, `emailSource`, `emailBehindSignIn` | A business email when the creator lists one in the channel or video descriptions |
| `website`, `instagram`, `tiktok`, `twitter`, `facebook`, `twitch`, `links` | The creator's links |
| `country`, `language`, `mainCategory` | Where the channel says it is based, the language spoken in its videos and its main category |
| `sponsorPriceLowUsd`, `sponsorPriceHighUsd`, `dedicatedVideoPriceLowUsd`, `dedicatedVideoPriceHighUsd`, `shortsPriceLowUsd`, `shortsPriceHighUsd`, `sponsorPriceMethod` | An estimated price range for a sponsored mention, a dedicated video and a Shorts mention, with the method spelled out |

Every run also saves a one-page **REPORT.html** (all channels ranked by score, engagement drawn against the norm) and a **SUMMARY** record in the run's key-value store.

### Who uses it

- **Brands and agencies vetting creators:** paste a shortlist, sort by grade, drop the channels whose subscribers stopped watching.
- **Influencer marketplaces and CRMs:** enrich creator profiles with engagement, reach, cadence, growth and contact links on a schedule.
- **Creators, managers and AI agents:** benchmark a channel against others of its size, back up a rate card, or pull comparable numbers through the API or MCP.

### How to use it

1. **Paste the channels.** One per line: `@mkbhd`, `https://www.youtube.com/@veritasium`, a channel ID like `UCBJycsmduvYEL83R_U4JriQ`, or any video or Shorts link (its channel is checked).
2. **Pick how many recent videos to measure** (20 is the default; 3 to 50). The price per channel is the same.
3. **Run it** and open the "Verdicts and engagement" table, the report, or export to Excel, CSV or JSON.

### Input

| Field | Type | Example | Notes |
|---|---|---|---|
| `channels` | list of text | `["@mkbhd", "https://www.youtube.com/@veritasium", "UCX6OQ3DkcsbYNE6H8uQQuVA"]` | Handles, channel links (`/@handle`, `/channel/UC...`, `/c/...`, `/user/...`), channel IDs or video links. Also accepted as `urls`, `startUrls`, `usernames` or `handles`. |
| `videosToAnalyze` | number | `20` | Newest uploads to measure per channel, long videos and Shorts, 3 to 50. |

```json
{
  "channels": ["@mkbhd", "@veritasium", "https://www.youtube.com/@kurzgesagt"],
  "videosToAnalyze": 20
}
```

Inputs that are not a YouTube channel, channels that do not exist, duplicates and channels with fewer than 3 public videos come back as a short note row and are **not charged**.

### Output example

A real row from a run on 13 October 2026 (some fields left out to keep it short):

```json
{
  "verdict": "Average engagement for its size (B-)",
  "grade": "B-",
  "score": 69,
  "summary": "21.4M subscribers. Recent videos get a median 5.9M views (27% of subscribers; typical for 10M+: 7.8%) and 1.6% engagement (typical for its size: 1.6%). About 1.7 uploads a week; last upload 5 days ago. 15% Shorts.",
  "channelName": "Marques Brownlee",
  "handle": "@mkbhd",
  "channelUrl": "https://www.youtube.com/@mkbhd",
  "subscribers": 21400000,
  "sizeTier": "10M+",
  "engagementRate": 1.6,
  "engagementNormForSize": 1.61,
  "engagementPercentileForSize": 50,
  "engagementRateBySubscribers": 0.6,
  "viewsToSubscribersPct": 27.44,
  "viewsToSubscribersNormForSize": 7.77,
  "measuredOn": "long videos",
  "avgViews": 8248252,
  "medianViews": 6295432,
  "avgLikes": 134322,
  "avgComments": 7075,
  "commentsPer1000Views": 0.87,
  "totalViews": 5767370608,
  "videoCount": 1857,
  "uploadsPerWeek": 1.7,
  "daysSinceLastUpload": 5,
  "uploadConsistency": "Regular",
  "shortsSharePct": 15,
  "growthSignal": "Growing",
  "growthRatio": 1.43,
  "businessEmail": "business@mkbhd.com",
  "emailSource": "channel description",
  "instagram": "http://instagram.com/MKBHD",
  "twitter": "http://twitter.com/MKBHD",
  "country": "United States",
  "language": "English",
  "mainCategory": "Science & Technology",
  "sponsorPriceLowUsd": 277500,
  "sponsorPriceHighUsd": 555000,
  "dedicatedVideoPriceLowUsd": 693500,
  "dedicatedVideoPriceHighUsd": 1387000,
  "redFlags": [],
  "strengths": [
    "Recent videos reach 27% of subscribers, top 23% for its size.",
    "Regular uploads, about 1.7 a week.",
    "Recent long videos (median 6.3M views) get 1.43x the median views of the 53 long videos before them in the uploads list (4.4M).",
    "Business email listed in the channel description."
  ],
  "topVideos": [
    {
      "title": "iPhone 18 Pro/Duo Impressions: Mogged",
      "url": "https://www.youtube.com/watch?v=Od6M0AXpcxQ",
      "publishedAt": "2026-09-10",
      "isShort": false,
      "views": 27792164,
      "likes": 365193,
      "comments": 24000,
      "engagementRate": 1.4,
      "lengthSeconds": 1034
    }
  ]
}
```

### How the verdict and grade are worked out

- **Engagement rate** is (likes + comments) / views for each recent video; the channel's rate is the median, so one viral video cannot inflate it. Videos under 2 days old are left out because their views are still climbing.
- **Norm for its size**: we measured 616 active channels on 13 October 2026 (found through 69 topic hashtags plus about 100 well-known creators) and took the percentiles of engagement rate and of views per subscriber in five size tiers, separately for long videos and Shorts. A channel is compared with its own tier and its main format.
- **Score** (0 to 100): engagement percentile for its size (45%), reach percentile, meaning views as a share of subscribers (35%), and activity, meaning recent and regular uploads (20%). **Grade** is A+ (93+) down to F (under 40).
- **Verdict** names the engagement level for its size (Exceptional, Strong, Above-average, Average, Below-average, Weak, by its percentile for its size: 90+, 70+, 55+, 40+, 20+, below 20) and adds "but low reach" or "but inactive for N months" when that is the bigger story.

#### Norms by channel size (long videos, measured 13 October 2026)

| Channel size | Channels measured | Median engagement rate | Middle half | Median views / subscribers |
|---|---|---|---|---|
| Under 10K | 14 (blended with the next tier) | 1.7% | 1.0% to 3.0% | 89% |
| 10K-100K | 88 | 1.5% | 0.9% to 3.0% | 35% |
| 100K-1M | 155 | 1.6% | 0.8% to 3.1% | 12% |
| 1M-10M | 173 | 1.6% | 0.9% to 2.6% | 6.5% |
| 10M+ | 64 | 1.6% | 1.1% to 2.2% | 7.8% |

**Shorts:**

| Channel size | Channels measured | Median engagement rate | Middle half | Median views / subscribers |
|---|---|---|---|---|
| Under 10K | 7 (blended with the next tier) | 2.2% | 1.6% to 4.8% | 34% |
| 10K-100K | 47 | 2.1% | 1.5% to 4.8% | 28% |
| 100K-1M | 86 | 2.7% | 1.6% to 4.3% | 6.9% |
| 1M-10M | 118 | 2.7% | 1.9% to 3.6% | 2.9% |
| 10M+ | 52 | 2.8% | 2.0% to 3.7% | 2.6% |

Engagement rate barely changes with channel size in our data, but the share of subscribers who watch falls sharply as channels grow. A big channel with 3% of its subscribers watching can be healthy; a small one with 3% is not. That is why this Actor always shows the norm for the channel's size next to each number.

### Sponsored video price estimate

`sponsorPriceLowUsd` to `sponsorPriceHighUsd` is an **estimate, not a quote**. It takes the median views of the channel's last 10 long videos and applies $20 to $40 per 1,000 views for a 60 to 90 second integration ($30 to $60 for tech, education and finance channels, which command higher rates), the ranges published in 2026 agency and creator rate cards. A dedicated video is 2.5 times that and a Shorts mention half of the long-form rate, applied to Shorts views. The range is then nudged from x0.8 to x1.2 by the channel's engagement for its size. The exact formula for each channel is in `sponsorPriceMethod`. Real deals vary with niche, audience country, usage rights and the creator's demand, so use it as a starting point for negotiation.

### Price

**$0.02 per channel checked** (Apify's paid plans get 5% to 20% off: $0.019 Bronze, $0.018 Silver, $0.016 Gold), plus Apify's small start fee of $0.00005 per run. You pay only for channels that come back with a verdict. Not found, duplicate and too-small channels are free, and the Actor stops cleanly at the maximum charge you set for a run.

| Job | Channels | Cost |
|---|---|---|
| Check one influencer | 1 | $0.02 |
| Vet a campaign shortlist | 20 | $0.40 |
| Score an agency roster | 100 | $2.00 |
| Enrich a creator database monthly | 1,000 | $20.00 |

A run with 2 channels takes about 20 to 40 seconds; 60 channels took 9 minutes in our tests. A typical run costs us well under a tenth of what you pay, so the price stays flat. On the free Apify plan each run checks up to 100 channels; any paid plan removes the limit.

### Use with AI agents (MCP)

AI agents can find and run this Actor through Apify's MCP server at `https://mcp.apify.com` (Claude, Cursor, VS Code and other MCP clients). Ask in plain words, for example: *"Get the engagement rate for @mkbhd, @veritasium and @kurzgesagt and tell me which one is best for a sponsorship"*. The agent passes the channels in `channels`; every row starts with a verdict the agent can quote, and the numeric fields (`engagementRate`, `engagementNormForSize`, `viewsToSubscribersPct`, `uploadsPerWeek`, `sponsorPriceLowUsd`) are ready to compare without any parsing.

### Use it from code

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vant47/youtube-influencer-engagement-rate").call(
    run_input={"channels": ["@mkbhd", "@veritasium"], "videosToAnalyze": 20}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["channelName"], row["verdict"], row["engagementRate"], row["engagementNormForSize"])
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('vant47/youtube-influencer-engagement-rate').call({
    channels: ['@mkbhd', '@veritasium'],
    videosToAnalyze: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((r) => console.log(r.channelName, r.verdict, r.engagementRate));
```

**curl** (waits for the run and returns the rows)

```bash
curl -X POST "https://api.apify.com/v2/acts/vant47~youtube-influencer-engagement-rate/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"channels": ["@mkbhd", "@veritasium"]}'
```

### Integrations

Schedule it weekly to track the same creators, and send results to Google Sheets, Airtable, a webhook, Make, Zapier or n8n through Apify's integrations.

### Tips

- Paste the creator's channel link or @handle rather than the display name. A plain name such as "Mark Rober" is tried as a handle and accepted only when the channel's name matches.
- For channels that post several Shorts a day, raise `videosToAnalyze` to 40 or 50 so the long videos are well represented; the long-form and Shorts numbers are always reported separately.
- Sort by `grade`, then read `redFlags` for the channels you plan to pay.

### Limits

- **Independent tool.** Not affiliated with, endorsed or sponsored by YouTube or Google.
- **Public data only.** The Actor reads what any signed-out visitor can see on YouTube. It never logs in, so it cannot see YouTube Studio data such as audience demographics, watch time, retention or revenue.
- **Subscriber counts are rounded by YouTube** (for example 21.4M), so engagement by subscribers carries that rounding. View and like counts are exact; comment counts above 1,000 are shown by YouTube to 2 or 3 significant figures (for example 7.6K).
- **Business emails** that YouTube shows only behind its "View email address" button need a signed-in account and a CAPTCHA, so they are not collected; `emailBehindSignIn` tells you one exists. Emails written in the channel or video descriptions are collected.
- **Hidden likes or disabled comments** on some videos are reported in `redFlags`; those videos still count for views.
- **Language** comes from YouTube's auto-generated captions when available, otherwise from the titles; mixed-language channels show the most common one.
- **The norms are a snapshot** of 616 channels found through public topic hashtags and lists of well-known creators. They describe active channels; your niche may run higher or lower.
- **Sponsor prices are estimates** from public rate cards, not quotes.
- YouTube sometimes slows down automated visitors. The Actor paces itself and retries on fresh connections; in our tests 127 of 128 cloud runs succeeded (the one failure was an early memory setting, since fixed) and every existing channel with 3 or more public videos came back with a verdict.

### FAQ

**What is a good YouTube engagement rate?**
In our measurements of 616 active channels, the median long-video engagement rate was about 1.5% to 1.7% at every size, and 2.1% to 2.8% for Shorts; the top quarter of channels were above about 3%. What changes a lot with size is reach: the median video reaches about 35% of subscribers for channels with 10K to 100K subscribers, 12% at 100K to 1M and 6% to 8% above 1M. That is why each row shows the norm for its size and a percentile instead of one universal cutoff.

**Is it the same engagement rate YouTube Studio shows?**
No. YouTube Studio does not publish an engagement rate; this is the standard public formula, (likes + comments) / views, used by influencer platforms, so you can compare any channel, not only your own.

**Does it detect fake subscribers?**
It flags the classic signs: views far below the subscriber count for the channel's size, engagement far above the normal range, and channels that stopped uploading. It does not see the subscriber list itself, which YouTube keeps private.

**Can I check Shorts-only channels?**
Yes. Shorts and long videos are measured separately and each is compared with its own norms. `measuredOn` tells you which format the verdict is based on.

**Do I need a YouTube API key?**
No. Nothing to set up, and no YouTube quota is used.

**Why was a channel not charged?**
It was not found, was a duplicate in your list, or had fewer than 3 public videos. The row says why.

### Related searches

YouTube engagement rate, YouTube influencer engagement, YouTube channel stats, YouTube influencer vetting, YouTube creator analytics, YouTube engagement calculator, YouTube channel audit, YouTube sponsorship price, influencer engagement rate checker, YouTube views per subscriber.

# Actor input Schema

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

The YouTube channels or influencers to check, one per line: an @handle (@mkbhd), a channel link (https://www.youtube.com/@mkbhd, /channel/UC..., /c/... or /user/...), a channel ID (UCBJycsmduvYEL83R_U4JriQ) or any video or Shorts link (its channel is checked). Paste a whole creator list with Bulk edit. Also accepted under the names urls, startUrls, usernames or handles. Each channel checked costs $0.02; channels that cannot be found, duplicates and channels with fewer than 3 public videos are free.

## `videosToAnalyze` (type: `integer`):

How many of each channel's newest uploads (long videos and Shorts, newest first) to measure for views, likes, comments, engagement rate, upload cadence and growth: 3 to 50 (other values are moved into that range). The price per channel is the same whatever you choose; 20 is a good balance of accuracy and speed. Videos under 2 days old are left out of the averages because their views are still climbing.

## Actor input object example

```json
{
  "channels": [
    "@mkbhd",
    "https://www.youtube.com/@veritasium",
    "UCX6OQ3DkcsbYNE6H8uQQuVA"
  ],
  "videosToAnalyze": 20
}
```

# Actor output Schema

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

No description

## `engagement` (type: `string`):

No description

## `contacts` (type: `string`):

No description

## `pricing` (type: `string`):

No description

## `report` (type: `string`):

No description

## `summary` (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": [
        "@mkbhd",
        "@veritasium"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("vant47/youtube-influencer-engagement-rate").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",
        "@veritasium",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("vant47/youtube-influencer-engagement-rate").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",
    "@veritasium"
  ]
}' |
apify call vant47/youtube-influencer-engagement-rate --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vant47/youtube-influencer-engagement-rate"
        }
    }
}
```

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/wqNpHVVGdEB8257U6/builds/Hi3V4cofuRO0sIXc3/openapi.json
