agentleFS
Jasper0122Jasper0122/agent-seo-kit/skills/backlink-outreach/SKILL.md

backlink-outreach

Skill6 starsChanged 58 days agoMITView on GitHub

Find, evaluate, pitch and track natural backlink and content partnerships. Prospects come from the GEO citation data rather than a generic blog search: the targets are the pages an AI already cites when answering your category questions. Research runs on the Monid tool layer (web search and scrape, authority metrics, company enrichment, email validation). Triggers "backlink", "link building", "outreach email", "who is citing us", "find link partners", "guest placement", "backlink-outreach". Research and drafting are always allowed; SENDING, PUBLISHING and PROMISING a link are never done without an explicit instruction.

2 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions2 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 2

    1. younesbenallal/seo-skills★ 1same name
    2. UXMagicai/seosorted-skills★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository3 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 9 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈9

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Never promise placement, guarantee a followed link, or say you will "definitely include" a partner before editorial review.

    line 23
  2. Distinctive:

    Never edit or publish a live article as part of an outreach commitment without explicit approval.

    line 25
  3. Very specific:

    Every command below runs through Monid, so there is no separate contract for each of these.

    line 72
  4. Distinctive:

    Find and read the exact target page: Never pitch from a homepage skim.

    line 75
  5. Very specific:

    Read valid, MX records, whether it is a role address, and any typo suggestion.

    line 106
  6. Distinctive:

    The floor is your own Domain Rating: Not a constant. Measure your own number at the start of every batch and compare each candidate against …

    line 121
  7. Distinctive:

    Before any money conversation, check whether the site has a free submission or "write for us" route.

    line 177
  8. Distinctive:

    If their core function replaces yours, defer.

    line 197
  9. Distinctive:

    Do not invent a motive for a person who has not written back.

    line 257
  10. Distinctive:

    The gate: if the reader benefit of that link cannot be stated in one sentence, there is no placement and the outreach ends at the email.

    line 269
  11. Distinctive:

    If nothing comes back, one follow-up, then stop.

    line 286

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Backlink outreach

Build editorially useful partnerships. A backlink is the result of a content collaboration that helps a reader, not a swap.

The one rule that must never break

research -> evaluate -> draft -> approve -> send
         -> receive materials -> write -> review -> publish -> verify

No stage advances without the user saying so. In particular:

  • "look at", "review", "draft a reply", "who should we contact" are read-only or draft-only. They never authorise a send.
  • A finished draft is not permission to send it. Sending needs its own yes.
  • Never promise placement, guarantee a followed link, or say you will "definitely include" a partner before editorial review.
  • Never edit or publish a live article as part of an outreach commitment without explicit approval.

Editorial independence outranks the partnership. Mention a product when it helps the reader, and the writing pipeline's honesty rules still apply: no invented traffic, ranking, funding, customer or performance claims about anyone.

Step 1: take prospects from the GEO data, do not re-derive them

node scripts/prospects-from-geo.mjs --min 2
node scripts/prospects-from-geo.mjs --min 2 --authority   # paid, adds Domain Rating

This reads data/geo-latest.json and returns the hosts an AI actually cited when answering your registry questions, ranked by how often you were absent from those answers.

That ranking is the point. A host cited on a question where the engine named two rivals and not you is a page actively shaping an answer you are losing. A generic search for "<topic> blogs" finds a similar set with none of that evidence attached.

Four tiers, and the tier decides the play:

TierWhat it meansThe play
PartnerAlready a customer, supplier, integration or existing relationshipWarmest. A contact and a reason to talk exist.
ProspectCited, not a competitor or a platformThe normal research and pitch path.
CompetitorSells what you sellNever pitch. Read what they publish; that is the gap.
DirectoryReview sites, listicle farmsGetting listed is a different task, not an article email.

The competitor tier is read from the confirmed dictionary that geo-monitor maintains, so it improves as that file does. Partners come from outreach.partnerHosts in the config, which you fill in by hand.

Partners first, always. Where their own article about their category is cited and omits that you exist alongside them, that is a gap in their coverage as much as in your link profile. That framing is honest and it is the whole pitch.

A competitor being highly cited is a finding about the category. Report it, do not email it.

Step 2: research through the tool layer

Every command below runs through Monid, so there is no separate contract for each of these. Run monid inspect for the current price before a batch.

Find and read the exact target page. Never pitch from a homepage skim.

monid run -p context.dev -e /web/search \
  --query '{"query":"<their topic> site:<their domain>","limit":10}'

monid run -p context.dev -e /web/scrape/markdown \
  --query '{"url":"<the exact article URL>"}'

Scraping the page to clean markdown costs a fraction of a cent and is what makes a real observation possible instead of a generic compliment.

Measure their authority instead of guessing it.

node scripts/prospects-from-geo.mjs --min 2 --authority

One batched call returns Domain Rating, referring domains and traffic estimates for up to a hundred hosts. Do it once the list is short enough that a measured number changes a decision, not before.

Confirm who they are, and validate the address before it is ever used. A bounced first email burns the prospect.

monid run -p pdl -e /v5/company/enrich --query '{"website":"<domain>"}'
monid run -p api.strale.io -e /x402/email-validate --query '{"email":"<address>"}'

Read valid, MX records, whether it is a role address, and any typo suggestion. A role address (info@, hello@) is not disqualifying but lowers the reply odds and should be recorded as such. Validation is not permission to send.

Record every address with its source, the exact source URL, the date checked and a confidence note. Source preference, best first: an inbound message, an official partnership or contact page, the help centre, a named employee author, then a clearly labelled third party.

Step 2b: the authority floor, which is a gate and not a score

Apply this before anything is scored, pitched or drafted. A prospect below the floor is not a low-scoring prospect. It is not a prospect.

The floor is your own Domain Rating. Not a constant. Measure your own number at the start of every batch and compare each candidate against it, so the bar rises as you do.

monid run -p ahrefs -e /site-explorer/domain-rating \
  --query '{"target":"<your domain>","date":"<today>"}'

monid run -p ahrefs -e /site-explorer/domain-rating \
  --query '{"target":"<their domain>","date":"<today>"}'

Why a floor at all. On one site this kit was run against, Domain Rating moved 25 to 30 over three months while referring domains went 122 to 324. Volume did almost nothing. The nineteen point jump that followed came from six DR 90+ domains landing in a single week. A link from below your own DR does not move the number and costs the same week of work as one that does.

Three checks a Domain Rating will not catch

DR is a backlink metric and it can be inflated. Run these on anything that clears the floor.

monid run -p ahrefs -e /site-explorer/metrics \
  --query '{"target":"<domain>","date":"<today>","mode":"domain","country":"us"}'

monid run -p ahrefs -e /site-explorer/backlinks-stats \
  --query '{"target":"<domain>","date":"<today>","mode":"domain"}'

Dead shell. Many referring domains, near zero organic traffic, near zero ranking keywords. Reject whatever the DR says. A real example offered as a partner: DR 6, 361 referring domains, 0 US traffic, 0 keywords. Referring domains without traffic means somebody bought them.

Inflated DR. Backlinks divided by referring domains above roughly 20 means sitewide, footer or badge links rather than editorial ones. A real example: a directory at DR 74 carrying 341,070 backlinks from 3,816 domains, which converted into 167 ranking keywords. Not an automatic rejection, but score authority as if the DR were far lower, and prefer a free listing to an email.

Link shop neighbourhood. Referring domains named like backlinkshop.site or linkbooster.shop. If a prospect's profile is built from these, reject.

Paid placement is refused, at any Domain Rating

Priced menus (a rate card for link insertions and guest posts), brokers reselling placements on third party sites, and any seller advertising that they omit sponsored labelling.

Selling followed links without disclosure is what Google's link spam policy names, and buying them is a violation on the buyer's side too. Offer a content exchange instead. A site worth having usually accepts one; a site that will only take cash is telling you what the link is worth.

Before any money conversation, check whether the site has a free submission or "write for us" route. One placement a broker quoted us three figures for turned out to have an open self-submission form two clicks from its homepage.

The trap this gate creates, and why it is worth it

An audience filter (company size, niche, language) and an authority floor pull against each other. Expect output to fall, sometimes sharply. That is the gate working. Make the daily target a ceiling rather than a quota, and report the funnel honestly: candidates found, passed the audience filter, passed the floor, drafted. Never backfill with weaker domains to hit a number.

Step 3: test the workflow fit before scoring anything

State both products as one sentence, in order:

<their product> does <step>  ->  <your product> does <the adjacent step>

If their core function replaces yours, defer. A neutral comparison is a different piece of work with a different approval.

The partners that work are the layers either side of what you do: the thing that runs before you, the thing that runs after you, and the suppliers whose capability you distribute. Anything that occupies the same step is a competitor, however friendly the conversation.

Step 4: score, and be honest about what the score is

Score each dimension 1 to 5, then score = sum(dimension / 5 * weight).

DimensionWeightA 5 means
GEO citation strength25Cited repeatedly on questions where you were absent
Workflow complementarity20Clearly the adjacent step, not a substitute
Domain authority20Clears the Step 2b floor with room, and the DR converts into ranking keywords rather than sitting on badge links
Content activity15Recent, sustained, useful publishing
Contactability10A named editor, founder or official channel exists
Natural link space10A specific existing page where you genuinely belong

85+ first batch. 75 to 84 contact after confirming the page and the owner. 60 to 74 monitor. Below 60 defer.

The first dimension replaces the usual "SEO visibility" because it is better evidence for the actual goal: you want to be in the answer, and citation data measures that directly.

Step 5: draft

Cold first contact: use references/cold-email-template.md. Other situations (inbound reply, placement live, follow-up) are in references/email-frameworks.md. Adapt every one. Never send two prospects the same body.

Five short blocks, and the first must prove the article was read. The test: could this sentence have been written without opening the page? If yes, rewrite it.

What you may offer, all of it true:

  • A specific placement on one of your guides, subject to editorial review.
  • Real measured numbers from your own testing, with the date and the input.
  • Screenshots and an approved reference pack so they describe you accurately.
  • A genuine distribution argument, when one exists.

What is never said: any of the phrases at the end of the frameworks file, plus anything about your funding, customer count, traffic or team size.

Step 6: triage the reply

ReplyNext action
InterestedGo to Step 7. In the same reply, ask for their materials (approved description, priority features, preferred landing page, accuracy notes, two or three current screenshots) and attach your reference pack now, not later.
QuestionsAnswer them factually and link the docs. Do not re-pitch. A second pitch inside a reply thread reads as pressure and converts worse than a plain answer.
DeclinedOne line of thanks, record the reason, close the row. Do not pivot to a different article in the same thread.
No replyOne follow-up, only if delivery succeeded and the fit still holds. Then stop.

Silence is recorded as no reply, never as a decline with a reason attached. Do not invent a motive for a person who has not written back.

Step 7: write their placement first

This is the move that makes the whole pipeline work. You publish their mention before asking for anything. Full playbook: references/reciprocal-placement.md.

Short version: pick a host article that genuinely needs them (thicken in place, never change a live URL), brief content-thicken with sourced facts only, stop at preview, get a human yes, publish.

The gate: if the reader benefit of that link cannot be stated in one sentence, there is no placement and the outreach ends at the email. A section that exists only to hold a link is a link scheme, and it reads that way to the partner as much as to a search engine.

Publishing is its own authorisation. It is never implied by "the draft is good".

Step 8: deliver, then ask

Send the live URL with the reference pack attached. Body is in references/reciprocal-placement.md.

Two rules. The delivery carries no ask, and it says so out loud. The ask that follows is conditional, "if a mention ever fits one of your pieces", never "in exchange" and never "reciprocal".

If nothing comes back, one follow-up, then stop. Never pull your placement because they did not reciprocate. If it was editorially correct on the day it published, it stays correct.

Step 9: track

One row per company or distinct target article, schema in references/tracker-schema.md. Use the helper so the state rules are enforced rather than remembered:

node scripts/tracker.mjs list
node scripts/tracker.mjs add --company "<name>" --url "<their domain>" \
  --article "<exact target article URL>" [--email <addr>]
node scripts/tracker.mjs state <id> <state> [--message-id <id>] [--note "<evidence>"]

sent is only ever recorded from an authoritative send event with a message id; the helper refuses it otherwise. It is never inferred from a finished draft. The two placement columns move independently: theirs going live does not mean yours did.

Step 10: verify a live placement

  1. Destination URL correct, anchor and surrounding context sensible.
  2. The description of you is factually right.
  3. Page returns a success status and is not blocked from indexing.
  4. Link attributes: nofollow, sponsored, redirects. Record as facts. A nofollow link can still carry referral and partnership value.
  5. Whether the reciprocal content exists and stands up editorially.
  6. Re-run the GEO question it was meant to influence. That is the only test that matters here: did being on that page change whether an AI names you.

Output requirements

Research: evidence, score, risk, recommended target page, contact and its source, next action.

Email: recipient and address source, subject, body, materials requested, and the authorisation stage in plain words: draft only, approved, or sent.

Batch: the prospect table first, and an explicit send authorisation before any message is transmitted.

Related

  • Prospects come from geo-monitor run data.
  • Placements land in guides written by content-thicken, which owns the product canon and the pricing policy this skill inherits.
  • Both read the same config and data directory.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.