Openseo link prospecting skill

Find realistic link prospects with SERP and backlink evidence, discover contact paths via web tools, and draft personalized outreach — with targets saved to .seo/backlink-targets.json for off-page-seo campaigns.

by MoizIbnYousaf·MIT license·GitHub ↗

★ 31 Stars on the repo·Checked

npx degit MoizIbnYousaf/marketing-cli/skills/openseo-link-prospecting#main ~/.claude/skills/openseo-link-prospecting

SKILL.md · 5.7 KB · installs the whole folder to ~/.claude/skills/openseo-link-prospecting

Files of Openseo link prospecting

Files 1 file
Show the full text103 lines

Find pages, sites, and authors that might realistically reference the user's linkable asset — then hand off-page-seo a qualified target list at .seo/backlink-targets.json instead of a cold start.

On Activation

  1. Readiness + binding: mktg seo status --json --fields readiness,catalog.endpointError,project. not_configured → prospect with Exa search only (queries below still apply) and label authority data unknown. For a ready state, verify live access with the free whoami MCP tool before paid calls.
  2. Clarify the asset: what page/study/tool/template is being promoted and WHY someone would reference it. No clear asset + reason → fix that first; outreach without a reason is spam.
  3. Read brand/positioning.md for angle/audience fit (tolerate missing).

OpenSEO MCP Tools

  • get_serp_results: find ranking articles, listicles, resource pages, comparisons, statistics pages (≤10 queries per call).
  • get_backlinks_overview: competitor backlink/referring-domain patterns — where do THEY get links (may be unavailable; continue without).
  • get_backlinks_profile: page-level source/target/anchor/dofollow/lost/broken evidence. Preserve target scope, pagination, filters, and one-per-domain mode in .seo/backlink-targets.json provenance.
  • get_domain_overview: qualify strong prospect domains.
  • get_ranked_keywords: topical-fit checks on prospects/competitors.
  • research_keywords: expand prospecting queries.

Contact Discovery (NOT OpenSEO)

Contact paths come from web/search/browser tools (Firecrawl fetch, Exa search, browser automation) — never attribute these to OpenSEO:

  • Author byline pages, contact pages, editorial guidelines, about/team pages
  • LinkedIn/X/Bluesky profiles, newsletter mastheads
  • Public emails in HTML or visible text; Person/Organization/sameAs/email structured data

Record only contact details actually found, each with its source URL.

Prospecting Query Patterns

<topic> resources · best <category> tools · <competitor> alternatives · <topic> statistics · <topic> guide · <topic> examples · <topic> templates · <topic> software · <topic> for <audience>

Workflow

  1. Build 5–10 prospecting queries from the asset; get_serp_results in batches.
  2. Competitors supplied? get_backlinks_overview their strongest domains first.
  3. Filter: keep editorial pages, resource lists, comparisons, statistics, templates, curated directories. Drop homepages, login walls, thin affiliate, spam, and direct competitors (unless a comparison angle is valid).
  4. Per prospect, define the angle: broken/missing resource, better current data, useful tool/template, comparison inclusion, expert quote.
  5. Contact discovery on the strongest prospects via web tools (source URLs recorded).
  6. Write targets to .seo/backlink-targets.json:
{ "version": 1, "updatedAt": "<iso>", "asset": "<url>", "targets": [{ "url": "", "domain": "", "source": "", "relevance": "", "angle": "", "contactPath": "", "contactSource": "", "priority": "high|med|low", "status": "new" }] }
  1. Draft 2–3 reusable outreach messages (resource inclusion, article update, comparison angle). Hand the list to off-page-seo for the campaign cadence.

Output Format

Prospect URL Domain Source Relevance Suggested angle Contact path Priority

Anti-Patterns

  • Inventing emails, handles, or contact names — because a single fabricated contact burns the user's credibility with a real human. Only record what was found, with the source URL; otherwise name the next discovery step.
  • Attributing contact discovery to OpenSEO — because OpenSEO finds PROSPECTS; web/browser tools find CONTACTS. The misattribution teaches a wrong tool model and hides the real source when details need re-verification.
  • Mass-template outreach — because editors can smell a blast, and one spam report damages the domain's future deliverability. Personalize by page and reason, or don't send.
  • Prospecting without a linkable asset and reason — because "please link to my homepage" converts at ~0%. No asset + reason, no outreach.
  • Skipping competitor/paid-placement flags — because pitching a direct competitor or a pay-to-play listicle wastes the user's outreach capital and can backfire publicly. Flag both in the target list.

Close the loop

After writing files, log completion so mktg plan / mktg status count the work (bare mktg run only logs loaded):

mktg run openseo-link-prospecting --complete --writes <paths written> --result success --json

Adapted from every-app/open-seo .agents/skills/link-prospecting (MIT). Workflow upstream; mktg artifact paths, off-page-seo handoff, and contact-attribution discipline added here.

1---
2name: openseo-link-prospecting
3description: >-
4 Find realistic link prospects with SERP and backlink evidence, discover
5 contact paths via web tools, and draft personalized outreach — with targets
6 saved to .seo/backlink-targets.json for off-page-seo campaigns. Use this
7 skill when the user has a linkable asset (study, tool, guide, template,
8 product page) and wants backlinks, resource-page inclusions, or comparison
9 mentions. Triggers: "link prospecting", "find backlink opportunities",
10 "resource page outreach", "get backlinks for", "link building outreach".
11category: seo
12tier: nice-to-have
13layer: distribution
14reads:
15 - brand/positioning.md
16env_vars:
17 - OPENSEO_API_KEY
18 - OPENSEO_MCP_URL
19triggers:
20 - link prospecting
21 - find backlink opportunities
22 - resource page outreach
23 - get backlinks for
24 - link building outreach
25allowed-tools:
26 - Bash(mktg catalog *)
27 - Bash(mktg run *)
28---
29 
30# OpenSEO Link Prospecting
31 
32Find pages, sites, and authors that might realistically reference the user's linkable asset — then hand `off-page-seo` a qualified target list at `.seo/backlink-targets.json` instead of a cold start.
33 
34## On Activation
35 
361. **Readiness + binding**: `mktg seo status --json --fields readiness,catalog.endpointError,project`. `not_configured` → prospect with Exa search only (queries below still apply) and label authority data `unknown`. For a ready state, verify live access with the free `whoami` MCP tool before paid calls.
372. **Clarify the asset**: what page/study/tool/template is being promoted and WHY someone would reference it. No clear asset + reason → fix that first; outreach without a reason is spam.
383. Read `brand/positioning.md` for angle/audience fit (tolerate missing).
39 
40## OpenSEO MCP Tools
41 
42- `get_serp_results`: find ranking articles, listicles, resource pages, comparisons, statistics pages (≤10 queries per call).
43- `get_backlinks_overview`: competitor backlink/referring-domain patterns — where do THEY get links (may be unavailable; continue without).
44- `get_backlinks_profile`: page-level source/target/anchor/dofollow/lost/broken evidence. Preserve target scope, pagination, filters, and one-per-domain mode in `.seo/backlink-targets.json` provenance.
45- `get_domain_overview`: qualify strong prospect domains.
46- `get_ranked_keywords`: topical-fit checks on prospects/competitors.
47- `research_keywords`: expand prospecting queries.
48 
49## Contact Discovery (NOT OpenSEO)
50 
51Contact paths come from web/search/browser tools (Firecrawl fetch, Exa search, browser automation) — never attribute these to OpenSEO:
52 
53- Author byline pages, contact pages, editorial guidelines, about/team pages
54- LinkedIn/X/Bluesky profiles, newsletter mastheads
55- Public emails in HTML or visible text; `Person`/`Organization`/`sameAs`/`email` structured data
56 
57Record only contact details actually found, each with its source URL.
58 
59## Prospecting Query Patterns
60 
61`<topic> resources` · `best <category> tools` · `<competitor> alternatives` · `<topic> statistics` · `<topic> guide` · `<topic> examples` · `<topic> templates` · `<topic> software` · `<topic> for <audience>`
62 
63## Workflow
64 
651. Build 5–10 prospecting queries from the asset; `get_serp_results` in batches.
662. Competitors supplied? `get_backlinks_overview` their strongest domains first.
673. Filter: keep editorial pages, resource lists, comparisons, statistics, templates, curated directories. Drop homepages, login walls, thin affiliate, spam, and direct competitors (unless a comparison angle is valid).
684. Per prospect, define the angle: broken/missing resource, better current data, useful tool/template, comparison inclusion, expert quote.
695. Contact discovery on the strongest prospects via web tools (source URLs recorded).
706. Write targets to `.seo/backlink-targets.json`:
71 
72```json
73{ "version": 1, "updatedAt": "<iso>", "asset": "<url>", "targets": [{ "url": "", "domain": "", "source": "", "relevance": "", "angle": "", "contactPath": "", "contactSource": "", "priority": "high|med|low", "status": "new" }] }
74```
75 
767. Draft 2–3 reusable outreach messages (resource inclusion, article update, comparison angle). Hand the list to `off-page-seo` for the campaign cadence.
77 
78## Output Format
79 
80| Prospect URL | Domain | Source | Relevance | Suggested angle | Contact path | Priority |
81| ------------ | ------ | ------ | --------- | --------------- | ------------ | -------- |
82 
83## Anti-Patterns
84 
85- **Inventing emails, handles, or contact names** — because a single fabricated contact burns the user's credibility with a real human. Only record what was found, with the source URL; otherwise name the next discovery step.
86- **Attributing contact discovery to OpenSEO** — because OpenSEO finds PROSPECTS; web/browser tools find CONTACTS. The misattribution teaches a wrong tool model and hides the real source when details need re-verification.
87- **Mass-template outreach** — because editors can smell a blast, and one spam report damages the domain's future deliverability. Personalize by page and reason, or don't send.
88- **Prospecting without a linkable asset and reason** — because "please link to my homepage" converts at ~0%. No asset + reason, no outreach.
89- **Skipping competitor/paid-placement flags** — because pitching a direct competitor or a pay-to-play listicle wastes the user's outreach capital and can backfire publicly. Flag both in the target list.
90 
91## Close the loop
92 
93After writing files, log completion so `mktg plan` / `mktg status` count the work (bare `mktg run` only logs `loaded`):
94 
95```bash
96mktg run openseo-link-prospecting --complete --writes <paths written> --result success --json
97```
98 
99 
100---
101 
102*Adapted from [every-app/open-seo](https://github.com/every-app/open-seo) `.agents/skills/link-prospecting` (MIT). Workflow upstream; mktg artifact paths, off-page-seo handoff, and contact-attribution discipline added here.*
103 

Discussion

Alternatives

Also in SEO & keywordsSee all 401 in Marketing →
Backlink Profile AnalysisBacklink profile analysis: referring domains, anchor text distribution, toxic link detection, competitor gap analysis. Works with free APIs (Moz, Bing Webmaster, Common Crawl) and DataForSEO extension. Use when user says backlinks, link profile, referring domains, anchor text, toxic links, link gap, link building, disavow, or backlink audit.Marketing · MIT/setup-cmsConnect a CMS to notfair SEO tools. Guides users through configuring WordPress, Strapi, Contentful, or Ghost — tests the connection, and writes credentials to .env.local. Once set up, seo-analysis automatically cross- references CMS content against Google Search Console data. Use whenever the user says "connect my CMS", "set up WordPress", "configure Strapi", "add Contentful", "connect Ghost", or "CMS setup". Also trigger if the user asks why no CMS data appears in a seo-analysis report.Marketing · MITCore Web Vitals optimizationOptimize Core Web Vitals (LCP, INP, CLS) for better page experience using field and lab evidence. Use when asked to "improve Core Web Vitals", "fix LCP", "reduce CLS", "optimize INP", "page experience optimization", or "fix layout shifts".Marketing · MITSEO link strategyResearch backlink opportunities, record contact evidence, and generate personalized local outreach drafts from user-provided product and contact data. Use for backlink planning and draft preparation; never send messages or submit forms without explicit authorization for the exact target and payload.Marketing · MIT