Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

keyword-research — Claude Code skill: what it does, how to install

Finds search query opportunities via OpenSEO MCP tools, evaluates SERP metrics, and saves vetted keywords to the project.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add every-app/open-seo --skill keyword-research -a claude-code
Open on GitHub

What keyword-research does

This skill turns seed topics into a prioritized set of search queries using OpenSEO MCP tools. It requires a projectId to start. The agent reads get_project_context to check business goals and historical research logs. If the same search ran within the last 30 days, results are reused to save credits.

Discovery runs on OpenSEO MCP tools. The research_keywords tool discovers related phrases, while get_keyword_metrics fetches volume and difficulty for up to 700 keywords. Queries between positions 5 and 20 are pulled directly from Search Console. The save_keywords tool triggers only after explicit user approval.

Output delivery relies on the seo-report skill. This dependency is strict: without seo-report, the agent halts before generating any HTML.

What it helps with

  • expand seed topics into prioritized search keyword opportunities
  • hydrate candidate terms with search volume and difficulty metrics
  • extract striking-distance queries from Search Console performance data
  • evaluate local SERP results for specific cities or regions
  • tag and save vetted keywords to the project

Example prompts for the agent

  • Research search keywords for our cloud backup product using projectId my-project
  • Fetch striking-distance queries from Search Console and evaluate their difficulty
  • Audit local search terms and competitor SERPs for projectId my-project

How to install keyword-research

1Skills CLI (Vercel)

npx skills add every-app/open-seo --skill keyword-research -a claude-code

2Manually: put the files in place

~/.claude/skills/keyword-research/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/keyword-research/

From the same set9

The whole set →
competitor-analysis every-app A skill for analyzing one competitor's organic footprint: keywords, content themes, backlinks, and gaps. Delivers a report with a winnable action plan. Claude Code CX Codex Cursor +1 6,600installs link-prospecting every-app Finds realistic link prospects from search results and competitor backlinks, uncovers public contact details, and drafts targeted outreach pitches. Claude Code CX Codex Cursor +1 6,500installs competitive-landscape every-app This skill maps SEO competitors, content themes, keyword coverage, and backlinks. Use it to find gaps across a market. Claude Code CX Codex Cursor +1 6,500installs keyword-clustering every-app Groups keywords by search intent and assigns each cluster to an existing or proposed page. Claude Code CX Codex Cursor +1 6,500installs seo-coach every-app Enters an OpenSEO coach mode to explain search optimization workflows, suggest concrete next actions, and guide agent research tools. Claude Code CX Codex Cursor +1 6,500installs seo-project-setup every-app Collects a site's SEO context, goals, positioning, competitors, and key pages. Use it before running other OpenSEO skills. Claude Code CX Codex Cursor +1 6,500installs seo-audit every-app Audits a domain with OpenSEO tools, finds qualified organic search opportunities, and produces a data-backed action report. Useful when preparing an SEO review for non-experts. Claude Code CX Codex Cursor +1 5,100installs local-seo every-app Audits Google Business Profiles, benchmarks them against local rivals, and maps Google Maps visibility across a coordinate grid. Claude Code CX Codex Cursor +1 4,300installs

Similar

marketing-campaign affaan-m Plans and runs multi-channel marketing launches. It handles audience research, campaign angles, landing page copy, email sequences, and social posts. Claude Code CX Codex Cursor +1 4,600installs fixing-metadata ibelick Audits page metadata and fixes what's broken: titles, descriptions, canonical URLs, Open Graph, Twitter cards, icons and JSON-LD. Claude Code CX Codex Cursor +1 18,200installs content-creation official anthropics This skill helps draft marketing content for blogs, social posts, newsletters, landing pages, and more. Use it when channel formatting, SEO copy, headlines, or CTAs matter. Claude Code CX Codex Cursor +1 4,900installs seo-audit coreyhaines31 Diagnoses technical SEO issues, indexing drops, and metadata errors. Identifies why your site is losing organic search rankings in Google. Claude Code CX Codex Cursor +1 236,800installs brand claudekit Keeps brand voice, visual rules and design tokens in one markdown file, then feeds them to your agent's prompts and to your CSS variables. Claude Code CX Codex Cursor +1 39,500installs banner-design claudekit Generates banners for social media, ads, and web hero sections using HTML/CSS. Useful when you need fast visual creative assets directly in your coding agent. Claude Code CX Codex Cursor +1 39,000installs marketing-psychology coreyhaines31 Applies behavioral science and mental models to marketing decisions. It helps teams analyze buyer motivations and solve funnel bottlenecks. Claude Code CX Codex Cursor +1 164,000installs content-strategy coreyhaines31 Plans content roadmaps, selects blog topics, and balances searchable search-intent pieces with shareable formats. Use it when deciding what to write next to bring in leads. Claude Code CX Codex Cursor +1 163,400installs

Questions about keyword-research

How to install keyword-research in Claude Code?

Install the skill by running npx skills add every-app/open-seo --skill keyword-research -a claude-code.

What does keyword-research do?

It discovers search query opportunities via OpenSEO MCP tools, evaluates difficulty and volume metrics, and outputs prioritized keyword sets.

Does keyword-research require other skills to build reports?

Yes, it delivers its output through the seo-report skill. If seo-report is not available in the environment, the agent stops before creating the HTML report.

Source text

SKILL.md · MIT
---
name: keyword-research
description: "Discover keyword opportunities, evaluate metrics and SERPs, and save/tag promising terms."
---

# OpenSEO Keyword Research

## Goal

Turn seed topics into a prioritized keyword opportunity set using OpenSEO MCP data. The output should help the user decide what to target, what to save, and what to research next.

## Required inputs

- `projectId`
- One or more seed topics, products, pages, competitors, or audience problems
- Optional market/location/language

If `projectId` is missing, use `list_projects` first. If the target market/location/language is unclear and would materially affect keyword metrics, ask the user; otherwise use the MCP tool defaults.

## Project context

The project-context tools are free and shared with the app and other agents.

1. Call `get_project_context` first and ground the research in it — the business, the goal, the markets, and the competitors and key pages already saved.
2. This skill needs `business_overview` and `current_goal`. If either is empty, run a minimal inline setup: ask the user, or infer from the site and confirm, just enough to fill them, write them back with `update_project_context`, then continue the research. Never front-load the full interview; suggest `seo-project-setup` at the end for the rest.
3. Before spending credits, check the research log. If the same research ran within the last 30 days, reuse that result and say so instead of re-buying it.
4. On finish, write back what is durable — a sharpened `business_overview` or `current_goal`, competitors that kept appearing in the SERPs via `addCompetitors`, pages the keywords should land on via `addKeyPages` — and append a research log entry: `{ appendResearchLog: { summary: "Keyword research: <seeds/market>. Verdict: <conclusion>" } }`.

## Deliver as a report

Deliver through the `seo-report` skill, saving with `skill: "keyword-research"`. If that skill is not available, say so and stop before writing HTML.

## OpenSEO MCP tools

- `research_keywords`: primary discovery tool. Use 1-5 seeds per call and prefer 150 results unless the user asks for exhaustive research. For demand in one city, county, or region, call `search_serp_locations` and pass the returned `locationName` on the seed: volume, CPC, and competition become local; keyword ideas, KD, and intent stay national.
- `get_keyword_metrics`: hydrate up to 700 known keywords with volume, keyword difficulty (KD), search intent, CPC, and monthly trends in one call. Use it to score candidate or known terms — including the Search Console striking-distance queries from step 1.
- `get_ranked_keywords`: pull exact ranking keyword rows when a target domain or page is part of the research brief.
- `get_search_console_performance`: when Search Console is connected, start from the project's real first-party demand — queries already earning impressions and near-ranking ("striking distance") terms. Pass `minPosition: 5, maxPosition: 20, minImpressions: 50` so the server filters the striking-distance rows for you (Google sorts by clicks and can't filter by position itself). Then hydrate those striking-distance queries with `get_keyword_metrics` to attach difficulty and intent.
- `get_serp_results`: inspect SERPs for the top candidate terms, especially when intent is ambiguous. Pass the same `locationName` for the SERP in one city, county, or region.
- `search_local_businesses`, `get_local_serp_results`, and `get_google_business_questions`: use for local SEO topics when a business/location radius matters.
- `list_saved_keywords`: avoid duplicating already-saved work or use existing tags as context.
- `save_keywords`: save selected keywords only after explicit user confirmation.

## Workflow

1. Normalize seeds into a small set of distinct research angles. If Search Console is connected for the project, first pull `get_search_console_performance` with `minPosition: 5, maxPosition: 20, minImpressions: 50` (default lookback), and hydrate those queries with `get_keyword_metrics` to attach KD and intent. That ranked, hydrated list is your fastest opportunity set — work it before broad discovery.
2. If the request is local SEO, identify the business, location/coordinates or service area, and local categories. Research local volume for that city or county with `research_keywords` and `locationName`. Use `search_local_businesses` and `get_local_serp_results` for the most important location/keyword set instead of relying only on national keyword/SERP data.
3. Call `research_keywords` for exploratory seeds. Use bulk calls when possible.
4. Use `get_keyword_metrics` to hydrate a fixed keyword list — or the striking-distance queries from step 1 — with volume, KD, and intent before prioritizing.
5. Use `get_ranked_keywords` when the user provides a domain/page and wants opportunities based on current rankings, near-misses, or competitor-owned terms.
6. Remove irrelevant, duplicate, branded-only, and off-intent terms.
7. Prioritize by practical opportunity, not volume alone:
   - Strong match to the user's product/page/topic
   - Clear search intent
   - Reasonable difficulty
   - Useful volume/CPC signal
   - SERP where the user can plausibly compete
   - For local SEO, local-pack/Maps visibility and proximity fit
8. Use `get_serp_results` for high-potential or ambiguous keywords when SERP intent would change the recommendation; keep the default check small.
9. Present a shortlist and a longer opportunity table.
10. Ask before saving keywords. When saving, suggest concise tags such as `topic:<topic>`, `intent:<intent>`, or `page:<slug>`.

## Output format

`h1`: the site or topic.

If a report template applies (see `seo-report`), its sections and tone replace this list.

Sections in this order:

1. **The opportunity** — one or two opening sentences naming the best theme and why the site can win it now.
2. **Target these now** — a table of keyword, intent, volume, KD, CPC, and the page to make. Add a bar chart comparing the volumes of the shortlist.
3. **Why these** — one finding per keyword that needs justifying: the SERP or metric evidence, then the page to build.
4. **The longer opportunity list** — a second table, same columns.
5. **Risks and caveats** — notes: SERP intent that would change the recommendation, missing metrics written as `unknown`, close-variant volumes that are one bucket rather than several.
6. **What to do next** — an ordered list, including whether to run keyword clustering, write a content brief, or save the chosen keywords.
7. **How this report was made** — opens with the skill link line from `seo-report`, pointing at `https://openseo.so/docs/skills/keyword-research` ("OpenSEO Keyword Research skill"), then which tools returned what.

## Guardrails

- Do not invent metrics. If OpenSEO does not return a value, write `unknown`.
- Do not call `save_keywords` without explicit confirmation.
- Prefer business-fit and intent-fit over chasing the largest volume term.

© every-app · MIT · every-app/open-seo

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor