YT Analytics Dashboard Not for sale

A personal tool · by Shahrukh Sheikh

Python · Flask · SQLite · YouTube Data and Analytics APIs · Runs on your own PC

Why is this video underperforming? Ask the dashboard, not three browser tabs.

A local web app that pulls the real numbers for every channel I run, compares the channels side by side, and checks each video against a set of plain rules, so it can say "people leave in the first seconds" or "this one lost subscribers" instead of leaving the diagnosis to me. Nothing goes to any server but Google's.

Personal project · Not for sale · Read-only access to your channel · Data stays on your computer

The dashboard: three channel cards ranked by how many high-severity issues each has, with average views and retention, above a list of the top issues across all channels in red and amber.

The dashboard in numbers

12

Diagnostic rules

Ten of them work on real channel data. Two need impressions, which YouTube keeps to itself.

365

Days per sync

Each pull looks back a year, for up to 200 videos per channel. Every pull is stored as a new snapshot.

2

Read-only permissions

One to read videos and one to read analytics. The app can't change, delete or publish anything.

0

Cloud services

No server, no sign-up, no subscription. A Flask app on your PC and a SQLite file.

YouTube Studio shows you numbers. It doesn't tell you what's wrong.

I run several channels: a tourism channel, a podcast and a tutorial channel. Each has its own Studio, and none of them says "this video's viewers leave early" or "this channel's last five videos are doing worse than the five before". You get charts and decide for yourself, three times, every week.

This app does that reading for me. It collects the numbers once, sets every channel next to the others, and ranks them by how many serious problems each one has. The question I open it with is simple: which channel needs my attention this week, and which video is the reason?

Six steps from "connect" to "what do I fix first".

  1. Connect

    Sign in with Google once per channel. The sign-in is read-only.

  2. Pull

    One button fetches the videos and a year of analytics for each.

  3. Store

    Each pull is saved as a new snapshot in a local SQLite file, never over the old one.

  4. Diagnose

    Rules read the numbers and flag what's wrong, with a severity.

  5. Compare

    Channels are ranked by high-severity issues, so the worst one is first.

  6. Explore

    Open a video for its retention curve, or a channel for trends and topic ideas.

Real screens, running on sample data.

These are screenshots of the real app running its built-in demo data, three made-up channels, so none of my actual numbers are shown. The demo data includes click-through rates and impressions, which a real YouTube channel cannot give the app (see what it doesn't do).

Every video, with what's wrong next to it.

  • Where the views come from: traffic sources, device types, top countries and playback locations for the whole channel.
  • One row per video: type (video or Short), date, views, retention, likes and dislikes, subscribers gained and lost.
  • Issue tags on each row, coloured by severity.
  • Retention and Demographics links open a video's own charts, fetched when you ask.
  • Buttons to pull the latest data, export to JSON, open Insights or clear the synced data.
A channel page: buttons for pulling data, exporting and insights, four lists of views by traffic source, device, country and playback location, and a table of videos with views, retention, subscribers and coloured issue tags such as medium_dropoff and losing_subscribers.
The Insights page: cards saying views are increasing and retention is stable, a table of correlations with views, a line chart of views per upload with a dotted forecast range, and bar charts of average views by video type, upload weekday and video length.

Direction and patterns, with no black box.

  • Views trend and retention trend: increasing, stable or decreasing, from a straight line fitted through your videos.
  • Forecast: where the next five videos' views are likely to land, drawn as a range.
  • Patterns: average views by video type, by weekday you uploaded, and by length bracket.
  • Correlations: how strongly length, CTR and retention move with views, from -1 to +1.

Every number comes from plain averages and a linear trend, on purpose. A fancy model I can't explain is not something I'd make a decision from.

What to make next, with the evidence.

  • Google Trends: recent search interest and rising searches for each channel's niche keywords, for India.
  • Competitor videos: the most-watched videos in the same niche over roughly the last 45 days.
  • One score per topic, with example titles under it so you can see why it ranked.
  • Niche keywords are detected from the channel itself, and you can override them.
The Topic Ideas page: for each channel a Refresh Topics button and ranked topics with a combined score, competitor video titles and rising searches.

Twelve rules, and what makes each one fire.

Every flag comes from a rule you can read, with the thresholds in one config file you can change. Shorts get stricter retention limits than normal videos, because a good Short is watched almost to the end. Live streams are left out.

The 12 diagnostic rules and what makes each one fire
RuleWhen it fires
High High drop-offAverage view percentage is under 30% for a normal video, or under 45% for a Short.
Medium Medium drop-offAverage view percentage is under 45% for a normal video, or under 65% for a Short.
High Confirmed early drop-offThe retention curve (fetched when you open a video's Retention view) shows the watch ratio falling by more than half in the first 10% of the video.
Medium Low completionPeople watch less than 25% of the video's length on average, and there is no retention curve to say where they left.
High Losing subscribersMore people unsubscribed after watching than subscribed. High when the losses are more than double the gains, medium otherwise.
Medium Low Short engagementA Short with at least 200 views where likes, comments and shares are under 1% of views.
Medium Few engaged viewsA Short where fewer than half of its views count as YouTube's "engaged views".
Medium Inconsistent uploadsOne of the last five gaps between uploads was longer than 21 days.
High No recent uploadThe newest video is more than 21 days old.
High Declining momentumThe last five videos average over 30% fewer views than the five before them (high when the fall is over 50%).
Medium Low click-through rateNeeds impressions, which the API doesn't give. Would fire when CTR is under 60% of the channel average.
Medium Low impressionsAlso needs impressions. Would fire when a recent video's impressions are under 40% of the channel's median.

The last two rows can't fire on a real channel. They need impressions and click-through rate, and YouTube doesn't expose those to apps. They're in the code for the day it does, and the demo data includes them so you can see what they'd look like.

There is also a longer-form "funnel" check that tries to name the bottleneck for a video (low reach, weak thumbnail, weak retention or healthy). When the inputs it needs are missing, it says insufficient data instead of guessing, which is what it says for every real long-form video today.

Everything the dashboard does.

Dashboard

  • Channels side by side with average views, average retention and how many videos are tracked.
  • Ranked by need: the channel with the most high-severity issues comes first.
  • Top issues across all channels in one list.

Data collection

  • Videos: up to 200 per channel, with type, length and publish date.
  • Per-video numbers: views, likes, comments, shares, minutes watched, average view duration and percentage, subscribers gained and lost, engaged views.
  • Channel-wide: traffic sources, devices, operating systems, countries, playback locations, sharing services, demographics, subscriber status and playlists.
  • On request, per video: the retention curve, traffic sources, demographics and subscriber status.
  • One report failing doesn't stop the rest. Each group of metrics is requested separately and the app records which ones YouTube couldn't supply.

Diagnostics

  • Twelve rules with severity and a plain-language reason, in the table above.
  • Separate limits for Shorts and normal videos.
  • Re-run after every pull, so the flags always match the newest numbers.

Insights

  • Trend direction for views and retention.
  • A five-video forecast range from a linear fit.
  • Averages by video type, upload weekday and length.
  • Correlations with views for length, CTR and retention.
  • Interactive charts you can hover and zoom.

Topic research

  • Google Trends interest and rising queries through the pytrends library.
  • Competitor search on YouTube for the same niche, last ~45 days.
  • If Trends is rate-limited, the competitor suggestions still work.

Control and privacy

  • Add or remove a channel from the Setup page, with no file editing.
  • Export a channel to JSON, with the diagnostics included, to read or to paste into an AI tool.
  • Clear synced data for a channel in one click.
  • Demo mode: load sample data to try everything without connecting an account.
  • History kept: snapshots build up so you can see change over time.

To run it, if you build one.

What the dashboard needs to run
Runs onAny computer with Python 3.9 or newer. Built and used on Windows.
Python packagesFlask, the Google API and auth libraries, pytrends, pandas, plotly and numpy.
Google setupA free Google Cloud project with the YouTube Data API v3 and YouTube Analytics API switched on, and an OAuth "Desktop app" client. One-time.
Where it's openIn your browser at 127.0.0.1 port 5000, on the same computer only.
Where data livesOne SQLite file on that computer.
InternetTo pull data, for Trends, and to load the chart libraries from a CDN.

What it doesn't do.

Questions people ask first.

Can I download it or buy it?

No. It is a personal tool: not for sale and not published. These pages show what it does and how it was built. If you want something like it for your own channels, get in touch.

Does it show click-through rate and impressions?

Not for real channels. YouTube does not hand impressions or click-through rate to apps through its public Analytics API: I tested every query shape, and the answer is always "not supported". Those columns stay empty and the two rules that need them never fire. The built-in demo data does include them, which is why the screenshots on this page show CTR.

Where does my channel data go?

Nowhere else. It goes straight from Google to your computer and is stored in a SQLite file there. There is no server behind the app, and no third-party analytics service ever sees it. The sign-in is read-only: the app can see your numbers, and it cannot change anything on your channel.

Can it see my revenue?

The code to fetch revenue is there, but the extra permission it needs is switched off in the config, so by default the app asks only for read-only video and analytics access. Turning it on means signing in again on every channel.

Why do I have to keep signing in again?

This is Google's rule for apps that are still in "Testing" mode on the consent screen, which is how a personal tool like this runs: the sign-in lapses after about a week and you authorize the channel again.

Is the forecast reliable?

It is a straight line fitted through your videos in order, extended five videos ahead, with a range around it. There is no seasonality and no machine learning: it tells you the direction, not the future. It needs at least four videos.

What counts as a Short?

YouTube doesn't flag Shorts in its data, so the app treats a video of 183 seconds or less as a Short. It is a rule of thumb, and a short ordinary video can be counted as one.

Why is the app in Hinglish?

It was built for my own use, so the messages and explanations are in Hinglish, mixed with plain English labels. The screenshots show it exactly as it is.

Want the build story: why the funnel check says "insufficient data", how a failing report can't break the sync, and how I confirmed that CTR isn't available?

Read the case study