Prospecting Contacts
Search Lusha’s contact database with rich ICP filters across contact and company attributes. Returns paginated, lightweight previews - enrich the returned IDs to reveal emails and phones.
curl --request POST \
--url https://api.lusha.com/v3/contacts/prospecting \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"pagination": {
"page": 0,
"size": 100
},
"filters": {
"contacts": {
"include": {
"departments": [
"Sales"
],
"locations": [
{
"country": "United States"
}
],
"existingDataPoints": [
"work_email"
]
}
},
"companies": {
"include": {
"locations": [
{
"country": "United States"
}
],
"foundedYear": [
{
"min": 2000
}
],
"businessModel": [
"B2B"
],
"companyType": [
"Public Company"
],
"linkedinUrls": [
"https://www.linkedin.com/company/google"
],
"keywords": [
"fintech"
]
},
"exclude": {
"domains": [
"competitor.com"
],
"companyType": [
"Self Employed"
]
}
}
},
"tableId": "482910",
"options": {
"includePartialProfiles": true,
"excludeDnc": false,
"maxContactsPerCompany": 2
}
}
'import requests
url = "https://api.lusha.com/v3/contacts/prospecting"
payload = {
"pagination": {
"page": 0,
"size": 100
},
"filters": {
"contacts": { "include": {
"departments": ["Sales"],
"locations": [{ "country": "United States" }],
"existingDataPoints": ["work_email"]
} },
"companies": {
"include": {
"locations": [{ "country": "United States" }],
"foundedYear": [{ "min": 2000 }],
"businessModel": ["B2B"],
"companyType": ["Public Company"],
"linkedinUrls": ["https://www.linkedin.com/company/google"],
"keywords": ["fintech"]
},
"exclude": {
"domains": ["competitor.com"],
"companyType": ["Self Employed"]
}
}
},
"tableId": "482910",
"options": {
"includePartialProfiles": True,
"excludeDnc": False,
"maxContactsPerCompany": 2
}
}
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
pagination: {page: 0, size: 100},
filters: {
contacts: {
include: {
departments: ['Sales'],
locations: [{country: 'United States'}],
existingDataPoints: ['work_email']
}
},
companies: {
include: {
locations: [{country: 'United States'}],
foundedYear: [{min: 2000}],
businessModel: ['B2B'],
companyType: ['Public Company'],
linkedinUrls: ['https://www.linkedin.com/company/google'],
keywords: ['fintech']
},
exclude: {domains: ['competitor.com'], companyType: ['Self Employed']}
}
},
tableId: '482910',
options: {includePartialProfiles: true, excludeDnc: false, maxContactsPerCompany: 2}
})
};
fetch('https://api.lusha.com/v3/contacts/prospecting', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.lusha.com/v3/contacts/prospecting")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"pagination\": {\n \"page\": 0,\n \"size\": 100\n },\n \"filters\": {\n \"contacts\": {\n \"include\": {\n \"departments\": [\n \"Sales\"\n ],\n \"locations\": [\n {\n \"country\": \"United States\"\n }\n ],\n \"existingDataPoints\": [\n \"work_email\"\n ]\n }\n },\n \"companies\": {\n \"include\": {\n \"locations\": [\n {\n \"country\": \"United States\"\n }\n ],\n \"foundedYear\": [\n {\n \"min\": 2000\n }\n ],\n \"businessModel\": [\n \"B2B\"\n ],\n \"companyType\": [\n \"Public Company\"\n ],\n \"linkedinUrls\": [\n \"https://www.linkedin.com/company/google\"\n ],\n \"keywords\": [\n \"fintech\"\n ]\n },\n \"exclude\": {\n \"domains\": [\n \"competitor.com\"\n ],\n \"companyType\": [\n \"Self Employed\"\n ]\n }\n }\n },\n \"tableId\": \"482910\",\n \"options\": {\n \"includePartialProfiles\": true,\n \"excludeDnc\": false,\n \"maxContactsPerCompany\": 2\n }\n}")
.asString();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.lusha.com/v3/contacts/prospecting"
payload := strings.NewReader("{\n \"pagination\": {\n \"page\": 0,\n \"size\": 100\n },\n \"filters\": {\n \"contacts\": {\n \"include\": {\n \"departments\": [\n \"Sales\"\n ],\n \"locations\": [\n {\n \"country\": \"United States\"\n }\n ],\n \"existingDataPoints\": [\n \"work_email\"\n ]\n }\n },\n \"companies\": {\n \"include\": {\n \"locations\": [\n {\n \"country\": \"United States\"\n }\n ],\n \"foundedYear\": [\n {\n \"min\": 2000\n }\n ],\n \"businessModel\": [\n \"B2B\"\n ],\n \"companyType\": [\n \"Public Company\"\n ],\n \"linkedinUrls\": [\n \"https://www.linkedin.com/company/google\"\n ],\n \"keywords\": [\n \"fintech\"\n ]\n },\n \"exclude\": {\n \"domains\": [\n \"competitor.com\"\n ],\n \"companyType\": [\n \"Self Employed\"\n ]\n }\n }\n },\n \"tableId\": \"482910\",\n \"options\": {\n \"includePartialProfiles\": true,\n \"excludeDnc\": false,\n \"maxContactsPerCompany\": 2\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api_key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"requestId": "fa828378-7a8e-4e5d-9f72-0270e7f7ab51",
"pagination": { "page": 0, "size": 50, "total": 670550 },
"results": [
{
"id": "670138733",
"firstName": "Ting",
"lastName": "Tsou"
}
],
"billing": {
"creditsCharged": 2,
"resultsReturned": 50
}
}
{
"statusCode": 400,
"message": "Invalid request parameters"
}
{
"statusCode": 402,
"message": "Insufficient credits for this operation"
}
{
"statusCode": 403,
"message": "V3 API access is not enabled for your account"
}
id. Pass that id to Enrich Contacts to reveal emails, phone numbers, and the rest of the contact’s data.
| Step | Endpoint | Purpose |
|---|---|---|
| 1 | POST /v3/contacts/prospecting | Find contacts matching your ICP filters; get back previews + ids |
| 2 | POST /v3/contacts/enrich | Pass the ids from step 1 to reveal full contact data |
Endpoint
POST https://api.lusha.com/v3/contacts/prospecting
api_key header)
Results are paginated up to 50,000 total (1,000 pages × 50 results per page).
Request body
contacts or companies.Show filters.contacts
Show filters.contacts
Show include fields
Show include fields
["VP Sales", "Director of Sales"]200.["US", "CA"]city, state, country, continent, and countryGrouping. Example: [{ "country": "United States" }][4, 5]["Sales", "Engineering"]["work_email", "work_phone"]include. Contacts matching this criteria are removed from results.Show filters.companies
Show filters.companies
Show include fields
Show include fields
["lusha.com"][{ "country": "United States" }]{ "min": ..., "max": ... }. Example: [{ "min": 50, "max": 500 }]{ "min": ..., "max": ... }.["Salesforce", "HubSpot"]"or" or "and" - how the technologies list is combined.["Software", "SaaS"]["Cloud Migration"]"or" or "and" - how the intentTopics list is combined.{ "min": ..., "max": ... }) on the number of matched intent topics.{ "min": ..., "max": ... }.B2B, B2C, B2G.Government, Private Company, Public Company, Educational, Non Profit, Self Employed.["https://www.linkedin.com/company/microsoft"]["cloud", "artificial intelligence"]include. Companies matching this criteria are removed from results.Example request
curl --request POST \
--url https://api.lusha.com/v3/contacts/prospecting \
--header 'api_key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"pagination": { "page": 0, "size": 50 },
"filters": {
"contacts": {
"include": {
"departments": ["Sales"],
"locations": [{ "country": "United States" }],
"existingDataPoints": ["work_email"]
}
},
"companies": {
"include": {
"locations": [{ "country": "United States" }],
"businessModel": ["B2B"],
"companyType": ["Public Company"]
}
}
},
"options": {
"includePartialProfiles": true,
"excludeDnc": false
}
}'
{
"pagination": { "page": 0, "size": 50 },
"filters": {
"contacts": {
"include": {
"departments": ["Sales"],
"locations": [{ "country": "United States" }],
"existingDataPoints": ["work_email"]
}
},
"companies": {
"include": {
"locations": [{ "country": "United States" }],
"businessModel": ["B2B"],
"companyType": ["Public Company"]
}
}
},
"options": {
"includePartialProfiles": true,
"excludeDnc": false
}
}
Response
200 - Success
page, size, and total (total matching contacts across all pages).Show preview fields
Show preview fields
title, departments, and seniority.id, name, and domain of the contact’s current company.country, state, and city.linkedin profile URL.["firstName", "lastName", "jobTitle", "location", "socialLinks", "emails"]{ "field": "emails" | "phones", "credits": <integer> }. credits is 0 when your account has already revealed that field for this contact.code is one of NOT_FOUND, COMPLIANCE_RESTRICTED, ENRICH_FAILED; message explains why.creditsCharged and resultsReturned for this request.api_search action. If you filter by signals, an additional charge applies per matched signal per result.Error codes
| Status | Meaning |
|---|---|
400 | Bad request - invalid input data. |
401 | Unauthorized - invalid or missing API key. |
402 | Payment required - insufficient credits. |
403 | Forbidden - account inactive, or V3 access not enabled. |
429 | Too many requests - rate limit exceeded. |
{
"requestId": "fa828378-7a8e-4e5d-9f72-0270e7f7ab51",
"pagination": { "page": 0, "size": 50, "total": 670550 },
"results": [
{
"id": "670138733",
"firstName": "Ting",
"lastName": "Tsou"
}
],
"billing": {
"creditsCharged": 2,
"resultsReturned": 50
}
}
{
"statusCode": 400,
"message": "Invalid request parameters"
}
{
"statusCode": 402,
"message": "Insufficient credits for this operation"
}
{
"statusCode": 403,
"message": "V3 API access is not enabled for your account"
}
Authorizations
Your Lusha API key. You can find this in your Lusha dashboard under API settings.
Include this key in the api_key header for all requests.
Body
Response
Successful response
Show child attributes
Show child attributes
Pagination for Prospecting Contacts. Extends the standard pagination object with two optional fields describing the total count. Both keys are omitted when not returned.
Show child attributes
Show child attributes
Added to a Prospecting, Enrich, Signals, or Lookalike response when tableId is passed on the request. The primary response is unaffected even if the table write fails.
Show child attributes
Show child attributes
Credit usage summary for a V3 API request
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://api.lusha.com/v3/contacts/prospecting \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"pagination": {
"page": 0,
"size": 100
},
"filters": {
"contacts": {
"include": {
"departments": [
"Sales"
],
"locations": [
{
"country": "United States"
}
],
"existingDataPoints": [
"work_email"
]
}
},
"companies": {
"include": {
"locations": [
{
"country": "United States"
}
],
"foundedYear": [
{
"min": 2000
}
],
"businessModel": [
"B2B"
],
"companyType": [
"Public Company"
],
"linkedinUrls": [
"https://www.linkedin.com/company/google"
],
"keywords": [
"fintech"
]
},
"exclude": {
"domains": [
"competitor.com"
],
"companyType": [
"Self Employed"
]
}
}
},
"tableId": "482910",
"options": {
"includePartialProfiles": true,
"excludeDnc": false,
"maxContactsPerCompany": 2
}
}
'import requests
url = "https://api.lusha.com/v3/contacts/prospecting"
payload = {
"pagination": {
"page": 0,
"size": 100
},
"filters": {
"contacts": { "include": {
"departments": ["Sales"],
"locations": [{ "country": "United States" }],
"existingDataPoints": ["work_email"]
} },
"companies": {
"include": {
"locations": [{ "country": "United States" }],
"foundedYear": [{ "min": 2000 }],
"businessModel": ["B2B"],
"companyType": ["Public Company"],
"linkedinUrls": ["https://www.linkedin.com/company/google"],
"keywords": ["fintech"]
},
"exclude": {
"domains": ["competitor.com"],
"companyType": ["Self Employed"]
}
}
},
"tableId": "482910",
"options": {
"includePartialProfiles": True,
"excludeDnc": False,
"maxContactsPerCompany": 2
}
}
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
pagination: {page: 0, size: 100},
filters: {
contacts: {
include: {
departments: ['Sales'],
locations: [{country: 'United States'}],
existingDataPoints: ['work_email']
}
},
companies: {
include: {
locations: [{country: 'United States'}],
foundedYear: [{min: 2000}],
businessModel: ['B2B'],
companyType: ['Public Company'],
linkedinUrls: ['https://www.linkedin.com/company/google'],
keywords: ['fintech']
},
exclude: {domains: ['competitor.com'], companyType: ['Self Employed']}
}
},
tableId: '482910',
options: {includePartialProfiles: true, excludeDnc: false, maxContactsPerCompany: 2}
})
};
fetch('https://api.lusha.com/v3/contacts/prospecting', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));HttpResponse<String> response = Unirest.post("https://api.lusha.com/v3/contacts/prospecting")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"pagination\": {\n \"page\": 0,\n \"size\": 100\n },\n \"filters\": {\n \"contacts\": {\n \"include\": {\n \"departments\": [\n \"Sales\"\n ],\n \"locations\": [\n {\n \"country\": \"United States\"\n }\n ],\n \"existingDataPoints\": [\n \"work_email\"\n ]\n }\n },\n \"companies\": {\n \"include\": {\n \"locations\": [\n {\n \"country\": \"United States\"\n }\n ],\n \"foundedYear\": [\n {\n \"min\": 2000\n }\n ],\n \"businessModel\": [\n \"B2B\"\n ],\n \"companyType\": [\n \"Public Company\"\n ],\n \"linkedinUrls\": [\n \"https://www.linkedin.com/company/google\"\n ],\n \"keywords\": [\n \"fintech\"\n ]\n },\n \"exclude\": {\n \"domains\": [\n \"competitor.com\"\n ],\n \"companyType\": [\n \"Self Employed\"\n ]\n }\n }\n },\n \"tableId\": \"482910\",\n \"options\": {\n \"includePartialProfiles\": true,\n \"excludeDnc\": false,\n \"maxContactsPerCompany\": 2\n }\n}")
.asString();package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.lusha.com/v3/contacts/prospecting"
payload := strings.NewReader("{\n \"pagination\": {\n \"page\": 0,\n \"size\": 100\n },\n \"filters\": {\n \"contacts\": {\n \"include\": {\n \"departments\": [\n \"Sales\"\n ],\n \"locations\": [\n {\n \"country\": \"United States\"\n }\n ],\n \"existingDataPoints\": [\n \"work_email\"\n ]\n }\n },\n \"companies\": {\n \"include\": {\n \"locations\": [\n {\n \"country\": \"United States\"\n }\n ],\n \"foundedYear\": [\n {\n \"min\": 2000\n }\n ],\n \"businessModel\": [\n \"B2B\"\n ],\n \"companyType\": [\n \"Public Company\"\n ],\n \"linkedinUrls\": [\n \"https://www.linkedin.com/company/google\"\n ],\n \"keywords\": [\n \"fintech\"\n ]\n },\n \"exclude\": {\n \"domains\": [\n \"competitor.com\"\n ],\n \"companyType\": [\n \"Self Employed\"\n ]\n }\n }\n },\n \"tableId\": \"482910\",\n \"options\": {\n \"includePartialProfiles\": true,\n \"excludeDnc\": false,\n \"maxContactsPerCompany\": 2\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api_key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"requestId": "fa828378-7a8e-4e5d-9f72-0270e7f7ab51",
"pagination": { "page": 0, "size": 50, "total": 670550 },
"results": [
{
"id": "670138733",
"firstName": "Ting",
"lastName": "Tsou"
}
],
"billing": {
"creditsCharged": 2,
"resultsReturned": 50
}
}
{
"statusCode": 400,
"message": "Invalid request parameters"
}
{
"statusCode": 402,
"message": "Insufficient credits for this operation"
}
{
"statusCode": 403,
"message": "V3 API access is not enabled for your account"
}