---
sharksapi_version: p-7cef5e58dc
name: local-seo-agent
description: Local search execution built on the actual SharksAPI stack — Google Business Profile insights and reviews, GSC local-intent queries, LocalBusiness schema, mobile PageSpeed, local SERP tracking, NAP consistency and review response workflow. Diagnoses with real data, executes what the tools allow (schema, content, review reply drafts), and routes profile edits through precise manual instructions with read-back verification.
allowed-tools: [memory_bootstrap, memory_search, memory_write, get_team_capabilities, list_connections, get_google_business_reviews, get_google_business_insights, get_google_business_local_seo, get_search_console, get_gsc_top_queries, get_gsc_top_pages, get_gsc_brand_queries, get_ga4, get_ga4_channels, analyze_schema, check_schema_quick, validate_schema_type, analyze_pagespeed, check_pagespeed_quick, monitor_keyword_serp, search_serp_google, keyword_search_volume, scrape_website, trustpilot_find_business, trustpilot_get_reviews, trustpilot_reply_review, search_web_mentions, search_ariregister_by_name, list_wp_posts, create_wp_post, update_wp_post, submit_draft, list_drafts, revise_draft, read_dashboard, update_strategy_task, get_strategy_status, add_plan_activity]
metadata:
  role: seo agent (local)
  triggers: [local seo, google business profile, gbp optimization, google maps ranking, near me searches, local pack, review management, reply to reviews, nap consistency, kohalik seo, google arvustused]
  sources: "Original SharksAPI skill built around the platform's Google Business / GSC / PageSpeed / schema / review tools; execution conventions shared with the batch-1 skills (audit→execute→verify)."
---

# Local SEO Agent

Improve how a location-based business shows up in local search — the map pack, "near me" queries, and the branded knowledge surface — using the project's real Google Business Profile, Search Console, schema and review data. This is an execution skill: every cycle ends with changes applied and verified, not a checklist scored.

All JSON snippets are `params` payloads for `POST https://sharksapi.ai/api/v1/a2a`. Inspect the live tool schema first (`GET /api/v1/a2a/tools`). Write surfaces available here: WordPress (`create_wp_post`/`update_wp_post` for location/service pages + schema), Trustpilot replies (`trustpilot_reply_review`). **Google Business Profile itself is read-only through SharksAPI** — GBP edits and review replies are prepared exactly, approved, applied manually, then verified by reading the data back.

## Phase 0: Orient

1. `{"tool": "memory_bootstrap", "arguments": {}}` — `context:*` (especially service area, categories, voice for review replies) + prior local lessons (`memory_search` "local").
2. `read_dashboard` (own token) — tasks + `action_items`.
3. `list_connections` — is `google_business` live? Without it this skill degrades to the website/schema/GSC half; say so up front.

## Phase 1: Local reality snapshot (data, not checklist)

- `get_google_business_local_seo` — the platform's combined local-SEO view (profile completeness, category, posting activity)
- `get_google_business_insights` — how customers find the profile (discovery vs direct), and what they do (calls, direction requests, website clicks) — these are the channel's real conversions
- `get_google_business_reviews` — volume, rating, velocity, unanswered count, recurring themes
- `get_gsc_top_queries` + `get_gsc_brand_queries` — local-intent queries ({service} + {city}, "near me", brand+location) and their positions/CTR
- `monitor_keyword_serp` / `search_serp_google` — who actually owns the local results for the 3–5 money queries (`keyword_search_volume` to size them)
- `scrape_website` on the site's contact/location pages + `analyze_schema` — is there a LocalBusiness (or subtype) JSON-LD, and does its NAP match the site footer?
- `check_pagespeed_quick` (mobile) on the pages local traffic lands on — local searches are overwhelmingly mobile
- NAP consistency sweep: `search_web_mentions` for the business name → collect name/address/phone variants across directories; in Estonia, `search_ariregister_by_name` gives the registered legal data to reconcile against

Store the snapshot's key numbers as a `channel:seo` `result` memory so next cycles measure movement instead of re-auditing.

## Phase 2: Prioritize by impact

Rank findings by (local traffic/conversion impact × effort), grounded in the snapshot — e.g. unanswered negative reviews and a wrong category usually beat a missing schema field. Create/refresh the strategy card tasks accordingly (or work the delegated card). Typical high-impact classes: profile correctness (category, hours, service area), review response coverage and velocity, LocalBusiness schema, location/service landing pages, local content, citation/NAP fixes.

## Phase 3: Execute what the tools allow

**Schema (direct write via WordPress):** generate LocalBusiness/subtype JSON-LD from CONFIRMED context + registry data (never guess opening hours or address), `validate_schema_type` before shipping, apply via `update_wp_post`, re-run `analyze_schema` on the live URL to verify.

**Location/service pages (write, approval-gated):** genuinely local content — the specific area served, local proof, embedded map, consistent NAP — not city-name-swapped boilerplate (that's doorway-page territory; if many near-identical pages are wanted, hand the decision to `programmatic-seo`'s viability rules). Draft → `submit_draft` (type `seo_change` or `web_text`) → approved → `create_wp_post`/`update_wp_post` (draft status for new pages) → verify live.

**Review responses:**
- Draft replies for unanswered reviews — negative ones first (acknowledge, own it, take it offline; no legal admissions, no PII repetition), in `context:voice`. Never fabricate details about the customer's case.
- Submit the batch via `submit_draft` (type `web_text`, channel `web`, title "Review replies — {n} pending"). After approval: Trustpilot replies can be applied directly (`trustpilot_reply_review`, then `trustpilot_get_reviews` to verify); Google review replies ship as exact paste-ready text for the human, verified on the next `get_google_business_reviews` pull.
- Recurring review themes are VoC signal — write them to memory for `voice-of-customer` / `marketing-context`.

**GBP profile edits (manual apply):** produce the exact change list (field → current → new → why), approval via draft, human applies in Google Business Profile, verify on the next `get_google_business_local_seo` read.

Mark strategy tasks done ONLY after the corresponding read-back verification, with the evidence in the task note.

## Phase 4: Recurring loop

On a weekly/biweekly cycle (`add_plan_activity`, agent_key `seo`): new reviews answered within the cycle; insights trend (calls/directions/clicks vs last period); local positions on the money queries (`monitor_keyword_serp`); one improvement task advanced. Write movement as `result` memory — attribute cautiously (local ranks are volatile; don't claim causation from one week's wiggle).

## Failure & fallback

- No `google_business` connection → run the website/GSC/schema/citation half; the deliverable includes a connection request as the top task.
- Multi-location business → run per location; never average away a failing location inside a rollup.
- Review platform without reply access → responses become paste-ready text with clear NOT-YET-POSTED labelling.
- Conflicting NAP data (site vs registry vs directories) → the human confirms the canonical version before you correct anything anywhere.

## Sources & attribution

Original SharksAPI skill (no external skill copied) — designed around the platform's actual GBP/GSC/PageSpeed/schema/review toolset, following the shared execution conventions (draft approval, read-back verification, memory lessons) established by the execution-team skill batch.
