Bulk create/update leads
Bulk import leads from a JSON array (max 5,000 per request). Processed in batches of 1,000 with up to 10 concurrent batches.
Options:
- skipDuplicates (default true): When true, existing leads (by email) are skipped. When false, existing leads are updated with the new data.
- dataCleanup (default true): Normalize emails, phone numbers, LinkedIn URLs, and strip special characters from names.
- tag: Optional tag to apply to all imported leads.
Each lead object must include email. Standard fields (firstName, lastName, companyName, etc.) are mapped automatically. Any unrecognized keys become custom fields.
curl -X POST "https://api.sendkit.ai/v1/leads/bulk" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"leads": [
{
"email": "john@acme.com",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Corp",
"jobTitle": "VP of Sales",
"industry": "SaaS"
},
{
"email": "jane@example.com",
"firstName": "Jane",
"lastName": "Smith",
"companyName": "Example Inc"
}
],
"skipDuplicates": true,
"dataCleanup": true,
"tag": "batch-2025-06"
}'
import requests
import json
url = "https://api.sendkit.ai/v1/leads/bulk"
headers = {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"leads": [
{
"email": "john@acme.com",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Corp",
"jobTitle": "VP of Sales",
"industry": "SaaS"
},
{
"email": "jane@example.com",
"firstName": "Jane",
"lastName": "Smith",
"companyName": "Example Inc"
}
],
"skipDuplicates": true,
"dataCleanup": true,
"tag": "batch-2025-06"
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.sendkit.ai/v1/leads/bulk", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: JSON.stringify({
"leads": [
{
"email": "john@acme.com",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Corp",
"jobTitle": "VP of Sales",
"industry": "SaaS"
},
{
"email": "jane@example.com",
"firstName": "Jane",
"lastName": "Smith",
"companyName": "Example Inc"
}
],
"skipDuplicates": true,
"dataCleanup": true,
"tag": "batch-2025-06"
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"leads": [
{
"email": "john@acme.com",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Corp",
"jobTitle": "VP of Sales",
"industry": "SaaS"
},
{
"email": "jane@example.com",
"firstName": "Jane",
"lastName": "Smith",
"companyName": "Example Inc"
}
],
"skipDuplicates": true,
"dataCleanup": true,
"tag": "batch-2025-06"
}`)
req, err := http.NewRequest("POST", "https://api.sendkit.ai/v1/leads/bulk", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Api-Key", "YOUR_API_KEY")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.sendkit.ai/v1/leads/bulk')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['X-Api-Key'] = 'YOUR_API_KEY'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.body = '{
"leads": [
{
"email": "john@acme.com",
"firstName": "John",
"lastName": "Doe",
"companyName": "Acme Corp",
"jobTitle": "VP of Sales",
"industry": "SaaS"
},
{
"email": "jane@example.com",
"firstName": "Jane",
"lastName": "Smith",
"companyName": "Example Inc"
}
],
"skipDuplicates": true,
"dataCleanup": true,
"tag": "batch-2025-06"
}'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"imported": 180,
"updated": 0,
"skipped": 15,
"failed": 5,
"importedLeadIds": [
"665d4e5f6a7b8c9d0e1f2a3b",
"665d4e5f6a7b8c9d0e1f2a3c"
],
"errors": [
{
"email": "not-an-email",
"error": "Invalid email format"
}
]
}
}
/v1/leads/bulk
Platform API key (sk_user_...) or Workspace API key (sk_...)
The media type of the request body
Array of lead objects (max 5,000)
Skip leads whose email already exists (false = update existing)
Normalize emails, phone numbers, names
Tag to apply to all imported leads
Request Preview
Response
Response will appear here after sending the request
Authentication
API Key for authentication. Platform API key (sk_user_...) or Workspace API key (sk_...)
Bearer token. API key as Bearer token
Body
Array of lead objects (max 5,000)
Skip leads whose email already exists (false = update existing)
Normalize emails, phone numbers, names
Tag to apply to all imported leads
Responses
Last updated today
Built with Documentation.AI