Leads
Bulk Import Leads
Import up to 1000 leads in a single call with automatic soft-delete restoration and a structured dedup report.
POST
Use this endpoint instead of looping Create Lead when you have a list of leads to ingest. You get back a single response with counts of
In-request duplicate emails are caught — the first occurrence wins, subsequent rows with the same email are counted as duplicates.
created, restored, duplicates, and errors — no per-row 409s, no manual retry logic.
Request Body
Array of lead objects. Each item supports the same fields as Create Lead — at minimum
email, plus any of firstName, lastName, company, title, phone, linkedinUrl, website, notes, source, status, customFields, tags. Maximum 1000 leads per request.When
true (default), leads with the same email as a previously soft-deleted record are restored (their deletedAt is cleared and the existing fields are merged with the request payload). When false, those rows are counted as duplicates instead.Response
| Field | Description |
|---|---|
created | Net-new lead rows inserted. |
restored | Previously soft-deleted rows whose deletedAt was cleared and whose campaign membership counts were re-incremented. |
duplicates | Rows skipped because an active lead with that email already exists, or because the same email appeared earlier in the request. |
errors | Rows skipped due to validation issues (empty email, etc.). |
duplicateEmails | First 100 duplicate emails for debugging. |
errorDetails | First 100 invalid rows with reasons. |
Errors
| Status | Description |
|---|---|
400 | More than 1000 leads in leads, or empty array |
402 | Workspace plan contact limit would be exceeded by the request |
422 | Invalid request body (malformed JSON, bad field types) |
429 | Rate limit exceeded — see Rate Limit section below |
Rate Limit
- 100 requests per minute, per API key (the same v1 limit as every other endpoint).
- A bulk import of 1000 leads counts as 1 request, not 1000. This is the whole point of the endpoint — your effective ingestion rate goes from 100 leads/minute (looping single create) to 100,000 leads/minute (looping this endpoint).
- Response includes
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Resetheaders.
When to use this vs. Create Lead
| Use Create Lead when… | Use Bulk Import when… |
|---|---|
| You have a single lead from a form or webhook | You’re ingesting from a CSV, spreadsheet, or external data source |
| You need the full lead row in the response | You need a structured dedup report |
| You’re inserting fewer than ~10 rows | You have anywhere from 10 to 1000 rows per call |
| You want a 409 conflict surfaced per row | You want to keep going past dups and restore soft-deleted |