Cover image for: How We Automated Client Reporting: Our Agency Experiment

How We Automated Client Reporting: Our Agency Experiment

How We Automated Client Reporting: Our Agency Experiment

Affiliate links ↓

Updated · July 24, 2026

Client reporting is the task that destroys agency morale faster than any missed deadline. Every month, someone on our team would spend the equivalent of a full workday pulling numbers from GA4, Meta Ads, and Google Ads, writing narrative summaries that clients mostly skim, and formatting PDFs that looked different every time. We had 14 clients. It was quietly becoming a part-time job.

So in March 2026, we set ourselves a constraint: get monthly reporting down from 8–10 hours per week to under 2 hours, using AI tools, with a hard budget cap of $300/month in new software. Here’s exactly what happened over 90 days — what we kept, what we cancelled, and what we should have done differently from day one.

The setup

Before changing anything, we documented the current process. One person owned reporting. They would log into each platform manually, screenshot key metrics, drop everything into a Google Slides template that had drifted into three different versions, write a 200–300 word summary per client from memory, and email it out. Nothing was automated. Nothing was consistent.

Our client mix: mostly e-commerce and local service businesses on monthly retainers between $1,500 and $4,000. Reports covered paid search, paid social, organic traffic, and for one client, email metrics too. We were pulling from Google Analytics 4, Meta Business Suite, Google Ads, and Klaviyo — four platforms, every month, for every client.

Budget rule: $300/month maximum in new tool spend, 90 days to prove the investment before committing longer-term.

Picking the data layer — and the tool we almost went with

The first decision was where all the data would actually live. You can’t automate a report if you’re still logging into four dashboards to copy numbers by hand.

We seriously considered Looker Studio — it’s free, connects natively to GA4 and Google Ads, and a few people on the team already knew it. The problem: Meta Ads requires a third-party connector, and Supermetrics charges around $99/month just for that one. Maintaining 14 separate Looker Studio reports also meant 14 different things that could break whenever Google changed an API field. We’d watched that happen twice the year before.

We also briefly considered a custom data warehouse — pull everything into BigQuery, build dashboards on top. That idea died in the first conversation. We didn’t have the engineering resources and it was solving a different problem.

What we landed on was AgencyAnalytics, at roughly $12/month per client on their Freelancer plan — about $168/month total. It’s not a glamorous choice; the dashboards look somewhat dated. But it had native connectors for every platform we needed, campaign-level data for both Meta and Google Ads, and a white-label client portal we could customize per client. Setup for one client took 25 minutes on our first try, down to around 8 minutes by the third.

Once everything was wired up, we ran a deliberate stress test on June 10th — five client reports due that week, all with different platform mixes. On our most complex account (DTC skincare brand, $4,200/month retainer, all four data sources active), we fed a 2,100-token context brief to Claude Sonnet 4.5 via API; the full export-to-draft cycle took 23 seconds. Three of the four narrative sections required no edits before sending. The paid social section correctly caught a 12% ROAS dip but called it “significant” — a word we’d asked the prompt to avoid after the client forwarded a previous summary to her board out of context, except that instruction lived in a Slack thread, not in the brief.

The thing we didn’t expect: AgencyAnalytics already has a basic “AI Insights” feature that auto-generates bullet points about campaign performance. We turned it off within the first week. The observations were surface-level and occasionally wrong about causality — it flagged a drop in CTR as a “potential issue with ad creative” when we knew it was a seasonal pattern we’d briefed the client on months earlier. Automated observations without context aren’t neutral. They’re actively misleading.

The AI narrative problem is harder than anyone admits

Getting the data connected was the easy part. The genuinely hard part — the thing every “AI reporting” pitch glosses over — is generating the narrative that clients actually read. That 200–300 word summary isn’t just metrics. It’s context: why the numbers moved, what we’re changing next month, and whether the client should be worried.

We built a prompt template and tested it with both ChatGPT (GPT-4o) and Claude (Sonnet 4.5 at the time). The prompt pulled in the month’s key metrics, compared them to the prior month, and included a notes field where the account manager would add any context before running it.

On April 8th, we ran the same brief for three real clients through both tools and had two team members review the outputs blind. Claude won 2-1. One ChatGPT summary repeated the same stat three times in different phrasings — a tic that’s hard to unsee once you notice it. Claude’s framing felt more considered, and it handled relative performance differences better overall.

But here’s what we found after two full months of running this: we still reviewed and edited every single AI-generated summary before it went to a client. Not because the writing was bad — it wasn’t — but because the context field was never comprehensive enough to capture everything a human knew about the relationship. The AI didn’t know Client 7 was anxious about CPL because her board meeting was in two weeks. It didn’t know Client 3 had asked us to stop mentioning competitor comparisons.

The AI saved time on the first draft. It did not replace judgment. That’s the honest answer to the question everyone’s actually asking.

Zapier vs Make — we picked wrong the first time

We needed something to stitch the pieces together: trigger the AgencyAnalytics export, send the metrics to Claude, deliver the draft to the right Notion page, notify the account manager via Slack. A multi-step automation with conditional logic that varied by client.

We started with Zapier because the team already knew it. We had the workflow built in three days and it ran cleanly through the first reporting cycle. Then we hit the task limit on the Professional plan and got a cost projection that put us at around $180/month for Zapier alone once all 14 clients were live. That was more than half our entire tool budget, just for the glue layer.

We rebuilt everything in Make in early May. The learning curve was steeper — Make’s interface is more powerful but considerably less intuitive — and it took about half a day to reconstruct what we’d built in Zapier. The cost difference made it non-negotiable: Make’s Core plan at $9/month handled all 14 client workflows with operations to spare. The rebuild was annoying. It was still the right call.

One place Zapier genuinely wins: error handling. When a step fails in Make, diagnosing it requires real technical comfort. Our automation owner described Make’s error logs as “readable if you already know what you’re looking for, which you usually don’t when something breaks the night before a client call.” Worth knowing before you commit.

The delivery format we thought was clever — and wasn’t

We built client portals inside Notion. They looked genuinely good: clean, branded, each monthly report as a page inside the client’s shared workspace. We were proud of this part. We sent the portal URLs to all 14 clients in early April with a brief explanation of how to access their live reports.

Two months later, we checked the analytics. Five out of fourteen clients had logged in at all. Three had returned more than once. The rest opened the Notion invite email and apparently forgot it existed.

Clients don’t want portals. They want an email they can forward to their boss. We shifted to exporting a PDF from AgencyAnalytics — their export is clean enough — and attaching it to a short email with the AI-generated summary pasted directly into the body. Email open rates on that format ran consistently above 80%. The Notion workspace now stores our internal drafts and account notes, which is a reasonable use of it. Just not what we built it for.

What we’d change next time

Start with the delivery format. We spent weeks optimizing data pipelines and prompt templates before asking the most basic question: how does the client actually want to receive this? That conversation takes ten minutes per client and would have saved us from building something nobody used.

On the AI side: the value is in first-draft speed and templating, not autonomous insight generation. If we were starting over, we’d invest more time building a better context-capture system — a short intake form the account manager completes before the automation runs. The AI is only as useful as the context you give it, and that context doesn’t exist anywhere in your data platforms.

We’d also skip AgencyAnalytics’ native AI features entirely. Not because they’re broken, but because a general-purpose model with a well-structured prompt that knows your client outperformed it in every comparison we ran.

One more thing worth saying plainly: if your agency’s reporting is weak because the accounts aren’t being managed closely enough, AI-generated summaries will make that problem harder to catch, not easier. A well-crafted prompt produces confident-sounding prose regardless of whether anyone has actually been watching the account. The writing quality won’t signal anything’s wrong. That’s not a tool failure — it’s a use-case failure, and it’s the version of this story that doesn’t make it into most agency write-ups.

The final stack

  • AgencyAnalytics — data aggregation and dashboard layer — ~$168/month (14 clients)
  • Make — workflow automation (export triggers, API calls, Slack notifications) — $9/month
  • Claude API — narrative generation, billed per token — ~$18/month for 14 monthly reports
  • Notion — internal template storage and draft review only — $16/month (team plan, pre-existing)
  • Total new spend: $195/month
  • Time per reporting cycle: down from 8–10 hours/week to roughly 2.5 hours/week

We didn’t hit the 2-hour target. The 30 minutes over is the human review time that never disappeared. That’s fine — it shouldn’t disappear. A client report represents your agency’s judgment about their business, and sending AI output without reading it first is how you get a factual error in front of your most anxious client the week before their board meeting.

Frequently asked questions

Can you fully automate client reporting with AI?

The data aggregation and first-draft writing, yes. The final review and context-aware judgment, no — and that’s probably how it should stay. Automated reporting without human sign-off is a liability risk dressed up as an efficiency gain.

Is AgencyAnalytics worth it for smaller agencies?

Below 5 clients, the cost is hard to justify — Looker Studio with manual connectors is painful but workable. Above 8 clients, the per-client math starts to favor it clearly, especially when you factor in the time saved on initial data connection setup across multiple platforms.

How long does building this automation actually take?

Realistically, three to four weeks of part-time work for a team that isn’t already deeply technical. Data connections go quickly; prompt engineering takes at least two or three real reporting cycles before outputs are consistently usable without heavy editing.

The honest summary of 90 days: we saved real hours and kept costs well under budget, but the work that remained was the work that actually mattered. AI is handling the scaffolding. Someone on your team still has to know the client.

This article contains affiliate links. If you subscribe through one, we may earn a commission at no extra cost to you. It never changes what we recommend — we only link to tools we actually use. Full disclosure.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *