A Practical Guide to Automating Weekly Reports
Weekly reports are the automation everyone builds eventually, and almost everyone builds it badly the first time. This post walks through a version that's held up for us for over a year without needing a rewrite.
Start with the trigger, not the report. Ours fires every Monday at 07:00 in the workspace's local timezone, which matters more than it sounds like - a report that lands at 3am gets ignored, one that lands at 7am gets read over coffee.
Pull each data source into its own step rather than one giant query. We fetch usage metrics, support ticket counts, and revenue figures as three independent steps that run in parallel, then join them in a fourth step. When one source is briefly unavailable, the other two still complete and the report notes what's missing instead of failing outright.
Formatting matters more than people expect. We render the summary as a short paragraph followed by a table, not a wall of numbers. The paragraph answers 'is this a normal week', and the table answers 'which numbers, exactly'.
Finally, keep a manual override. Every automated report has a 'send now' button in the dashboard, because the one week you need the report early is never the week the schedule cooperates.
A smaller thing that mattered more than expected: naming the report run something a human would recognize, not an autoincrementing ID. We tag each run with the ISO week number and a short hash, so 'weekly-report-2026-W09-a4f1' shows up the same way in logs, in the Slack message, and in the automation history.
We also learned to budget for partial failures explicitly rather than treating them as exceptional. Early versions of this automation failed the entire run if any one data source timed out, which meant a single flaky API call could silence the whole report. The current version treats 'usage metrics unavailable' as a fact to report, not an error to crash on.
If you're building something similar, resist the urge to make the report configurable before you've run it manually for a month. We spent a week building a settings page for report sections before realizing nobody on our own team had asked to change a single section - the configurability was solving a problem we invented, not one anyone had.
The automation now runs unattended most weeks. The exceptions are the weeks somebody's added a new data source, at which point the report briefly gets a fourth panel that looks a little crooked until someone tidies the formatting - a reasonable trade for how rarely it needs a human at all.