What is the Smartlead API (and Why Agencies Underuse It)
Smartlead has a comprehensive REST API (v2) that lets you programmatically control every aspect of your cold email operations: create campaigns, add leads, manage inboxes, pull analytics, route replies, and more. The API is webhook-ready and designed for automation-first workflows.
Yet most agencies use Smartlead like a manual tool — logging in, clicking buttons, copy-pasting leads from spreadsheets. This is leaving enormous time on the table. Every repetitive action in the Smartlead UI can be automated via the API, saving your team hours per week per client.
"Agencies that fully automate their Smartlead workflow via API save an average of 15+ hours per week compared to teams using the UI manually." — AutomateItPlease 2026 Agency Benchmark
Getting Your API Key + Authentication
Authentication with the Smartlead API is simple — every request requires your API key passed as a query parameter.
Get Your API Key
- ▸Log into your Smartlead account.
- ▸Go to Settings → Integrations → API.
- ▸Copy your API key. It looks like:
sl_live_xxxxxxxxxxxx
Test Authentication
Make your first API call to verify it works:
curl "https://server.smartlead.ai/api/v1/campaigns?api_key=YOUR_API_KEY&limit=10&offset=0"
# Expected response:
# [{"id": 123, "name": "My Campaign", "status": "ACTIVE", ...}]10 Automations That Save 10+ Hours a Week
Automation 1: Auto-Add Clay-Enriched Leads to Campaigns
The most common agency workflow: Clay enriches a list, Smartlead sends it. Without API automation, this means manually exporting from Clay and importing into Smartlead. With the API:
POST https://server.smartlead.ai/api/v1/campaigns/{campaign_id}/leads?api_key=YOUR_KEY
Body:
{
"lead_list": [
{
"email": "[email protected]",
"first_name": "John",
"last_name": "Doe",
"company_name": "Acme Corp",
"custom_fields": {
"icebreaker": "Saw your post on LinkedIn about scaling outbound — loved the take on AI personalization."
}
}
],
"settings": {
"ignore_global_block_list": false,
"ignore_bounce_list": false
}
}In n8n: your Clay webhook fires when a row is enriched → n8n formats the payload → POST to Smartlead. New leads enroll in your campaign in real-time, zero manual steps.
Automation 2: Pause Campaigns When Reply Rate Drops Below Threshold
A campaign sending 200 emails/day with 0 replies for 3 consecutive days is a deliverability warning sign. Catch it automatically:
// Pull campaign statistics
GET /api/v1/campaigns/{id}/statistics/by-date?api_key=KEY&start_date=2024-01-01&end_date=2024-01-08
// Check if reply rate drops below 1% over 3 days
const stats = items[0].json;
const recentDays = stats.slice(-3);
const avgReplyRate = recentDays.reduce((sum, d) => sum + d.reply_rate, 0) / 3;
if (avgReplyRate < 0.01) {
// Pause the campaign
return [{ pause_campaign: true, campaign_id: campaignId }];
}
// PATCH to pause
PATCH /api/v1/campaigns/{id}/status
Body: { "status": "PAUSED" }Automation 3: Auto-Tag Replied Leads in HubSpot
When a lead replies in Smartlead, you want that signal in your CRM immediately — not when someone checks Smartlead. Use Smartlead's reply webhook:
// 1. Smartlead Webhook fires on reply
Trigger: Smartlead Webhook → "reply_received"
// 2. Payload received:
{
"lead_email": "[email protected]",
"campaign_id": 456,
"reply_text": "Yes, interested — can we chat Thursday?",
"reply_category": "Interested"
}
// 3. n8n looks up contact in HubSpot by email
HubSpot Node: GET /contacts/v1/contact/email/{email}/profile
// 4. Update contact properties
HubSpot Node: PATCH /contacts/v1/contact/{id}/profile
{
"properties": [
{ "property": "lifecycle_stage", "value": "salesqualifiedlead" },
{ "property": "smartlead_reply_category", "value": "Interested" },
{ "property": "last_reply_date", "value": "2026-03-08" }
]
}Automation 4: Build a White-Labeled Reporting Dashboard
Pull campaign stats via the API and push them to a Google Sheet or Notion database for white-labeled client reporting. Our free Smartlead Analytics Dashboard is built exactly on top of this API surface.
# Get campaign-level analytics
GET /api/v1/campaigns/{id}/analytics?api_key=KEY
# Response includes:
{
"total_sent": 4821,
"open_count": 1834,
"open_rate": 38.04,
"reply_count": 127,
"reply_rate": 2.63,
"positive_reply_count": 38,
"bounce_count": 12,
"unsubscribe_count": 7
}
# Push this to Google Sheets once per day via n8n schedulerAutomation 5: Auto-Add New Leads From Webhook / Form Submission
When a prospect fills in a form on your website (e.g., requesting a retargeting sequence), add them to a specific Smartlead drip campaign automatically — no CSV, no manual import:
Trigger: Typeform / Tally webhook → new submission
// Map form fields to Smartlead lead format
{
"email": "{{form.email}}",
"first_name": "{{form.first_name}}",
"company_name": "{{form.company}}",
"custom_fields": {
"source": "website_form",
"interest": "{{form.interest}}"
}
}
// POST to nurture campaign
POST /api/v1/campaigns/{nurture_campaign_id}/leads?api_key=KEYAutomation 6: Block-List Cross-Client Contamination
If a prospect replies "not interested" for Client A, you don't want Client B's campaign to email them next week. The Smartlead block-list API enforces this at the account level:
# Add email to global block list when "unsubscribe" reply is received
POST /api/v1/block_list?api_key=KEY
Body: {
"emails": ["[email protected]"]
}
# The block list applies across ALL campaigns in your account
# Set up in n8n: Smartlead webhook (reply_category: Unsubscribe) → POST to block_listAutomation 7: Inbox Health Monitor with Slack Alerts
Run a daily check on inbox health scores. If any inbox drops below a threshold, alert the team in Slack before deliverability problems accumulate:
// Schedule: every morning at 8 AM
Cron Node: "0 8 * * *"
// Pull all email accounts
GET /api/v1/email-accounts?api_key=KEY
// Filter those below health threshold
items.filter(inbox => inbox.warmup_reputation < 70)
// Format Slack message
{
"text": "⚠️ Inbox Health Alert",
"blocks": [{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Low health inboxes detected:*
- {{inbox.email}} — Score: {{inbox.warmup_reputation}}/100
- Action: Reduce send volume and check spam filter hits"
}
}]
}
// POST to Slack webhookAutomation 8: Campaign Cloning for New Client Onboarding
When onboarding a new client, instead of manually recreating a campaign from scratch, clone from a template campaign via the API:
# 1. Get your template campaign's full config
GET /api/v1/campaigns/{template_id}?api_key=KEY
# 2. Create new campaign with same sequence, settings, and schedules
POST /api/v1/campaigns?api_key=KEY
Body: {
"name": "Client B — Outbound Q2 2026",
"from_name": "{{client_b_sender_name}}",
"from_email": "{{client_b_email}}",
"subject": "{{cloned_from_template}}",
...
}
# 3. Assign the client's email account to the new campaign
POST /api/v1/campaigns/{new_id}/email-accounts?api_key=KEY
Body: { "email_account_ids": [{{client_b_inbox_id}}] }
# Full onboarding: ~3 API calls. Manual approach: 15–20 minutes per clientAutomation 9: Smart Schedule Optimization
Pull per-day reply data for a campaign, find which send days have the highest reply rate, and automatically adjust the campaign schedule:
// Get daily stats for last 30 days
GET /api/v1/campaigns/{id}/statistics/by-date?api_key=KEY
// Find highest-reply days
const dayStats = {}; // { Mon: [], Tue: [], ... }
stats.forEach(day => {
const dow = new Date(day.date).toLocaleDateString('en', {weekday: 'short'});
dayStats[dow] = [...(dayStats[dow] || []), day.reply_rate];
});
// Get top 3 days by avg reply rate
const topDays = Object.entries(dayStats)
.map(([day, rates]) => ({ day, avg: rates.reduce((a,b) => a+b)/rates.length }))
.sort((a,b) => b.avg - a.avg)
.slice(0, 3)
.map(d => d.day);
// Update campaign schedule to only send on topDays
PATCH /api/v1/campaigns/{id}/schedule?api_key=KEYAutomation 10: Trigger Follow-Up Sequence When Lead Visits Website
Connect Clearbit Reveal or Albacross website tracking to Smartlead. When a lead who was emailed earlier visits your pricing page, trigger a follow-up campaign:
// Trigger: Clearbit Reveal webhook → company identified on pricing page
// or: Albacross webhook → company identified
// 1. Check if email matches an existing Smartlead lead
GET /api/v1/leads?api_key=KEY&email={{identified_email}}
// 2. If found and status = "No Reply"
if (lead.status === 'NOT_REPLIED') {
// 3. Move to a "warm follow-up" campaign
POST /api/v1/campaigns/{warm_followup_campaign}/leads?api_key=KEY
Body: {
"lead_list": [{ "email": "{{lead.email}}", "custom_fields": {
"trigger": "visited_pricing_page",
"visit_date": "{{today}}"
}}]
}
}Using the Smartlead API + n8n: Full Workflow Architecture
Here's how these 10 automations fit together in a complete agency workflow:
| Layer | Tool | Smartlead API Endpoints Used |
|---|---|---|
| Lead intake | Clay webhook or form | POST /campaigns/{id}/leads |
| Campaign mgmt | n8n daily cron | PATCH /campaigns/{id}/status |
| Reply routing | Smartlead webhook → n8n | GET /leads (lookup) + HubSpot PATCH |
| Reporting | n8n daily cron → Sheets | GET /campaigns/{id}/analytics |
| Inbox monitoring | n8n morning cron → Slack | GET /email-accounts |
| Blocklist sync | Smartlead reply webhook | POST /block_list |
| Client onboarding | n8n trigger on CRM event | POST /campaigns + POST /email-accounts |
All of these workflows run 24/7 once set up. Your team's only job is to respond to the Slack alerts when intervention is needed — everything else is automatic. This is also the architecture powering our free Cold Email Command Center.
FAQ
Does Smartlead's API have rate limits?
Yes. The default rate limit is 10 requests per second. For agencies making bulk updates (e.g., adding 500 leads at once), use the bulk endpoint which accepts up to 100 leads per call, limiting the requests needed. Build in a 100ms delay between requests in n8n to stay safely under the rate limit.
Do I need to know how to code to use these automations?
For most of the flows above, no. n8n's HTTP Request node handles all the API calls with a visual interface. The JavaScript Code nodes (automations 2 and 9) can be copied directly from this article. If you want to skip the setup entirely, we can implement all 10 of these for your agency.
Are these automations compatible with Smartlead's v1 and v2 API?
The endpoints above use v1 (which is the stable, fully-documented API as of early 2026). Smartlead's v2 API adds additional capabilities but is in active development. We'll update this post as v2 features mature.
What's the best way to test these before going live?
Create a "test" campaign in Smartlead pointed at a personal email address. Run all your n8n workflow tests against this campaign so any misconfigurations only affect a throwaway inbox.
Want these 10 automations running for your agency?
We implement the full Smartlead API + n8n automation stack for agencies in 10–14 days. Book a free 15-min strategy call.
Book a Free Strategy Call