curl --request POST \
--url https://api.goextrovert.com/client/v2/prospect-list \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"listName": "<string>",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"userUrls": [
"<string>"
],
"moveOwnDuplicated": true,
"shouldBeDeletedIfInactive": true
}
'import requests
url = "https://api.goextrovert.com/client/v2/prospect-list"
payload = {
"listName": "<string>",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"userUrls": ["<string>"],
"moveOwnDuplicated": True,
"shouldBeDeletedIfInactive": True
}
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({
listName: '<string>',
campaignId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
userUrls: ['<string>'],
moveOwnDuplicated: true,
shouldBeDeletedIfInactive: true
})
};
fetch('https://api.goextrovert.com/client/v2/prospect-list', 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.goextrovert.com/client/v2/prospect-list",
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([
'listName' => '<string>',
'campaignId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'userUrls' => [
'<string>'
],
'moveOwnDuplicated' => true,
'shouldBeDeletedIfInactive' => true
]),
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.goextrovert.com/client/v2/prospect-list"
payload := strings.NewReader("{\n \"listName\": \"<string>\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"userUrls\": [\n \"<string>\"\n ],\n \"moveOwnDuplicated\": true,\n \"shouldBeDeletedIfInactive\": true\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.goextrovert.com/client/v2/prospect-list")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"listName\": \"<string>\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"userUrls\": [\n \"<string>\"\n ],\n \"moveOwnDuplicated\": true,\n \"shouldBeDeletedIfInactive\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goextrovert.com/client/v2/prospect-list")
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 \"listName\": \"<string>\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"userUrls\": [\n \"<string>\"\n ],\n \"moveOwnDuplicated\": true,\n \"shouldBeDeletedIfInactive\": true\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"listId": "cf33282b-b171-4d23-ae02-848499d793e4",
"submittedUrls": [
"<string>"
],
"validationRejectedUrls": [
"<string>"
],
"existedUrlsMap": {},
"outOfLimitUrls": [
"<string>"
],
"totalUrlsLimit": 123
},
"message": "Operation completed successfully"
}{
"status": "error",
"data": null,
"message": "An error occurred while processing the request"
}Create prospect list with LinkedIn profile URLs
Creates a new prospect list inside the given campaign and seeds it with the provided LinkedIn profile URLs. The backend validates URLs and may reject some as invalid, duplicates, or out-of-limit. The response describes which URLs were submitted, rejected, or already existed elsewhere. Profile existence is verified asynchronously after this call: a URL can be accepted into submittedUrls and still be dropped later — check prospect-list_get-one-list for the final prospect count before reporting how many were actually added. For a list without prospects, use prospect-list_create-empty-list.
curl --request POST \
--url https://api.goextrovert.com/client/v2/prospect-list \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"listName": "<string>",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"userUrls": [
"<string>"
],
"moveOwnDuplicated": true,
"shouldBeDeletedIfInactive": true
}
'import requests
url = "https://api.goextrovert.com/client/v2/prospect-list"
payload = {
"listName": "<string>",
"campaignId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"userUrls": ["<string>"],
"moveOwnDuplicated": True,
"shouldBeDeletedIfInactive": True
}
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({
listName: '<string>',
campaignId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
userUrls: ['<string>'],
moveOwnDuplicated: true,
shouldBeDeletedIfInactive: true
})
};
fetch('https://api.goextrovert.com/client/v2/prospect-list', 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.goextrovert.com/client/v2/prospect-list",
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([
'listName' => '<string>',
'campaignId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'userUrls' => [
'<string>'
],
'moveOwnDuplicated' => true,
'shouldBeDeletedIfInactive' => true
]),
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.goextrovert.com/client/v2/prospect-list"
payload := strings.NewReader("{\n \"listName\": \"<string>\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"userUrls\": [\n \"<string>\"\n ],\n \"moveOwnDuplicated\": true,\n \"shouldBeDeletedIfInactive\": true\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.goextrovert.com/client/v2/prospect-list")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"listName\": \"<string>\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"userUrls\": [\n \"<string>\"\n ],\n \"moveOwnDuplicated\": true,\n \"shouldBeDeletedIfInactive\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goextrovert.com/client/v2/prospect-list")
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 \"listName\": \"<string>\",\n \"campaignId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"userUrls\": [\n \"<string>\"\n ],\n \"moveOwnDuplicated\": true,\n \"shouldBeDeletedIfInactive\": true\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"listId": "cf33282b-b171-4d23-ae02-848499d793e4",
"submittedUrls": [
"<string>"
],
"validationRejectedUrls": [
"<string>"
],
"existedUrlsMap": {},
"outOfLimitUrls": [
"<string>"
],
"totalUrlsLimit": 123
},
"message": "Operation completed successfully"
}{
"status": "error",
"data": null,
"message": "An error occurred while processing the request"
}Authorizations
API Key for authentication
Body
URL admission precedes asynchronous profile verification. Check submittedUrls, validationRejectedUrls, existedUrlsMap and outOfLimitUrls. With at least one accepted URL, partial success is returned; if none are accepted, including a wholly out-of-capacity batch, the default flow fails rather than returning empty success.
Human-readable list name.
1Use a non-deleted Prospects campaign as the destination. Capacity is normally workspace-wide, but a trial pool with a non-null perOwnerCeiling is measured for this campaign owner. An active plan is required; a new list also needs a free prospect-list slot in that campaign.
LinkedIn profile URLs to seed the list with.
1 - 1000 elements1For an active duplicate owned by the destination campaign owner, true moves the existing prospect record into this list and false skips it into existedUrlsMap. Same-list duplicates are skipped silently; deleted same-owner records are reactivated. Teammate duplicates are searched and skipped only when the destination campaign has skipTeammatesLeads enabled; this is not global team-wide deduplication.
If true, auto-remove prospects who have no posts on LinkedIn within the last 30 days (checked once, when the backend first pulls their posts). If false, keep them regardless of recent posting activity. Useful for pruning low-signal prospects on create.