Maehwa Labs · Agency operations

How do I automate weekly client reports with an AI agent?

Pull each client's numbers with code into a fixed table, let the AI write only the commentary from that table, and have an account manager approve every report before it goes out. The model should never fetch or calculate the numbers in the same step where it writes about them. Plan on a few days to build it for your first clients, and on someone owning it every month after that.

The setup, step by step

  1. Start from the report you already send. Take your best account manager's weekly report and list every number in it with its source: GA4 sessions and conversions, Search Console clicks, ad spend and cost per lead, rankings from Semrush or Ahrefs. That list is the spec. A number with no clear source stays out.
  2. Pull the data with code, not with the model. Use the GA4 Data API and the Search Console API through n8n, Make, Zapier or a short Python script, or a connector such as Supermetrics into Google Sheets. If you already pay for AgencyAnalytics or Whatagraph, start there; several reporting tools now expose client data to Claude and ChatGPT over MCP. The output is one table per client per week, same columns every time.
  3. Do the math before the AI sees anything. Week over week change, change against the last four weeks, pacing against the client's goal. Calculate these in the sheet or script and add a flag column for anything past a threshold you pick, for example a 20 percent drop in organic clicks.
  4. Give the agent a narrow writing job. Hand it the table, last week's commentary, the client's goals and any notes from the account manager. Ask for three to five plain bullets: what moved, the likely reason, what you are doing next. Tell it to use only numbers in the table and to write "not tracked" when something is missing.
  5. Check the draft against the table automatically. A few lines of code can pull every number out of the draft and confirm it appears in the source table. A draft that fails goes back to the account manager with the bad lines marked. This one step catches most of the trouble.
  6. Route it to a person. Drafts land in Slack, email or a shared Google Doc, each number linked to the row it came from. The account manager edits and sends. The agent never has the client's email address.
  7. Schedule it and log every run. Run it Monday morning on a timer. Log which clients ran, which pulls worked and which failed, so a missing report is visible instead of silent.

How much work this really is. The first client takes the longest, because it forces you to clean up a template that lives in someone's head. After that, each new client is mostly configuration. The ongoing work is the part people underestimate: tokens expire, someone removes your GA4 access, a client opens a second ad account. If nobody owns those fixes, the reports quietly go stale.

What can go wrong

Wrong numbers that read well

Language models fill gaps with plausible numbers. One UK agency wrote up an AI reporting tool that put an "industry average" click-through rate in a client report; they could not find that figure anywhere. Invented benchmarks, guesses about competitor activity and made-up citations all look fine at a skim. Ban benchmarks unless they come with a named source, and keep the automatic number check.

Dates that do not line up

Search Console data runs a few days behind, and GA4 reports in the property's own time zone. If your week ends on Sunday and the pull runs Monday at 6am, you may be comparing a partial week with a full one. Fix the date window in the script, not in the prompt.

Silent failures

An expired token can return zeros, and the model will happily write "organic traffic fell sharply." Make the pipeline stop that client's report when a pull returns nothing or zero, and tell a person.

Skipping the approval gate

Letting the agent email clients directly saves one click and risks the account. Keep a person between the draft and the client, every time.

Client data

Read your client contracts before sending their data to any AI service. Use API access or a business plan that does not train on your inputs and offers a data processing agreement. Send the aggregated numbers the report needs, not raw exports with customer details. Give the agent read-only access through accounts you control, and remove it when a client leaves.

When it is worth paying someone

Build it yourself if someone on your team likes this work and has time each month to keep it running. Pay someone when the upkeep is the problem: more clients than one person can babysit, nobody who wants to own broken tokens, or you want the same setup to also watch client sites and sort the inbox.

That upkeep is the part we sell. We set up and run an AI operator for agencies that drafts client reports from real data pulls, with every send waiting for your approval. We have not run it for an agency yet. Our own studio runs on the same setup:

Our own operator ran 358 scheduled jobs and shipped 39 production deploys in a week, with 1 human tap.

Questions

Can ChatGPT or Claude write my weekly client reports?

They write good commentary from a finished table of numbers. Do not let the model pull or calculate the numbers, and do not let it send anything to a client.

What tools do I need to automate client reports with AI?

A way to pull the data (GA4 and Search Console APIs through n8n, Make, Zapier or a script), one table per client per week, an AI model for the commentary, and a review step in Slack, email or a shared doc.

How do I stop the AI from making up numbers in a client report?

Tell it to use only the numbers in the table, then run a check that confirms every number in the draft exists in that table. Drafts that fail go back to a person.

Should the AI agent send reports to clients by itself?

No. Drafts go to your account manager, who reads, edits and sends. Keep client email addresses out of the agent's reach.

Is it OK to put client analytics data into an AI tool?

Check your client contracts first. Use an API or business plan that does not train on your data and offers a data processing agreement, send only aggregated numbers, and give the agent read-only access you can revoke.