channel_signal_dailyEverything this site shows is in the file — all 4,027 rows.
One SQLite file, refreshed daily: real titles, real video ids, every daily reading, every traffic source, every recorded edit.
The file
The dataset
Download the .db
4,027
Four CSVs, and a live sheet
Live in a sheet
Paste this into an empty cell of a Google Sheet. Sheets fetches video_daily.csv from this address itself, with no sign-in, every time the sheet opens — so it carries the new days as they are reported. A private channel’s file is owner-only, and a sheet pointed at one comes back empty.
=IMPORTDATA("https://openchannelstats.com/@theartharrison/data/video_daily.csv")SQLite, with titles + ids — everything the site shows. The .db button unzips the file here in the browser; the .db.gz beside it hands over the compressed form for a gunzip of your own. 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.
Largest tables, by row count
Two files, two jobs
Analyst-mode .db
Same channel, same dates, same raw numbers as the file beside it. 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 and event table, plus all forecast tables and the calibration log. A model loading this file has no stored conclusions to parrot — it reasons from the numbers.
First step from here
Open it however you read SQL.
- Open it locally. Any SQLite client reads it — DB Browser for SQLite, DBeaver, or the
sqlite3CLI. - Browse it in the browser. The SQL Playground runs queries against the same file without any install.
- Hand it to a model. Upload the .db and start with the primed first prompt below.
Hand it to a model
15 prompts
Optional, and never the only path — every prompt names the tables it expects, so the same questions open in a SQL client. Paste the record, or upload the file and paste a prompt.
No upload needed
This copies the whole record and its opening line to the clipboard as plain text. It fits a free chat tier, so the questions below open without an upload and without an account.
Start here
Start with the daily read
Show the full promptHide the full prompt
Analyst prompt
Independent analyst over the analysis DB
Show the full promptHide the full prompt
14 more prompts
Diagnose growth
Is the channel growing, flat, or declining?
Show the full promptHide the full prompt
Is day-1 performance a predictor of lifetime views?
Show the full promptHide the full prompt
Understand the audience
Where are viewers actually finding these videos?
Show the full promptHide the full prompt
How does CTR behave over a video's lifetime?
Show the full promptHide the full prompt
Inspect individual videos
Which videos got clicked at a high rate but few views?
Show the full promptHide the full prompt
Which videos keep getting views — and which flashed and died?
Show the full promptHide the full prompt
Which videos convert impressions into watch time most efficiently?
Show the full promptHide the full prompt
Which videos turn viewers into subscribers?
Show the full promptHide the full prompt
Synthesis reads
Do videos do better depending on the week they launched?
Show the full promptHide the full prompt
How does where views come from change as a video ages?
Show the full promptHide the full prompt
Have this channel's own forecasts actually held up?
Show the full promptHide the full prompt
How concentrated has the catalog been over time?
Show the full promptHide the full prompt
Go deep
Complete channel audit
Show the full promptHide the full prompt
How uneven is this channel, really?
Show the full promptHide the full prompt
Sample SQL queries (for SQL writers)Open SQL Playground →
What's in the file
102 datasets · 1,339 columns
Every table and view the file carries, described by the file itself. Open one for its grain, its columns, what to read it with in mind, and the datasets it sits beside.
Videos
14 datasets
One row per video, and one row per video per day — titles, ids, views, watch time, retention, and the shape of each video's own run.
cohort_video_launch_age_window11 rowsPer-(video, age-window) launch-context metrics: views, CTR, retention bucketed by days since publish.Loading this dataset's detail…
event_video_phase_transition1 rowOne row per detected lifecycle-phase transition (consecutive days where stage[d] != stage[d-1] in summary_video_stage_daily).Loading this dataset's detail…
summary_channel_cohort2 rowsPer-ISO-week cohort rollup of videos published that week.Loading this dataset's detail…
summary_videoStart here11 rowsOne row per public video.Loading this dataset's detail…
summary_video_daily_rank16 rowsPer-(video, day) channel-internal rank by daily views.Loading this dataset's detail…
summary_video_launch_context11 rowsPer-video launch-context snapshot: channel-wide state at publish (subscriber count, recent average daily views, publish gap, last era swap).Loading this dataset's detail…
summary_video_nearest_peersno rows yetTop-5 nearest peers per video by trajectory similarity (cosine distance over the cumulative-views vector during the first 30 post-publish days).Loading this dataset's detail…
summary_video_retention_curveno rows yetThe audience-retention curve per video: one point per (video, elapsed-time ratio) showing how much of the audience was still watching at that fraction of the video.Loading this dataset's detail…
summary_video_stage_daily16 rowsPer-(video, day) lifecycle-stage classification (e.g. ramp, plateau, decay) based on the video's own velocity curve.Loading this dataset's detail…
v_video_stateStart here11 rowsPer-video state convenience view joiningvideo,summary_video, andvideo_current_state.Loading this dataset's detail…
videoStart here11 rowsOne row per public video on the channel.Loading this dataset's detail…
video_current_state36 rowsPer-video snapshot of the most recent lifecycle / decay state flags.Loading this dataset's detail…
video_daily22 rowsPer-(video, day) metrics from the YouTube Analytics + Reporting APIs: views, watch time, impressions, click rate, average view duration, average view percentage, subscribers gained/lost, likes, comments, shares.Loading this dataset's detail…
video_daily_cleanStart here16 rowsStub-clean view overvideo_daily—WHERE pre_publish_stub = 0.Loading this dataset's detail…
Traffic and audience
31 datasets
Where the views came from — Browse, Suggested, Search, External — plus impressions, click rate, and the countries watching.
cohort_video_geography_age_window4 rowsPer-(video, country, age-window) view counts.Loading this dataset's detail…
cohort_video_traffic_age_window17 rowsPer-(video, source, age-window) view counts.Loading this dataset's detail…
event_country_first_view4 rowsOne row per country marking the date the channel received its first view from there.Loading this dataset's detail…
event_source_first_view6 rowsFirst date each (video, traffic source) recorded any views.Loading this dataset's detail…
source_age_pattern_daily43 rowsPer-source age-curve template: median view share at eachdays_since_publish.Loading this dataset's detail…
summary_channel_country_cohort_stability5 rowsPer-country cohort stability: how much the country's relative share has drifted over rolling windows.Loading this dataset's detail…
summary_channel_country_daily5 rowsPer-(country, day) channel-wide views, watch time, and subscribers gained.Loading this dataset's detail…
summary_channel_country_trailing301 rowPer-country trailing-30-day channel-wide rollup: views, watch hours, share of total.Loading this dataset's detail…
summary_channel_device_daily4 rowsPer-day views, watch time and average view duration by the kind of device the view happened on, with the trailing-28-day view sum and that device's share of it.Loading this dataset's detail…
summary_channel_embed_hostno rows yetThe sites that embed this channel's videos, top 20 by lifetime views, with each site's views over the trailing 28 reported days.Loading this dataset's detail…
summary_channel_playback_daily2 rowsPer-day views, watch time and average view duration by where the video was played — the YouTube watch page, an embedded player on another site, a channel page, and so on — with the trailing-28-day view sum and that location's share of it.Loading this dataset's detail…
summary_channel_source_geo_daily6 rowsJoint (source × country) channel-wide daily view counts.Loading this dataset's detail…
summary_channel_source_leading_indicator6 rowsPer-source leading-indicator score: how reliably this source's daily movement predicts the next-week channel-wide trend.Loading this dataset's detail…
summary_channel_source_subscribed1 rowViews by traffic source and subscription state, lifetime and over the trailing 28 reported days.Loading this dataset's detail…
summary_channel_subscribed_daily3 rowsThe channel's per-day views, watch time and average view duration split by whether the viewer was already subscribed when the view happened.Loading this dataset's detail…
summary_channel_threshold_impression_pattern1 rowChannel-pattern memory for the "does a click-rate or watch-duration jump on one of this channel's older videos tend to be followed by a step-up in YouTube's impressions to that video?" question.Loading this dataset's detail…
summary_channel_traffic4 rowsLifetime per-source channel-wide rollup: views, watch hours, average view percentage, subscribers gained, weighted CTR.Loading this dataset's detail…
summary_traffic_source_daily6 rowsChannel-wide per-source daily aggregates: views, watch hours, average view percentage, weighted CTR, subscribers gained.Loading this dataset's detail…
summary_traffic_source_daily_history6 rowsLongitudinal store ofsummary_traffic_source_daily, kept across rebuilds so detectors needing historical context can read it without re-aggregating raw traffic_daily on every read.Loading this dataset's detail…
summary_traffic_source_detail9 rowsWhat YouTube attributed each traffic source's views to: the search term for YouTube Search, the referring video for Suggested and End screens, the referring channel for channel pages, the referring site for External.Loading this dataset's detail…
summary_traffic_top_videos_by_source12 rowsTop videos per traffic source by lifetime views.Loading this dataset's detail…
summary_video_audience3 rowsPer video, the device and the playback location that brought most of its views, and each leader's share of that video's views.Loading this dataset's detail…
summary_video_country_daily5 rowsPer-(video, country, day) view counts.Loading this dataset's detail…
summary_video_country_lifetimeno rows yetPer-(video, country) lifetime views, watch hours, retention, and subscribers gained.Loading this dataset's detail…
summary_video_subscribed1 rowEach video's lifetime views, watch time and average view duration split by subscription state, plus the views that state brought on the video's publish date.Loading this dataset's detail…
summary_video_traffic12 rowsPer-(video, source) lifetime view share, CTR, retention.Loading this dataset's detail…
traffic_daily17 rowsPer-(video, source, day) view and click-rate share.Loading this dataset's detail…
traffic_daily_cleanStart here17 rowsStub-clean view overtraffic_daily—WHERE pre_publish_stub = 0.Loading this dataset's detail…
traffic_sourceStart here24 rowsLookup table mapping YouTube's numeric traffic_source_id to a stable display name and human-readable description (e.g.Loading this dataset's detail…
v_traffic_daily_labeledStart here17 rowstraffic_daily_cleanjoined totraffic_sourceso the source display name appears alongside the numeric source_id.Loading this dataset's detail…
The channel, day by day
11 datasets
Channel-level totals and daily snapshots: views, subscribers, publishing cadence, and how concentrated the catalog has been.
channel_cadence_dailyno rows yetPer-day publish-cadence state: rolling average gap between publishes, classifier output (steady, cadence_break, etc.), and per-day-of-week trend evidence.Loading this dataset's detail…
channel_phase_logno rows yetLog of channel-wide maturity-phase transitions.Loading this dataset's detail…
channel_signal_daily6 rowsLong-format per-(date, signal) feed of channel-wide signal values that don't fit the widesummary_channel_metrics_dailyschema.Loading this dataset's detail…
summary_channelStart here1 rowSingle-row channel-wide lifetime summary: video count, total views, total watch hours, subscriber count, channel-internal medians (CTR, retention, impression-to-view ratio), library half-mass video count, maturity stage, funnel pcts.Loading this dataset's detail…
summary_channel_catalog_pressure_daily6 rowsDaily catalog-shape signals: count of videos receiving views, Gini-style concentration metrics, and pressure indicators describing how evenly attention is distributed across the catalog.Loading this dataset's detail…
summary_channel_metrics_dailyStart here6 rowsChannel-wide daily aggregates: views, impressions, weighted CTR, subscriber net change, plus rolling 7d / 28d windows, source-mix diversity, top-video share, quiet-inventory share, and per-stage video counts.Loading this dataset's detail…
summary_channel_narrative_arc1 rowMacro-structure of the channel's life as a small set of contiguous multi-week windows ("arcs" / movements) that the /story scroll choreographs against — pacing and motion shift at arc boundaries.Loading this dataset's detail…
summary_channel_snapshot_daily7 rowsDaily snapshot of subscriber count and lifetime view count from the YouTube Data API.Loading this dataset's detail…
summary_channel_stage_snapshot6 rowsSix rows — one per fixed channel-maturity stage (seedling → established).Loading this dataset's detail…
summary_subscriber_event_dailyno rows yetPer-(date, video, kind) subscriber-loss and surge events.Loading this dataset's detail…
v_latest_channel_stateStart here1 rowSingle-row view of the most recentsummary_channel_metrics_dailyrow joined withsummary_channel_snapshot_dailyfor the same date.Loading this dataset's detail…
Changes and events
14 datasets
Title and thumbnail edits, the eras between them, milestones, owner notes, and every dated event on the record.
channel_timeline_eventStart here100 rowsUnified event ledger: publish, milestone, insight, stat_snapshot, rank_change, first_external, note, subscriber_loss_event, stage_transition, era_start, audience_expansion, source_quiet, creator_event.Loading this dataset's detail…
cohort_channel_change_verdictno rows yetChannel-scope mirror ofcohort_video_change_verdict.Loading this dataset's detail…
cohort_video_change_verdict16 rowsBefore/after rollup per video pivot (era boundary, subscriber-loss event, or hand-authored note).Loading this dataset's detail…
event_channel_annotationno rows yetOwner-authored timeline annotations — the channel's own notes (written in the account console, stored per channel) and, on a local build,pipeline/creator-events.yaml.Loading this dataset's detail…
event_channel_state_change6 rowsChannel-wide state transitions (CUSUM step-change detections).Loading this dataset's detail…
event_creator_edit9 rowsOne row per field-level edit detected by diffing successive YouTube Data API snapshots.Loading this dataset's detail…
summary_creator_edits_daily3 rowsDaily count of creator edits across all videos plus field-level breakdowns (title, thumbnail, description, tags).Loading this dataset's detail…
summary_creator_edits_monthly1 rowMonthly rollup of creator edits.Loading this dataset's detail…
summary_creator_edits_weekly2 rowsWeekly rollup of creator edits with field-level breakdowns.Loading this dataset's detail…
summary_edit_view_position6 rowsPer-edit context: cumulative view percentage and lifecycle phase at the moment the edit happened.Loading this dataset's detail…
summary_era22 rowsOne row per (video, era) with weighted CTR, total impressions, average retention, and view share.Loading this dataset's detail…
summary_field_co_changeno rows yetPairwise co-occurrence of edit field combinations: how often title + thumbnail are swapped together, etc.Loading this dataset's detail…
v_event_ledgerStart here125 rowsUnified event view spanningchannel_timeline_eventplus the typed event_* tables (event_creator_edit,event_channel_annotation, etc.).Loading this dataset's detail…
video_era22 rowsTitle/thumbnail eras per video.Loading this dataset's detail…
What's next
10 datasets
Projections, decay curves, and the calibration logs that record how earlier projections actually turned out.
app_decay_curve_library56 rowsThe two decay shapes a catalogue actually carries, learned from the data rather than assumed.Loading this dataset's detail…
app_video_forecast_prior16 rowsThe video-grain "what's likely next" empirical-Bayes prior, per snapshot: one row per this channel's own videos whose own (noisy, short-history) per-day-views decay rate is shrunk toward the cross-channel cohort's typical decay rate.Loading this dataset's detail…
forecast_calibration_log33 rowsAppend-only credibility ledger for BOTH forecast layers.Loading this dataset's detail…
forecast_decay_history18 rowsAppend-only per-(snapshot_date, video_id) snapshots of summary_video_decay_model.Loading this dataset's detail…
forecast_video_calibration_log21 rowsAppend-only credibility ledger for the per-video forecast layer — the video-grain mirror of forecast_calibration_log.Loading this dataset's detail…
summary_channel_forecast8 rowsHorizon-banded channel-level forecast.Loading this dataset's detail…
summary_channel_regime_forecast1 rowJoint-trajectory regime-transition forecast — one row per as_of_date carrying the channel's currently-classified surface state, the projected next state, and the expected transition window with uncertainty bands.Loading this dataset's detail…
summary_threshold_projection3 rowsForward-looking projection of when the channel reaches the next round threshold (subscribers / cumulative views / video count).Loading this dataset's detail…
summary_video_decay_model11 rowsPer-video decay model parameters: exponential / power-law fit coefficients, fit quality, and projected forward views over the next 30 / 90 days.Loading this dataset's detail…
summary_video_trajectory_cone44 rowsPer-(video, age_days) percentile-band trajectory cone (p10/p25/median/p75/p90 + mean + peer_count) over the channel's OTHER videos at the same age.Loading this dataset's detail…
The shared pool
2 datasets
The cross-channel context this channel is read against — cohort cells and the named side-by-side rows.
app_pool_cell_stat1,058 rowsStage-3 shared-pool aggregate slot, per snapshot: this channel's deciding cohort cell for each pool metric (views_28d, subs_28d, uploads_28d, video_day7_views, ctr_28d, the five traffic_*_share_28d mix shares (browse / suggested / search / external / Shorts feed), video_retention_half) — exactly one row per (metric, snapshot_date).Loading this dataset's detail…
app_pool_named_peer16 rowsThe open pool's named side-by-side rows, per snapshot: one row per channel that is currently BOTH public and pool-consented (this channel included when eligible).Loading this dataset's detail…
About this file
9 datasets
The file's own documentation: what each table and column means, worked query examples, the schema revision, and what data was available when.
_aboutStart here24 rowsSingle-row product orientation.Loading this dataset's detail…
_column_catalogStart here1,339 rowsOne row per column in every table and view.Loading this dataset's detail…
_json_schema48 rowsShape documentation for columns that store JSON text.Loading this dataset's detail…
_query_examplesStart here41 rowsGolden-path SQL examples.Loading this dataset's detail…
_table_catalogStart here102 rowsIndex of every table and view in the public DB.Loading this dataset's detail…
data_status6 rowsOne row per data domain (views, impressions, traffic_sources, channel_snapshots, reporting_timezone) with available_from / available_to date range and a human note.Loading this dataset's detail…
engagement_weights1 rowConfigurable weights table used by composite scores.Loading this dataset's detail…
metric_metadata30 rowsSemantic-metric definitions: each row carries a metric_id (e.g.Loading this dataset's detail…
schema_version81 rowsAppend-only log of schema versions withapplied_attimestamps and a short note per version.Loading this dataset's detail…
The app's own working tables
11 datasets
Tables that exist to render this site rather than to describe the channel. Useful for reproducing a surface; skip them when analysing the channel itself.
app_ctr_prior6 rowsWhat a click rate is compared against, at three levels.Loading this dataset's detail…
app_dashboard_briefing_daily6 rowsOne row per day with the dashboard's "today vs yesterday" briefing copy precomputed.Loading this dataset's detail…
app_detector_activity3 rowsPer-detector activity rollup overapp_insight_snapshot: total_fires, first/last fired date, highest significance score and date.Loading this dataset's detail…
app_detector_lifetime9 rowsPer-detector LIFETIME accumulator. app_detector_activity is a window rollup over the retained ~90-day app_insight_snapshot tail; this table survives the prune by folding each new snapshot date's fires forward, so total_fires / first_fired_date are lifetime- accurate. scope='slot' mirrors the raw prose-routing-slot aggregation; scope='logical' is the recovered logical-detector aggregation.Loading this dataset's detail…
app_insight_snapshot26 rowsDaily snapshot of insight engine output.Loading this dataset's detail…
app_metric_zscore_dailyno rows yetPer-(metric, day) comparison of a trailing-7 value against the 28 days before it, in two readings:zscorein natural units (how many baseline standard deviations away) andsurpriseas a rank percentile bounded to [-1, 1].Loading this dataset's detail…
app_wisdom_canon50 rowsCanonical list of YouTube growth beliefs the channel tests.Loading this dataset's detail…
app_wisdom_flip_lifetime50 rowsPer-belief LIFETIME accumulator for the wisdom-flip history. app_wisdom_verdict_daily is bounded to a ~90-day tail, so a whole-ledger aggregate would go window-relative; this table folds each new verdict date forward so flip_count, first_seen_date, last_changed_date and current_streak_days stay lifetime-accurate.Loading this dataset's detail…
app_wisdom_test50 rowsLatest verdict per wisdom test.Loading this dataset's detail…
app_wisdom_verdict_daily300 rowsVerdict history per wisdom test.Loading this dataset's detail…
owner_read_daily6 rowsOne consolidated "today's read" row persnapshot_date— the synthesis the home/digest surfaces lead with.Loading this dataset's detail…
How the record is made
The conditions every number on this site was drawn under — reporting lag, stub rows, unattributed impressions, snapshot reconciliation, and what is knowably missing. Read this before trusting a figure in the file.
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.
app_dashboard_briefing_dailyvideo_current_statesource_age_pattern_dailyHonesty
What this dataset doesn’t say
Reporting lag
YouTube reports two to three days behind.
America/Los_Angeles; a “day” here is a calendar day in PT, not your local time.Impressions window
Impressions cover days from Sep 12, 2026 forward.
Stub rows
6 videos have pre-publish stub rows.
pre_publish_stub = 0 guard in every summary CTE). These stubs stay in the database for provenance — they’re how we know YouTube did this on this channel.| Why I Told 2,500 People I Was Failing | 1 stub day |
| Why I Risked a Good Job with Two Kids at Home | 1 stub day |
| How to Make a Big Decision Before Waiting Makes It for You | 1 stub day |
| The Sleep Disorder My Doctors Called Fear of Success | 1 stub day |
| You Can Start Over Without Starting from Zero | 1 stub day |
Click-rate confidence
Where the click rate isn't yet trustworthy, the dashboard says so.
noise; 50 to 249 as low; 250 to 999 as medium; 1,000 or more as high. 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.
noise; 10 to 29 as low; 30 to 99 as medium; 100 or more as high. The same four-segment glyph after every average-view-duration cell.Source gaps
Almost every impression is attributed to a source.
Snapshot drift
Channel-level views match the sum of per-video views.
summary_channel_snapshot_daily in 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.Where each metric comes from
| Field | API source |
|---|---|
| views, watch_time_minutes, avg_view_duration_sec, avg_view_pct, subs_gained, subs_lost, likes, comments, shares | YouTube Reporting API + Analytics API (reconciled) |
| impressions, ctr | YouTube Reporting API (reach reports) |
| engaged_views, dislikes | YouTube Analytics API only |
| country_code | YouTube Reporting API (every view-carrying report) |
| subscribed_status | YouTube Reporting API — reported for some views, not all, so a split states what it is a share of |
| device_type, playback_location_type | YouTube Reporting API (two optional reports — a channel that has them switched off carries no rows) |
Inspection recipes
Homepage — hero numeral and channel-state strip
Starter SQL
Show the SQLHide the SQL
Traffic — tenacity stats and source totals
Starter SQL
Show the SQLHide the SQL
Video summary cards — per-video lifetime figures
Starter SQL
Show the SQLHide the SQL
Changes — title and thumbnail era comparisons
Starter SQL
Show the SQLHide the SQL
Wisdom — belief verdicts
Starter SQL
Show the SQLHide the SQL
Schema changelog (v5 – v85)
The same rows, drawn
What a few of these datasets look like when they are drawn instead of queried. Each one names the dataset it came from.
The full video table
Drawn from summary_video
The table draws in your browser when this section is open. Without JavaScript it stays in the file: summary_video carries the same rows.
Publishing cadence
The trailing 28-day publish strip plus the detected pattern.
Not enough tracked days yet to read a publishing pattern (28-day window).
Drawn from channel_cadence_daily
View distribution
How unevenly views and subscribers are spread across the catalog over time. A higher figure means a few videos carry most of the recent views or subscribers; a lower one means the spread is more even. Neither shape is the target — both are common at different stages.
Drawn from summary_channel_metrics_daily
Common advice, checked here
Go further
Two doors past the download: run SQL against this file without installing anything, or put a belief up for testing against every channel in the pool. Below them, the addresses a script reads this channel's files from.
Advanced
SQL Playground
The same file, loaded into your browser and queried there. Read-only, no upload, no account — the query never leaves the page. Worked starters are built in, and results export as CSV.
The addresses a script reads this channel from
No key, no registration. A plain HTTP GET returns each file, and each has a checksum sidecar at the same address with .sha256 appended.
curl -sO https://openchannelstats.com/@theartharrison/data/videos.csvcurl -sO https://openchannelstats.com/@theartharrison/data/video_daily.csvcurl -sO https://openchannelstats.com/@theartharrison/data/traffic_daily.csvcurl -sO https://openchannelstats.com/@theartharrison/data/channel_daily.csvcurl -sO https://openchannelstats.com/@theartharrison/data/ytpool-analysis.db.gzcurl -sO https://openchannelstats.com/@theartharrison/data/brief.mdcurl -sO https://openchannelstats.com/@theartharrison/data/README.mdcurl -sO https://openchannelstats.com/@theartharrison/data/SCHEMA.mdcurl -sO https://openchannelstats.com/@theartharrison/data/channel-stats.jsoncurl -sO https://openchannelstats.com/@theartharrison/data/ytpool-public.db.gz
A public channel’s files answer anyone; a private channel’s answer only its owner’s signed-in session, and everything else gets the same 404. Responses are not cached, so a channel that turns private goes dark at once — each one carries an ETag instead, which a script can send back as If-None-Match to get a 304 and skip a download that would change nothing.