Skip to main content

Overview

A SmartLead campaign is the core unit of outbound email. It ties together your email accounts, sequences, leads, and sending schedule into a single automated workflow. This guide covers everything you need to configure a campaign programmatically.

Campaign Architecture

Every campaign has four building blocks:
  1. Email Accounts — The sending addresses that rotate automatically
  2. Sequences — The emails and follow-ups your leads receive
  3. Leads — The prospects imported into the campaign
  4. Schedule — When and how fast emails are sent

Creating a Campaign

Use descriptive campaign names that include the quarter, ICP, and persona. This makes it easier to filter and compare performance later. Example: Q1 SaaS Outreach — VP Sales — US.

Building Sequences

Sequences define the emails your leads receive and the timing between them. Each step can optionally include A/B test variants.

Basic Sequence

Python

Personalization Variables

Use double curly braces to insert lead-specific data into your emails:
If a personalization variable is missing for a lead, SmartLead will leave the placeholder blank. Use fallback values in your copy to handle this gracefully — for example, write “your team” as a fallback for {{company_name}}.

A/B Testing Variants

Test different subject lines or email bodies to optimize performance:
Python
SmartLead automatically splits traffic between variants and tracks open/reply rates for each.
Test one variable at a time (subject line OR body, not both) so you can isolate what drives performance. Run tests for at least 200 sends before drawing conclusions.

Linking Email Accounts

Connect one or more email accounts to your campaign. SmartLead rotates between them automatically to maximize deliverability.
Python

Fetching Available Accounts

Python
Only link accounts that have been warmed up for at least 14 days. Sending cold emails from a fresh account will hurt your deliverability and sender reputation. See the Email Warmup Guide for details.

Configuring the Schedule

Control when emails are sent and how many go out per day:
Python

Campaign Settings

Track Settings

Python

Stop Conditions

Automatically stop emailing a lead when certain events occur:
Python
Always enable stop_on_reply. Continuing to send follow-ups after someone replies creates a poor experience and can increase spam complaints.

Activating the Campaign

Once everything is configured, set the campaign status to ACTIVE:
Python

Campaign Statuses

Python

Monitoring Campaign Performance

Track your campaign’s performance with the analytics endpoints:
Python

Key Metrics to Watch

Troubleshooting

Check these in order: (1) Email accounts are linked and warmed up, (2) the schedule window includes the current day and time, (3) leads have been imported and are in “Not Contacted” status, (4) email accounts haven’t hit their daily sending limit.
Verify your lead list quality. Use an email verification service before importing leads. Check that your email accounts’ DNS records (SPF, DKIM, DMARC) are properly configured. Consider reducing your daily sending volume.
Test different subject lines with A/B testing. Check your sender reputation using tools like mail-tester.com. Ensure your email accounts are properly warmed up. Avoid spam trigger words in subject lines.
Verify that the delay days are set correctly between steps. Check if stop_on_reply or other stop conditions are triggering. Ensure the campaign status is still ACTIVE.

What’s Next?

Email Warmup Guide

Warm up accounts before adding them to campaigns

Lead Management Guide

Import, segment, and manage leads at scale

Best Practices

Optimize deliverability, copy, and campaign structure

Webhook Integration

Get real-time notifications for campaign events