seranking/ai-search-gaps-to-social-campaign
> Find the AI-search prompts and topics where a brand is invisible (or losing to competitors) in SE Ranking, then turn those gaps into a social campaign in Planable and set up before/after tracking. Use this skill whenever the user wants to improve how their brand shows up in AI answers (ChatGPT, Perplexity, Gemini, Google AI Overview, AI Mode) through content, or says things like "what should we post to get cited by AI", "where are competitors winning in AI answers and we're not", "create content for the prompts we're missing", "improve our AI visibility with social", "AEO/GEO content plan", or "turn our AI search gaps into posts". Always activate when AI-search visibility is the goal and Planable is where the content will be made.
npx skills add https://github.com/seranking/seo-skills --skill ai-search-gaps-to-social-campaign
Use SE Ranking's AI Search data to see which prompts and narratives a brand owns, which competitors own, and which are wide open — then build social content in Planable that stakes a claim in the missing narratives, and instrument it so impact is measurable.
> Scope note (read this). SE Ranking's AI Search MCP tools expose brand presence, link presence, share of voice, and the prompts behind them. They do not expose sentiment scoring. Do not report or imply sentiment from these tools. Social content is one lever on AI visibility — LLM citation is also driven by website content and authority, which is outside what these two MCPs publish.
us), competitor domains + brand names (up to 10), and optionally which engines to focus on (default: all of ai-overview, ai-mode, chatgpt, perplexity, gemini).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.
If the user gives a domain but not the exact brand string, call DATA_getAiSearchBrand(target, source) to get the name SE Ranking attributes to it. Do the same for each competitor. Confirm the Planable workspace and target platforms.
DATA_getAiSearchOverview(target, source, brand?) — capture brand_presence, link_presence, ai_opportunity_traffic, and average_position. Read previous before quoting change: if it's null, this is the first snapshot — report the current values as a baseline and do not present the change_percent of 100 as real growth.DATA_getAiSearchLeaderboard(primary{target,brand}, competitors[{target,brand}], source, engines[]) — share of voice for the brand vs competitors, per engine. Build a quick heatmap (rows = brands, columns = engines).DATA_getAiSearchOverview for each competitor and compare brand_presence / link_presence yourself.For the target and each competitor, pull the prompts behind the presence:
DATA_getAiSearchPromptsByBrand(brand, engine, source) — prompts mentioning the brand by name.DATA_getAiSearchPromptsByTarget(target, engine, source) — prompts where the domain is cited as a source.Compare: cluster prompts by topic, then mark each cluster as owned (target appears), contested (target + competitors), or missing (competitors appear, target doesn't). The missing and contested clusters are the campaign targets.
volume: 0 — they're conversational queries, not search keywords. That is expected and is not a signal of low value. Judge a cluster by topical relevance and by *which brands the LLM cites*, never by search volume.For each target cluster, write a hypothesis: *"If we publish clear, citable content asserting [brand] in [narrative], we should start appearing for prompts like [examples]."* Translate each into social angles that make the brand's position explicit and quotable — definitions, head-to-head comparisons, "X vs Y", myth-busting, FAQ-style answers. LLMs favour clear, structured, attributable claims, so write social copy that states the position plainly rather than burying it.
Present the clusters and hypotheses to the user before drafting.
Write platform-appropriate copy, then create drafts: create_post per page (per-platform copy) or create_grouped_post for synced content. Tag the batch with a label (via list_labels / create_label, e.g. "AI-visibility") so the campaign is easy to isolate when measuring.
Scheduling — ask before creating. Don't guess dates or leave everything undated by default. Ask how the user wants the batch dated and offer: spread evenly across a window (e.g. the next 7 days, one post per slot at a sensible hour), a fixed cadence/interval (e.g. every weekday at 10:00, laid out from a start date they give), manual dates per post, or no dates yet (undated drafts to place on the calendar later). Convert each chosen time to ISO 8601 and pass it as 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.
This is what makes the loop real:
PROJECT_createLlmEngine, add the target prompts with PROJECT_addPrompts(site_id, llm_id, prompts[]), then read movement later with PROJECT_getPromptsRankings and PROJECT_getLlmStatistics. Because this writes to the user's live project (and consumes plan limits), confirm before creating engines/prompts.DATA_getAiSearchOverview and DATA_getAiSearchLeaderboard after the campaign has run and diff against the baseline from step 2.get_post_metrics_summary(workspaceId, pageIds, startDate, endDate) on the labelled campaign posts shows the engagement the content earned.Keep these in mind when creating social content meant to target a specific keyword or close an AI-visibility gap:
DATA_ AI Search calls work without a project; the AI Result Tracker (prompts over time) requires an SE Ranking project.Take seranking/ai-search-gaps-to-social-campaign from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.