The Problem
A small digital agency manages 5 active client projects. Every Friday, the project manager spends 4 hours compiling weekly reports: pulling analytics from PostHog, listing completed tasks from Linear, adding time breakdowns from Toggl, formatting everything into a PDF, uploading to the client's shared Drive folder, and emailing them.
It's the most hated task in the company. Reports are sometimes late, sometimes have stale data, and the PM can't take Fridays off without the whole process breaking.
The Solution
A weekly cron fires Friday at 9am. For each active client (stored in a config sheet), it pulls analytics, completed tasks, and hours logged, compiles them into a branded PDF report, uploads to the client's Drive, and emails them a summary.
- Cron triggers every Friday at 9am
- Google Sheets reads the active clients config (API keys, folder IDs)
- For each client: PostHog API pulls pageviews and key events
- Linear API fetches all issues completed this week
- Toggl API pulls hours logged on the project
- Code node compiles all data into a branded HTML template
- HTML converts to PDF
- Google Drive uploads the PDF to the client's shared folder
- Resend emails the client with a summary and Drive link
- Slack confirms delivery in #delivery channel
The Workflow
This is a sanitized replica of the production workflow. Credentials, API keys, and client-specific data have been removed to protect confidentiality.
Results
- Friday reporting: 4 hours to fully automatic
- 100% on-time delivery (no more "sorry it's late" emails)
- Reports always use fresh data (pulled at generation time)
- PM reclaims 16+ hours/month
- Scalable: adding a new client is just a new row in the config sheet
Timeline
Apr 2026
Stack
Responsibilities
- Multi-API data aggregation
- HTML report template engine
- PDF generation pipeline
- Automated delivery system
