The Problem
Dana runs a 4-person marketing agency with 15 local clients — dentists, cafés, a med spa. Every Monday someone burns half a day clicking through Google Business Profiles: checking where each client ranks for their money keywords, which reviews came in over the weekend (and which angry ones need an answer today), and whether the competitor across the street overtook them. It's repetitive, error-prone, and unbillable. Rankings are checked from the office — not from the neighborhoods customers actually search from — and nobody notices a rival's review surge until the client does.
The Solution
Connect your coding agent (Claude Code, Cursor, Gemini CLI) to the SEOG MCP server. SEOG tracks map-pack rankings, reviews, and competitors for physical businesses; its MCP endpoint exposes all of it as 25 tools, so the Monday ritual becomes one prompt — or a scheduled agent run that lands a digest in Slack.
Step-by-Step Walkthrough
Step 1: Connect the agent to SEOG
Issue a token in seog.ai → Settings → MCP access, then:
claude mcp add --transport http seog https://api.seog.ai/mcp \
--header "Authorization: Bearer $SEOG_MCP_TOKEN"
Step 2: Onboard each client once
"Import 'Bright Smile Dental, Austin' into SEOG and start tracking its money keywords."
The agent runs search_places("Bright Smile Dental Austin"), imports the right
Places result, then keyword_recommendations → add_keyword for the winners —
with locationLabel per neighborhood ("Hyde Park", "South Congress") so rankings
are measured where patients actually search, not from the office IP.
Step 3: Schedule the weekly sweep
One prompt, run on a schedule (cron, CI, or your agent's scheduler):
"For every business: check keywords, sync reviews, snapshot watched competitors, then write me a digest with rank movement, unanswered negative reviews (draft replies), and competitor alerts."
The agent loops list_businesses → per business: check_keyword on active
keywords, sync_reviews + list_reviews(filter="needs-response") +
draft_review_response for each (drafts only — the owner approves in-app),
snapshot_competitor on watch-listed rivals.
Step 4: Escalate what matters
The digest ranks findings by impact: a client dropping out of the 3-pack for a money keyword beats a 4-star review without a reply. For medical/legal clients the drafted replies stay generic — never confirming a patient visit (review policy).
Real-World Example
A Bratislava café client, week 3 on the system: the agent's sweep found the café at
4.3★/957 reviews while discover_competitors(radius=1000) surfaced La Putika 2 at
4.2★/962 — a review-count race the client was losing by literally five reviews. The
digest flagged it, the café ran a two-week table-QR review push, and the agent's
keyword_history showed "coffee shop bratislava" climbing #4 → #2 as review velocity
recovered. The rival had no website — the digest recommended doubling down on the
client's site (see the seo-audit skill) — and set_competitor_watchlist now alerts
the day the rival's rating or review count jumps.
Related Skills
- seog — the MCP integration this workflow runs on (businesses, keywords, reviews, competitors)
- seo-audit — diagnose the client's website when the map-pack data says the site is the weak signal
- schema-markup — add LocalBusiness structured data, the most common fix the audits surface for local clients