client-report
Skill0 starsChanged 21 days agoMITView on GitHub
Produce a client-facing SEO report for a Search Console property and share it through the GSC Wizard client portal: generates the full report with generate_seo_report (ready-to-open HTML, a compact digest with a drill per section, or JSON), saves a table of the key rows as a shareable report, adds the client contact, grants access and hands back the share URL with who can open it, and audits or deletes earlier reports. Use when the user says "make a report for my client", "share this with the client", "create a shared report", "give my client access to the report", "who can see my shared reports", or "delete that shared report".
9 other projects use a version of this.
Adopted by
Most recently taken up by
- Gallyan/trouvabletheir own version, first seen Nov 1, 2026
- fliqrlabs/instagram-creator-skillstheir own version, first seen Nov 1, 2026
- teachskillofskills-ai/DigitalMarketingPro-techshutheir own version, first seen Oct 11, 2026
- edu6565/claude-skillstheir own version, first seen Oct 11, 2026
- anthropics/financial-services-pluginstheir own version, first seen Oct 8, 2026
- anthropics/financial-servicestheir own version, first seen Jul 22, 2026
Other versions9 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 9
- anthropics/financial-services★ 41ksame name
- anthropics/financial-services-plugins★ 41ksame name
- indranilbanerjee/digital-marketing-pro★ 934same name
- MarcoZorn/agencykit★ 6same name
- fliqrlabs/instagram-creator-skills★ 5same name
- tadeurosa-ai/claude-code-setup★ 1same name
- edu6565/claude-skills★ 0same name
- Gallyan/trouvable★ 0same name
- teachskillofskills-ai/DigitalMarketingPro-techshu★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository33 other files it gives its agents.
- ai-assistant-trafficSkill
- anomaly-checkSkill
- bing-crawl-healthSkill
- bing-performanceSkill
- branded-splitSkill
- cannibalizationSkill
- content-decaySkill
- content-groupsSkill
- core-web-vitalsSkill
- country-deviceSkill
- ctr-optimizationSkill
- experiment-resultsSkill
- ga4-overviewSkill
- indexing-healthSkill
- indexing-trackerSkill
- indexnow-submitSkill
- long-tail-analysisSkill
- merchant-center-healthSkill
- onpage-auditSkill
- page-deep-diveSkill
- portfolio-overviewSkill
- property-setupSkill
- query-deep-diveSkill
- quick-winsSkill
- ranking-changesSkill
- shopping-performanceSkill
- site-auditSkill
- sitemap-auditSkill
- site-migrationSkill
- traffic-dropSkill
- traffic-forecastSkill
- weekly-reportSkill
- yandex-performanceSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 2 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 9 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Confirm the deliverable: Ask, or infer from the user's request, what the client gets and who receives it (email, optional name):
- Distinctive: line 18
Every write step below lists what it will create and waits for the user's yes, and all of them need write access.
- Very specific: line 20
Generate the report: Call generate_seo_report with siteUrl, days (7 to 180, default 28), format and includeSitemap (default true.
- Very specific: line 30
Keep each row an object holding the fields to show, and define columns in display order with key, label and type:
“Common” is measured: kept by at least 6 in 10 of the 9 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Client Report
Turn one property's performance into a deliverable a client can open: a self-contained HTML report, a client-portal table, or both. The output is the report summary for the user, the exact share URL with who has access to it, and the next steps. The user's request may contain a property, a date range or days, the client's email and name, a title, a focus (queries, pages, movers), and whether the user wants the HTML file, the portal link or both. For the content of a weekly digest, run the weekly-report skill and bring its mover tables here.
Workflow
- Resolve the property and the window. If the user's request or the conversation names a property, use it. Site URLs use GSC formats:
sc-domain:example.comorhttps://www.example.com/. Otherwise calllist_sitesand pick the obvious match. If several plausible properties exist, ask the user which one before continuing. Use the last 28 days compared with the previous period unless the user specifies dates;generate_seo_reportsizes both windows fromdays. GSC data lags about 2 to 3 days and the tools count back from the latest settled date, so state the dates the response reports (range,comparison) rather than implying the report runs through today, and if a dip appears at the very edge of the range, say it is likely reporting lag, not a real drop. - Confirm the deliverable. Ask, or infer from the user's request, what the client gets and who receives it (email, optional name):
- the HTML report: one self-contained file the user forwards or uploads;
- a portal table: one URL behind a client login, which the user sends once access is granted;
- both, with the portal table carrying the one table the client will look at most. Every write step below lists what it will create and waits for the user's yes, and all of them need write access. If a write is refused because the connection is read-only, say so and complete the read-only parts.
- Generate the report. Call
generate_seo_reportwithsiteUrl,days(7 to 180, default 28),formatandincludeSitemap(defaulttrue;falseskips the sitemap fetch). Chooseformatby use:html(the default): a finished, self-contained report inhtml, withbytesas its size. Save that string as a.htmlfile and hand the file to the user; do not paste it into the conversation.compact: a few numbers per section insections(summary,trend,topQueries,topPages,countries,devices,ctrCurve,opportunities,rankingByQuery,rankingByPage,decay,cannibalization,sitemapsand more), each with adrillnaming the tool and the exact arguments that reproduce it. Use it to narrate the report in chat and to fetch full rows for the portal table over the same window.json: every sub-result in full, which is large; only when the user asks for the raw data. Every format carrieshighlights(kpis,topQueries,topPages,movers),range,comparison,settledThroughanddataSource. One call fans out to about twenty reads, so call it once per format you need, not once per question.ctrvalues are already percentages on a 0-100 scale; never multiply them by 100.position: lower is better, so a change toward a lower number is an improvement; never color it as a decline. Weight the story by the clicks and impressions at stake, not by percentages alone.
- Assemble the portal rows. A shared report is one table, so pick the rows the client should see:
- the
topQueriesortopPagesdrill, which isquery_top_queriesorquery_top_pageswithsiteUrl,startDate,endDateandlimit(default 100); get_ranking_changesfor movers, withstartDate/endDate,comparisonStartDate/comparisonEndDate,dimension(queryorpage) andlimitper bucket;- a table the weekly-report skill produced.
Keep each row an object holding the fields to show, and define
columnsin display order withkey,labelandtype: numberfor clicks, impressions and position; the portal formats these as numbers.text(the default) for everything else. The tool also acceptspercent,urlanddate, but the portal renders those as plain text today, so roundctrto two decimals yourself and put the unit in the label ("CTR (%)") rather than relying on the type. Up to 5,000 rows and 50 columns are accepted; 10 to 100 rows is a client-sized table.
- the
- Create the shared report (write). Show the user the
title, the row count, the columns and the dates, then callcreate_shared_reportwithtitle,rows,columns,siteUrl,dateRange(startDate,endDate) and, when there is one,comparisonRange;reportTypeis a free label (defaultmcp) anddataSourceTypeone ofinline(default),queries,pages,countries,rankings,content-group,page-performanceormigration. Read the response:report.reportId, the id the grant and delete tools take, andreport.url, the portal link;report.rowCountandreport.createdAtfor the summary;note, which repeats that the URL opens for nobody, not even the user, until step 7 grants access. Say that plainly and do not hand the URL out yet. An account holds at most 50 reports; on a limit error, list them withlist_shared_reportsand offer to delete an old one.
- Find or add the client (write). Call
list_report_clients(limit, default 100) and match the email inclients[](clientId,email,name). If absent, confirm the email and name with the user, then callcreate_report_clientwithemailand optionalname;created: falsemeans the address already existed and the existingclientcame back. This sends no email and grants nothing by itself. - Grant access (write). Confirm the pairing, then call
manage_report_accesswithreportId,action: "grant"andclientIds(1 to 100). Read the result:granted: the clients who gained access in this call;alreadyHadAccess: repeats, so nothing changed for them;unknownClientIds: ids that do not belong to the account, so no grant happened for them;emailsSent, always 0: the tool never notifies anyone. Give the user theurlto send themselves; the client opens it, enters the granted email, and GSC Wizard mails them a login link. The app's Account > Shared Reports page can send that mail with its Resend button.
- Audit and clean up. Three tools cover the lifecycle after the share:
list_shared_reports(limit, default 50, max 100) lists every report with itsurlandsharedWith[](clientId,email,name,grantedAt);unsharedCountsays how many open for nobody.manage_report_accesswithaction: "revoke"withdraws a client's access and reportsrevokedanddidNotHaveAccess; confirm first, since the client loses the link at once.delete_shared_reportwithreportIdremoves a report and every grant on it and breaks the link for anyone holding it, so name the title and ask for confirmation first.
Output
- Report summary for the user: the headline KPIs from
highlights.kpiswith their comparison, the top movers, and two or three sentences on what the client should take from it, each number with its tool and dates. - The deliverable: the saved HTML file path, and/or the portal table as a compact markdown preview (the top 5 to 10 rows, with the full count stated).
- Share status, as a compact markdown table; the status reads "opens for nobody yet" until a grant exists, then "granted, no email sent":
| Report | URL | Granted to | Status |
- Next steps: send the URL to the client, optionally trigger the login email from Account > Shared Reports, revoke or delete when the engagement ends, and regenerate on the next cycle with the same
daysso the periods line up. Keep prose for interpretation, not for restating numbers. Do not fabricate rows the tools did not return.
Error handling
If any tool call fails with an authentication or subscription error, tell the user to run /mcp to (re)authenticate, and that a GSC Wizard account with an active plan or trial plus a connected Google Search Console account is required. If the property is not found, re-run list_sites and offer the closest matches instead of guessing a URL format. If a single tool fails for another reason, report the gap in the relevant section and complete the rest of the workflow with the remaining data.
Grounding
Every number you report must name the tool it came from and the date range it covers, for example "clicks 12,340 (get_site_summary, 2026-09-21 to 2026-09-27)". For a table, state the tool and date range once on the line above it. If you derive a figure yourself (a delta, a sum, a share), say so and name the tool outputs it was computed from. Never report a number no tool returned.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

