Source profileQuality 82/100

MoizIbnYousaf/marketing-cli/skills/openseo-keyword-research/SKILL.md

openseo-keyword-research

Discover keyword opportunities with MEASURED volume, keyword difficulty, CPC, and intent from OpenSEO, then write them into brand/keyword-plan.md. Use this skill whenever someone asks for keyword difficulty, KD, search volume, keyword ideas with metrics, striking-distance opportunities from Search Console, or SERP-validated keyword priorities. For qualitative research without an OpenSEO connection, use mktg's keyword-research instead (metrics will be unknown). Triggers: "keyword difficulty", "se

Source repository stars
27
Declared platforms
0
Static risk flags
0
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Turn seed topics into a prioritized, MEASURED keyword opportunity set and land it in brand/keyword-plan.md. mktg's keyword-research is the playbook (methodology); this skill is the measured-data engine behind it when OpenSEO is configured.

Best for

    Not for

    • Inventing metrics when OpenSEO returns nothing — because a hallucinated KD of "about 35" silently becomes the foundation of a content plan. If OpenSEO doesn't return a value, write unknown.
    • Volume-first prioritization — because a 10k-volume term that doesn't match the product converts nobody and burns months. Positioning filters the list before metrics rank it.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/MoizIbnYousaf/marketing-cli --skill "skills/openseo-keyword-research"
    Safe inspection promptEditorial

    Inspect the Agent Skill "openseo-keyword-research" from https://github.com/MoizIbnYousaf/marketing-cli/blob/f12fbcbe4929584697b309b9096c9427b0cfce8e/skills/openseo-keyword-research/SKILL.md at commit f12fbcbe4929584697b309b9096c9427b0cfce8e. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Workflow

      1. Normalize seeds into 2–5 distinct research angles filtered by positioning. 2. GSC connected? Pull striking-distance terms first and hydrate with getkeywordmetrics. Work that list before broad discovery. 3. researchkeywords per angle; getkeywordmetrics to hydrate; getrankedkey…

      Normalize seeds into 2–5 distinct research angles filtered by positioning.GSC connected? Pull striking-distance terms first and hydrate with getkeywordmetrics. Work that list before broad discovery.researchkeywords per angle; getkeywordmetrics to hydrate; getrankedkeywords if a domain is in the brief.
    2. 02

      On Activation

      1. Catalog check: mktg catalog info openseo --json --fields configured — if not configured, stop spending: state the gap and hand off to Exa-backed keyword-research with metrics marked unknown. 2. Project binding: read .seo/openseo.json for projectId. Missing → run openseo-proje…

      Catalog check: mktg catalog info openseo --json --fields configured — if not configured, stop spending: state the gap and hand off to Exa-backed keyword-research with metrics marked unknown.Project binding: read .seo/openseo.json for projectId. Missing → run openseo-project-setup first (or ask the user for the project id).Brand grounding: read brand/positioning.md + existing brand/keyword-plan.md (tolerate templates). Business-fit beats volume-fit — the positioning file is the filter.
    3. 03

      OpenSEO MCP Tools

      getsearchconsoleperformance: when GSC is connected, START here. High rowLimit, filter average position 5–20 client-side (the API sorts by clicks, not position). These striking-distance terms are the fastest wins — and z…

      getsearchconsoleperformance: when GSC is connected, START here. High rowLimit, filter average position 5–20 client-side (the API sorts by clicks, not position). These striking-distance terms are the fastest wins — and z…getkeywordmetrics: hydrate up to 700 keywords per call with volume, KD, intent, CPC, trends. Use on striking-distance terms and every candidate set.researchkeywords: discovery from 1–5 seeds per call; prefer 150 results unless exhaustive research was requested.
    4. 04

      Cost Discipline

      State estimated call counts before bulk pulls (200 keywords) and get confirmation.

      State estimated call counts before bulk pulls (200 keywords) and get confirmation.Small exploratory batches are fine without asking.GSC-first ordering exists precisely to avoid spending credits on data the user already owns.
    5. 05

      Anti-Patterns

      Inventing metrics when OpenSEO returns nothing — because a hallucinated KD of "about 35" silently becomes the foundation of a content plan. If OpenSEO doesn't return a value, write unknown.

      Inventing metrics when OpenSEO returns nothing — because a hallucinated KD of "about 35" silently becomes the foundation of a content plan. If OpenSEO doesn't return a value, write unknown.Volume-first prioritization — because a 10k-volume term that doesn't match the product converts nobody and burns months. Positioning filters the list before metrics rank it.savekeywords without explicit confirmation — because saves mutate the user's OpenSEO account and bulk saves burn credit. Ask, state the count, then save.

    Permission review

    Static risk signals and limitations

    No configured static risk pattern was detected

    This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score82/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars27SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    MoizIbnYousaf/marketing-cli
    Skill path
    skills/openseo-keyword-research/SKILL.md
    Commit
    f12fbcbe4929584697b309b9096c9427b0cfce8e
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    OpenSEO Keyword Research

    Turn seed topics into a prioritized, MEASURED keyword opportunity set and land it in brand/keyword-plan.md. mktg's keyword-research is the playbook (methodology); this skill is the measured-data engine behind it when OpenSEO is configured.

    On Activation

    1. Catalog check: mktg catalog info openseo --json --fields configured — if not configured, stop spending: state the gap and hand off to Exa-backed keyword-research with metrics marked unknown.
    2. Project binding: read .seo/openseo.json for projectId. Missing → run openseo-project-setup first (or ask the user for the project id).
    3. Brand grounding: read brand/positioning.md + existing brand/keyword-plan.md (tolerate templates). Business-fit beats volume-fit — the positioning file is the filter.

    OpenSEO MCP Tools

    • get_search_console_performance: when GSC is connected, START here. High rowLimit, filter average position ~5–20 client-side (the API sorts by clicks, not position). These striking-distance terms are the fastest wins — and zero extra credit cost.
    • get_keyword_metrics: hydrate up to 700 keywords per call with volume, KD, intent, CPC, trends. Use on striking-distance terms and every candidate set.
    • research_keywords: discovery from 1–5 seeds per call; prefer ~150 results unless exhaustive research was requested.
    • get_ranked_keywords: when the brief includes a domain/page — exact ranking rows (near-misses, competitor-owned terms).
    • get_serp_results: inspect SERPs for top candidates when intent is ambiguous. Keep batches small (≤10 queries).
    • list_saved_keywords: avoid re-researching what's already saved.
    • save_keywords: ONLY after explicit user confirmation, with concise tags (topic:<t>, intent:<i>, page:<slug>).

    Workflow

    1. Normalize seeds into 2–5 distinct research angles filtered by positioning.
    2. GSC connected? Pull striking-distance terms first and hydrate with get_keyword_metrics. Work that list before broad discovery.
    3. research_keywords per angle; get_keyword_metrics to hydrate; get_ranked_keywords if a domain is in the brief.
    4. Remove irrelevant, duplicate, branded-only, and off-intent terms.
    5. Prioritize by practical opportunity: business fit → clear intent → reasonable KD → volume/CPC signal → winnable SERP.
    6. get_serp_results for high-potential or ambiguous terms when SERP intent would change the call.
    7. Write the shortlist into brand/keyword-plan.md (preserve its required sections per brand/SCHEMA.md; confirm before overwriting populated sections).
    8. Present: best opportunity theme, top keywords now, keywords to save, SERP caveats. Then next actions: openseo-keyword-clustering, seo-content, or save.

    Cost Discipline

    • State estimated call counts before bulk pulls (>200 keywords) and get confirmation.
    • Small exploratory batches are fine without asking.
    • GSC-first ordering exists precisely to avoid spending credits on data the user already owns.

    Anti-Patterns

    • Inventing metrics when OpenSEO returns nothing — because a hallucinated KD of "about 35" silently becomes the foundation of a content plan. If OpenSEO doesn't return a value, write unknown.
    • Volume-first prioritization — because a 10k-volume term that doesn't match the product converts nobody and burns months. Positioning filters the list before metrics rank it.
    • save_keywords without explicit confirmation — because saves mutate the user's OpenSEO account and bulk saves burn credit. Ask, state the count, then save.
    • Skipping the GSC-first pass when GSC is connected — because striking-distance terms (positions 5–20) are provably the cheapest wins in SEO and they're free to read. Discovery research before first-party data is wasted spend.
    • Overwriting a populated keyword-plan.md without confirmation — because that file is brand memory other skills build on (seo-content, seo-machine). Merge; confirm destructive rewrites.

    Progressive Enhancement

    LevelBehavior
    L0 (no OpenSEO)Hand off to Exa-backed keyword-research; metrics unknown
    L1 (OPENSEO_API_KEY)Metrics via available calls; MCP steps deferred
    L2 (MCP connected)Full workflow incl. SERP validation
    L3 (GSC connected)Striking-distance-first ordering; highest-signal path

    Adapted from every-app/open-seo .agents/skills/keyword-research (MIT). Workflow and tool guidance upstream; mktg brand-memory writes, positioning filter, and cost discipline added here.

    Alternatives

    Compare before choosing

    Computed 9027

    MoizIbnYousaf/marketing-cli

    competitor-alternatives

    Creates high-converting 'X vs Y' and 'X alternatives' SEO pages that capture comparison search traffic. Researches competitors, writes honest comparison content, and adds schema markup (FAQPage, ItemList). Use when someone needs alternatives pages, comparison content, or says 'alternatives page', 'vs page', 'comparison', 'competitor alternatives', 'X vs Y page', or wants to capture competitor brand search traffic with SEO content. Also trigger when someone wants to rank for competitor brand name

    Computed 8627

    MoizIbnYousaf/marketing-cli

    seo-content

    Create high-quality, SEO-optimized content that ranks AND reads like a human wrote it. Performs live SERP gap analysis, writes with anti-AI detection techniques, and adds schema markup. Use when someone needs a blog post, article, SEO page, or wants content that drives search traffic. Triggers on 'SEO content', 'blog post', 'article', 'SERP', 'programmatic SEO', 'content at scale', 'write a post about', 'rank for', or 'search-optimized content'. Two modes: single article or programmatic SEO at s

    Computed 8227

    MoizIbnYousaf/marketing-cli

    openseo-competitor-analysis

    Deep-dive ONE competitor's organic footprint — exact ranking keywords and URLs, content themes, backlink profile, and exploitable gaps — with findings written into brand/competitors.md. Use this skill when the user names a competitor and wants to know what to learn from them, counter, or outrank, including head-to-head comparisons against the user's own domain. For market-level mapping first, use openseo-competitive-landscape. Triggers: "analyze competitor", "competitor keywords", "competitor ba

    Computed 7527

    MoizIbnYousaf/marketing-cli

    openseo-competitive-landscape

    Map who is winning an SEO market with measured data — recurring SERP domains, organic footprints, winning content themes, backlink authority, and the gaps worth attacking. Use this skill for market-level questions ("who ranks for X", "how competitive is this space", "where are the SEO openings") before committing to keyword targets or content themes. For one named competitor, use openseo-competitor-analysis instead. Triggers: "competitive landscape seo", "who ranks for", "seo market map", "how c