---
ref: tool:lemlist/add-lead-to-campaign
name: Add a lead to a campaign
company: company:lemlist
workflows: [workflow:funding-signal-outbound, workflow:hiring-signal-outbound, workflow:closed-lost-reengagement, workflow:github-stargazers-outbound]
access: [cli, api]
tags: [capability:enroll-in-sequence, category:sales-engagement, has:api, has:cli]
docs: https://developer.lemlist.com/api-reference/endpoints/leads/create-lead-in-campaign
updated: 2026-09-29
---

# Add a lead to a campaign

Creates a lead in a lemlist campaign from an email, name, company and custom variables, optionally finding or verifying their email first; it never updates an existing lead.

Note: The campaign automates outreach to its leads: confirm it first. `findEmail`, `verifyEmail`, `findPhone` and `linkedinEnrichment` spend credits, and a lead already in the campaign is refused with `400 LEAD_ALREADY_IN_CAMPAIGN`.

## Set up

Use the first option your agent supports.

### CLI (official)

Install the command and sign in with it, then confirm it runs.

```sh
npm install -g @lemlist-official/cli
lemlist --version
```

Run `lemlist api POST /campaigns/{campaignId}/leads/`.

### API (official)

- Base URL: https://api.lemlist.com/api
- Endpoint: `POST /campaigns/{campaignId}/leads/`
- Auth: send the header `Authorization: Basic $LEMLIST_API_KEY`
- Get a key: https://app.lemlist.com/settings/integrations
- Docs: https://developer.lemlist.com/api-reference/getting-started/authentication

Note: `LEMLIST_API_KEY` holds the base64 of `:<api key>`, an empty username and the key; 20 requests every 2 seconds per key.

Before anything else, confirm access with the cheapest read-only call, like a list or a search. Never send or change anything to test access.

## Rules

- Ask the user before anything that sends messages, costs money, or changes data, and say how many records it touches. One approval covers a batch the user has seen.
- Never print API keys.
