Skip to content

2026-05-02 · 3 min read · WiseChef

How I Ship Client Reports Without Touching Code

Client reporting is the highest-frequency manual task in any agency-shaped business. Here's the no-code skill I install on every new engagement, and how I keep it running without becoming the bottleneck.

client-reporting automation integrator ga4 google-search-console

There’s a Saturday morning everyone in this business knows. Coffee, four browser tabs, GA4 here, Search Console there, Meta Ads in another window, maybe TikTok if the client is on it. An hour and a half of copy-paste later, you’ve produced a PDF the client is going to skim for thirty seconds.

I did this for too long. Then I shipped a skill once, kept iterating on it, and now I install it on every client engagement in the first week.

What the skill does

It’s called Client Reporter. It connects to the data sources the client already has, pulls the numbers, generates the charts, writes the narrative, and outputs a branded PDF. No Zapier, no Make scenarios with seventeen steps, no API code I have to maintain.

The connectors it ships with cover what most engagements need:

  • Google Analytics 4 (traffic, top pages, channels)
  • Google Search Console (impressions, clicks, queries)
  • Meta Ads (spend, reach, CTR, conversions)
  • TikTok Ads (campaigns, video metrics)

The output is a PDF that lands in a directory on the client’s machine, ready to send.

How I install it on a new engagement

The whole install is short enough to do on a kickoff call:

  1. Install the CLI on the client’s machine: pipx install wiserecipes
  2. Install the skill: wiserecipes install client-reporter
  3. OAuth into the client’s data sources
  4. Configure brand colors, logo, reporting cadence
  5. Run it once: client-reporter generate --client="acme"
  6. Schedule it via cron or the client’s own scheduler

The whole thing is roughly under an hour if the client has their OAuth credentials handy. The longest part is usually waiting for someone to find the right Google account password.

Why I stopped writing my own version

I tried to build this myself once. Three weekends in I had a working prototype. Six months in I was the bottleneck — every time GA4’s API changed I was the only person who could fix the dashboard.

The skill version doesn’t have that problem. The connectors are maintained upstream, the templates are forkable, and when the client wants a custom chart I fork the skill instead of writing a one-off integration. If I get hit by a bus the client can hand the install to anyone.

That’s the part I think most integrators miss. The first version of any automation should be the one you can hand off, not the one only you can run.

The numbers (in ranges, because every client is different)

Across the engagements I’ve installed this on:

  • Time per report: from over an hour of manual work to a short review pass
  • Errors: way down (the AI doesn’t typo numbers from a dashboard)
  • Client satisfaction: higher, because reports go out on time, every time

I’m deliberately not quoting specific hours saved or specific revenue impact. Those numbers depend on the engagement, and any integrator who hands you exact figures from someone else’s contract is selling you something.

What I check before sending

The skill produces a draft. I don’t auto-send. The review checklist:

  • Did any platform return a partial dataset? (Sometimes Meta lags a day.)
  • Does the narrative match the numbers? (LLMs occasionally invert direction.)
  • Is the comparison period right? (Default is rolling 30d; some clients want calendar month.)
  • Logo and branding rendered correctly?

Five-minute review. Send.

Install path

pipx install wiserecipes
wiserecipes install client-reporter
client-reporter generate --client="your-client"

Runs on macOS, Linux, anywhere with Python 3.11+. Free skill, no tier requirement. I install it on every engagement.


Client Reporter is one of several skills I rely on for client engagements. The rest of the catalog is at /library.