Skip to main content

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

Keep all three settings as false unless you have a specific reason to override them. Block lists and unsubscribe lists exist to protect your sender reputation and ensure compliance with email regulations.

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 the custom_fields object when importing leads:
Python

Using Custom Fields in Sequences

Reference any custom field in your email templates using {{field_name}}:
Use custom fields for personalization that goes beyond first name and company. Mentioning a recent funding round, a shared connection, or a specific pain point dramatically increases reply rates.

Lead Statuses

Every lead in a campaign has a status that reflects where they are in the outreach lifecycle:

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:
  1. Within the same campaign — Duplicate emails are always skipped
  2. Across campaigns — Controlled by ignore_duplicate_leads_in_other_campaign setting
  3. Against block lists — Leads on the global block list are skipped
  4. Against unsubscribes — Previously unsubscribed leads are skipped
The import response tells you exactly what was skipped and why:

Troubleshooting

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).
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.
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.

What’s Next?

Campaign Setup Guide

Configure campaigns and sequences for your leads

Webhook Integration

Get real-time notifications when leads reply or bounce