From seo-skills
Tracks city-level keyword rankings via SE Ranking and creates local social/GMB content in Planable for multi-location businesses.
How this skill is triggered — by the user, by Claude, or both
Slash command
/seo-skills:local-gmb-visibilityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Pair SE Ranking's city-level rank tracking with Planable's local content — including Google Business Profile posts — so a business can see how it ranks in each target city and publish location-relevant content against it.
Pair SE Ranking's city-level rank tracking with Planable's local content — including Google Business Profile posts — so a business can see how it ranks in each target city and publish location-relevant content against it.
Scope note. This skill covers city-level keyword rank tracking (SE Ranking projects with geo-targeted search engines) and local social/GMB content (Planable). SE Ranking's dedicated Local Marketing module — listings management, review monitoring, and the local rank grid/heatmap — is not exposed through the MCP, so those aren't part of this workflow. Set expectations accordingly.
list_pages and look for a page with type: "googleMyBusiness". If there isn't one, tell the user GMB isn't connected and fall back to other local social pages.Before doing anything else, verify both MCPs are reachable:
DATA_getSubscription. If it fails or returns an auth error, stop immediately and tell the user:
"The SE Ranking connector isn't responding — please reconnect it before we continue. Setup guide: https://seranking.com/api/integrations/mcp/"
list_workspaces. If it fails or returns an auth error, stop immediately and tell the user:
"The Planable connector isn't responding — please reconnect it before we continue. Setup guide: https://help.planable.io/hc/en-us/articles/27538577098780-How-to-connect-Planable-MCP-to-your-AI-tools"
Only continue to the process steps below once both calls return a successful response.
Confirm the cities, the local keywords per city, the business domain, and the Planable workspace + which pages (GMB and/or social). For multi-location, list each location explicitly. Rank tracking consumes plan quota (keywords × search engines) and search engines persist in the project — confirm scope before creating many, and offer to remove test engines afterwards.
PROJECT_createProject(url, title) → site_id (or reuse an existing project's site_id).PROJECT_getAvailableRegions(search: "<City, State, Country>") and take the canonical name string verbatim (abbreviated forms are rejected). A specific query returns one clean match.PROJECT_addSearchEngine(site_id, country_code, region_name, lang_code?) → returns site_engine_id. (The catalogue in PROJECT_getAvailableSearchEngines is only needed for niche regional engines.)PROJECT_addKeywords(site_id, keywords[]), attaching each to the right city engine via site_engine_ids.PROJECT_runPositionCheck) or let the project's schedule run. Results are not instant — a check is asynchronous and city rankings populate on the next cycle, so don't expect getPositionHistory to return data immediately after setup.PROJECT_getPositionHistory(site_id, type, site_engine_id?, date_from, date_to) — rankings over time, filterable to a single city engine. Use avg_pos and visibility.PROJECT_addCompetitor + PROJECT_getCompetitorPositions(competitor_id) — how local competitors rank for the same terms.DATA_getSerpLocations (to find the location_id) → DATA_getSerpResults(location_id=...). Heads-up: getSerpLocations can return a very large payload (hundreds of thousands of characters for a broad query). Pass a specific q (e.g. "Brooklyn" or "New York, NY"), and if the result is still huge it's written to a file — extract the one matching location_id with jq rather than loading the whole thing. For tracking setup you usually only need getAvailableRegions, so reserve getSerpLocations for when a live SERP read is essential.DATA_getDomainKeywordsComparison — local keyword gaps vs competitors.Translate the rankings + gaps into location-relevant content: service-area posts, local proof and reviews-style content (written as posts, since review data isn't pulled here), neighbourhood/landmark references, local offers, and answers to local intent. Tailor copy per city — generic content underperforms locally.
googleMyBusiness page exists, create_post(workspaceId, gmbPageId, text, scheduledAt?) on it.create_post per page, or create_grouped_post for synced copy. For multi-location, use a label per city (via list_labels / create_label) so each location's content is easy to filter.scheduledAt. Keep posts as proposed drafts — don't set publishAtScheduledDate — so nothing auto-publishes; only set it true if the user explicitly wants auto-publishing. Scheduled times are treated as UTC, so confirm the timezone or state that times are UTC.Re-read PROJECT_getPositionHistory per city on the next check cycle to see movement, and adjust the content plan toward the cities/terms with the most headroom.
Keep these in mind when creating local social and Google Business Profile content meant to target a specific keyword or close an AI-visibility gap:
site_engine_ids), and the keywords being tracked.PROJECT_getAvailableRegions — abbreviations fail.PROJECT_runPositionCheck and/or a narrow live DATA_getSerpResults localized view, and explain the difference.list_pages shows no googleMyBusiness page, you can't post to GMB via the connector — say so and use other local pages.PROJECT_deleteSearchEngine / PROJECT_deleteKeywords) for throwaway test setups.npx claudepluginhub seranking/seo-skills --plugin seo-skillsGenerates Google Business Profile posts, 30-day calendars, NAP audits, citation checks, review templates, and competitor research for local SEO.
Guides local SEO strategy including Google Business Profile optimization, NAP consistency audits, local pack rankings, citation building, and location page optimization.
Creates local SEO reports tracking rankings via SoLV and ARP, GBP metrics like impressions and actions, website traffic, and trends for client communication and strategy.