Site Reports
Every site I launch needs someone to look at its numbers. This does it for me: it reads Google Analytics for each site and sends a daily, a weekly and a monthly report to Telegram. It runs on GitHub Actions, so it does not depend on my machine being on, and it installs nothing: the package has zero dependencies.
- 2026
- Workflow
- CLI
In short
- Covers
- 3 sites in 3 project groups, from one JSON file
- Schedule
- Daily at 07:30, weekly on Monday 09:00, monthly on the 1st at 09:30 (Istanbul time)
- Runs on
- GitHub Actions, Node 22, 10 minute limit
- Dependencies
- 0. The Google Analytics client is written by hand on Node's built-in modules
- Language model
- None in the daily report. An optional comment on the weekly and monthly ones
- Secrets
- In GitHub Actions only; none in the repository
Deterministic where it counts
The daily report is arithmetic. A site that deviates from its own baseline is shown, the normal ones are folded into one line, and the same input always produces the same message. A language model there would add cost and noise, and a report that words things differently every morning is harder to scan.
The weekly and monthly reports can carry a short written comment from Claude. It is optional by construction: with no API key the step is skipped without an error and the report goes out without it.
Zero dependencies, on purpose
A scheduled job that starts with an install step can break on a day nobody touched it. This one imports only what ships with Node, including the signing of the Google service account token, so a run is a checkout and a script.
A site with no analytics property attached yet is not an error. The report says so in words and carries on.