Connect an AI Visibility Tool to Claude to Automate GEO Reports
How we build weekly client GEO reports in Claude from Promptwatch MCP data: one read-only project key per client, a fixed tool list, and a strategist sign-off before anything ships.
The weekly GEO report used to be the least interesting hour of an account manager's week. Export the visibility chart, export the citations, paste both into the client template, write three paragraphs. We now do the assembly in Claude, connected to Promptwatch, the platform we run client programs on. Claude pulls the data and drafts. A strategist still decides what the client reads.
This is how the setup works, what the prompt looks like, and where we refuse to let the automation go further.
Why Claude, and why not fully automatic
Claude connects to outside tools over the Model Context Protocol through custom connectors. Promptwatch runs a hosted MCP server at https://server.promptwatch.com/mcp, and MCP and API access are listed on every paid plan. That combination lets Claude read a client's visibility, citation, crawler and traffic data in one conversation and reason across it, which is the part a static dashboard export never did for us.
We don't let it run unattended. The connector gives Claude access, not a schedule, and we prefer it that way. A person starts the report each week, reads it, and signs it off.
The connection
Anthropic documents the steps in its connector guide. In Claude, Customize > Connectors > Add > Custom > Web. Name it, paste the server URL, check the detected authentication. Promptwatch supports OAuth or a Bearer key. When we use a key, it goes under Request headers as Authorization: Bearer <key>.
On a Team or Enterprise Claude workspace, the Owner or Primary Owner adds the connector in Organization settings > Connectors, and each person clicks Connect. Anthropic is explicit that a shared API key gives everyone who connects that key's access. For an agency, that sentence decides the key.
Promptwatch issues org, project and read-only keys. An org key sees every project in the organization, which for us means every client. That's the wrong key for a connector half the team can open. We create one read-only project key per client. Project scope keeps Claude inside one client's data. Read-only hides the write tools, so the connection can report but can't add prompts, create content or publish.
The server is public, which matters because Claude connectors connect from Anthropic's cloud rather than from your laptop. In each new conversation we switch the client's connector on from the "+" button. One client per conversation, without exception.
The report prompt we reuse
We keep one prompt per client in the account folder and change only the date window. Naming the tools keeps the report stable from week to week:
Use the Promptwatch connector for [client]. Compare the last 7 days with the 7 before.
1. getVisibilityTimeSeries: overall trend, then the prompts that moved most.
2. getTopCompetitors: who gained or lost on those prompts.
3. getCitationTopPages: which client pages were cited, which were replaced, and by whom.
4. listRedditCitations and listYoutubeCitations: new offsite sources.
5. getCrawlerTrend and getTopCrawlerPages: did AI crawlers read the pages that moved?
6. getVisitorReferrerStats and getVisitorTopPages: AI-referred visits and landing pages.
7. listActionItems: what is already queued for this project.
Write a draft summary for the client. Put every number in a table. Mark anything
you inferred instead of read from a tool.
Steps 5 and 6 are why we do this in Promptwatch and not in a tracker that only logs mentions. When a prompt drops, the first question a client asks is why. Agent Analytics tells us whether ChatGPTBot or ClaudeBot stopped reading the page. Visitor analytics tells us whether the drop cost traffic. Without those two calls the draft can only describe the drop. Crawler logs start on Professional, so for brand clients on Essential the report skips step 5.
Where the strategist signs off
Claude produces a draft. The strategist owns three checks before it goes anywhere.
The numbers come first. We open the Promptwatch dashboard and compare the headline visibility figure and the biggest mover against what Claude wrote. Claude summarizes tool output, and a summary can misstate a figure that the tool returned correctly. If a number doesn't match, the draft goes back.
Then the interpretation. Claude is good at noticing that a competitor page replaced ours on a prompt. It doesn't know that the client changed pricing last month or that a product page was deliberately retired. The "why" paragraph is rewritten by the person who knows the account, every week.
Last, the recommendations. We let Claude suggest next steps from listActionItems and getContentGapRecommendations. The strategist decides which ones the client sees, in what order, and which ones we just do without making them a client conversation.
What we keep out of the weekly loop
The read-only key stays on the shared connector. When a client wants the report as a Promptwatch report or dashboard (custom reports are on Professional and up, and on agency plans), the account lead runs createReport or createDashboard with a separate write key, in a separate conversation, after sign-off. The content tools on the same server, the ones that draft and publish through Content Agents, never enter a reporting chat.
We also watch the response budget. Promptwatch plans cap responses as well as prompts, and a reporting session has no business adding tracked prompts that spend a client's monthly allowance. Prompt changes go through our normal tracking review, not through a chat.
When the client wants delivery without us opening Claude
Some clients want a pulse in their own tools between reports. For those we don't stretch the Claude workflow. We use the Promptwatch Slack agent mapped to a client channel, the Looker Studio connector on Professional, Business or agency plans for a live board, or REST API v2 when the client's data team wants to pull numbers into their own warehouse. Claude stays the place where the strategist builds the narrative.
We wrote up the wider MCP setup, including how we use Cursor alongside Claude, in MCP in the agency workflow.
If you'd like us to set this up for your account, or to run the weekly reporting for you, write to hello@1001seomedia.com.