Skip to content
Agentmart
Submit a tool

keyword-research

Run real keyword research with DataForSEO.

Skill by marcelfahle

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/marcelfahle-keyword-research

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Run real keyword research with DataForSEO. Volumes, CPC, keyword difficulty, SERP intent, competitor gaps, and clustered topical maps grounded in the user's ICP — not vibes. Use when the user wants to "do keyword research," "find keywords for," "build a keyword list," "what should I rank for," "check search volume," "find keyword gaps vs competitors," "build a topical map," "plan a content cluster," "set up Google Ads keywords," "build an AdWords campaign," or "find long-tail keywords." Pulls the ICP from the user's Obsidian vault when present, talks to DataForSEO directly (REST or MCP), and produces a prioritized, intent-tagged keyword plan ready to feed into Ads, content, or SEO. Does NOT invent volumes or CPCs — every number is cited to a DataForSEO endpoint and timestamp.

Use cases: backend, writing, marketing, research

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/keyword-research

What's inside

Skill name
keyword-research
Description
Run real keyword research with DataForSEO. Volumes, CPC, keyword difficulty, SERP intent, competitor gaps, and clustered topical maps grounded in the user's ICP — not vibes. Use when the user wants to "do keyword research," "find keywords for," "build a keyword list," "what should I rank for," "check search volume," "find keyword gaps vs competitors," "build a topical map," "plan a content cluster," "set up Google Ads keywords," "build an AdWords campaign," or "find long-tail keywords." Pulls the ICP from the user's Obsidian vault when present, talks to DataForSEO directly (REST or MCP), and produces a prioritized, intent-tagged keyword plan ready to feed into Ads, content, or SEO. Does NOT invent volumes or CPCs — every number is cited to a DataForSEO endpoint and timestamp.
License
MIT
Instructions
158 lines in SKILL.md · view on GitHub

Files (10)

  • SKILL.md
  • anti-patterns.md · references/
  • dataforseo-endpoints.md · references/concepts/
  • intent-taxonomy.md · references/concepts/
  • keyword-metrics.md · references/concepts/
  • sample-output.md · references/examples/
  • competitor-gap.md · references/workflows/
  • google-ads-campaign.md · references/workflows/
  • icp-driven.md · references/workflows/
  • seed-expansion.md · references/workflows/

SKILL.md (first lines)

# Keyword Research

Real keyword research means real data. Every keyword in the final output has a
DataForSEO-sourced search volume, CPC, and difficulty — or it does not appear.
No guesses. No "estimated." If the API returns nothing, the keyword is dropped
or flagged, never faked.

The job: take a fuzzy intent ("find keywords for Sprint Zero", "build the ad
campaign for X") plus the user's ICP, and return a prioritized, intent-clustered
keyword plan that an operator can paste into Google Ads, a content brief, or a
programmatic SEO template.

## Mode Selection

Pick the mode from the user's request. Each mode → Read the matching workflow
file before doing anything else.

- **ICP-driven research** (default for new projects, ad campaigns, new pages):
  user gives a product / project name and (optionally) the ICP doc. Read
  `references/workflows/icp-driven.md`.
- **Seed expansion**: user already has 1–10 seed keywords and wants the full
  cluster. Read `references/workflows/seed-expansion.md`.
- **Competitor gap analysis**: user gives 1–N competitor domains and wants the
  keywords they rank for that we don't. Read
  `references/workflows/competitor-gap.md`.
- **Google Ads campaign**: user is building or refining a paid search campaign
  (exact/phrase/broad match groups, negative lists, CPC ceilings). Read
  `references/workflows/google-ads-campaign.md`.

If the user's request straddles modes (common: "build the AdWords campaign for
Sprint Zero, ICP is in Obsidian") run them in order: ICP-driven → seed
expansion → competitor gap → Google Ads.

## Prerequisites (run once, fail loud)

Before any keyword work, verify DataForSEO access. Read
`references/concepts/dataforseo-endpoints.md` for the full setup.

1. Confirm the `dataforseo` MCP is registered:
   ```bash
   openclaw mcp list | grep -i dataforseo || \
     echo "→ Register it: see references/concepts/dataforseo-endpoints.md"
   ```
2. Smoke-test the connection by calling the cheapest tool (e.g.
   `dataforseo.appendix_user_data` or the REST equivalent) and reading
   `money` from the response. If money is 0 or auth fails, stop and ask the
   user to top up / fix credentials. Never proceed and silently degrade to
   guessed numbers.

## Hard Constraints

1. **Every keyword in the output has a real DataForSEO number.** No hallucinated
   volumes. No "approximately 1K." If the API returns null, drop it or mark
   `volume=NULL (no_data)`.
2. **Cite the source on every batch.** Each table footer states the endpoint,
   location code, language code, and ISO timestamp of the call.
3. **Always pull the ICP first** when one exists. Search the Obsidian vault
   before asking the user to paste anything. Use the `obsidian` skill's
   `obsidian-cli search-content "ICP"` and friends.
4. **Tag every keyword with intent** (informational / commercial /
   transactional / navigational / local). Intent comes from the SERP, not from
   the keyword string. When uncertain, run a SERP check.
5. **Cluster before delivering.** Raw keyword dumps are not an output. Group by
   parent topic + intent + funnel stage.
6. **Brand vs generic split is mandatory.** Brand terms (the user's name,
   competitors' names) are reported separately and never mixed into the generic
   commercial cluster.
7. **Keyword Difficulty (KD) is reported with the threshold context.** "KD 35"
   alone is meaningless; pair it with the user's domain rating bucket (new
   site / DR<30 / DR 30–60 / DR>60) and a go/no-go.
8. **Cache raw API responses.** Save every DataForSEO response to
   `keyword-research/raw/<project>/<YYYY-MM-DD>/<endpoint>.json`. Re-runs read
   the cache before re-billing the API.
9. **Respect the user's locale.** Default to the location and language declared
   in the ICP. If absent, ask once, then proceed.
10. **No final delivery without the anti-patterns checklist.** Read
    `references/anti-patterns.md` and verify every item before handing back the
    plan.

## Soft Constraints

1. Prefer batches of 100–700 keywords per call (DataForSEO sweet spot).
2. Default location: `2840` (United States), language `en` — override per ICP.
3. Default to **monthly volume**, **competition**, **CPC**, and (when
   available) **KD** as the four core columns. Add **search intent** and
   **parent topic** as derived columns.
4. When the user has Ahrefs / Semrush data, cross-reference but trust
   DataForSEO's volume as canonical (it's their pipeline).
5. Use `dataforseo_labs/google/bulk_keyword_difficulty/live` to get KD for up
   to 1000 keywords in one call instead of one-at-a-time.
6. For long-tail expansion, prefer
   `dataforseo_labs/google/keyword_suggestions/live` over `related_keywords` —
   it surfaces more transactional variants.
7. Save the final plan as a markdown file with a CSV companion. Operators
   paste the CSV into Ads / sheets, the markdown is the human-readable brief.

## Output Shape

Every final deliverable has this exact structure (operators rely on the
shape — do not freelance):

```
# Keyword plan: <project>

## Snapshot
- ICP: <one line>
- Location / language: <e.g., 2840 / en>
- Source: DataForSEO (<endpoints used>) — pulled <ISO timestamp>
- Total keywords: N (M after dedupe + intent filter)

## Top opportunities (the 10 to act on this week)
| # | Keyword | Vol | KD | CPC | Intent | Parent topic | Why |

## Cluster: <parent topic 1>
| Keyword | Vol | KD | CPC | Intent | Match type | Notes |

## Cluster: <parent topic 2>
...

From marcelfahle/skills, MIT.

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
May 8, 2026 (5 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from marcelfahle

Cite this page

keyword-research skill. Agent Mart. https://agentmart.dev/skills/marcelfahle-keyword-research (last updated 2026-10-24)