curl --request POST \
--url https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"companyId": "<string>",
"includeEmail": true,
"includePhone": false,
"rows": [
{}
],
"filters": {},
"count": 123,
"importAll": true,
"audienceName": "<string>",
"importId": "<string>"
}
'import requests
url = "https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import"
payload = {
"companyId": "<string>",
"includeEmail": True,
"includePhone": False,
"rows": [{}],
"filters": {},
"count": 123,
"importAll": True,
"audienceName": "<string>",
"importId": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
companyId: '<string>',
includeEmail: true,
includePhone: false,
rows: [{}],
filters: {},
count: 123,
importAll: true,
audienceName: '<string>',
importId: '<string>'
})
};
fetch('https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'companyId' => '<string>',
'includeEmail' => true,
'includePhone' => false,
'rows' => [
[
]
],
'filters' => [
],
'count' => 123,
'importAll' => true,
'audienceName' => '<string>',
'importId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import"
payload := strings.NewReader("{\n \"companyId\": \"<string>\",\n \"includeEmail\": true,\n \"includePhone\": false,\n \"rows\": [\n {}\n ],\n \"filters\": {},\n \"count\": 123,\n \"importAll\": true,\n \"audienceName\": \"<string>\",\n \"importId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-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))
}HttpResponse<String> response = Unirest.post("https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"companyId\": \"<string>\",\n \"includeEmail\": true,\n \"includePhone\": false,\n \"rows\": [\n {}\n ],\n \"filters\": {},\n \"count\": 123,\n \"importAll\": true,\n \"audienceName\": \"<string>\",\n \"importId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"companyId\": \"<string>\",\n \"includeEmail\": true,\n \"includePhone\": false,\n \"rows\": [\n {}\n ],\n \"filters\": {},\n \"count\": 123,\n \"importAll\": true,\n \"audienceName\": \"<string>\",\n \"importId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"taskId": "<string>",
"listId": "<string>",
"status": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Import people-search results into an existing smart list.
Send either rows (1–50 results from leads_searchPeopleDatabase, passed back unchanged) or filters plus count (or importAll=true) to import a filtered search of up to 50,000 people. Runs in the background and returns a taskId: poll lists_getTaskStatus until status is completed, failed or cancelled. A pending task with taskMetadata.waitReason is waiting for data credits or the provider and resumes on its own. People already in the list with the same LinkedIn URL or email are updated, not duplicated. includeEmail (default true) costs 1 data credit per imported person; includePhone (default false) costs 2 per phone found. Pass a fresh UUID as importId and reuse it on retries so a retry returns the same task.
curl --request POST \
--url https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"companyId": "<string>",
"includeEmail": true,
"includePhone": false,
"rows": [
{}
],
"filters": {},
"count": 123,
"importAll": true,
"audienceName": "<string>",
"importId": "<string>"
}
'import requests
url = "https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import"
payload = {
"companyId": "<string>",
"includeEmail": True,
"includePhone": False,
"rows": [{}],
"filters": {},
"count": 123,
"importAll": True,
"audienceName": "<string>",
"importId": "<string>"
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
companyId: '<string>',
includeEmail: true,
includePhone: false,
rows: [{}],
filters: {},
count: 123,
importAll: true,
audienceName: '<string>',
importId: '<string>'
})
};
fetch('https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'companyId' => '<string>',
'includeEmail' => true,
'includePhone' => false,
'rows' => [
[
]
],
'filters' => [
],
'count' => 123,
'importAll' => true,
'audienceName' => '<string>',
'importId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import"
payload := strings.NewReader("{\n \"companyId\": \"<string>\",\n \"includeEmail\": true,\n \"includePhone\": false,\n \"rows\": [\n {}\n ],\n \"filters\": {},\n \"count\": 123,\n \"importAll\": true,\n \"audienceName\": \"<string>\",\n \"importId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-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))
}HttpResponse<String> response = Unirest.post("https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"companyId\": \"<string>\",\n \"includeEmail\": true,\n \"includePhone\": false,\n \"rows\": [\n {}\n ],\n \"filters\": {},\n \"count\": 123,\n \"importAll\": true,\n \"audienceName\": \"<string>\",\n \"importId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/leads/people-search/lists/{listId}/import")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"companyId\": \"<string>\",\n \"includeEmail\": true,\n \"includePhone\": false,\n \"rows\": [\n {}\n ],\n \"filters\": {},\n \"count\": 123,\n \"importAll\": true,\n \"audienceName\": \"<string>\",\n \"importId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"taskId": "<string>",
"listId": "<string>",
"status": "<string>",
"message": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Path Parameters
Body
Company ID for access and any applicable data-credit charges
Enrich email for 1 data credit per person.
Enrich mobile/direct phone for 2 data credits per returned number.
Select 1–50 search results. Each needs linkedinUrl or email. Profile values must be text of at most 5000 characters (250000 for structured fields and long descriptions). Structured fields such as workHistory and educationHistory contain JSON in their own columns. Supported fields: workHistory, educationHistory, skills, certifications, locationDetails, companyLocationDetails, companyNaicsCodes, companyNaicsTitles, companyLinkedinIndustries, allEmails, nickname, salutation, profileUpdatedAt, companyEmployeeCount, externalId, displayName, firstName, lastName, email, businessEmail, personalEmail, phoneNumber, linkedinUrl, headline, location, positionTitle, positionLocation, seniority, department, companyName, companyWebsite, companyLinkedinUrl, companyEmployeeRange, companyIndustry, companyAnnualRevenue, businessEmailRiskScore, businessEmailValidatedAt, numOfConnections, about, photoUrl, companyDescription, companyFoundedOn, companyNumberOfFollowers, companyEmployeesOnLinkedin, companyLocation, summary, positionDescription, companyHeadquarters, companyCountry, companyType, companyKeywords, companyLogoUrl.
Search filters, same shape as leads_searchPeopleDatabase. Required when rows are omitted.
With filters: how many people to process, from 1 to 50000, starting at the first result. Required unless importAll is true.
With filters: process every match, capped at 50000.
Optional label for the job.
Optional UUID identifying this job. Reuse it to retrieve the same job when retrying an unchanged request.
Response
Queued import; poll lists_getTaskStatus with taskId
The queued background people job

