SEO Client Report
The monthly SEO client report as a branded live page instead of a PDF that dies in an inbox — with a signal back after you send it ("the client opened it Tuesday, before the call").
Built for the consultant or agency who has to prove outcomes every month and does not want to rebuild the same deck twelve times a year.
When to use
- Recurring monthly/quarterly SEO reporting for a named client
- The user says "SEO report for [client]", "monthly SEO report", "client SEO report"
- The user asks about engagement on one already sent ("did they open it?") →
get_analytics
Steps
- Get the reporting frame. Client name, the period covered, and the previous report if
one exists (
list_documents— reuse its structure so the format is identical month over month; consistency is what makes this feel like a service). - Get the data — never invent it. You need real figures: Search Console (clicks, impressions, average position, top queries/pages), analytics (organic sessions, conversions/leads), and rankings. If the user has connected data sources or provides an export, use those. If a number needed for a claimed win is missing, ask for it — do not estimate or pad. A fabricated metric in a client report is a broken engagement.
- Every metric gets its prior period. A number without last month's number is noise. Compute the deltas (absolute and %). Lead with movement, not raw totals.
- Structure for the client, not the analyst. Order: headline outcomes first, in the client's terms (leads, revenue, rankings that matter to them) → what you did this period → what's next → data appendix. Methodology never opens the report.
- Turn movement into charts. Clicks/impressions trend, position changes, top-page performance — as charts from the design system, labeled well enough to survive being screenshot into a Slack thread by the client's boss.
- Author + lint. Call
get_design_system, author self-contained HTML following it, andlint_document; fix everything it flags. - Approval gate — always on. This is client-facing. Show the user: title, the period, the headline numbers you're leading with, the section list, and flag anything that could read as over-promising. Wait for explicit approval before publishing.
- Publish branded. Suggest a stable, professional slug (
client-name-2026-07).publishand return the URL. For real agency branding, offer the levers:set_handlefor a cleaner subdomain, or — on Team/Business —attach_domainto serve from the agency's own domain (it returns the DNS records the user adds at their registrar). - Close the loop. Offer to check next week whether it was viewed (
get_analytics— views by day), and to draft next month's report when the period turns.
Hard rules
- Never invent or extrapolate client metrics. Estimated figures are labeled as estimates; missing figures are asked for, not filled in.
- One client per page. Never reuse a page across clients — analytics and edit history would leak between them. If the user serves competing clients, keep client names out of slugs/titles; ask once and keep the preference.
- Comparisons must be honest. Don't cherry-pick the one metric that went up. If organic traffic fell, say so and explain — a report that hides a bad month destroys the trust the recurring relationship runs on.
- Published pages are public URLs; scan for anything the client would not want public (competitor data, internal notes) before publishing.
- Every page carries a small "Published with ReportRoom" footer credit — the client will see it; flag it at the approval gate.
get_analyticsis aggregate views by day, a signal for you, not the client — never surface it on the report itself.