The dataThrough Jun 11, 2026

Take the data home.

The SQLite file behind this site is yours to download. Open it in any SQL client, browse it in the in-browser Playground, or hand it to an AI with the prompts further down the page. Daily reads, video states, traffic patterns, and every raw row are inside.

Data through Jun 11, 2026

YouTube's reporting tends to lag 2–3 days behind real time. Newer activity may not yet appear.

This database was built at 2026-06-13T07:20:34.890Z. Daily aggregates typically reflect data through 2026-06-11.

v65

schema revision

Changelog ↓

The dataset

Download the .db

SQLite, with titles + ids — everything the site shows. Ships gzipped (one gunzip away from a regular .db). Open it in any SQL client — DB Browser for SQLite, DBeaver, or the sqlite3 CLI. The AI prompts further down the page are an alternative path, not the only one.

8,035

rows across 84tables & views

Tables
84
Rows
8,035
Refreshed
Daily

Largest tables, by row count

  • _column_catalog1,191
  • channel_timeline_event610
  • app_wisdom_verdict_daily550
  • summary_video_trajectory_cone501
  • cohort_video_traffic_age_window459

First step from here

Open it however you read SQL.

The file works in any SQLite client. Browse the schema in the in-browser Playground, or upload it to an AI model that accepts file attachments — there is a primed prompt further down the page.

  1. Open it locally. Any SQLite client reads it — DB Browser for SQLite, DBeaver, or the sqlite3 CLI.
  2. Browse it in the browser. The SQL Playground runs queries against the same file without any install.
  3. Hand it to an AI. Upload the .db to Claude, ChatGPT, or Gemini Advanced and start with the primed first prompt lower on this page.

Two DBs, two jobs

Analyst-mode .db

Same channel, same dates, same raw numbers as the file above. What is stripped: timeline headlines, dashboard verdicts, wisdom labels, and per-row interpretive columns (lifecycle tags, the click-vs-watch grouping, change verdicts). What stays: every raw / summary / cohort / event table, plus all forecast tables and the calibration log. The point is that an LLM loading this DB has no stored conclusions to parrot — it reasons from the numbers.

Download analyst-mode .db.gz

theartharrison-stats.db

The dashboard DB. Carries the same data plus the prose surfaces the site renders — timeline headlines, dashboard briefings, wisdom verdicts, lifecycle labels. Use this one when you want a fast read along with the site’s own determinations.

theartharrison-analysis.db

The analyst-mode DB. Same raw + forecast + calibration tables. Narrative prose, verdict labels, and per-row interpretive columns are gone. Use this one when you want an LLM to do its own reasoning rather than relay the dashboard’s.

Analyst prompt

Paste alongside your upload of theartharrison-analysis.db

Independent analyst over the analysis DB

Frames the chat as an analyst reasoning from the data. Sets the voice rules — hedged forecasts, calibration honesty, observation over advice — that the dashboard itself follows.

Show the full prompt

01

How the data was made

Methodology and the honest conditions under which every chart was drawn — reporting lag, stub rows, sample confidence, unattributed impressions, snapshot reconciliation. Everything that orients the file before you trust a number in it.

Analyst-ready layer

The database carries the first read.

These tables turn the raw YouTube export into the same daily observations the site shows: what changed, what carried the channel, and what is still too small to read.

channel_signal_daily14 rows

The behind-the-scenes comparisons that decide what is worth surfacing.

app_dashboard_briefing_daily14 rows

The short daily read shown on the dashboard and historical snapshots.

video_current_state375 rows

Per-video state by date: launching, quiet, late pickup, current driver, or steady tail.

source_age_pattern_daily155 rows

How each traffic source behaves at launch, in week two, and later in the catalog.

Honesty

What this dataset doesn’t say

A page in an atlas marked “survey conducted under ice cover” is not weakened by the footnote — it’s strengthened. The columns below name the conditions under which every other chart in this dashboard was drawn.

Reporting lag

YouTube reports two to three days behind.

Data flows reliably through 2026-06-11. The dashboard never charts past that date — it would be zeros dressed as truth. Reporting time zone is America/Los_Angeles; a “day” here is a calendar day in PT, not your local time.

Stub rows

10 videos have 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 chart and aggregate filters these out (the pre_publish_stub = 0guard in every summary CTE). These stubs stay in the database for provenance — they’re how we know YouTube did this on this channel.
Per-video pre-publish stub counts (top 5)
When Motivation Dies, Use This Instead1 stub days
The Worst Advice I've Ever Given (That Actually Works)1 stub days
The deafening silence of trying to start something1 stub days
What Do You Do When You Start Doubting Yourself?1 stub days
Watching Others Succeed While You Stay Stuck1 stub days

Click-rate confidence

Where the click rate isn't yet trustworthy, the dashboard says so.

Click rate from fewer than 50 impressions is noise. From 50 to 249 it’s directional. From 250 to 999 it’s readable. From 1,000 or more it’s reliable. The four-segment dotted glyph after every click-rate cell encodes which tier — fewer dots means a thinner sample.

Watch-time confidence

The same tiering applies to average watch time.

Below 10 views, average watch is noise. 10 to 29 is directional. 30 to 99 is readable. 100 or more is reliable. The same four-segment glyph after every average-watch cell.

Source gaps

Almost every impression is attributed to a source.

YouTube’s per-source impression rows don’t always sum to the per-video impression total. The gap is real — some impressions come from sources YouTube doesn’t expose. We surface the gap rather than redistribute it.

0 unattributed of 2,653 total impressions.

Snapshot drift

Channel-level views match the sum of per-video views.

The channel snapshot (my-channel-snapshotsin the database) sometimes shows totals slightly higher than the sum of per-video reporting rows. This is YouTube’s own attribution gap; we chart it instead of hiding it.

Reconciliation chart appears after two weeks of channel-snapshot history.

How is this computed?
The timezone YouTube reporting uses for per-day rollups.
All dates in the public DB are calendar days in YouTube's reporting timezone (America/Los_Angeles, PT), not the visitor's local timezone. A "day" here is a calendar day in PT — a video published at 22:00 PT on Apr 27 will accumulate that day's reporting under the date 2026-04-27, even for viewers in UTC+12.
Flag (0/1) on every per-video reporting row indicating whether the row sits before the video's published_at.
Set to 1 when the row's date is earlier than SUBSTR(published_at, 1, 10). Every summary_* CTE that aggregates over per-video reporting must include WHERE pre_publish_stub = 0 so the seven-row stub artifact (NULL impressions, 0 views) doesn't poison aggregations. The flag itself stays in the DB for downstream provenance.
Sample-size confidence tier for the row's click-through rate; one of noise / low / medium / high.
Derived from the row's impressions sample size. Noise tier when impressions < 50; low when < 250; medium when < 1000; high otherwise. The thresholds are calibrated so that a noise-tier CTR is statistically meaningless (one or two clicks against a tiny denominator).
Sample-size confidence tier for the row's average view duration; one of noise / low / medium / high.
Derived from the row's view sample size — the denominator AVD averages over. Noise tier when views < 10 (one or two viewers' watch time, statistically meaningless); low when views < 30; medium when views < 100; high otherwise. Mirrors the V10 ctr_confidence pattern but keyed on views instead of impressions.
Per-date drift between the channel-level views snapshot and the sum of per-video views.
MAX(0, summary_channel_snapshot_daily.total_views - SUM(video_daily.views WHERE pre_publish_stub = 0)) per date. Reads >0 when the channel-snapshot total exceeds the sum of attributed per-video reporting (e.g. deleted videos, late attribution). Floored at zero so reporting overcounts (per-video sum exceeds channel snapshot — also possible during transient lag) don't render as negative drift.

02

Channel state

Two trailing-window reads on the shape of the channel — its publishing cadence and how evenly views and subscribers are spread across the catalog. Both shapes are common at different stages; neither is the target.

Publishing cadence

The trailing 28-day publish strip plus the detected pattern.

Publishing cadence appears after the first 28 days.

View distribution

How unevenly views and subscribers are distributed across the catalog over time. A higher Gini means a few videos carry most of the recent views or subscribers; a lower Gini means the distribution is more even. Neither shape is the target — both are common at different stages.

Chart loading.

Common advice, checked here

50common creator beliefs, scored against this one channel's data. The full panel with expandable evidence lives at /learnings.

Agree
2
Disagree
1
Still thin
26
Not yet testable
21

03

Ask it yourself

Starter prompts for the AI-path read of the database — optional, not required. Each one names the tables it expects to find, so you can open them in any SQL client instead. The schema reference and changelog sit at the foot.

Start here

Default first question

Start with the daily read

Ask what changed, what carried the channel, and what is still too thin to read.

Show the full prompt

Diagnose growth

Is the channel growing, flat, or declining?

View velocity, spikes, and drops across the channel over time.

Show the full prompt

Is day-1 performance a predictor of lifetime views?

Whether early signals reliably forecast long-term outcomes.

Show the full prompt

Understand the audience

Where are viewers actually finding these videos?

Browse-driven vs Suggested-driven vs Search — by video.

Show the full prompt

How does click rate behave over a video's lifetime?

Does CTR stay stable, or does it drop as YouTube expands the audience?

Show the full prompt

Inspect individual videos

Which videos have potential that hasn't been discovered yet?

Videos with above-average click rate but below-average views.

Show the full prompt

Which videos keep getting views — and which flashed and died?

Flash pattern vs evergreen across the catalog.

Show the full prompt

Which videos convert impressions into watch time most efficiently?

How much viewing time each thumbnail impression generates.

Show the full prompt

Which videos turn viewers into subscribers?

Subscriber conversion rate across the catalog.

Show the full prompt

Synthesis reads

Do videos do better depending on the week they launched?

Launch-week cohorts vs the channel's own baseline — a read Studio doesn't group.

Show the full prompt

How does where views come from change as a video ages?

Source mix normalized by video age across the whole catalog.

Show the full prompt

Have this channel's own forecasts actually held up?

Calibration record by forecast type and horizon, plus tested creator beliefs.

Show the full prompt

How concentrated has the catalog been over time?

Busiest-video share, quiet-catalog share, and source spread, day by day.

Show the full prompt

Go deep

Complete channel audit

Comprehensive read across every table — what's moving, what's stable, what's too thin.

Show the full prompt

How uneven is this channel, really?

One-channel mirror: which videos carried, how long quiet uploads lasted, and whether later videos got picked up.

Show the full prompt
Sample SQL queries (for SQL writers)Open SQL Playground →

Which AI should I use?

These prompts work best with Claude, ChatGPT Plus, or Gemini Advanced— they need file upload and long-context reasoning. Free-tier models will often fail silently on the bigger queries (like "Complete channel audit"). If you have access to Claude Projects or custom GPTs, upload the .db once and keep asking questions.

Where each metric comes from

Subscriber columns come from two independent YouTube APIs. subs_total_eod is a daily snapshot from the Data API. subs_gained and subs_lost are deltas from the Analytics API. Drift between them is expected — they sample at different times of day and use different rounding rules. Each column is authoritative for its own purpose.

FieldAPI source
views, watch_time_minutes, avg_view_duration_sec, avg_view_pct, subs_gained, subs_lost, likes, comments, sharesYouTube Reporting API + Analytics API (reconciled)
impressions, ctrYouTube Reporting API (reach reports)
engaged_views, dislikesYouTube Analytics API only
Country, device_type, subscribed_status dimensionsYouTube Reporting API

Inspection recipes

Each section below names the source tables and starter SQL for one route family. Provenance popovers throughout the dashboard link here. Open the public .db file in any SQLite client to run these directly.

Homepage — hero numeral and channel-state strip

Appears on: Dashboard

Tables
summary_channel, summary_channel_metrics_daily, event_channel_state_change
Columns
current_subscribers, total_views, total_days_tracked, total_impressions, weighted_ctr, subs_net, surface_state, reason_text
Window
Latest snapshot row per table; daily metrics anchored to the reporting cutoff date.
Sample
One channel row and one daily row per render.

Starter SQL

Show the SQL

Traffic — tenacity stats and source totals

Appears on: Traffic · Traffic source detail

Tables
summary_traffic_source_daily, summary_video_traffic, summary_channel_traffic
Columns
traffic_source_id, total_views, total_watch_minutes, weighted_ctr
Window
All tracked days up to the reporting cutoff for active_days; lifetime totals from summary_channel_traffic.
Sample
Active-day count is over rows where total_views > 0 in summary_traffic_source_daily; distinct-video count is from summary_video_traffic (one row per video, source).

Starter SQL

Show the SQL

Compare — video summary cards

Appears on: Compare

Tables
summary_video
Columns
video_id, total_views, weighted_ctr, ctr_confidence, total_impressions
Window
Lifetime per video.
Sample
ctr_confidence tier reflects the total impression sample that feeds weighted_ctr.

Starter SQL

Show the SQL

Changes — title and thumbnail era comparisons

Appears on: Changes

Tables
summary_era
Columns
video_id, field, era_index, weighted_ctr, total_impressions
Window
All era pairs across all public videos.
Sample
Per-era CTR comes from impressions for that era only; pp_change is the delta to the next era for the same field on the same video.

Starter SQL

Show the SQL

Wisdom — belief verdicts

Appears on: Data

Tables
app_wisdom_canon, app_wisdom_test
Columns
test_id, belief_text, status, evidence_json, sample_size, confidence
Window
Per belief: latest snapshot row in app_wisdom_test.
Sample
Each verdict is one row per test_id at the latest snapshot_date.

Starter SQL

Show the SQL

Have a YouTube belief you want tested? or email it directly. Useful submissions get added to the canon — credit appears in the card's source line.

Schema changelog (v5 – v65)

Everything the site shows is in the file — real titles, real IDs, every daily row.