Setup

Total cost: nothing. No database, no auth, no paid API, no Vercel add-on. Roughly ten minutes end to end.

The YouTube APIs are free.

A Google Cloud project costs nothing, the YouTube Data API v3 needs no billing card, and the free quota is 10,000 units per day. This app uses about 5 to 10 units per day — roughly a tenth of one percent of the free allowance.

1. Get a free API key

  1. Go to console.cloud.google.com and create a project. No card required.
  2. APIs & Services → Library → search YouTube Data API v3 → Enable.
  3. APIs & Services → Credentials → Create credentials → API key.
  4. Restrict the key: under API restrictions choose YouTube Data API v3 only. It is a public-data read key, but restricting it means a leak cannot be used against anything else.

2. Find your channel ID

YouTube Studio → Settings → Channel → Advanced settings. It starts with UC. Your @handle also works.

3. Push this repo to GitHub

A private repo is fine. Then in the repo: Settings → Secrets and variables → Actions.

The key goes in Secrets, not Variables — Variables are visible in logs.

4. Run the snapshot once by hand

Actions tab → Daily snapshot → Run workflow. It fetches your public stats, writes data/snapshots/<today>.json, and commits it. After that it runs itself daily at 04:10 UTC.

GitHub pauses scheduled workflows on repos with no activity for 60 days.

The daily commit counts as activity, so this keeps itself alive. If snapshots ever stop, open the Actions tab and re-enable.

5. Deploy to Vercel

  1. vercel.com/new → import the repo → Deploy. Framework detection handles the rest; there are no environment variables to set, because the app reads committed JSON rather than calling any API at runtime.
  2. Hobby plan, free. Each snapshot commit triggers a rebuild automatically, so the dashboard is current within a minute of the daily job.

6. Add the growth data

Watch time, average view duration, impressions and CTR are not available from a public API key — they need either OAuth or a Studio export. Since this build has no auth, use the export:

  1. YouTube Studio → Analytics → Advanced mode.
  2. Pick a date range, choose the Content tab, add the columns you care about.
  3. Export current view → Comma-separated values.
  4. Drop the CSV on the Growth page. It is parsed in your browser and never uploaded anywhere.

Running it locally

npm install
cp .env.example .env.local   # fill in the two values
npm run snapshot             # writes today's snapshot
npm run dev                  # http://localhost:3000

What this app does not do

It does not generate views. It has no proxy support, no headless browser, no automated playback, and the multi-view wall blocks duplicate videos on purpose. See docs/05-compliance-guardrails.md for the full list and the reasoning.