YouTube Channel Analyzer

Drop in any public channel handle. See content patterns, top videos, upload cadence, and an AI-written strategy read.

@
?
Subscribers
all-time
Total videos
all-time
Total views
all-time
Avg views / video
last 100 sample
Overview
Top videos
Patterns
AI analysis
Views over time
Upload frequency
Top 15 videos by views
Average views by video duration
Best day to upload
AI content analysis
Get a deep read on content patterns, what's working, gaps, and strategic recommendations — powered by DeepSeek Reasoner. Takes 10–30 seconds while the model reasons.

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

EndpointWhyFields requested
channelsResolve the handle (or fall back to search), then get subscriber / video / view countsid,snippet,statistics,contentDetails
searchFallback when forHandle doesn't match — used once, capped at 1 resultsnippet
playlistItemsList the channel's auto-generated "uploads" playlist (every public video by that creator, newest first)snippet,contentDetails
videosPer-video statistics & duration (batched 50 IDs per call)statistics,contentDetails

Resolving a handle

When you type @channelname, the analyzer tries — in order:

  1. channels?forHandle=channelname — exact handle match (covers post-2023 channels)
  2. If empty: search?q=channelname&type=channel → take the top result's channel ID, then look it up via channels?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.

Sampling note: Everything below the three big metric tiles is computed from those 100 most-recent videos, not the full channel history. For a high-frequency channel the sample covers a few weeks; for a dormant channel it can cover years. The three tiles at the top (Subscribers / Total videos / Total views) are channel-wide totals direct from the YouTube API, and reflect the entire lifetime of the channel.

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.

TileSourceFormula
Subscriberschannel-wideall-timechannel.statistics.subscriberCount
Total videoschannel-wideall-timechannel.statistics.videoCount
Total viewschannel-wideall-timechannel.statistics.viewCount
Avg views / videosample-derivedlast 100see formula below
avg_views = Σ viewsi / N
           where i ∈ [last 100 uploads], N = 100 (or fewer if the channel has < 100 public videos)
Why this differs from 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

monthly_views[m] = Σ viewsv for every v where publishedAt starts with m

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

uploads[m] = count of v where publishedAt starts with m

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:

BucketRange
<1 min0 – 59 s
1–5 min60 – 299 s
5–10 min300 – 599 s
10–20 min600 – 1199 s
20–40 min1200 – 2399 s
40+ min2400 s and up
avg_views[bucket] = Σ viewsv / countv    v ∈ bucket

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:

  1. Bars: count of uploads per day-of-week
  2. Line: average views per upload, per day-of-week
avg_views[day] = Σ viewsv / countv    v published on day
Watch for this: a day with only one upload (the bar shows 1) shows that single video's view count as its "average". Single-data-point days can mislead. Read the bars before reading the line.

06 Top videos list

All 100 sampled videos sorted by view count descending; the top 15 are listed.

top_videos = sort(sample, by views desc).slice(0, 15)

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.