From seo-skills
Converts SE Ranking SEO insights (keyword gaps, competitor wins, ranking losses) into a scheduled social campaign in Planable.
How this skill is triggered — by the user, by Claude, or both
Slash command
/seo-skills:seo-gaps-to-social-campaignThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Connect SE Ranking (where the demand and the gaps live) to Planable (where content gets made, approved, and published). The goal is a focused social campaign whose every post is grounded in real search demand — not a generic brainstorm.
Connect SE Ranking (where the demand and the gaps live) to Planable (where content gets made, approved, and published). The goal is a focused social campaign whose every post is grounded in real search demand — not a generic brainstorm.
us), the Planable workspace, and ideally 1–3 competitor domains. Number of posts defaults to 6 if unspecified.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: target domain, country, competitors (optional), the Planable workspace + which platforms, how many posts, and any campaign window. If the workspace is ambiguous, call list_workspaces and let the user pick — do not guess.
Work sequentially (respect the Data API limit of ~10 requests/second). Save raw results as you go.
DATA_getDomainOverviewWorldwide + DATA_getDomainKeywords — the target's current footprint and best existing keywords. The target's own strong/striking-distance keywords are often the most on-brand campaign fuel, so mine these first.DATA_getDomainCompetitors — confirm the real organic competitors (sort by shared keywords; take the top 3–5). Note: this call returns the full set and may be written to a file — read and parse it.DATA_getDomainKeywordsComparison — the core gap list: keywords competitors rank for that the target does not. Filter to keep it useful (e.g. informational/commercial intent, volume > a sensible floor, difficulty the domain can realistically win). Then judge relevance, not just the numbers — competitor gap lists are noisy and surface off-brand junk (glossary entries, follower-farming terms like "free followers", unrelated blog tangents). Discard anything that isn't a topic the target could credibly post about; a high-volume term the brand has no business addressing is not an opportunity. If a strict filter returns almost nothing, loosen one threshold or try another competitor rather than forcing a campaign out of junk.DATA_getRelatedKeywords + DATA_getKeywordQuestions — expansion terms and real questions people ask. Question keywords are gold for social hooks — they map directly to post openers. These endpoints often return only a handful of rows per seed, so query several seeds (3–5 core topics) and aggregate rather than trusting one; a seed returning 1–2 questions is normal, not a sign there's no demand.DATA_getSerpResults for the 2–4 strongest themes — read the intent and the SERP features so the social angle matches what searchers actually want.PROJECT_getPositionHistory (type avg_pos or visibility) to find terms that slipped. A recovering or slipping keyword is a strong "we have something to say" social trigger. If there is no project, skip this and rely on the gap analysis above.Group the keywords/questions into 3–6 content themes. For each theme, write a one-line rationale tied to the data (volume, gap size, intent, or a ranking move). Then translate each theme into concrete social angles — a question keyword becomes a hook, a comparison term becomes a carousel, a how-to becomes a tips post.
Surface the themes to the user before drafting, so they can steer.
Write platform-appropriate copy for each post (see length/format norms below). Vary hooks and formats across the batch — don't repeat one structure. Keep each post traceable to its source keyword/question so the user understands the "why".
| Platform | Length | Notes |
|---|---|---|
| ~3,000 chars | Professional, can be long-form, line breaks | |
| ~2,200 chars | Visual-first; hashtags at end or first comment; requires media | |
| shorter performs better | Conversational | |
| X/Twitter | 280 chars | Punchy |
| TikTok | ~2,200 chars | Casual, trend-aware |
Show all drafts in a preview before creating anything, unless the user said "just create them".
list_pages(workspaceId) to get page IDs for the requested platforms. Then:
create_grouped_post(workspaceId, pageIds[], text, scheduledAt?, labels?). Caveat: a grouped post shares one text across every page, so grouping platforms with very different limits (e.g. Facebook + X) forces the shared copy under the strictest one (X's 280 chars). When copy should differ in length or tone per platform, use separate create_post calls instead.create_post(workspaceId, pageId, text, scheduledAt?, labels?, firstComment?) once per page.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.list_labels (or create_label) and pass the label UUIDs. A campaign label (e.g. "SEO-driven") makes later reporting easy.Report how many drafts were created, in which workspace/pages, the proposed schedule, and any validationErrors (e.g. Instagram needs media — flag it). Offer to set up rank/AI tracking for the targeted terms, or to report on the campaign later (the seo-ai-social-report skill).
Keep these in mind when creating social content meant to target a specific keyword or close an AI-visibility gap:
campaign-brief.md to the outputs folder if the user wants something to circulate.mediaUrls, or note that media must be added in Planable before publishing.npx claudepluginhub seranking/seo-skills --plugin seo-skillsFinds AI-search prompt gaps in SE Ranking and turns them into a Planable social campaign with before/after tracking. Use for improving brand visibility in AI answers (ChatGPT, Perplexity, Gemini, Google AI Overview, AI Mode).
Build social media strategy. Use when: defining content pillars, posting cadence, engagement tactics, or growth plans.
Builds or audits a social media strategy including platform selection, content mix, posting cadence, and KPIs.