Connecting Instantly to Outpilot
Run a single multichannel campaign across LinkedIn (Outpilot) and email (Instantly). When a LinkedIn message goes unanswered, the lead drops into your Instantly email sequence. When an Instantly campaign finishes with no reply, the lead drops into LinkedIn outreach. No CSV exports, no copy-paste.
This guide walks you through connecting both directions. Total setup time: about 10 minutes.
Before you start
You’ll need:
- An Outpilot account on a plan that includes integrations.
- An Instantly account, with at least one campaign or list already created.
- Admin access in both tools (you need to generate API keys).
Part 1 — Send leads from Outpilot to Instantly
1. Generate an Instantly API key
- In Instantly, go to Settings → Integrations → API Keys.
- Click Generate and select all scopes.
- Copy the key. You won’t be able to see it again.
2. Connect it in Outpilot
- In Outpilot, open Settings → Integrations.
- Find the Instantly card and click Connect.
- Paste your API key and click Save.
- The card flips to Connected and shows your Instantly workspace name.
3. Add Instantly steps to a campaign
In any Outpilot campaign, open the sequence editor. Three new steps now appear under Multichannel:
Add to Instantly Campaign
Sends the lead to a specific Instantly campaign. Pick the destination from the dropdown.
- Requires an email. Leads without an email skip this step (they’ll continue down the sequence as if it didn’t run).
- Use this when you want Instantly to start sending email immediately.
Add to Instantly List
Sends the lead to an Instantly list (no campaign attached yet).
- Works without an email — Instantly can enrich and send later.
- Use this when you want to collect leads for a future campaign.
Verify Email
Checks whether the lead’s email address is real and deliverable, using Mailgun. Branches into two paths:
- Email Verified — the address is deliverable. Continue with the rest of the sequence (typically followed by Add to Instantly Campaign).
- Email Not Verified — the address is undeliverable, unknown, or the lead has no email. Take the fallback path you define.
4. Save and activate
That’s it. When a lead reaches the new step, Outpilot will push them to Instantly and continue the sequence based on the result.
Part 2 — Send leads from Instantly to Outpilot
This direction uses Instantly’s automations to call an Outpilot webhook. Setup is more manual — Instantly doesn’t (yet) have a built-in “Send to Outpilot” action.
1. Generate an Outpilot inbound token
- In Outpilot, Settings → Integrations → Instantly → Inbound from Instantly.
- Click Generate inbound token.
- Copy the token now — it’s shown once. If you lose it, click Rotate to issue a new one (the old one stops working immediately).
2. Find the destination ID
Decide whether you want incoming Instantly leads to land in an Outpilot campaign or a lead list.
- For a campaign: open the campaign in Outpilot. The URL ends in the
campaign UUID, e.g.
…/campaigns/a1b2c3d4-…. Copy that UUID. - For a lead list: open the list. URL ends in the list UUID. Copy it.
3. Test the token with cURL
Before wiring up Instantly, verify the token works:
curl -i https://api.outpilot.banyan.app/v1/instantly/inbound/health \ -H "Authorization: Bearer YOUR_OUTPILOT_INBOUND_TOKEN"You should see:
HTTP/1.1 200 OKContent-Type: application/json
{"ok":true,"user_id":"…"}If you see 401, the token is wrong. If you see 503, the integration is
disabled on your plan — contact support.
4. Wire up an Instantly automation
In Instantly:
- Go to Automations → New Automation.
- Pick a trigger. Common choices:
- Campaign finished for lead — push leads who reached the end of an email sequence without replying into LinkedIn outreach.
- Lead replied — push leads who replied (positively or negatively) so you can follow up on LinkedIn.
- Lead added to list — push every lead added to a specific list.
- For the action, choose HTTP Request / Webhook and configure it as below.
Webhook configuration
- Method:
POST - URL:
https://api.outpilot.banyan.app/v1/instantly/inbound/leads - Headers:
Authorization: Bearer YOUR_OUTPILOT_INBOUND_TOKENContent-Type: application/json
- Body:
{ "destination": { "type": "campaign", "id": "PASTE_OUTPILOT_CAMPAIGN_OR_LIST_UUID_HERE" }, "lead": { "email": "{{email}}", "firstName": "{{first_name}}", "lastName": "{{last_name}}", "linkedinUrl": "{{linkedin_url}}", "company": "{{company}}", "title": "{{title}}" }, "source": { "instantlyCampaignId": "{{campaign_id}}", "trigger": "campaign_finished" }}Replace {{…}} with whatever variable syntax Instantly uses for your trigger.
Set destination.type to lead_list if you’re sending into a list instead of
a campaign.
5. Test the automation
Use Instantly’s Test step affordance with one real lead from the source campaign. You should see:
- Inside Instantly: a
200response with{"ok":true,"leadId":"…","attached":false}. - Inside Outpilot: the lead appears in the destination campaign or list within a few seconds.
If the lead already exists in Outpilot (matched by email or LinkedIn URL), the
response will say "attached":true and Outpilot adds them to the destination
without creating a duplicate.
6. Activate
Turn the automation on. Instantly will now POST to Outpilot every time the trigger fires.
Three sequence patterns to try
These are the recipes that work best for most customers.
Pattern 1 — LinkedIn first, email fallback
Reach out on LinkedIn. If they don’t accept the connection request, switch to email automatically.
Send connection request └─ wait 7 days └─ if not accepted: Verify Email ├─ verified → Add to Instantly Campaign ("cold outreach") └─ not verified → endPattern 2 — Warm but quiet
The lead accepted your connection but never replied. Follow up by email.
Connection accepted └─ Send message #1 └─ wait 5 days └─ Send message #2 └─ wait 10 days └─ if no reply: Verify Email ├─ verified → Add to Instantly Campaign ("warm, no reply") └─ not verified → endPattern 3 — Email first, LinkedIn fallback (Instantly → Outpilot)
The lead finished an Instantly cold-email campaign without replying. Try LinkedIn.
- In Instantly: automation triggered by Campaign finished for lead,
posting to your Outpilot inbound webhook with
destination.type: campaignpointing to a LinkedIn-only Outpilot campaign. - In Outpilot: the LinkedIn campaign starts the lead at step 1 (typically a connection request).
Frequently asked questions
What does “Verify Email” actually check?
We send the lead’s email to Mailgun’s address-validation API. It returns
whether the address is deliverable, undeliverable, or risky (e.g. role
addresses like info@, catch-all domains). We treat deliverable as
verified, undeliverable and unknown as not verified. Risky addresses are
routed to the verified branch but flagged in the lead’s activity log.
How many Verify Email checks do I get?
Each user gets 100 free validations per calendar month, included in your plan. Unused validations don’t roll over. If you exhaust your quota mid-campaign, the Verify Email step routes leads to the Email Not Verified branch (no campaigns are paused).
Higher quotas may become available on larger plans — contact sales.
Why not just discover the email automatically from the lead’s name + company?
That’s a different feature (called email discovery or find email in some tools), and we may add it later. For now, Verify Email validates an address you already have. Most Outpilot leads come in with an email already attached (from CSV import or LinkedIn enrichment), so this covers the common case.
What happens if my Instantly API key is revoked or expires?
Outpilot detects the failure on the next API call and freezes any pending Instantly steps in your campaigns. You’ll see a banner at the top of Outpilot prompting you to reconnect. Once you do, the frozen steps resume automatically — no leads are lost.
What happens if I delete my Instantly campaign or list?
Pushes to a deleted destination fail with an error notification, and that step is skipped for that lead. The rest of the Outpilot campaign continues. Edit the step to point to a different destination, or remove it.
Are there rate limits?
- Outbound (Outpilot → Instantly): 1 lead push per second, 100 per minute.
- Inbound (Instantly → Outpilot): 60 requests per minute per token; 5,000 leads per day per user.
Hitting these limits is rare in normal use. If you do, you’ll see a 429 Too Many Requests response with a Retry-After header.
Will the same lead get pushed to Instantly twice?
No. Within a single Outpilot campaign, each lead reaches each step at most once, and outbound pushes are idempotent — if our worker retries on a network blip, Instantly recognizes the duplicate and ignores it.
Across different Outpilot campaigns, the same lead can be pushed to multiple Instantly destinations. That’s intentional — each campaign is its own decision.
What lead data gets shared?
When pushing to Instantly: name, email, LinkedIn URL, company, title, and any custom fields you’ve configured. When receiving from Instantly: same shape. We don’t share any data unrelated to the specific lead being handed off.
Can my whole team share one Instantly connection?
Not in v1 — each Outpilot user connects their own Instantly workspace. Team-shared connections are on the roadmap.
What’s the difference between an Instantly Campaign and an Instantly List?
- Campaign: Instantly will start sending email to the lead immediately (subject to your campaign’s send schedule).
- List: Instantly stores the lead but doesn’t send anything. You attach the list to a campaign later.
Use Campaign when you want immediate action. Use List when you’re collecting leads for a future send or want Instantly to enrich them first.
How do I disconnect?
Settings → Integrations → Instantly → Disconnect. This stops all future pushes. It does not delete leads already pushed to Instantly — those stay in your Instantly account untouched. Reconnecting later restores the integration without re-importing anything.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
401 invalid_token from inbound webhook | Wrong or rotated token in your Instantly automation | Copy the latest token from Outpilot Settings, paste into Instantly |
404 destination_not_found from inbound webhook | Outpilot campaign or list UUID is wrong, or the campaign was deleted | Re-copy the UUID from the URL of the destination |
429 rate_limited | Too many requests in a short window | Wait the seconds shown in Retry-After and retry |
| Instantly campaign dropdown empty in Outpilot | New campaign created in Instantly, not yet cached | Click Refresh on the integration card |
| Lead skipped with “no email” | Lead has no email address in Outpilot | Add Verify Email upstream, or only push leads with a known email |
| Verify Email always returns “Not Verified” | Free quota exhausted, or Mailgun outage | Check your usage in Settings; if usage is low, retry — outages auto-recover within an hour |
| Banner: “Instantly connection error” | API key revoked, expired, or had its scopes reduced | Settings → Integrations → Instantly → Reconnect with a fresh full-scope key |
If something above doesn’t fix it, email support@banyan.app with your Outpilot user ID (Settings → Account) and the timestamp of the failure. We can pull the action log and tell you exactly what went wrong.