How I cut weekly reporting from three hours to three minutes
Automating Northwind's recurring management report — the one nobody wanted to write.
By Awadesh Madhogaria · Published Jul 24, 2025
Every Friday, someone at Northwind lost an afternoon to the weekly management report. It was nobody’s favourite job, it was always slightly late, and the four people who read it skimmed it in two minutes flat.
That is the textbook profile of a task worth automating: high effort, low joy, and completely predictable. The report itself pulled together four things — pipeline status across every open deal, invoices sent in the last week, hours logged per project, and an “anything stuck” section for blockers worth a partner’s attention. None of it was hard. It was just tedious: copy from one sheet, paste into a Doc, reformat, export a PDF, write the email, attach, send, every single week.
And the real cost was bigger than the three hours. The report often slipped to Monday because Friday ran out of time, whoever drew the short straw quietly resented it, and the formatting drifted so that every week looked subtly different from the last. Here is how I turned that ritual into a script that runs while I make coffee.
How it works
The key realisation was that every input already lived in a sheet. Nobody needed to gather data — they only needed it assembled and dressed up. So the script does exactly the boring part and nothing else:
- A time-based trigger fires every Friday at 4pm.
- The script pulls pipeline, invoices, and hours from their source sheets.
- It opens a Doc template and replaces merge tokens with the week’s numbers — the same pattern as Generate a weekly report Doc from Sheet data.
- It saves the finished Doc as a PDF.
- It emails the four partners with the PDF attached and a one-line summary in the body.
Total runtime is about three minutes, most of it spent waiting on the PDF export. The outcome is a consistent, on-time report with zero human formatting work.
What I left manual, and what I would change
Not everything belonged in the script. The “anything stuck” section needs
judgement — a script cannot tell that a client has gone quiet in a way that
should worry someone. So I did not automate it. Instead I added a dedicated
Stuck sheet that anyone can drop a row into during the week, and the script
simply includes whatever is there at report time. Human judgement goes in, manual
formatting comes out. That split — automate the assembly, keep the judgement — is
the pattern I now reuse on every reporting job.
A couple of things I would do differently with hindsight. I hard-coded the partner email list, and three weeks later we added a partner, so I had to edit the script; it should have read recipients from a sheet. The first version also emailed even when a source sheet was empty, so now it checks for data and skips a section cleanly rather than printing “undefined”.
Was it worth it
Plainly, yes:
- Three hours a week became three minutes — roughly 150 hours a year.
- The build took about six hours, so it paid for itself in the third week.
- The report now lands every Friday, on time and identical in format, and nobody dreads Friday afternoon any more.
If a task is predictable, tedious, and built entirely from data you already have, it is not really a task — it is a script you have not written yet. The hardest part is usually deciding what not to automate.