beta

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.

The detector statuses are read across every connected channel’s tracked data, through Oct 24, 2026; this record’s own resolved calls are read from the featured channel’s. The replay figures below cover every connected channel.

What the projections were worth

Replayed Oct 24, 2026

Every 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

    Renders

    This 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 render

    Calls 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

    Renders

    Every 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.

The replay last ran on Oct 24, 2026, inside the nightly build. Every call it scored is in the channel files themselves.

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.

  1. 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.

  2. One read a day

    06:00 UTC daily

    A 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.

  3. The seam

    Data through Oct 22, 2026

    YouTube'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.

  4. The file

    102 tables · schema v85

    Each 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.

  5. The reading

    82 patterns

    Pure 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 conditions

Every 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.js

    Resolves the reporting cutoff at build time and publishes it as data_status.reporting_cutoff.

  • dashboard/src/lib/db/index.ts · getReportingCutoff

    Reports that published stamp to every reader; all charts filter to date ≤ cutoff.

Surfaced on each channel’s Dashboard, Honesty
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.ts

    All summary CTEs include WHERE pre_publish_stub = 0.

  • scripts/build-public-db.js

    Sets pre_publish_stub = 1 when date < published_at for the video.

Surfaced on each channel’s HonestySince 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.js

    Builds what a click rate is compared against, at three levels: the shared pool, this channel, and each traffic source.

  • dashboard/src/lib/ctr-posterior.ts

    Turns one video's clicks and impressions into the rate to show and the range around it.

  • dashboard/src/components/CtrRange.tsx

    Draws the rate and its range on every CTR display.

  • dashboard/src/lib/ctr-confidence.ts

    The four impression tiers, kept as a density hint on how loudly to draw a number — no longer what decides whether it appears.

Surfaced on each channel’s Videos, HonestySince 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

    AVD confidence boundaries classified at build time; the tier rides every avd_confidence column.

Surfaced on each channel’s Videos, HonestySince 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

    Computes the channel-level unattributed impression share.

Surfaced on each channel’s Traffic, HonestySince 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

    Returns the per-day delta between channel snapshot and per-video sum.

Surfaced on each channel’s Honesty

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

    Excludes comment text and non-public videos from the public dataset at build time.

Surfaced on each channel’s Data, Gaps

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.

Surfaced on each channel’s Gaps
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.

Surfaced on each channel’s Gaps

The arguments against

5 disclosures

For 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

    What the app says

    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.

    Strongest counter-argument

    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.

    Guardrail in the code

    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.

    Why it still ships

    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.

    Conditionssnapshot-reconciliation

  • Traffic-source attribution gaps

    What the app says

    Traffic source breakdowns claim to show where views came from (Browse, Search, Suggested, External, etc.).

    Strongest counter-argument

    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.

    Guardrail in the code

    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.

    Why it still ships

    Attribution data is the best available signal for how videos reach viewers. The unattributed gap is visible, not hidden, so readers can calibrate accordingly.

    Conditionsunattributed-impressions

  • Edit before/after observational limits

    What the app says

    The Changes page shows click rate before and after a title or thumbnail change, implying a before/after comparison.

    Strongest counter-argument

    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.

    Guardrail in the code

    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.

    Why it still ships

    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.

    Conditionsctr-thin-sample

  • Wisdom threshold flips near boundaries

    What the app says

    The Research belief ledger renders verdicts (agrees / disagrees / inconclusive / not currently testable) on conventional YouTube creator beliefs using a channel's own data.

    Strongest counter-argument

    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.

    Guardrail in the code

    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.

    Why it still ships

    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

    What the app says

    The channel page surfaces one reading per render, selected from the full detector inventory.

    Strongest counter-argument

    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.

    Guardrail in the code

    The Methods page lists every detector with its activation stage and sample-size threshold. The selection algorithm is transparent about its priority ordering.

    Why it still ships

    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 matched

Every 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 recently active — Matched a pattern within the last 28 days.1 quiet for now — Matched earlier in the channel's history, quiet in the recent window.27 not yet on its own line — Watching, but not yet reported on its own line — some patterns report through a shared slot.

  • 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 things

This 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.