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, competitors, AI visibility and the client's website for physical businesses; its MCP endpoint exposes all of it as 90 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
Sign up at app.seog.ai and issue a token in Settings → MCP access. Every call runs as that account — there is no anonymous mode — and paid tools spend the account's credits.
In Claude Code, the plugin installs the skill and the server together:
/plugin marketplace add TerminalSkills/skills
/plugin install seog@terminal-skills
Claude Code prompts for the token and stores it in your OS keychain. In any other MCP client, install the skill and register the server yourself:
npx terminal-skills install seog
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. When the client's
Google account is already connected, list_gbp_import_locations → import_gbp_business
imports and binds the owner connection in one step, which is what unlocks publishing
review replies and posts later.
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: refresh_rankings (one charge for
every active keyword, cheaper than looping check_keyword), sync_reviews +
list_reviews(filter="needs-response") + generate_review_reply for each,
refresh_competitors for watch-listed rivals, and get_action_plan for the
prioritized fix list. Publishing a reply (publish_review_reply) or a post
(publish_post) goes live on Google, so those wait for the client's approval.
Step 3b: Budget the sweep
Paid tools spend credits at the same price as the app's buttons. A scheduled run should
start with get_credit_balance (and list_feature_prices when pricing a new workflow).
If the balance runs out mid-sweep the tool fails with the numbers and the fix:
Not enough credits: this action costs 45 CR and the account balance is 12 CR.
Nothing was run and nothing was charged. Top up or upgrade at
https://app.seog.ai/billing, then retry.
Nothing is charged for a failed run, so the correct behaviour is to stop the paid loop,
report the shortfall, and finish the digest from free reads (list_keywords,
review_stats, get_latest_grid_scan, get_action_plan).
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.
Beyond rankings and reviews
The same connection covers the rest of the local-SEO surface, which is where the weekly digest turns into billable work:
run_grid_scan— map-pack coverage across a geo grid, not a single pointget_ai_visibility_pillars,get_ai_presence_matrix— whether AI assistants name the client, and which sources they citelist_citations— NAP consistency across the directories AI answers lean onrefresh_website_all— site audit + Search Console performance in one chargepublish_post— Google posts, scheduled nativelycreate_report— a client-ready PDF for the Monday email
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