# Link building outreach to the sites that rank for your keywords

30 keywords with the live results for each, 100 sites mapped and 90 ranking pages audited; then 100 accounts and 100 people, about 63 verified work emails and 189 emails sent from inboxes on your own domain.

Family: [Outreach by audience](https://www.routergrowth.com/workflows/audiences.md) · HTML page: https://www.routergrowth.com/workflows/audience-link-building

## Give this to your agent

```text
Using RouterGrowth, run this workflow: SEO research for 30 keywords, then email the editors of the sites that rank for them. 100 accounts, 1 contact each, three-step sequence.
Show me the price before every call, and stop after each stage with a sample of the results so I can adjust.

1. Expand the keyword set: seo.keywords x 6 seed searches. Seed terms to volume, difficulty and ideas; one search per seed cluster.
2. Read the SERPs: seo.serp x 30 keywords. Who ranks for each keyword today, with features and positions.
3. Map the competitors: seo.domain_overview x 100 domains, seo.ranked_keywords x 100 domains, seo.competitors x 1 your domain. Their organic footprint: overview, the keywords they rank for, who else competes.
4. Audit the winners: seo.page_audit x 90 pages, web.scrape x 90 pages read. On-page audit of the top 3 results per keyword, plus the page text for your agent to outline against.
5. Source the accounts: company.search x 10 searches. Companies matching the industry, size and location, ten or so per search.
6. Qualify on firmographics: company.enrich x 100 companies. Headcount, industry and location to keep the accounts that fit.
7. Find the people: people.search x 100 profiles. 1 contact per account by title and seniority, with current role.
8. Get the contact: contact.find x 70 (100 tried, 70% found), contact.verify x 70 verdicts. Charged on a match only: a miss is free, so the estimate is a ceiling.
9. Context for the first line: web.scrape x 100 pages. One page per account and a few recent posts per person, so the opener is about them.
10. Run the outreach: email.send x 189 (63 contacts x 3 steps). Sequence from inboxes on a domain you own, one call per email.
11. Read the replies: email.messages x 19 inbox reads. Poll the inboxes, classify replies, hand the warm ones to a human.

Before sending: email.domain x 1, email.inbox x 1, on a domain I own.

Budget for one run: about $8.64 plus $4.66 one-time setup. Run routergrowth inspect on any capability before the first call to confirm the quote.
```

## Why this works

The sites that already rank for your keywords are the ones whose links matter. An editor answers when the pitch improves a page they own.

The first line, as your agent would write it:

> Your guide ranks third for the term and stops at 2024. We have current numbers you could cite. Want the table?

## The workflow, stage by stage

Expand the keyword set → Read the SERPs → Map the competitors → Audit the winners → Source the accounts → Qualify on firmographics → Find the people → Get the contact → Context for the first line → Run the outreach → Read the replies

| # | Stage | Calls | Cost |
|---|---|---|---:|
| 1 | Expand the keyword set | `seo.keywords` x 6 | $0.13 |
| 2 | Read the SERPs | `seo.serp` x 30 | $0.11 |
| 3 | Map the competitors | `seo.domain_overview` x 100, `seo.ranked_keywords` x 100, `seo.competitors` x 1 | $4.24 |
| 4 | Audit the winners | `seo.page_audit` x 90, `web.scrape` x 90 | $0.68 |
| 5 | Source the accounts | `company.search` x 10 | $0.02 |
| 6 | Qualify on firmographics | `company.enrich` x 100 | $0.71 |
| 7 | Find the people | `people.search` x 100 | $0.04 |
| 8 | Get the contact | `contact.find` x 70, `contact.verify` x 70 | $1.45 |
| 9 | Context for the first line | `web.scrape` x 100 | $0.56 |
| 10 | Run the outreach | `email.send` x 189 | $0.66 |
| 11 | Read the replies | `email.messages` x 19 | $0.04 |
| + | One-time setup | `email.domain` x 1, `email.inbox` x 1 | $4.66 once |

One run: $8.64 for 1,075 calls. Assumptions: 2 contacts per account unless the brief says otherwise, 70% email find rate, 90% verification pass, 3 emails per contact, 30% LinkedIn accept rate. Prices are the catalog's at the time this page was built; `routergrowth inspect` returns the exact quote before a call.

### Expand the keyword set

Seed terms to volume, difficulty and ideas; one search per seed cluster.

### Read the SERPs

Who ranks for each keyword today, with features and positions.

### Map the competitors

Their organic footprint: overview, the keywords they rank for, who else competes.

### Audit the winners

On-page audit of the top 3 results per keyword, plus the page text for your agent to outline against.

### Source the accounts

Companies matching the industry, size and location, ten or so per search.

### Qualify on firmographics

Headcount, industry and location to keep the accounts that fit.

### Find the people

1 contact per account by title and seniority, with current role.

### Get the contact

Charged on a match only: a miss is free, so the estimate is a ceiling.

### Context for the first line

One page per account and a few recent posts per person, so the opener is about them.

### Run the outreach

Sequence from inboxes on a domain you own, one call per email.

### Read the replies

Poll the inboxes, classify replies, hand the warm ones to a human.

## Run it from the command line

```bash
# RouterGrowth workflow: SEO research for 30 keywords, then email the editors of the sites that rank for them. 100 
npm install -g routergrowth && routergrowth setup

# one-time setup
routergrowth run -c email.domain -i '{"domain":"<domain>"}'
routergrowth run -c email.inbox -i '{}'

# 01 Expand the keyword set  (seo.keywords x 6)
routergrowth run -c seo.keywords -i '{"keyword":"<keyword>"}'

# 02 Read the SERPs  (seo.serp x 30)
routergrowth run -c seo.serp -i '{"keyword":"<keyword>"}'

# 03 Map the competitors  (seo.domain_overview x 100, seo.ranked_keywords x 100, seo.competitors x 1)
routergrowth run -c seo.domain_overview -i '{"domain":"<domain>"}'
routergrowth run -c seo.ranked_keywords -i '{"domain":"<domain>"}'
routergrowth run -c seo.competitors -i '{"domain":"<domain>"}'

# 04 Audit the winners  (seo.page_audit x 90, web.scrape x 90)
routergrowth run -c seo.page_audit -i '{"url":"<url>"}'
routergrowth run -c web.scrape -i '{"url":"<url>"}'

# 05 Source the accounts  (company.search x 10)
routergrowth run -c company.search -i '{"query":"<query>"}'

# 06 Qualify on firmographics  (company.enrich x 100)
routergrowth run -c company.enrich -i '{"domain":"<domain>"}'

# 07 Find the people  (people.search x 100)
routergrowth run -c people.search -i '{}'

# 08 Get the contact  (contact.find x 70, contact.verify x 70)
routergrowth run -c contact.find -i '{"first_name":"<first_name>","last_name":"<last_name>","company_domain":"<company_domain>"}'
routergrowth run -c contact.verify -i '{"email":"<email>"}'

# 09 Context for the first line  (web.scrape x 100)

# 10 Run the outreach  (email.send x 189)
routergrowth run -c email.send -i '{"inbox_id":"<inbox_id>","to":"<to>"}'

# 11 Read the replies  (email.messages x 19)
routergrowth run -c email.messages -i '{"inbox_id":"<inbox_id>"}'
```

## Questions

### How do I find investors to email?

company.search returns funds by focus and stage, people.search finds the partners at each one and contact.find returns a work email that is charged only when found. The agent reads each fund's site for the first line.

### How do I build a media list?

news.search finds who has written about your topic recently, with the outlet and the article. The agent keeps the reporters on the beat, finds their address and cites their own piece in the pitch.

### Can I use this for recruiting?

Yes. people.search filters by title, seniority, company and location, which is candidate sourcing. The email goes out from an inbox you own, and replies come back to the same thread.

### Is every address verified before sending?

contact.verify checks each address and returns valid, invalid or unknown. The workflows send only to the valid ones, which protects the domain you send from.

### What does this workflow cost to run?

About $8.64 for one run of 1,075 calls, plus $4.66 once for the sending inboxes. Each call is quoted before it runs and a lookup that finds nothing is not charged, so the figure is a ceiling. There is no subscription: the run is paid from a prepaid balance.

## Related

- [Source senior backend engineers at fintech companies](https://www.routergrowth.com/workflows/audience-candidate-sourcing.md)
- [Recruit agency partners that serve your buyers](https://www.routergrowth.com/workflows/audience-agency-partners.md)
- [Email partners at seed funds that invest in B2B software](https://www.routergrowth.com/workflows/audience-seed-investors.md)
- [Connect with angel investors who back developer tools](https://www.routergrowth.com/workflows/audience-angel-investors.md)
- Guide: [Lead enrichment: email finder, verification and company data in one API](https://www.routergrowth.com/use-cases/contact-enrichment.md)
- Guide: [Waterfall enrichment without the waterfall bill](https://www.routergrowth.com/use-cases/waterfall-email-enrichment.md)
- Skill: [Cold email pipeline](https://www.routergrowth.com/skills/cold-email-pipeline.md)
- Skill: [Hiring-signal outbound](https://www.routergrowth.com/skills/hiring-signal-outbound.md)

Adjust the volumes and assumptions: https://www.routergrowth.com/free-gtm-tools/workflow-generator#q=SEO%20research%20for%2030%20keywords%2C%20then%20email%20the%20editors%20of%20the%20sites%20that%20rank%20for%20them.%20100%20accounts%2C%201%20contact%20each%2C%20three-step%20sequence.
