Skip to main content
Your agent finds the publisher page and drafts the pitch. You send it from your own mailbox. AgentLinkOps keeps the prospect, the outcome you report and every check of the page, and marks the prospect won only when a check finds your link. AgentLinkOps never sends email. You don’t need a sequencer for this guide.

What you end up with

One prospect, as it reads in AgentLinkOps over a campaign: After the win, the prospect becomes an earned link. AgentLinkOps checks it daily and records a change if it disappears.

Before you start

  • An AgentLinkOps project for your site, with your agent connected through MCP.
  • An agent with a mail connector for your mailbox, such as Gmail, Outlook or Zoho. It needs to create drafts and read your Sent folder.
  • Optional: the free AgentLinkOps skills, which help your agent qualify publisher pages and draft pitches. Install them with npx -y agentlinkops agent setup.
Each prospect uses one check when you add it, then one check a week. Checks come from your workspace’s shared monthly allowance; get_workspace shows what remains.

1. Save prospects

Give AgentLinkOps the exact publisher page where your link would go, plus the page on your site it should point to. Use the page, not the publisher’s homepage. A check reads that one page. Call import_link_watches with up to 100 rows:
  • targetScope: "domain" counts a link to any page on your site. Use "exact" when only one page counts.
  • localReference is your own record id, up to 200 characters. Your agent joins its notes to AgentLinkOps on this value, never on URLs.
  • campaign is your label, up to 80 characters.
Save each row’s watch id (rows[].watch.id in the response). A row that matches an existing watch returns that watch and starts no new check. It does apply the intent, status and campaign you sent, so don’t re-import a link you’ve already earned as a prospect.

2. Draft and send from your mailbox

Ask your agent to draft one pitch per prospect into your mailbox. You review each draft and send it yourself. A draft is not contact. Nothing changes in AgentLinkOps until the message is in your Sent folder. Keep the editor’s name and address in your mail tool or your own CRM. AgentLinkOps doesn’t store contact email addresses today.
To see a contact label next to the link, read the watch’s current revision with get_link_lifecycle, then call update_link_lifecycle with deal.contactRef (your id for the person) and deal.contactLabel, such as "Editor, SEO tools page". The label rejects email addresses, URLs and phone numbers.

3. Record what happened

Once a day, your agent reads your Sent folder and replies and writes each outcome with update_link_watch: Only a sent message moves lastContactedAt. Replies, opens and clicks never change it.

Never move a status backwards

A daily read sees the same sent message and the same reply again. Before each write, your agent reads the watch and never lets a status go backwards:
  • Never overwrite won, declined or abandoned from an automatic read. Change those only when you decide to.
  • Move forward only: candidate, then requested, then pending.
  • Only move lastContactedAt to a later date. A follow-up sent to a pending prospect keeps pending and still moves the date.
With this rule, running the same daily read twice changes nothing. One call can update up to 100 watches that share the same status and date:
Prospects sent on different days need one call per date. Recording an outcome never starts a check or sends anything. When an editor says the link is up, request one check of that prospect with request_check:
Use a new idempotencyKey for each new claim; reusing one returns the earlier job. Read get_check_job until the job finishes, then read the watch with get_link_watch.
  • Link found: outreachStatus is won and intent is earned. A prospect_won event appears in list_events for the links feed.
  • Link not found, or the check couldn’t finish: the prospect stays a prospect. A blocked or incomplete check is unknown, so it proves nothing either way. Ask the editor for the exact page, or wait for the weekly check.
Don’t write won yourself. An editor’s reply or a tool’s “success” flag is a claim. The check is the proof.

5. After the win

The earned link moves to daily checks. A link counts as lost only after two complete checks, at least 30 minutes apart, find it missing. Monitor changes covers alerts and the change feed.

Close out prospects you’re done with

declined and abandoned record the outcome; they don’t stop the weekly checks. To stop spending checks on a prospect, set intent: "retired" with update_link_watch. That pauses it and keeps its history. To reopen it, set intent: "prospect" and status: "active". Weekly checks resume; if a week has passed since its last check, one runs right away. To confirm sooner, use request_check.

Fix a mistake

  • Wrong status: write the right one with update_link_watch. A status you set by hand replaces the old one.
  • A request timed out: list your prospects with list_link_watches and q set to your localReference before retrying. Retry a check with the same idempotencyKey so you get the same job, not a second check.
  • Added the same page twice: when the source URL, target URL and targetScope all match, the import returns the existing watch and counts it under existing. A different targetScope creates a second watch; retire the one you don’t want.

Copy this into your agent

Use a sequencer instead

If you want address finding and automatic follow-ups, add a sequencer. Steps 1, 4 and 5 stay the same.
  • Hunter: the one we recommend. It finds and verifies the editor’s address, has a free plan and sends slowly from your own mailbox.
  • lemlist: for teams already on lemlist, or agents that connect with OAuth.
  • Instantly: for people who already send cold email with Instantly.
Already keep outreach in a CRM? See use your existing CRM and email sender.