Claude Code Automated Client Reporting

Automated Client Reporting AI: Build Monthly Client Reports with Claude Code + Notion

The Report That Used to Take Two Days

Every agency owner knows the ritual. End of month hits. You open six browser tabs — Google Analytics, Search Console, Ahrefs, the client’s Google Ads account, maybe a Meta Ads dashboard — and you start copying numbers into a Google Doc. Two hours later you’re still formatting tables. Another hour to write the narrative. Then a round of edits. Then the PDF export. Then “actually can you add last month’s comparison?”

That’s the old way. Here’s what it looks like now: I type one command into Claude Code, wait about 90 seconds, and the report is in Notion — formatted, compared to last month, with a written narrative summary and a client-ready action items section.

This post shows you exactly how to build automated client reporting AI workflows using Claude Code and Notion. No black boxes. Real prompts, real code, real workflow.


Why Claude Code Is the Right Tool for This

You could build reporting automation with Zapier, with n8n, with a Python script. I’ve tried all of them. The problem is always the narrative layer — the part where you explain what the numbers mean, what changed, and what the client should do next.

That layer has historically required a human. Claude Code removes that bottleneck because it combines two things in a single workflow: the ability to pull and process data AND the ability to write the analysis. You don’t need a separate AI call bolted onto a data pipeline. The same agent that fetches your GSC data also writes the paragraph explaining why organic clicks dropped 14%.

Paired with Notion as the delivery layer, you get reports that:

  • Live in a shareable, always-updated workspace your clients can bookmark
  • Include embedded charts and callout blocks that look designed — and if you need a custom traffic trend or MoM comparison chart, Claude can now build interactive bar charts inline that you download as SVG and drop straight into the page
  • Can be duplicated month-over-month with one command
  • Don’t require a PDF attachment in an email chain

What You’ll Build

By the end of this workflow, you’ll have:

  1. A Notion template page for monthly client reports
  2. A Claude Code command that populates the template with live data
  3. A narrative summary written by Claude based on the numbers
  4. An action items section that Claude generates from the data story

The full workflow takes about 20 minutes to set up per client. After that, each monthly report takes under 5 minutes of your time.


Step 1: Set Up Your Notion Report Template

Start by creating a Notion page with the following structure. This becomes your reusable template:

Monthly Performance Report — [Client Name] — [Month Year]

## Executive Summary
[AI narrative goes here]

## Traffic Overview
| Metric | This Month | Last Month | Change |
|--------|-----------|------------|--------|
| Organic Sessions | | | |
| Total Sessions | | | |
| Bounce Rate | | | |

## SEO Performance
| Metric | This Month | Last Month | Change |
|--------|-----------|------------|--------|
| Avg. Position | | | |
| Clicks | | | |
| Impressions | | | |
| CTR | | | |

## Top Performing Pages
[List]

## Top Keyword Wins
[List]

## Paid Media (if applicable)
| Metric | This Month | Last Month | Change |
|--------|-----------|------------|--------|
| Spend | | | |
| Conversions | | | |
| CPA | | | |
| ROAS | | | |

## Action Items for Next Month
[AI-generated based on data]

Grab the Notion page ID from the URL. You’ll need it in your CLAUDE.md file.


Step 2: Configure Your CLAUDE.md for Reporting

Your CLAUDE.md is where Claude Code learns the client context. Add a reporting section for each client:

## Client: Acme Co
- Google Search Console property: sc-domain:acmeco.com
- Ahrefs project: acme-co
- Notion report template ID: [your-template-page-id]
- Notion parent database ID: [your-reports-database-id]
- Reporting period: 1st of each month, previous month's data
- Report audience: Marketing Director + CEO (non-technical)
- Brand voice for report narrative: Professional but direct. No jargon. Lead with business impact.
- Key KPIs: Organic sessions, leads from organic, keyword ranking for [primary keywords]
- Last month baseline: Pull from previous Notion report page for comparison

This context shapes everything Claude writes. The difference between “CTR improved 0.3%” and “Your search ads are getting more clicks per impression — here’s why that matters for your Q2 budget” comes entirely from the instructions in your CLAUDE.md.


Step 3: Write the Reporting Skill

Claude Code lets you save reusable commands as skills. Create a file at ~/.claude/skills/monthly-report.md:

# Monthly Client Report Generator

When this skill is invoked, follow this sequence:

1. Ask the user which client to generate the report for
2. Pull the current month's GSC data using the MCP Google Search Console tool:
   - Clicks, impressions, CTR, average position
   - Top 10 pages by clicks
   - Top 10 queries by clicks
   - Compare to previous period (28 days prior)
3. Pull Ahrefs ranking data for the client's tracked keywords
4. Ask the user to paste in any paid media metrics (Google Ads, Meta) if applicable
5. Calculate month-over-month changes for each metric
6. Write the Executive Summary section — 3-4 paragraphs, written for the client audience specified in CLAUDE.md
7. Populate all table data
8. Generate the Action Items section — exactly 5 bullet points, prioritized by business impact
9. Create a new Notion page from the template using the Notion MCP
10. Populate the Notion page with all sections
11. Return the Notion page URL to the user

Save the file. Now type /monthly-report in Claude Code to invoke it.


Step 4: The First Run

Here’s what the actual interaction looks like when you run it for a client:

You: /monthly-report

Claude: Which client are we generating the March report for?

You: Acme Co

Claude: Pulling GSC data for sc-domain:acmeco.com for March 1–31...
[fetches data]

Got it. March numbers:
- Organic clicks: 4,847 (↑ 12% vs Feb)
- Avg position: 18.3 (↑ from 21.1)
- Top page: /blog/product-comparison-guide (893 clicks)

Do you have paid media data to include, or should I skip that section?

You: Skip it for this one

Claude: Writing executive summary and action items...
[generates narrative]

Creating Notion page...

Done. March report for Acme Co:
https://notion.so/acme-co-march-2025-report-[id]

Total time: 4 minutes. The only thing you did was type three lines.


Step 5: The Narrative Layer (Where the Real Value Is)

The hardest part of any client report isn’t gathering the data — it’s explaining it in a way that justifies your retainer and guides the client’s decisions. This is where automated client reporting AI earns its keep.

Prompt Claude explicitly for the narrative quality you want. In your CLAUDE.md or directly in the skill, add:

When writing the Executive Summary:
- Lead with the single most important business result (not a metric — a business outcome)
- Explain any significant changes in plain language, with a hypothesis for why they happened
- Tie performance to the client's stated business goals
- Avoid passive voice and hedging language like "it appears" or "it seems"
- End with one forward-looking sentence that connects to next month's focus

Bad example: "Organic sessions increased by 12% month-over-month."
Good example: "Your investment in long-form comparison content started paying off in March — those three guides you approved in January now account for 31% of all organic traffic."

That instruction difference is the gap between a report a client files away and one they forward to their board.


Step 6: Automate Delivery with the /schedule Skill

If you want to go fully hands-off, use the built-in /schedule skill in Claude Code to run the reporting workflow automatically on the 2nd of each month:

/schedule "Run /monthly-report for all active clients and send Notion URLs to me via email" — cron: 0 9 2 * *

This creates a scheduled trigger that fires at 9am on the 2nd of every month. You wake up with a Notion link in your inbox, ready to review and forward.


Real Numbers: What This Saves

Before this workflow, I was spending 6–8 hours per month per client on reporting. With automated client reporting AI, that’s down to under 30 minutes — 20 minutes reviewing and editing Claude’s output, 10 minutes on client-specific context that requires judgment.

For an agency with 10 clients, that’s 50–70 hours recaptured every month. At a $150/hour billable rate, that’s $7,500–$10,500 in recovered capacity. Even at half that, the math is obvious.

More importantly: the reports are better. Claude doesn’t get tired at report #7. The narratives are consistent. The action items are actually prioritized. Clients notice.


Common Pitfalls and How to Avoid Them

Pitfall 1: Not specifying the audience in CLAUDE.md. Claude will default to writing for a technical reader if you don’t tell it otherwise. Always specify who reads the report and what they care about.

Pitfall 2: Skipping the review step. Automated does not mean unreviewed. Claude can misinterpret a data anomaly or miss context you have from a client call. Block 15 minutes to read the report before sending.

Pitfall 3: Using the same template for every client. One of the advantages of this system is that each CLAUDE.md file tailors the report to that client’s goals. Don’t use a generic template — customize the KPIs, the narrative voice, and the comparison period per client.

Pitfall 4: No version history. Use Notion’s built-in version history so you can roll back if something goes wrong. Keep each month’s report as a separate page, not an overwritten template.


What to Do This Week

  1. Pick one client and build the Notion template for their report
  2. Add a reporting section for that client to your CLAUDE.md
  3. Run the workflow manually once and time it
  4. Review the output — note what Claude got right and wrong
  5. Refine the CLAUDE.md instructions based on what needed editing
  6. After two months, schedule it

The first run won’t be perfect. The third run will be better than what you were writing manually.


Get the CLAUDE.md Template

I’ve built out a full agency CLAUDE.md template that includes reporting setup for multiple clients, SEO workflow instructions, and account-specific context sections. If you want the exact file structure I’m using, it’s part of The AI Marketing Stack.

Get The AI Marketing Stack — and cut your reporting time this month.


Frequently Asked Questions

What data sources does this work with?

Any data source you have an MCP connector for, or that you can export as a CSV and paste into Claude Code. Out of the box, this workflow pulls from Google Search Console and Ahrefs (both have MCP servers). Google Ads, Meta Ads, and GA4 data can be added by pasting in the platform’s export, or by connecting the relevant MCP. The skill is designed to be modular — add or remove data sections based on what you’re tracking for each client.

Do my clients need Notion accounts to view the reports?

No. You can share any Notion page as a public link — no account required to view. Clients get a URL they can bookmark, and they see a clean, read-only view of the report. If you want them to be able to comment, you can add them as guests on the specific page. Full Notion access is not required.

How does Claude handle month-over-month comparison accurately?

The GSC MCP tool lets you specify exact date ranges. Your skill instructs Claude to pull the current month’s data and compare it to the same date range from the prior month (or prior year if you prefer). Claude then calculates the delta and percentage change for each metric. For seasonal businesses, you can add a year-over-year comparison by modifying the date range parameters in the skill.

Can I customize the report format per client without rebuilding the skill?

Yes — that’s the purpose of the per-client CLAUDE.md section. The skill reads those instructions and adapts. One client might get a paid media-heavy report with CPA as the headline metric; another might get a pure organic SEO report focused on keyword rankings. The skill logic stays the same; the CLAUDE.md instructions shape the output. Think of it as a single codebase with per-client config files.

What if the data Claude pulls looks wrong?

Claude Code will show you the raw data it pulled before writing the narrative — you can review it and correct anything before the Notion page is created. If you notice a systematic error (like a date range issue or a filtered metric), update the relevant instruction in your skill file and re-run. Claude doesn’t hallucinate numbers — if the data is wrong, it came from the source or the query parameters, both of which you can inspect and fix.

How is this different from a Looker Studio dashboard?

Looker Studio shows the numbers. This workflow explains them. A dashboard requires your client to interpret what they’re seeing — and most clients don’t. Automated narrative reporting gives them the “so what” alongside the metrics. You also get an action items section that a dashboard will never generate. The two aren’t mutually exclusive: some agencies use both, with Claude’s Notion report as the narrative layer and Looker Studio for the interactive drill-down.