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
- UXMagicai/seosorted-skillstheir own version, first seen Nov 1, 2026
- younesbenallal/seo-skillstheir own version, first seen Aug 14, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- younesbenallal/seo-skills★ 1same name
- 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.
- content-thickenSkill
- geo-monitorSkill
- seo-intakeSkill
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
- Distinctive: line 23
Never promise placement, guarantee a followed link, or say you will "definitely include" a partner before editorial review.
- Distinctive: line 25
Never edit or publish a live article as part of an outreach commitment without explicit approval.
- Very specific: line 72
Every command below runs through Monid, so there is no separate contract for each of these.
- Distinctive: line 75
Find and read the exact target page: Never pitch from a homepage skim.
- Very specific: line 106
Read valid, MX records, whether it is a role address, and any typo suggestion.
- Distinctive: line 121
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 …
- Distinctive: line 177
Before any money conversation, check whether the site has a free submission or "write for us" route.
- Distinctive: line 197
If their core function replaces yours, defer.
- Distinctive: line 257
Do not invent a motive for a person who has not written back.
- Distinctive: line 269
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.
- Distinctive: line 286
If nothing comes back, one follow-up, then stop.
≈ “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.
Files
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 -> verifyNo 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 RatingThis 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:
| Tier | What it means | The play |
| Partner | Already a customer, supplier, integration or existing relationship | Warmest. A contact and a reason to talk exist. |
| Prospect | Cited, not a competitor or a platform | The normal research and pitch path. |
| Competitor | Sells what you sell | Never pitch. Read what they publish; that is the gap. |
| Directory | Review sites, listicle farms | Getting 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 --authorityOne 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).
| Dimension | Weight | A 5 means |
| GEO citation strength | 25 | Cited repeatedly on questions where you were absent |
| Workflow complementarity | 20 | Clearly the adjacent step, not a substitute |
| Domain authority | 20 | Clears the Step 2b floor with room, and the DR converts into ranking keywords rather than sitting on badge links |
| Content activity | 15 | Recent, sustained, useful publishing |
| Contactability | 10 | A named editor, founder or official channel exists |
| Natural link space | 10 | A 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
| Reply | Next action |
| Interested | Go 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. |
| Questions | Answer 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. |
| Declined | One line of thanks, record the reason, close the row. Do not pivot to a different article in the same thread. |
| No reply | One 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
- Destination URL correct, anchor and surrounding context sensible.
- The description of you is factually right.
- Page returns a success status and is not blocked from indexing.
- Link attributes:
nofollow,sponsored, redirects. Record as facts. A nofollow link can still carry referral and partnership value. - Whether the reciprocal content exists and stands up editorially.
- 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-monitorrun 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.
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
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.

