> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentlinkops.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Run outreach with Hunter

> Find and verify editor addresses in Hunter, send a short sequence from your own mailbox, bring each outcome back to AgentLinkOps and confirm the link with a check.

Hunter finds the editor's address, verifies it and sends a short sequence from your own mailbox. AgentLinkOps keeps the prospect and confirms the link. Your agent carries the AgentLinkOps watch id into Hunter, so every outcome comes back to the right prospect without matching on email addresses.

This is the sequencer we recommend for backlink outreach. It has a free plan, sends 15 emails a day per mailbox by default, and [stops the sequence for anyone who replies](https://help.hunter.io/en/articles/8498764-what-is-hunter-campaigns).

## What it costs

From [Hunter's pricing page](https://hunter.io/pricing), checked October 20, 2026:

| Plan | Price | Includes |
| - | - | - |
| Free | \$0 | 1 connected mailbox, 500 recipients per sequence, 50 credits a month |
| Starter | $49 a month, or $34 a month billed yearly | 3 mailboxes, 2,500 recipients per sequence, 2,000 credits a month |

The free plan includes an API key and 50 credits a month, enough to find and verify addresses for a small first campaign. AgentLinkOps checks come from your workspace allowance as in [the default guide](/guides/outreach#before-you-start).

## Before you start

* AgentLinkOps connected to your agent, with prospects saved as in [step 1 of the default guide](/guides/outreach#1-save-prospects).
* A Hunter account with your Gmail, Google Workspace or Microsoft mailbox connected. Other mailboxes connect over SMTP and IMAP on paid plans.
* Hunter connected to your agent. Hunter's MCP server is at `https://mcp.hunter.io/mcp`; [Hunter's agent reference](https://hunter.io/llms-full.txt) lists its lead and sequence tools. An agent can also call Hunter's REST API with an API key you set in its environment. Never paste the key into a chat.
* In Hunter, a lead custom attribute with the slug `alo_watch_id`. Hunter rejects a lead that names an attribute you haven't created.

## 1. Find and verify the editor

For each prospect, your agent runs Hunter's Email Finder or Domain Search on the publisher's domain, then the Email Verifier. When Hunter finds no verified address, try the contact routes from [get\_public\_contacts](/reference/commands/get_public_contacts). If those fail too, mark the prospect `abandoned` and retire it.

## 2. Create the lead with the watch id

Create the Hunter lead (`POST https://api.hunter.io/v2/leads`) with the AgentLinkOps watch id in the custom attribute:

```json theme={null}
{
  "email": "editor@publisher.example",
  "first_name": "Sam",
  "custom_attributes": {
    "alo_watch_id": "wat_example_1"
  }
}
```

Hunter deduplicates leads by email, so a retry doesn't create a second lead. The address stays in Hunter. Don't copy it into AgentLinkOps.

One lead carries one watch id. If the same editor covers two of your prospect pages, pitch both in one email and record the second page's outcome by hand.

## 3. Review and start the sequence

Create the sequence in Hunter with your first email and up to five follow-ups. Add the leads as recipients, and have your agent personalize each recipient's first email. Read every message, then start the sequence yourself. Don't let an agent start a sequence you haven't reviewed.

Hunter stops the sequence for a recipient who replies, unsubscribes or bounces. It also stops when you mark the recipient Successful.

## 4. Bring outcomes back once a day

Your agent reads the leads in the sequence (`GET /v2/leads` with `sequence_ids[]`). Each lead returns its `sending_status`, its `last_contacted_at` and your `alo_watch_id`. The agent then updates that watch with [update\_link\_watch](/reference/commands/update_link_watch):

| Hunter `sending_status` | AgentLinkOps `outreachStatus` |
| - | - |
| `sent` (Hunter shows `opened` or `clicked` only after a send) | `requested`, with `lastContactedAt` from the lead's `last_contacted_at`. Never use an open or click time |
| `replied` | `pending`. Your agent reads the reply and sets `declined` if the answer is no |
| `bounced` | `abandoned` |
| `unsubscribed` | `declined` |
| `pending`, `error`, `canceled` | No change |

Opens and clicks only tell you the email was sent. They never move a prospect past `requested`. Bring back the status and date only: no subjects, message bodies, reply text or addresses.

Each day's read sees yesterday's statuses again. Follow the rule in the default guide: [never move a status backwards](/guides/outreach#never-move-a-status-backwards), so a reply your agent marked `declined` stays declined. Updating an outcome never starts a check.

> **Optional: webhooks instead of a daily read**
>
> Hunter's webhooks are in beta. They send `message.sent`, `message.read`, `message.clicked` and `message.replied`, and each delivery carries the lead with its custom attributes. Hunter doesn't sign webhook requests, so put a long random token in your receiver's URL. Deliveries can repeat or arrive out of order, so keep the daily read as your source of truth.

## 5. Confirm the link

When an editor says the link is live, run the check from [step 4 of the default guide](/guides/outreach#4-let-a-check-confirm-the-link). Marking a recipient Successful in Hunter stops their follow-ups. It doesn't make the prospect won. Only a check that finds your link does.

## What we haven't tested

We wrote this guide from Hunter's public API documentation on October 20, 2026. We haven't run it end to end in a live Hunter account. Confirm these in your own account before you rely on them:

* That the leads list returns your `alo_watch_id` value.
* That a lead's `last_contacted_at` changes only when Hunter sends an email.
* That the free plan's API key can manage sequences, not only find addresses.

If any of these doesn't hold, use the recipient list in the Hunter app, or its CSV export, which includes your custom attribute columns. Record each status and send date in AgentLinkOps from there.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.