Monday morning. 8:47 AM. You're staring at a blank Google Doc trying to write a weekly report for leadership. You need to summarize what your team accomplished, what's in progress, what's blocked, and what's coming next. But the information is scattered across Slack, Asana, GitHub, your CRM, and your email.
So you spend 90 minutes pulling data from five different tools, trying to remember what happened last week, formatting it into something that looks professional, and sending it off — knowing that leadership will skim it in about 30 seconds.
I hated this ritual. So I automated it.
Over a single weekend, I built an AI-powered weekly report generator that pulls data from all my tools, synthesizes it into an executive summary, and emails it to leadership every Monday at 7 AM. Zero manual work. And the reports are better than what I used to write by hand, because the AI doesn't forget things.
The Problem
I was running a small team and reporting to a VP who wanted weekly updates. The updates needed to include:
- Key accomplishments from the past week - Metrics and KPIs (revenue, pipeline, conversion rates) - Project status updates (on track, at risk, blocked) - Team capacity and availability - Priorities for the coming week - Any escalations or decisions needed from leadership
Compiling this took me 60-90 minutes every Monday. I'd check Asana for project updates, Slack for any notable discussions, GitHub for development progress, our CRM for sales numbers, and my email for anything I might have missed. Then I'd organize it, write the narrative, format it, and send it.
90 minutes per week × 50 weeks per year = 75 hours per year spent writing reports. Almost two full work weeks. There had to be a better way.
The Build — Saturday
Saturday morning, I mapped out the data sources and the desired output format.
Data sources: 1. Asana — project status, completed tasks, upcoming deadlines 2. Slack — key decisions, notable threads, and any flagged items from the past week 3. GitHub — merged PRs, open issues, deployment activity 4. HubSpot (CRM) — deals closed, pipeline changes, key meetings 5. Google Calendar — my upcoming week's commitments
Desired output: A two-page executive summary with sections for accomplishments, metrics, project status, team notes, and next-week priorities.
The tech stack: - n8n for orchestrating the data collection - Claude API for synthesis and writing - Gmail API for delivery - A Notion database as the archive (every report gets saved for reference)
I started with data collection. Each source needed its own n8n workflow:
Asana: Pull all tasks completed in the past 7 days, grouped by project. Pull all tasks due in the next 7 days. Pull any tasks marked "at risk" or "blocked."
Slack: This was the trickiest. I used Slack's search API to find messages in key channels from the past week that had reactions (a proxy for importance) or were from leadership. I also pulled any messages I'd bookmarked.
GitHub: Pull merged PRs from the past week with their descriptions. Pull any open issues labeled "bug" or "critical."
HubSpot: Pull deals that moved stages in the past week. Pull the total pipeline value and any deals closing this week.
Google Calendar: Pull my meetings for the coming week to populate the "priorities" section.
Each of these workflows runs and dumps structured data into a staging area. This took most of Saturday — about 6 hours, including authentication setup and testing.
The Build — Sunday
Sunday was synthesis day. Once I had all the data flowing, I needed to turn it into a coherent report.
The Claude prompt is the core of the system. It receives a JSON payload with all the collected data and a detailed instruction set:
"You are an executive report writer. Using the following data from the past week, generate a weekly report for VP-level leadership. The tone should be professional but concise. Lead with impact — what moved the needle this week. Flag anything that needs a decision from leadership. Keep the total report under 500 words. Use bullet points for accomplishments and metrics. Use a brief narrative for project status updates. End with a clear list of priorities for the coming week."
The first draft from Claude was surprisingly good. About 80% of the way there on the first try. I refined the prompt over several iterations:
- Added "Don't include tasks that are routine maintenance — focus on strategic or notable accomplishments" - Added "When reporting metrics, always include week-over-week change" - Added "If a project is blocked, include the specific blocker and who can unblock it" - Added "Use the project names and terminology from our Asana workspace, not generic descriptions"
After about two hours of prompt refinement, the output was consistently better than what I'd been writing manually. Not because Claude writes better than me — but because it doesn't forget anything and it's more disciplined about structure.
The email delivery was straightforward: n8n formats the report as HTML, sends it via Gmail to the distribution list, and archives a copy in Notion with the date as the title.
Total build time: about 12 hours across Saturday and Sunday. Not the most relaxing weekend, but a one-time investment.
The Scheduling
The full pipeline runs every Monday at 6:30 AM:
1. 6:30 AM — Data collection workflows fire in parallel (~2 minutes) 2. 6:32 AM — Data is aggregated and sent to Claude (~15 seconds) 3. 6:33 AM — Claude's output is formatted into HTML 4. 6:34 AM — Report is emailed to the distribution list and archived in Notion 5. 7:00 AM — I get a personal copy with a diff from last week's report highlighted
By 7 AM, the report is in my VP's inbox. I skim my copy over coffee to make sure nothing looks off. In 90% of weeks, I don't change a thing.
The Results
After 12 weeks of automated reports:
- Time saved: 75-90 minutes per week, every week - Report quality: Consistently rated "more useful" by leadership than my manual reports — because they included metrics I used to forget and the structure was identical every week - Coverage: The automated system catches things I missed. A PR that got merged at 6 PM Friday? In the report. A deal that moved stages on Wednesday afternoon? In the report. I'd routinely forget those things when writing manually on Monday. - Historical tracking: The Notion archive lets me search past reports instantly. "When did we first flag the API migration as at risk?" — now a 10-second search. - Team awareness: I shared the system with two other team leads. They cloned the n8n workflows, adjusted the prompts for their teams, and now three weekly reports are automated.
What Didn't Work
The Slack data was noisy at first. Pulling every message with a reaction captured a lot of irrelevant content — inside jokes, celebratory messages, off-topic discussions. I had to add filtering: only pull messages from specific channels, and only if they had more than two reactions or were from specific people.
The first few reports were too long. Claude wanted to be comprehensive, which meant 800+ words when leadership wanted 400. Explicit word limits in the prompt solved this.
One week, the HubSpot API returned stale data due to a sync delay, and the report showed deals that hadn't actually closed. I added a data freshness check — if any source's most recent data is older than 24 hours, the report flags it.
Lessons Learned
1. Automate the boring stuff first. Reports are necessary but nobody's best work. Free yourself up for thinking, not formatting. 2. Structure your prompt like a style guide. The more specific the instructions, the more consistent the output. Don't just say "write a report" — say exactly what format, tone, length, and emphasis you want. 3. Data quality > AI quality. If the data going into Claude is messy, the report will be messy. Spend more time on data collection and cleaning than on prompt engineering. 4. Build the archive from day one. The Notion archive became one of the most valuable parts of the system. Twelve weeks of structured, searchable reports is a goldmine for planning and retrospectives. 5. Share the system. Once I proved it worked, other team leads wanted it. The marginal cost of replicating the system was almost zero.
FAQ
What if something important happens that isn't captured in the data sources? I have a "manual notes" field — a simple Notion page where I can jot down anything I want included in this week's report. The system checks this page during data collection and incorporates whatever's there. Most weeks it's empty.
How do you handle weeks where nothing significant happened? The prompt includes instructions for low-activity weeks: "If accomplishments are light, focus on progress toward longer-term goals and any process improvements." The report always has substance, even in quiet weeks.
Can this work for teams that don't use Asana/Slack/GitHub? Absolutely. n8n has connectors for hundreds of tools — Jira, Monday, Linear, Teams, GitLab, Salesforce, and many more. The data collection layer is modular. Swap in your tools and the rest of the system works the same way.
What about sensitive data in the reports? The data flows through the Claude API for processing. If you're handling sensitive business data, consider running the AI layer on your own infrastructure or using an API with enterprise data agreements. We deploy systems like this on client infrastructure for exactly this reason.
Does leadership know the reports are AI-generated? I told my VP after the third week. Her response: "I don't care how they're made — these are the best reports I get." Transparency is important, but at the end of the day, the value is the value.
Stop wasting Monday mornings on reports.
If your team spends hours every week compiling data and writing updates, we can automate it. We build AI report generators that pull from your tools, synthesize the data, and deliver polished reports on any schedule.
Book a Strategy Audit and we'll identify every report in your organization that can be automated.