seoskills.sh
Catalog/seoskills/internal

GBP Suspension Monitor

Polls the Google Business Profile API across locations to detect suspensions, verification loss, and unauthorized edits…

0 installs

Use this skill

$ npx skills add seoskills.sh/gbp-suspension-monitor
Category
Repository
seoskills/internal
GitHub stars
License

SKILL.md

---
name: GBP Suspension Monitor
description: Polls the Google Business Profile API across locations to detect suspensions, verification loss, and unauthorized edits to NAP, categories, or hours, then alerts on any status change with exact field diffs and a remediation path. Use when the user manages Google Business Profiles and needs suspension monitoring, listing-integrity alerts, or NAP-edit detection.
category: local-seo
---

# GBP Suspension Monitor

AGENT ROLE: Autonomous listing-integrity agent. Snapshot each location's Business Profile state, diff it against the prior snapshot, and emit alerts per `references/output.schema.json`. Stateful across runs via the `previous` input.

## OBJECTIVE
Detect — as early as possible — suspensions, loss of verification, and unauthorized/Google-applied edits to critical fields across many locations, with the exact before/after diff and a remediation recommendation for each.

## INPUTS
- `account_id` (REQUIRED): GBP account resource id (`accounts/{id}`).
- `location_ids` (OPTIONAL): subset to monitor; default all locations under the account.
- `previous` (OPTIONAL): prior run's `snapshots`; absent on first run (baseline).
- `watch_fields` (OPTIONAL): default `["title","storefrontAddress","phoneNumbers","categories","regularHours","websiteUri","openInfo.status"]`.

## AUTHENTICATION (Google Business Profile API)
1. REQUIRE an OAuth access token with scope `https://www.googleapis.com/auth/business.manage` (env `GBP_OAUTH_TOKEN` or `GOOGLE_APPLICATION_CREDENTIALS` for a delegated service account).
   - IF absent THEN STOP `error.code="AUTH_MISSING_TOKEN"`.
2. NOTE: the Business Profile APIs require **Google-approved project access** (an allowlist request). IF the API returns `403 PERMISSION_DENIED` or `SERVICE_DISABLED` THEN STOP `error.code="API_ACCESS_NOT_APPROVED"` with the message: "Request Business Profile API access for this GCP project; it is gated behind an approval form."
3. Endpoints: locations via `GET https://mybusinessbusinessinformation.googleapis.com/v1/{account_id}/locations?readMask=...`; verification/state via the location's `metadata` + Verifications API.

## EXPECTED TOOL CALLS
- Run `scripts/gbp_monitor.py --account accounts/123 [--previous previous.json]`.
- List locations (paged via `pageToken`) with a `readMask` limited to `watch_fields` + `metadata`.

## PROCEDURE (deterministic, per location)
STEP 1 — SNAPSHOT: capture the `watch_fields` values + `metadata` flags (`hasVoiceOfMerchant`, `canOperateLocalPost`, verification state).
STEP 2 — SUSPENSION DETECT: `suspended = true` IF `metadata.hasVoiceOfMerchant == false` OR the location is not returned while previously present (disappeared) OR verification state regressed.
STEP 3 — DIFF vs `previous` snapshot: for each `watch_field`, record `{field, before, after}` where values differ.
STEP 4 — SEVERITY: `critical` (suspension / verification lost / title or address changed), `warning` (category/hours/phone/website change), `info` (first-seen baseline).
STEP 5 — REMEDIATION per alert (e.g., suspension → "file reinstatement with proof of legitimacy"; address change → "confirm the edit was authorized; revert via API if not").
STEP 6 — EMIT alerts sorted by severity; return current `snapshots` for the next run.

## RATE LIMITS & ERROR HANDLING
- GBP APIs have a strict default QPM. On `429`/`RESOURCE_EXHAUSTED` THEN backoff `2^attempt` (max 5) then STOP `error.code="RATE_LIMITED"` with `partial`.
- `401` (expired token) → STOP `error.code="AUTH_EXPIRED"` (do not retry).
- A single location fetch failure → mark that location `status="fetch_error"`, carry forward its previous snapshot, continue.

## MISSING / INSUFFICIENT DATA
- First run is `baseline` per location (no diffs) — expected.
- A location present in `previous` but absent now is a strong suspension/removal signal → emit `critical` alert `location_disappeared` (do NOT drop it silently).
- Never assert a Google-applied edit was "unauthorized" — report the diff and let the operator confirm intent.

## OUTPUT
One JSON object per `references/output.schema.json`. The `snapshots` array MUST be persisted for the next run.

## FILES
- `scripts/gbp_monitor.py` — GBP API client, snapshot/diff, suspension detection, alerting.
- `references/output.schema.json` — output contract.

Not using the CLI? Copy the SKILL.md and paste it straight into ChatGPT, Claude, or any agent.

Embed a badge

seoskills.sh install badge

More in Local SEO

Local SEOagricidaniel/claude-seo

seo-local

Local SEO analysis covering Google Business Profile optimization, NAP consistency, citation health, review signals, local schema markup, location page quality, multi-location SEO, and industry-specific recommendations. Detects business type (brick-and-mortar, SAB, hybrid) and industry vertical. Use when user says "local SEO", "Google Business Profile", "GBP", "map pack", "local pack", "citations", "NAP consistency", "service area", or "multi-location".

5.3K installs
Local SEOeronred/aso-skills

localization

When the user wants to localize their App Store listing for international markets. Also use when the user mentions "localization", "translate my app", "international markets", "expand to new countries", "localize metadata", or "which countries should I target". For keyword research in specific markets, see keyword-research. For metadata writing, see metadata-optimization.

2.9K installs
Local SEOcalm-north/seojuice-skills

rank-local

Build a local SEO strategy covering Google Business Profile, local citations, reviews, and NAP consistency. Use when the user asks about local SEO, Google Business Profile, Google Maps ranking, local pack, NAP consistency, local citations, review strategy, or ranking for "[service] near me" searches.

2.5K installs
Local SEOkostja94/marketing-skills

local-seo

No description available.

2.3K installs
Local SEOjezweb/claude-skills

seo-local-business

Generate complete SEO setup for local business websites — HTML head tags, JSON-LD LocalBusiness schema, robots.txt, sitemap.xml. Australian-optimised with +61 phone, ABN, suburb patterns. Use whenever the user wants SEO for a local business (tradesman, café, clinic, agency, retailer), needs JSON-LD structured data, asks for LocalBusiness schema, or wants meta tags / robots.txt / sitemap for a suburb-serving business.

1.7K installs
Local SEOanycap-ai/anycap

anycap-ai-tool-seo

Guide for planning and auditing SEO for AI tool, SaaS, and product-led websites. Powered by AnyCap -- the capability runtime that equips AI agents with web search and web crawl through a single CLI. Use when Codex needs to define SEO ICPs, map search intent to page types, inspect live SERPs, write page briefs for tool/comparison/alternatives/pricing/tutorial pages, prioritize technical SEO foundations, plan citations or backlinks, or decide whether programmatic SEO is safe and worthwhile. Trigger on mentions of AI tool SEO, SaaS SEO, product-led SEO, search intent, page type mapping, vs pages,

472 installs