Count which selected people a bulk action applies to
curl --request POST \
--url https://api.snowseo.com/v3/outreach/prospects/people/bulk-preview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"selection": {
"mode": "ids",
"ids": [
"<string>"
]
},
"action": "enrich",
"teamId": "<string>"
}
'import requests
url = "https://api.snowseo.com/v3/outreach/prospects/people/bulk-preview"
payload = {
"selection": {
"mode": "ids",
"ids": ["<string>"]
},
"action": "enrich",
"teamId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
selection: {mode: 'ids', ids: ['<string>']},
action: 'enrich',
teamId: '<string>'
})
};
fetch('https://api.snowseo.com/v3/outreach/prospects/people/bulk-preview', 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.snowseo.com/v3/outreach/prospects/people/bulk-preview",
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([
'selection' => [
'mode' => 'ids',
'ids' => [
'<string>'
]
],
'action' => 'enrich',
'teamId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.snowseo.com/v3/outreach/prospects/people/bulk-preview"
payload := strings.NewReader("{\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ]\n },\n \"action\": \"enrich\",\n \"teamId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.snowseo.com/v3/outreach/prospects/people/bulk-preview")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ]\n },\n \"action\": \"enrich\",\n \"teamId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/outreach/prospects/people/bulk-preview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ]\n },\n \"action\": \"enrich\",\n \"teamId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"eligibility": {
"selected": 123,
"eligible": 123,
"skipped": 123,
"byReason": {}
}
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Contacts
Bulk people actions
Preview or run email lookups for many outreach people at once.
POST
/
v3
/
outreach
/
prospects
/
people
/
bulk-preview
Count which selected people a bulk action applies to
curl --request POST \
--url https://api.snowseo.com/v3/outreach/prospects/people/bulk-preview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"selection": {
"mode": "ids",
"ids": [
"<string>"
]
},
"action": "enrich",
"teamId": "<string>"
}
'import requests
url = "https://api.snowseo.com/v3/outreach/prospects/people/bulk-preview"
payload = {
"selection": {
"mode": "ids",
"ids": ["<string>"]
},
"action": "enrich",
"teamId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
selection: {mode: 'ids', ids: ['<string>']},
action: 'enrich',
teamId: '<string>'
})
};
fetch('https://api.snowseo.com/v3/outreach/prospects/people/bulk-preview', 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.snowseo.com/v3/outreach/prospects/people/bulk-preview",
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([
'selection' => [
'mode' => 'ids',
'ids' => [
'<string>'
]
],
'action' => 'enrich',
'teamId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.snowseo.com/v3/outreach/prospects/people/bulk-preview"
payload := strings.NewReader("{\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ]\n },\n \"action\": \"enrich\",\n \"teamId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.snowseo.com/v3/outreach/prospects/people/bulk-preview")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ]\n },\n \"action\": \"enrich\",\n \"teamId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/outreach/prospects/people/bulk-preview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ]\n },\n \"action\": \"enrich\",\n \"teamId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"eligibility": {
"selected": 123,
"eligible": 123,
"skipped": 123,
"byReason": {}
}
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}The enrich action takes a
People already looked up, mid-lookup or marked
selection and works through it in batches:
selectionis either{ mode: "ids", ids: [personId, ...] }or{ mode: "all", filters: { search?, stage?, groups? }, excludedIds: [...] }(every person matching the filters, minus the excluded ids).scope(bestoreveryone) applies to a select-all:bestis one person per site,everyoneis every matching person.- Call
POST /v3/outreach/prospects/people/bulk-previewwith theselectionandaction: "enrich"first. It changes nothing and returnseligibility:{ selected, eligible, skipped, byReason }.
| Action | Endpoint | Rows per call | Notes |
|---|---|---|---|
| Enrich | POST /v3/outreach/prospects/people/bulk-enrich | 10 | 10 AI credits per eligible person queued; 402 when the charge fails. |
no_email are skipped without a charge. Each call returns { success, succeeded, failed, nextCursor, eligibility, results }. While nextCursor is not null, call again with the same selection and afterId set to nextCursor. results has one entry per person with id, success, creditsCharged and error when the lookup could not be started. Lookups that finish without an address are refunded later, so creditsCharged is not necessarily the final cost.
Lookups run in the background. Poll List every person while queued people have status enriching; their rows report the eventual address or failure.
POST /v3/outreach/prospects/people/selection returns the people a selection matches. Get person IDs from Outreach Contacts.Authorizations
bearerAuthapiKey
Your SnowSEO API key (sk_...).
Body
application/json
- Option 1
- Option 2
Show child attributes
Show child attributes
The bulk action to count eligible rows for.
Available options:
enrich For a select-all: best is one person per site (the pick), everyone is every matching person.
Available options:
best, everyone Response
Default Response
Show child attributes
Show child attributes
Was this page helpful?

