> ## 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 Instantly

> Set up an Instantly campaign for slow one-to-one backlink pitches, give your agent a narrow API key, bring outcomes back daily and confirm the link with a check.

Use this guide if you already send cold email with Instantly. Instantly is built for volume, so this setup slows it down for one-to-one backlink pitches. Instantly sends from your mailbox. AgentLinkOps keeps the prospect and confirms the link. Each Instantly lead carries its AgentLinkOps watch id, so outcomes come back to the right prospect.

Starting from nothing? [Hunter](/guides/outreach-hunter) costs less and finds addresses too.

## What it costs

From [Instantly's pricing page](https://instantly.ai/pricing) and help center, checked October 20, 2026:

| Plan | Price | Works with this guide |
| - | - | - |
| Growth | $47 a month, or $37.60 a month billed yearly | The daily read in step 3, if your plan accepts API calls (see below) |
| Hypergrowth | $97 a month, or $77.60 a month billed yearly | The daily read and webhooks |

Instantly's help center says [API access is on all Outbound plans](https://help.instantly.ai/en/articles/10432807-api-v2) and [webhooks need Hypergrowth or above](https://help.instantly.ai/en/articles/6261906-webhooks). Its pricing table appears to list the API under Hypergrowth only. Confirm with Instantly before you pay for Growth to run this guide.

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).
* Instantly sending from your real mailbox. Don't send backlink pitches from lookalike domains.
* An Instantly API key for your agent, with only these scopes: `leads:create`, `leads:read`, `leads:update` and `campaigns:read`. Leave out `emails:*` and `all:*`. Those let the key read and send mail.

Instantly's MCP server is at `https://mcp.instantly.ai/mcp` and takes the key in the `Authorization` header. It exposes the whole API, so rely on the key's scopes to limit your agent, and confirm that they do (see the end of this guide). Don't put the key in the URL, and never paste it into a chat.

## 1. Set the campaign up for one-to-one pitches

Create the campaign in the Instantly app with these settings. The key above can't create campaigns; if your agent creates it through the API instead, the key also needs `campaigns:create` and the request needs a `name` and `campaign_schedule`.

```json theme={null}
{
  "stop_on_reply": true,
  "text_only": true,
  "open_tracking": false,
  "link_tracking": false,
  "daily_limit": 20
}
```

Plain text without tracking reads like a personal email, and stopping on reply keeps follow-ups from reaching an editor who already answered. Twenty a day is plenty for pitches written one at a time.

## 2. Add each prospect as a lead

Your agent creates each lead with the AgentLinkOps watch id as a custom variable:

```json theme={null}
{
  "campaign": "<your campaign id>",
  "email": "editor@publisher.example",
  "first_name": "Sam",
  "skip_if_in_campaign": true,
  "custom_variables": {
    "alo_watch_id": "wat_example_1"
  }
}
```

`skip_if_in_campaign` makes a retry safe. 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. Your agent can write each lead's opening line into another custom variable. Review the messages, then activate the campaign yourself.

## 3. Bring outcomes back once a day

Your agent lists the campaign's leads (`POST /api/v2/leads/list`). Each lead returns its `status`, its `lt_interest_status`, its reply count, `last_step_timestamp_executed` (when Instantly last sent it a step) and, inside `payload`, your `alo_watch_id`. The agent updates that watch with [update\_link\_watch](/reference/commands/update_link_watch):

| Instantly lead | AgentLinkOps `outreachStatus` |
| - | - |
| A step was sent (`last_step_timestamp_executed` is set) | `requested`, with `lastContactedAt` from that timestamp |
| `email_reply_count` above zero, or interest status Interested (`1`) | `pending` |
| Interest status Not Interested (`-1`), or status Unsubscribed (`-2`) | `declined` |
| Status Bounced (`-1`), or interest status Wrong Person (`-2`) | `abandoned` |
| Interest status Won (`4`) | No status write. Run the check in step 4 |
| Any other status or interest value | No change |

Opens, clicks and Out of Office (`0`) change nothing. When more than one row matches, apply the lowest row above the catch-all: a lead that was sent a step and then bounced is `abandoned`.

Instantly's lead and webhook data can include reply text. Bring back the status and date only: no subjects, bodies, reply text or addresses. Follow the rule in the default guide: [never move a status backwards](/guides/outreach#never-move-a-status-backwards). Updating an outcome never starts a check.

> **Optional on Hypergrowth: webhooks**
>
> Subscribe to `email_sent`, `reply_received`, `lead_interested`, `lead_not_interested`, `lead_wrong_person`, `email_bounced` and `lead_unsubscribed`. Instantly documents no signature on deliveries, so add a custom header with a long random secret and have your receiver reject requests without it. The key then also needs `webhooks:create` and `webhooks:read`. Every `reply_received` delivery contains the full reply. Drop it before you write anything. Keep the daily read to catch missed or repeated deliveries.

## 4. 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). A Won interest status in Instantly is your record of the deal. Only a check that finds your link makes the prospect won in AgentLinkOps.

## What we haven't tested

We wrote this guide from Instantly's public developer documentation on October 20, 2026. We haven't run it end to end in a live Instantly account. Three points to confirm in your own account:

* That your plan accepts API calls, given the conflict on the pricing page.
* That the MCP server refuses calls outside the key's scopes.
* That listed leads return `alo_watch_id` inside `payload`.

If any of these fails, record outcomes from the Instantly app by hand with `update_link_watch`.


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