OpenSEO Link Prospecting
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
- Catalog + binding:
mktg catalog info openseo --json --fields configured + .seo/openseo.json. No OpenSEO → prospect with Exa search only (queries below still apply) and label authority data unknown.
- 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.
- 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_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
- Build 5–10 prospecting queries from the asset;
get_serp_results in batches.
- Competitors supplied?
get_backlinks_overview their strongest domains first.
- 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).
- Per prospect, define the angle: broken/missing resource, better current data, useful tool/template, comparison inclusion, expert quote.
- Contact discovery on the strongest prospects via web tools (source URLs recorded).
- 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" }] }
- 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-prospecting3description: 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. Use this skill when the user has a linkable asset (study, tool, guide, template, product page) and wants backlinks, resource-page inclusions, or comparison mentions. Triggers: "link prospecting", "find backlink opportunities", "resource page outreach", "get backlinks for", "link building outreach".4---56# OpenSEO Link Prospecting78Find 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.910## On Activation11121. **Catalog + binding**: `mktg catalog info openseo --json --fields configured` + `.seo/openseo.json`. No OpenSEO → prospect with Exa search only (queries below still apply) and label authority data `unknown`.132. **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.143. Read `brand/positioning.md` for angle/audience fit (tolerate missing).1516## OpenSEO MCP Tools1718- `get_serp_results`: find ranking articles, listicles, resource pages, comparisons, statistics pages (≤10 queries per call).19- `get_backlinks_overview`: competitor backlink/referring-domain patterns — where do THEY get links (may be unavailable; continue without).20- `get_domain_overview`: qualify strong prospect domains.21- `get_ranked_keywords`: topical-fit checks on prospects/competitors.22- `research_keywords`: expand prospecting queries.2324## Contact Discovery (NOT OpenSEO)2526Contact paths come from web/search/browser tools (Firecrawl fetch, Exa search, browser automation) — never attribute these to OpenSEO:2728- Author byline pages, contact pages, editorial guidelines, about/team pages29- LinkedIn/X/Bluesky profiles, newsletter mastheads30- Public emails in HTML or visible text; `Person`/`Organization`/`sameAs`/`email` structured data3132Record only contact details actually found, each with its source URL.3334## Prospecting Query Patterns3536`<topic> resources` · `best <category> tools` · `<competitor> alternatives` · `<topic> statistics` · `<topic> guide` · `<topic> examples` · `<topic> templates` · `<topic> software` · `<topic> for <audience>`3738## Workflow39401. Build 5–10 prospecting queries from the asset; `get_serp_results` in batches.412. Competitors supplied? `get_backlinks_overview` their strongest domains first.423. 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).434. Per prospect, define the angle: broken/missing resource, better current data, useful tool/template, comparison inclusion, expert quote.445. Contact discovery on the strongest prospects via web tools (source URLs recorded).456. Write targets to `.seo/backlink-targets.json`:4647```json48{ "version": 1, "updatedAt": "<iso>", "asset": "<url>", "targets": [{ "url": "", "domain": "", "source": "", "relevance": "", "angle": "", "contactPath": "", "contactSource": "", "priority": "high|med|low", "status": "new" }] }49```50517. Draft 2–3 reusable outreach messages (resource inclusion, article update, comparison angle). Hand the list to `off-page-seo` for the campaign cadence.5253## Output Format5455| Prospect URL | Domain | Source | Relevance | Suggested angle | Contact path | Priority |56| ------------ | ------ | ------ | --------- | --------------- | ------------ | -------- |5758## Anti-Patterns5960- **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.61- **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.62- **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.63- **Prospecting without a linkable asset and reason** — because "please link to my homepage" converts at ~0%. No asset + reason, no outreach.64- **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.6566## Close the loop6768After writing files, log completion so `mktg plan` / `mktg status` count the work (bare `mktg run` only logs `loaded`):6970```bash71mktg run openseo-link-prospecting --complete --writes <paths written> --result success --json72```737475---7677*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.*