YouTube Channel Analyzer
Drop in any public channel handle. See content patterns, top videos, upload cadence, and an AI-written strategy read.
How it works
Where the data comes from, what's sampled vs lifetime, and every formula the analyzer uses.
01 Where the data comes from
Everything in the analyzer comes from the public YouTube Data API v3. The browser doesn't talk to it directly — calls go through a server-side reverse proxy at /api/yt/* that holds the API key, so the key never ships to your browser.
The four endpoints used
| Endpoint | Why | Fields requested |
|---|---|---|
channels | Resolve the handle (or fall back to search), then get subscriber / video / view counts | id,snippet,statistics,contentDetails |
search | Fallback when forHandle doesn't match — used once, capped at 1 result | snippet |
playlistItems | List the channel's auto-generated "uploads" playlist (every public video by that creator, newest first) | snippet,contentDetails |
videos | Per-video statistics & duration (batched 50 IDs per call) | statistics,contentDetails |
Resolving a handle
When you type @channelname, the analyzer tries — in order:
channels?forHandle=channelname— exact handle match (covers post-2023 channels)- If empty:
search?q=channelname&type=channel→ take the top result's channel ID, then look it up viachannels?id=...
02 What's fetched (and what isn't)
After resolving the channel, the analyzer reads the channel's "uploads" playlist — YouTube auto-maintains one of these for every channel. It pulls the 100 most recent uploads (2 paginated calls of 50 each), then fetches per-video stats in one batched call.
What's not in the sample
- Private & unlisted videos — the API only returns what's publicly listed.
- Shorts vs. long-form — both are mixed in, with no separation. Shorts skew the duration buckets and may dominate recent uploads.
- Live streams & premieres are included if they're in the uploads playlist with a duration.
- Deleted videos are gone from the API.
03 Top-of-page metric tiles
These four tiles are a mix of channel-wide totals (from YouTube's own counters) and a sample-derived average.
| Tile | Source | Formula |
|---|---|---|
| Subscribers | channel-wideall-time | channel.statistics.subscriberCount |
| Total videos | channel-wideall-time | channel.statistics.videoCount |
| Total views | channel-wideall-time | channel.statistics.viewCount |
| Avg views / video | sample-derivedlast 100 | see formula below |
where i ∈ [last 100 uploads], N = 100 (or fewer if the channel has < 100 public videos)
viewCount / videoCount: the "true" all-time average would mix in years-old videos. The sample-based version reflects recent performance, which is more useful for content-strategy questions. If you want the lifetime average, divide the Total views tile by the Total videos tile manually.
04 Overview charts — views & uploads over time
Both charts share the same bucketing: group the 100-video sample by month (YYYY-MM from publishedAt), then trim to the last 24 months that have data.
Views over time
This sums views per publish month, not per view month. A video uploaded in March that gets a million views in May still shows up entirely under March. (YouTube's API doesn't expose per-day view history without channel-owner OAuth.)
Upload frequency
Simple count per month. Tells you cadence at a glance — gaps, ramp-ups, dry spells.
05 Patterns — duration & best day to upload
Video duration → avg views
Videos are bucketed by duration, then for each bucket the chart shows the average views per video in that bucket. So a bucket with one viral hit doesn't automatically look good — it gets diluted by the rest of the bucket.
Duration is parsed from YouTube's ISO 8601 format (PT1H23M45S):
duration_seconds = (H × 3600) + (M × 60) + S
Buckets:
| Bucket | Range |
|---|---|
| <1 min | 0 – 59 s |
| 1–5 min | 60 – 299 s |
| 5–10 min | 300 – 599 s |
| 10–20 min | 600 – 1199 s |
| 20–40 min | 1200 – 2399 s |
| 40+ min | 2400 s and up |
Best day to upload
Each video's publishedAt is converted to a day-of-week in the viewer's local timezone (Sun = 0 through Sat = 6). Two series are plotted on the same chart:
- Bars: count of uploads per day-of-week
- Line: average views per upload, per day-of-week
06 Top videos list
All 100 sampled videos sorted by view count descending; the top 15 are listed.
Each row shows: views, likes, comments, duration (min m sec s), and publish date (YYYY-MM-DD).
The like / comment counts come directly from video.statistics.likeCount and commentCount. Note that creators can disable comments on individual videos, which shows as 0 here.
07 AI analysis
The "AI analysis" tab packages the channel-level numbers + the top 20 videos into a single prompt and sends it to DeepSeek Reasoner. What's sent:
Channel: <channel title>
Subscribers: <formatted>
Total videos analyzed: <sample size, up to 100>
Avg views per video: <sample-derived>
Top 20 videos by views:
1. "<title>" — N views, M min, YYYY-MM-DD
2. ...
...
[6 structured questions: content patterns, title patterns,
duration sweet spot, what's working, gaps, top 3 recommendations]
The model answers in six labeled sections that mirror the questions. Nothing else is sent — no thumbnails, no transcripts, no comments. The model is only seeing the metadata you can already see in the other tabs, plus the titles. Costs about 0.2¢ per click.
08 Caveats & gotchas
- Sample size = 100, newest first. Old viral hits outside that window are invisible to every chart and to the AI.
- Shorts and long-form are mixed. If a channel just pivoted to Shorts, the duration chart will be heavily skewed toward
<1 min. - Day-of-week uses the viewer's local timezone, not the uploader's. A creator who reliably posts at midnight UTC will appear under different days depending on where you live.
- "Views" are all-time per video, not "views in the publish month". A 5-year-old video with 10M views contributes its full 10M to whichever month it was uploaded.
- The 3 top tiles can disagree with the charts. Total videos (tile) is lifetime; the sample is 100. Divide tile totals to get lifetime averages.
- YouTube Data API quotas apply per project: 10,000 units/day on the free tier. A full channel analysis costs about 6–10 units. ≈1,000 analyses/day fits comfortably.
- Numbers are not real-time. YouTube updates subscriber and view counts on a delay; counts above 1,000 are also rounded.