| name | instantly-loader |
| description | Load leads and email sequences into Instantly.ai campaigns. Handles lead upload, custom variables, and campaign management. |
Instantly Loader
Push verified leads and personalized sequences into Instantly.ai for automated sending.
What It Does
- Takes verified leads with email sequences
- Formats for Instantly API
- Uploads to specified campaign
- Sets custom variables for personalization
Invocation
./scripts/load.sh verified.json --campaign "First1000-Feb"
./scripts/load.sh verified.json --create-campaign "First1000-Feb"
DRY_RUN=true ./scripts/load.sh verified.json --campaign "abc123"
./scripts/campaigns.sh
Setup
Environment Variables
export INSTANTLY_API_KEY="your_instantly_api_key"
Get Your API Key
- Go to https://app.instantly.ai/settings/integrations
- Copy API key
- Set in environment
Input Format
Expects output from email-verifier (which includes sequences from outreach-writer):
{
"emails": [
{
"lead": {
"name": "Lisa Chen",
"email": "lisa@growthlabs.com",
"company": "GrowthLabs",
"linkedin_url": "https://linkedin.com/in/lisachen",
"tier": "A"
},
"sequence": [
{
"step": 1,
"delay_days": 0,
"subject": "ai",
"body": "Lisa,\n\nYour take on AI..."
},
{
"step": 2,
"delay_days": 3,
"subject": "re: ai",
"body": "Lisa,\n\nQuick follow-up..."
}
]
}
]
}
Instantly Lead Format
{
"email": "lisa@growthlabs.com",
"first_name": "Lisa",
"last_name": "Chen",
"company_name": "GrowthLabs",
"personalization": "Your take on AI is exactly how we think about outbound.",
"custom_variables": {
"linkedin_url": "https://linkedin.com/in/lisachen",
"tier": "A",
"subject_1": "ai",
"body_1": "Lisa,\n\nYour take on AI...",
"subject_2": "re: ai",
"body_2": "Lisa,\n\nQuick follow-up..."
}
}
API Endpoints
Add Leads to Campaign
POST https://api.instantly.ai/api/v1/lead/add
{
"api_key": "YOUR_KEY",
"campaign_id": "campaign_abc123",
"skip_if_in_workspace": true,
"leads": [...]
}
List Campaigns
GET https://api.instantly.ai/api/v1/campaign/list?api_key=YOUR_KEY
Create Campaign
POST https://api.instantly.ai/api/v1/campaign/create
{
"api_key": "YOUR_KEY",
"name": "First1000-Feb",
"daily_limit": 50
}
Get Campaign Status
GET https://api.instantly.ai/api/v1/campaign/status?api_key=YOUR_KEY&campaign_id=abc123
Setting Up Sequences in Instantly
After loading leads, configure your sequence in Instantly UI:
Email 1 (Day 0):
Subject: {{subject_1}}
Body: {{body_1}}
Email 2 (Day 3):
Subject: {{subject_2}}
Body: {{body_2}}
Email 3 (Day 7):
Subject: {{subject_3}}
Body: {{body_3}}
Or use Instantly's native sequence builder with the personalization field:
Subject: quick thought on {{topic}}
Body: {{personalization}}
[Rest of template]
Output Format
{
"meta": {
"campaign_id": "abc123",
"campaign_name": "First1000-Feb",
"leads_uploaded": 42,
"leads_skipped": 3,
"loaded_at": "2026-02-14T15:00:00Z"
},
"results": {
"success": ["lisa@growthlabs.com", "..."],
"skipped": ["already@exists.com"],
"failed": []
}
}
Usage in Pipeline
./linkedin-miner/scripts/mine.sh "AI marketing" 20 > raw.json
./lead-enricher/scripts/profile-enrich.sh raw.json | \
./lead-enricher/scripts/enrich.sh > enriched.json
./icp-scorer/scripts/score.sh enriched.json > scored.json
./outreach-writer/scripts/write.sh scored.json > emails.json
./email-verifier/scripts/verify.sh emails.json > verified.json
./instantly-loader/scripts/load.sh verified.json --campaign "First1000-Feb"
./linkedin-miner/scripts/mine.sh "AI marketing" 20 2>/dev/null | \
./icp-scorer/scripts/score.sh | \
./outreach-writer/scripts/write.sh | \
./instantly-loader/scripts/load.sh --campaign "First1000"
Best Practices
Daily Limits
- Start with 20-30 emails/day per inbox
- Warm up new domains: 5 → 10 → 20 → 50 over 2-4 weeks
- Multiple inboxes scale faster than one high-volume inbox
Timing
- B2B: Tuesday-Thursday, 8-10am recipient's timezone
- Avoid Mondays (inbox overload) and Fridays (checked out)
Monitoring
- Track open rates (aim for 40%+)
- Track reply rates (aim for 5%+)
- Pause campaigns if bounce rate > 3%