Methods
How the record is made — and how its projections held: 88% of subscriber calls, 91% of daily views.
Every number on Open Channel Stats comes from a channel owner’s own YouTube data, read once a day with their permission. This page opens on what those projections were worth — how often the range the site stated contained what actually happened — then gives the whole path behind the numbers, the conditions attached to it, and the strongest arguments against what it says.
What the projections were worth
Replayed Oct 24, 2026Every projection shape this site can produce is replayed against what actually happened afterwards, across every connected channel. It runs again with every nightly build, so these are what the shapes were worth as of the last one. Two earned their place. One did not, and does not render anywhere on this site as a result.
A range for a number, at a date you pick
RendersThis is the shape the site states, and it states it 30 days out: daily-view ranges contained what happened 92% of the time across 639 past calls, subscriber ranges 89% across 687. The range the site speaks clears the 80% it is drawn to hold.
A date for a number you pick
Does not renderCalls that named the day a channel would cross a milestone held 56% of the time across 1,037 past calls, and the middle miss was 7 days wide. That is under the 80% bar, so no dated crossing is shown anywhere — not on a dashboard, not in an email, not on a share card.
The pace a channel is moving at
RendersEvery channel that is moving carries a pace read. It states what the recent days did, so it is a description of the record rather than a claim about the future.
On @theartharrison's own record, 159 calls have been scored so far and 109 held; 266 are still open. Every channel's scored calls, hits and misses alike, are in its downloadable file.
How a number gets here
One pass, once a day, in five steps. Nothing is estimated on the way through — the only numbers that exist are the ones YouTube reported.
YouTube's own APIs
A channel owner connects their channel and grants read access. Three of YouTube's APIs are read: Data for the catalog, Analytics for views, impressions, click rate, watch time and traffic sources, and Reporting for the bulk daily files.
One read a day
06:00 UTC dailyA single pass runs each morning at 06:00 UTC. It only ever reads; nothing is written back to YouTube, and no video, title or thumbnail is ever changed.
The seam
Data through Oct 22, 2026YouTube's reporting runs two to three days behind. Every chart and every total on this site stops at the last day that actually reported — the seam — rather than showing the pending days as zeros. Days that reported nothing are drawn as empty, never as a zero.
The file
102 tables · schema v85Each channel's own numbers are written into a single SQLite file that describes itself: every table, every column, its grain and its caveats. That file is what this site reads, and it is downloadable in full.
The reading
82 patternsPure functions read that file and say what happened. Each one is gated: it stays quiet until the channel has enough of the kind of history it needs. When more than one reading applies on the same day, a fixed order settles which one leads: a problem with the data speaks first, then meaningful movement, then a new upload, then the quiet reading for that channel's situation. Nothing on a page is written by hand, and nothing is generated by a language model.
What the data can't say
9 stated conditionsEvery number here has conditions attached — a reporting delay, a thin sample, an attribution gap, a field YouTube doesn’t expose. Each is named, with what it means when you read the number. Each is a stated condition on the data, not a flaw in the dashboard.
Reporting
What YouTube's feed hasn't reported yet, or reports as an artifact. 2 conditions
- Reporting lag
YouTube's reporting pipeline is two to three days behind real time. Every chart and aggregate in the dashboard stops at the most recently complete date.
Numbers for the last two to three calendar days are always absent. This is not a gap in the dashboard — it is a gap in what YouTube exposes. On a newly connected channel there is a second, separate clock: YouTube posts its first reports within a day or two of connecting, so the earliest days can briefly show views without impressions.
Enforced by
scripts/lib/reporting-cutoff.jsdashboard/src/lib/db/index.ts · getReportingCutoff
- Pre-publish stub rows
When a video is scheduled, YouTube sometimes records reporting rows for the day before it published — usually a row of zero views and null impressions.
Every aggregation filters out these stub rows using the pre_publish_stub = 0 guard. The stub rows remain in the database for provenance.
Enforced by
dashboard/src/lib/db/index.tsscripts/build-public-db.js
Since schema v9
Sampling
Where a number is too thin a sample to read directionally. 2 conditions
- CTR from few impressions
A CTR measured over a handful of impressions can land almost anywhere. Every CTR is shown with the range it sits in — wide when the impressions are few, narrowing as they arrive.
The range beside a CTR is the honest width of that number. A video shown a few times reads close to what the channel typically does, with a wide range; a video shown thousands of times reads on its own evidence, with a range too narrow to draw. No CTR is hidden for being measured over too few impressions.
Enforced by
scripts/public-db/compute-ctr-prior.jsdashboard/src/lib/ctr-posterior.tsdashboard/src/components/CtrRange.tsxdashboard/src/lib/ctr-confidence.ts
Since schema v9- Average watch time thin-sample tiers
Average watch time below 10 views is noise; 10 to 29 is low; 30 to 99 is medium; 100 or more is high.
The same four-tier encoding applies to watch-time cells. Readings below the 30-view threshold tend to be dominated by a handful of unusually long or short sessions.
Enforced by
scripts/public-db/populate.js · avdConfidenceTier
Since schema v9
Attribution
Where the parts don't sum to the whole, and the gap is shown. 2 conditions
- Unattributed impressions
YouTube's per-source impression rows don't always sum to the per-video impression total. The gap is real and surfaced rather than redistributed.
Some impressions come from surfaces YouTube doesn't expose through its reporting feed. The unattributed share is visible on the Honesty panel; traffic charts reflect only attributed impressions.
Enforced by
dashboard/src/lib/db/channel/reconciliation.ts · getUnattributedImpressions
Since schema v9- Channel-snapshot reconciliation gap
The channel-level snapshot sometimes shows higher totals than the sum of per-video reporting rows.
This is YouTube's own attribution gap. The dashboard charts the difference rather than hiding it, so readings on total channel views may slightly overcount relative to per-video sums.
Enforced by
dashboard/src/lib/db/channel/reconciliation.ts · getChannelReconciliation
Withheld content
What the public dataset deliberately leaves out before it ships. 1 condition
- Comment text and non-public videos stay out
Two things never enter the public dataset: the text of viewer comments (counts only), and videos that aren't public on YouTube. Everything else ships in full — real titles, real video IDs, real thumbnails.
Every public video is fully analyzable under its real title and ID. Individual comments and non-public uploads are not recoverable from the public data.
Enforced by
scripts/build-public-db.js
Missing data
What YouTube doesn't expose for a channel this size, or at all. 2 conditions
- Size-gated demographic data
YouTube only returns audience demographics once a channel clears a minimum-size threshold it does not publish.
Where a channel is under that threshold, country, age, and gender breakdowns are absent from its dataset entirely — not thin, not sampled.
- Revenue and monetization absent
Revenue, CPM, and ad-breakdown data are never requested and are not in the dataset, for any channel.
Monetization metrics (CPM, RPM, ad revenue) are not analyzable from this dataset, whatever a channel’s Partner Program status is.
The arguments against
5 disclosuresFor each thing this site is willing to say, the strongest good-faith rebuttal to it, the guardrail already in the code, and why it still ships. These are arguments against the product, not a defence of it.
Single-label channel-state compression
The dashboard reduces the channel's current algorithmic situation to one label (e.g. suggested_run, search_tail, dormant) from a fixed set of states.
A channel can be in multiple states simultaneously — for example, in a suggested run on one video while other videos are dormant. A single label hides this co-occurrence and may assign the wrong dominant frame for a given reader's question.
The state label is backed by two support metrics from event_channel_state_change that reflect the actual weighted evidence for the classification, and the compression is named explicitly wherever the state label is shown.
A single-state label is more actionable for most readers than a multi-state matrix. The support metrics partially compensate for what the single label omits.
Traffic-source attribution gaps
Traffic source breakdowns claim to show where views came from (Browse, Search, Suggested, External, etc.).
YouTube does not expose every source, and the per-source impression rows often don't sum to the per-video total. The unattributed share can be substantial on some channels or source types. Comparing sources by share may over- or understate the true split.
Unattributed impressions are shown as their own number rather than being redistributed into the named sources. The limits registry names this as a first-class attribution limit.
Attribution data is the best available signal for how videos reach viewers. The unattributed gap is visible, not hidden, so readers can calibrate accordingly.
Edit before/after observational limits
The Changes page shows click rate before and after a title or thumbnail change, implying a before/after comparison.
Many factors change simultaneously with or shortly after an edit — seasonality, topic trends, the age of the video at the time of the edit, and YouTube's own ongoing impression testing. The before/after comparison observes correlation in time, not causation.
The before-and-after scene states the boundary in the rendered prose: “The app can’t tell whether the edit caused it.” No causal language appears anywhere in the copy.
Knowing that click rate rose or fell around an edit is a factual observation that has informational value even without a causal claim. The boundary is stated once per screen, attached to the before/after scene itself.
Wisdom threshold flips near boundaries
The Research belief ledger renders verdicts (agrees / disagrees / inconclusive / not currently testable) on conventional YouTube creator beliefs using a channel's own data.
Verdict boundaries are threshold-based. A channel sitting just below a threshold (e.g. a 0.1 pp difference in CTR) flips from 'agrees' to 'disagrees'. At that boundary the verdict carries less signal than the raw numbers do.
Verdicts include the underlying numbers that drove them — the evidence is surfaced alongside each verdict, not just the label, so readers can assess near-boundary cases.
Structured verdicts are substantially more scannable than raw numbers alone. The evidence display lets attentive readers catch boundary effects.
Detector-family consolidation hiding module nuance
The channel page surfaces one reading per render, selected from the full detector inventory.
Collapsing dozens of detectors into one featured insight per render means many relevant signals are not shown. The selection algorithm prioritises by magnitude, recency, and certainty — but a less prominent signal may be more relevant for a specific reader's question.
The Methods page lists every detector with its activation stage and sample-size threshold. The selection algorithm is transparent about its priority ordering.
Showing all active detector outputs simultaneously produces an unreadable wall of context-free numbers. One featured insight per render is the minimum to remain coherent. The full detector inventory — every detector with its activation stage and sample threshold — is listed for readers who want it.
What the engine watches for
55 of 82 have matchedEvery pattern the reading engine can report, by the part of the channel it reads — what each one looks for, when it can fire, and whether it has matched. Each one stays quiet until the catalog is large enough to read it honestly, so a pattern that has never matched has usually never had the history it needs — not a channel that lacks it.
54 1 27
- Milestones2 of 2 matched
What each one looks for
- A milestone reached
- An emerging signal
- Trajectory and outliers9 of 11 matched
What each one looks for
- Where this channel sits against the shared pool
- A video tracking off the channel norm
- A video's view-curve deviating from its peer norm
- Views accelerating
- A week-over-week step up
- Day-one numbers predicting longer-run reach
- Cross-video outlier
- A live video sitting outside the channel's day-N cone for its age
- Retention and engagement ranking high relative to view mass
- A per-metric trajectory consistent across videos
- A title pattern correlating with CTR on this channel
- Discovery and traffic sources19 of 24 matched
What each one looks for
- A traffic source proportion shifting
- Browse / Homepage opening up
- Browse / Homepage going quiet
- YouTube Search reaching the channel
- Suggested Videos lifting
- Suggested Videos cliff
- Shorts Feed lifting
- Shorts Feed cliff
- Where views arrive from, over time
- Single-source-dominated day
- Top-country flipping week-over-week
- First External-source views
- Channel-wide top traffic source flipping
- Per-source typical days-to-activation
- A specific video's source activation outside the channel's band
- First impressions on a video
- A video drawing most traffic from one source
- Source mix widening
- Source mix narrowing
- A source going quiet on a video
- A gap in watch time per view across sources
- A gap in subs-per-view across sources
- A previously-quiet organic source firing again on a video
- A video drawing most views from a single country
- Per-video lifecycle6 of 11 matched
What each one looks for
- This video's arc
- A video gone quiet
- Impressions without views
- Days from publish to peak
- Older videos vs newer videos
- CTR rising late in life
- Watch time rising late in life
- Trend across recent debuts
- Channel trend, week over week
- Trend across recent videos
- A video launched in a weak channel phase performing under the channel median
- Engagement7 of 14 matched
What each one looks for
- Two metrics that usually move together pulling apart
- A video drawing more engagement per view than the rest of the channel
- Comments-per-view well above the channel's band
- A trailing-3-day jump in shares on a video
- Subscribe rate and reach moving in opposite directions
- Subscribers stepping up on a routine view day
- Subscribers lost in the trailing two weeks
- Audience replacing itself faster than its trailing weeks
- How much of last week's audience mix came back
- Channel attribution share trending up
- Per-video attribution share well above baseline
- A sharp drop-off in the retention curve
- Mid-video hold versus the channel's own catalog
- Where this video differs across the four funnel stages
- Channel shape12 of 20 matched
What each one looks for
- Lifetime distribution of views across the catalog
- Channel's 5-dimensional state vector outside its 90-day envelope
- Recent publishing gap notably longer than the channel's median
- How often this channel publishes
- Recent 7-day publish count diverging from the prior 7-day count
- One or two weekdays consistently outperforming the rest
- The catalog shape shifting
- A metric outside its usual range
- How retention distributes across the catalog
- Share of the catalog that went the past week without views
- Top-video and quiet-inventory shares trending up together
- Share of videos below a view threshold
- Share of fitted videos projected quiet within 30 days
- A video projected quiet within two weeks
- Before / after a title or thumbnail change
- How a title or thumbnail change reshuffled traffic sources
- How often a video was iterated on
- Whether iterations moved the metric
- How fast YouTube is testing a video
- An impression spike and what followed it
What this site counts about you
3 thingsThis site counts three things, each only as a daily total: the steps of connecting a channel, an owner opening their private dashboard, and a download of a channel’s data file. None of the totals says who, or which channel, and all of them are published in full. The daily counts.
Reading needs no account and sets no cookies of its own; a few of your own settings — the theme, whether motion plays — are remembered in your browser and go nowhere else. Signing in does set a session cookie, and that is the only place an account exists: the console a channel owner uses to choose what their channel shows.
Keep verifying
The rest of the record
Methods says how a number is made. These say what the record currently holds.