Weekly summaries are operational. Monthly recaps are political. They’re the document the client’s CMO forwards to the CFO. They’re the artifact that gets pulled up at renewal time. They’re the only place where the work I did for 30 days gets compressed into the story the client tells about whether to keep paying me.
Which is why for two years I’d lose half a day per account writing them — and why I was the bottleneck on my own renewals.
The Monthly Recap bot from my OpenClaw stack solved that. Each recap now takes about 20 minutes of my time. The clients have noticed the upgrade in quality, not the drop in effort. Here’s the wiring.
What a recap is doing, beneath the surface
Before any bot prompts, the honest answer to “what’s a monthly recap for”:
- Justify the spend. Did this month’s budget produce results that look like progress?
- Pre-empt the doubt. If something underperformed, the client should hear it from me first, with a plan attached.
- Establish authority. The recap is the only place the client sees my thinking, not just the dashboard. If it reads like an AI dumped numbers into a template, I’ve lost trust.
- Set up next month. The implicit ask in every recap is “here’s why you should keep spending.”
A recap that hits all four reliably closes renewals on autopilot. A recap that only does the first one gets ghosted in Q3.
The 5-section structure I never deviate from
I freeze the shape. Same five sections, same order, every account, every month:
- Headline outcomes — 3 bullets. Spend, lead/sale volume, blended CPL or ROAS vs target.
- What worked — 2–3 specific wins with the creative or audience that drove them.
- What didn’t — 1–2 honest underperformers with a one-line explanation.
- What we’re changing — 3 specific moves for next month, tied to what the last two sections taught us.
- The ask — budget, scope, decisions I need from the client.
The bot drafts sections 1, 2, and 3 almost entirely. Section 4 is half bot, half me. Section 5 is always me — the bot doesn’t get to decide what I’m asking my clients for.
How the bot drafts each section
The bot’s input is structured. It receives:
- Last 30 days of metrics from GA4 + Meta + Google + LinkedIn, normalized
- The previous 90 days as comparison baseline
- The previous month’s recap (so it knows what we committed to, and can comment on whether we delivered)
- The campaign-level creative log: which ads we launched, paused, or killed, with their CTR/CPM/CPL
- The account’s tone profile (a 1-paragraph style guide per client)
For Section 1 (Headline outcomes), it does mostly math: comparing the 30-day window to the prior period, picking the three numbers that matter most for this client’s stated objective (lead gen, e-commerce, brand). The pick is rule-based, not LLM judgment — I’ve coded a priority order per objective so the same number doesn’t get demoted accidentally.
For Section 2 (What worked), the bot scans the creative log for the top-performing ads, then writes a 2-sentence story per win: what we tested, what won, what it likely means. It cites specific creative names so the client can map back to the dashboard.
For Section 3 (What didn’t), it does the same scan in reverse, picks underperformers above a $ threshold of spend (don’t waste a paragraph on a $40 dud), and writes a 1-sentence honest read. The honesty matters — clients can smell hedging.
For Section 4 (What’s changing), it generates 5 candidate moves. I pick 3, then rewrite the framing. This is where my actual judgment goes.
For Section 5 (The ask), the bot’s output is a list of “things worth asking about” — budget shifts, scope expansions, missing approvals. I rewrite as a clean ask with a deadline.
What I rewrite, every single time
A few things never survive untouched:
- The opening line. The bot reaches for safe-but-flat opening sentences (“This month, performance continued to trend positively…”). I rewrite to lead with the single most interesting number, sharp and specific.
- Anything that sounds like marketing-speak. “Leveraged,” “drove engagement,” “moved the needle” — all banned.
- The strategic framing in Section 4. The bot reasons from patterns, not from what I know about the client’s business. That gap shows when I leave it alone.
- The ask. Always. Money asks are mine.
Distribution: PDF + Loom, not email body
The recap goes out as a 4–5 page PDF generated from a clean Notion template, with a 6-minute Loom walkthrough I record once the doc is final. The Loom is the unlock — clients will skip a written recap but they almost always watch the video, and the video is where I can deliver the strategic context the document can’t.
The bot doesn’t touch the Loom. That’s me sitting at my desk on a Friday morning, talking through my own work. That’s still mine and it should be.
What it’s actually saved
Before the bot: ~4 hours per recap × 5 accounts = 20 hours every month. After: ~20 minutes of review/edit per recap + 10 minutes recording the Loom = ~2.5 hours every month.
Net: about 17.5 hours back per month, but more importantly — I’m shipping every recap on time. Before the bot, two of five recaps would slip into the first week of the next month. That looks bad on retainers.
The renewal effect
I track renewal rate against recap timeliness and recap quality (clients fill out a one-question survey when they receive each one). Since the bot went live a year ago, renewal rate is up about 14 percentage points and average recap quality score is up from 3.8 to 4.6 out of 5.
Two-thirds of that is the timeliness. The rest is the consistency — the same shape, every month, never rushed, never skipped sections. Clients know what to expect. Predictability is undervalued in agency relationships.
A note on what this isn’t
A monthly recap is not “five weekly summaries stitched together.” If yours is, that’s the first thing to fix. The recap is a different document with a different audience and a different job. A bot that can’t tell the difference will produce something useless at 9× the length of the weeklies.
If you’re building something similar, give your recap bot a completely separate prompt, a different style guide, and a stricter rejection rule than your weekly. Treat them as two different products.
Next in the OpenClaw series: I’m going to walk through the Anomaly Detector — the bot that paged me at 9am last Tuesday about a $400/day audience that had quietly gone sideways overnight. That’s the post I wish someone had written for me three years ago.