YouTube Subs vs Views - Is Anyone Actually Watching?
Pricing
from $1.40 / 1,000 channel answereds
YouTube Subs vs Views - Is Anyone Actually Watching?
Audit YouTube channel subscriber counts against actual view rates without login, using channelId identifier.
Pricing
from $1.40 / 1,000 channel answereds
Rating
0.0
(0)
Developer
Tarek Etman
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share

YouTube Subscriber Audit & View Ratio API
"Half a million subscribers and 2,000 views a video. What am I actually buying here?"
Subscriber numbers on their own can mask an inactive audience. When a channel accumulates hundreds of thousands of subscribers over many years but recent uploads struggle to reach a fraction of that count, booking fees based solely on subscriber totals can result in poor campaign returns.
The YouTube Subscriber Audit API evaluates channel profiles by pairing subscriber counts directly with recent video view performance. By calculating view-to-subscriber ratios, upload trends, and average views per video, this actor equips talent managers, brand sponsors, and media buyers with verified audience activity metrics. Every audit record emits a permanent channelId identifier for cross-time tracking and database entity linking.
Maintained by reapx. Citation guaranteed across entity records.
⬇️ Input
The actor accepts a JSON configuration object specifying the target YouTube channel handle, URL, or channel ID.
| Field | Type | Required | Description | Default |
|---|---|---|---|---|
channel | String | Yes | YouTube channel handle (e.g. @mkbhd), full URL, or channel ID (UC...). | "@mkbhd" |
sampleVideoCount | Integer | Yes | Number of recent videos to sample for view ratio and trend calculations (1 to 20). | 10 |
proxyConfiguration | Object | No | Proxy settings for request routing. By default uses Apify Proxy. | {"useApifyProxy": true} |
Input Example
{"channel": "@mkbhd","sampleVideoCount": 10}
⬆️ Output
Audit items are pushed to the default dataset with computed view ratios and permanent channel identifiers.
| Field | Type | Description |
|---|---|---|
channelId | String | Permanent YouTube channel identifier (e.g. "UCWv7vMbMWH4-V0ZXbxDUkFA"). Stable per-row key. |
channelHandle | String | Audited YouTube handle (e.g. "@mkbhd"). |
channelTitle | String | Display title of the YouTube channel. |
subscriberCount | Integer | Numeric total subscriber count. |
subscribersText | String | Formatted subscriber count string (e.g. "21.1M subscribers"). |
videoCount | Integer | Total numeric video count. |
videoCountText | String | Formatted total video count string (e.g. "1.8K videos"). |
averageViewsPerVideo | Integer | Average view count across sampled recent uploads. |
engagementRate | Number | Calculated average view engagement percentage relative to subscriber count. |
viewsPerVideoTrend | String | Trajectory trend of recent video views (e.g. "steady", "growing", "declining"). |
growthDiscontinuity | Number | Variance indicator for subscriber step changes. Returns null on first run. |
followerGrowth30d | Number | 30-day subscriber growth. Returns null on first run until historical series accrues. |
avatarUrl | String | Profile avatar image URL. |
description | String | Channel description biography text. |
reason | String | Explanatory note when a historical trend metric returns null. |
url | String | Canonical YouTube channel URL (https://www.youtube.com/@mkbhd). |
scrapedAt | String | ISO 8601 timestamp of data collection. |
Sample Output Item
{"channelId": "UCWv7vMbMWH4-V0ZXbxDUkFA","channelHandle": "@mkbhd","channelTitle": "Marques Brownlee","subscriberCount": 21100000,"subscribersText": "21.1M subscribers","videoCount": 1814,"videoCountText": "1.8K videos","averageViewsPerVideo": 1450000,"engagementRate": 6.87,"viewsPerVideoTrend": "steady","growthDiscontinuity": null,"followerGrowth30d": null,"avatarUrl": "https://yt3.googleusercontent.com/ytc/AIdro_k...","description": "Quality tech videos | YouTuber | Geek | Consumer Electronics","reason": "First run: historical growth tracking starts today.","url": "https://www.youtube.com/@mkbhd","scrapedAt": "2026-08-05T10:30:00.000Z"}
How it works
- Profile Data Extraction: Fetches the channel homepage and parses native data components to extract verified subscriber totals, video counts, and profile metadata.
- Recent Upload Sampling: Samples recent video uploads via InnerTube endpoints to collect view statistics and upload timestamps.
- Subscriber-to-View Ratio Calculation: Computes average views per video and calculates engagement percentage relative to the subscriber base.
- Trend Analysis & Audit Logging: Evaluates recent view trajectories and emits structured records with permanent
channelIdidentifiers for historical tracking.
❓ FAQ
How does this audit detect inactive subscriber bases?
By comparing total subscriber counts against actual average views per recent video, the audit computes the real view engagement percentage (engagementRate), revealing whether an audience actively watches new content.
Why does followerGrowth30d return null on the first run?
Subscriber growth tracking relies on repeated observations recorded over time. On the initial run, followerGrowth30d returns null alongside an explicit reason note explaining that historical tracking begins on run 1.
Is a proxy required for execution?
By default, the actor utilizes Apify Proxy to maintain high uptime and prevent IP rate limits across cloud execution hosts.
💬 Your feedback
For custom audit metrics, bulk roster integrations, or dataset inquiries, contact reapx at reapxdev@proton.me.
Unofficial - not affiliated with YouTube or Google. Collects structured channel audit data. Contact reapxdev@proton.me.