Overview
Leads are the contacts who receive your campaign emails. SmartLead provides APIs for importing leads in bulk, enriching them with custom fields, tracking their status through the outreach lifecycle, and managing them across campaigns. This guide covers the full lead management workflow.Importing Leads
Add leads to a campaign using the lead import endpoint. You can send up to 400 leads per request.Import Settings
| Setting | Default | Description |
|---|---|---|
ignore_global_block_list | false | Skip checking against your global block list |
ignore_unsubscribe_list | false | Skip checking against unsubscribed leads |
ignore_duplicate_leads_in_other_campaign | false | Allow leads already in other campaigns |
Bulk Import (Large Lists)
For lists larger than 400 leads, batch your imports:Python
Custom Fields
Custom fields let you store any additional data on a lead and use it for personalization in your email sequences.Adding Custom Fields on Import
Include custom fields in thecustom_fields object when importing leads:
Python
Using Custom Fields in Sequences
Reference any custom field in your email templates using{{field_name}}:
Lead Statuses
Every lead in a campaign has a status that reflects where they are in the outreach lifecycle:| Status | Description |
|---|---|
NOT_CONTACTED | Lead imported but no email sent yet |
IN_PROGRESS | Currently receiving sequence emails |
COMPLETED | All sequence steps have been sent |
INTERESTED | Lead replied with positive intent |
NOT_INTERESTED | Lead replied with negative intent |
DO_NOT_CONTACT | Lead requested removal |
BOUNCED | Email address bounced |
UNSUBSCRIBED | Lead clicked unsubscribe link |
Fetching Leads by Status
Python
Updating Lead Status
Python
Managing Leads Across Campaigns
Getting Lead Activity
Track what emails a lead has received and how they engaged:Python
Block List Management
Add leads to your global block list to prevent contacting them across all campaigns:Python
Blocked leads are automatically skipped during import. This applies across all campaigns in your account, not just the campaign where the lead was blocked.
Deduplication
SmartLead handles deduplication automatically during import:- Within the same campaign — Duplicate emails are always skipped
- Across campaigns — Controlled by
ignore_duplicate_leads_in_other_campaignsetting - Against block lists — Leads on the global block list are skipped
- Against unsubscribes — Previously unsubscribed leads are skipped
Troubleshooting
Leads are being skipped during import
Leads are being skipped during import
Check the
skipped_leads array in the response for reasons. Common causes: duplicate email in the same campaign, lead on the global block list, lead previously unsubscribed, or lead exists in another campaign (when ignore_duplicate_leads_in_other_campaign is false).Custom field variables showing as blank in emails
Custom field variables showing as blank in emails
Ensure the custom field name in your email template matches the key name in the
custom_fields object exactly (case-sensitive). Check that the lead was imported with that custom field populated.Import request fails with 400 error
Import request fails with 400 error
Check that your batch size doesn’t exceed 400 leads. Verify all required fields (
email at minimum) are present. Ensure email addresses are valid format.