seo-gaps-to-social-campaign — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited seo-gaps-to-social-campaign (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.