People Signals API
curl --request POST \
--url https://api.cufinder.io/v2/psa \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"signal_name": "<string>",
"time_frame": 123,
"bucket": "<string>"
}
'import requests
url = "https://api.cufinder.io/v2/psa"
payload = {
"signal_name": "<string>",
"time_frame": 123,
"bucket": "<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({signal_name: '<string>', time_frame: 123, bucket: '<string>'})
};
fetch('https://api.cufinder.io/v2/psa', 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.cufinder.io/v2/psa",
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([
'signal_name' => '<string>',
'time_frame' => 123,
'bucket' => '<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.cufinder.io/v2/psa"
payload := strings.NewReader("{\n \"signal_name\": \"<string>\",\n \"time_frame\": 123,\n \"bucket\": \"<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.cufinder.io/v2/psa")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"signal_name\": \"<string>\",\n \"time_frame\": 123,\n \"bucket\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cufinder.io/v2/psa")
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 \"signal_name\": \"<string>\",\n \"time_frame\": 123,\n \"bucket\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodySignals APIs
People Signals API
The People Signals API returns the people at companies where a chosen buying signal just fired. Filter by signal name, look-back window, and signal strength, and get back contacts with their role, company, and location.
POST
/
v2
/
psa
People Signals API
curl --request POST \
--url https://api.cufinder.io/v2/psa \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"signal_name": "<string>",
"time_frame": 123,
"bucket": "<string>"
}
'import requests
url = "https://api.cufinder.io/v2/psa"
payload = {
"signal_name": "<string>",
"time_frame": 123,
"bucket": "<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({signal_name: '<string>', time_frame: 123, bucket: '<string>'})
};
fetch('https://api.cufinder.io/v2/psa', 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.cufinder.io/v2/psa",
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([
'signal_name' => '<string>',
'time_frame' => 123,
'bucket' => '<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.cufinder.io/v2/psa"
payload := strings.NewReader("{\n \"signal_name\": \"<string>\",\n \"time_frame\": 123,\n \"bucket\": \"<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.cufinder.io/v2/psa")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"signal_name\": \"<string>\",\n \"time_frame\": 123,\n \"bucket\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cufinder.io/v2/psa")
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 \"signal_name\": \"<string>\",\n \"time_frame\": 123,\n \"bucket\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyCommon Use Cases
Turn any buying signal into a live list of the people at companies where it just fired.- Signal-Based Prospecting: Reaching people at companies hitting a chosen signal.
- Timely Outreach: Contacting decision-makers while the signal is still fresh.
- Territory Building: Pulling contacts by signal, strength, and recency.
- Account Prioritization: Focusing on accounts showing the strongest signals.
Attributes
string
required
The buying signal to filter by. See the full list of available signal names below.
All available signal names (99)
All available signal names (99)
| Signal name | Category | What it detects |
|---|---|---|
avg_engagement_change | Activity | Average post engagement shifted significantly. |
crisis_response_signal | Activity | A cluster of statement or apology-style posts in a short window. |
page_dormant | Activity | The company stopped posting for an extended period. |
page_reactivated | Activity | The company resumed posting after a dormant stretch. |
post_topic_shift | Activity | The dominant topic of recent posts changed. |
posting_activity_decrease | Activity | The company is posting noticeably less on social. |
posting_activity_increase | Activity | The company is posting noticeably more on social. |
industry_added | Categorization | A new industry was added to the company’s list. |
industry_change | Categorization | The company’s primary industry classification changed. |
industry_removed | Categorization | An industry was dropped from the company’s list. |
specialties_count_decrease | Categorization | The total number of specialties shrank notably. |
specialties_count_increase | Categorization | The total number of specialties grew notably. |
specialty_added | Categorization | A new specialty was added. |
specialty_removed | Categorization | A specialty was dropped from the list. |
acquired_signal | Composite | A company was acquired. |
decline_signal | Composite | A company shows a clear distress pattern. |
executive_team_buildout | Composite | A company rapidly built out its leadership team. |
expansion_signal | Composite | A company is expanding into new markets while growing. |
ipo_signal | Composite | A company went from private to public. |
merger_signal | Composite | Two companies merged under a common new parent. |
momentum_score | Composite | A nightly composite score ranking a company’s upward trajectory. |
pivot_signal | Composite | A company fundamentally changed what it does. |
pre_ipo_signal | Composite | A company shows the early pattern of an IPO track. |
rebrand_signal | Composite | A company executed a coordinated rebrand. |
restructuring_signal | Composite | A company is undergoing major restructuring. |
risk_score | Composite | A nightly composite score ranking a company’s decline and risk. |
employee_decrease | Decline | A company’s employee count dropped by at least one. |
employee_size_band_downgrade | Decline | A company fell down a Professional Network employee size band. |
followers_decrease | Decline | The company’s follower count dropped. |
followers_growth_decelerating | Decline | Follower growth slowed sharply while still positive. |
hiring_freeze_signal | Decline | Open roles collapsed while headcount stayed flat or fell. |
jobs_dropped_to_zero | Decline | A company that had open roles now has none. |
jobs_open_decrease | Decline | The number of open job postings fell. |
layoff_signal | Decline | Employee count dropped sharply in a single interval. |
mass_layoff_signal | Decline | Employee count dropped severely in a single interval. |
funding_round_announced | Funding | A new funding round was announced. |
last_funding_round_change | Funding | The company’s funding stage advanced. |
total_funding_increase | Funding | The company’s total funding raised increased. |
employee_growth | Growth | A company’s employee count increased by at least one between snapshots. |
employee_size_band_upgrade | Growth | A company moved up a full Professional Network employee size band. |
engineering_hiring_surge | Growth | Engineering job postings doubled versus the prior crawl. |
first_job_in_city | Growth | A company posted its first role in a new city. |
first_job_in_country | Growth | A company posted its first role in a new country. |
first_job_in_function | Growth | A company posted a role in a function it hadn’t hired for in 12 months. |
followers_growth | Growth | The company’s Professional Network follower count increased. |
followers_spike | Growth | Follower growth ran sharply above the company’s recent baseline. |
headcount_recovery | Growth | Employee growth returned after a recent decline. |
jobs_open_increase | Growth | The number of open job postings increased. |
jobs_open_spike | Growth | Open job postings jumped sharply above the recent baseline. |
remote_jobs_share_change | Growth | The share of remote or hybrid postings shifted significantly. |
sales_hiring_surge | Growth | Sales job postings doubled versus the prior crawl. |
senior_hiring_increase | Growth | The share of senior-level postings rose meaningfully. |
dba_added | Identity | The name now references a former name (dba/fka). |
description_change_major | Identity | The company description was substantially rewritten. |
description_change_minor | Identity | The company description was lightly edited. |
description_keyword_added | Identity | A tracked strategic keyword appeared in the description. |
description_keyword_removed | Identity | A tracked strategic keyword disappeared from the description. |
name_change | Identity | The company name string changed. |
name_change_drastic | Identity | A name change with almost no overlap to the old name. |
tagline_added | Identity | A previously empty tagline is now populated. |
tagline_change | Identity | The company tagline text changed. |
tagline_removed | Identity | A populated tagline was cleared out. |
country_expansion | Location | A company opened its first location in a new country. |
hq_change | Location | The headquarters city or country changed. |
hq_country_change | Location | The headquarters country specifically changed. |
location_added | Location | A new office location appeared. |
location_removed | Location | An office location disappeared. |
multi_office_milestone | Location | The company’s office count crossed a milestone threshold. |
office_consolidation | Location | Multiple office closures in a short window. |
c_suite_departure | People | A C-level executive left the company. |
c_suite_hire | People | A new C-level executive joined the company. |
employee_departed | People | A person left this company for another. |
employee_joined | People | A person’s current company changed to this company. |
engineering_leader_hire | People | A new engineering leader joined the company. |
first_role_hire | People | A company made its first-ever hire for a role function. |
founder_departure | People | A founder left the company. |
internal_promotion | People | Someone was promoted to a more senior title at the same company. |
key_role_vacancy | People | A senior role stayed unfilled for 60 days. |
lateral_title_change | People | Someone changed title at the same company without a seniority change. |
leadership_churn_spike | People | Multiple senior leaders departed in a short window. |
notable_hire | People | A high-profile or highly experienced person joined. |
sales_leader_hire | People | A new sales leader joined the company. |
talent_inflow_from_company | People | A company hired multiple people from the same source company. |
talent_outflow_to_competitor | People | An employee left for a known competitor. |
vp_departure | People | A VP-level leader left the company. |
vp_hire | People | A new VP-level leader joined the company. |
affiliated_pages_count_change | Structure | The net count of affiliated pages shifted notably. |
company_type_change | Structure | The company’s entity type changed. |
founded_year_added | Structure | A previously missing founded year was populated. |
founded_year_change | Structure | The founded year value changed. |
nonprofit_to_for_profit | Structure | The company changed between nonprofit and for-profit status. |
parent_company_added | Structure | A parent company was set where there was none. |
parent_company_change | Structure | The parent company changed to a different one. |
parent_company_removed | Structure | A parent company relationship was cleared. |
showcase_page_added | Structure | A new Professional Network showcase page was linked. |
showcase_page_removed | Structure | A Professional Network showcase page was unlinked. |
subsidiary_added | Structure | A new subsidiary appeared in the company’s list. |
subsidiary_removed | Structure | A subsidiary was removed from the company’s list. |
subsidiary_status_change | Structure | The company became or stopped being a subsidiary. |
integer
required
Look-back window in days. Allowed values:
7, 30, 90, or 180.string
required
Signal strength. Allowed values:
low, moderate, high, or hyper.integer
Page number for paginated results.
Response
{
"status": 1,
"data": {
"confidence_level": 98,
"query": {
"signal_name": "employee_growth",
"time_frame": 30,
"bucket": "low",
"page": 1
},
"contacts": [
{
"full_name": "denis soriano",
"current_job": {
"title": "gerente especialista de producto en grupo emasal"
},
"company": {
"name": "grupo emasal",
"linkedin": "linkedin.com/company/grupoemasal",
"website": "http://www.emasal.com",
"industry": "packaging & containers",
"main_location": {
"country": "el salvador",
"state": "la libertad department",
"city": "antiguo cuscatl\u00e1n"
},
"social": {
"linkedin": "linkedin.com/company/grupoemasal",
"facebook": null,
"twitter": null
}
},
"location": {
"country": "united states",
"state": null,
"city": null
},
"social": {
"linkedin": "linkedin.com/in/02011986",
"facebook": null,
"twitter": null
},
"signal": {
"name": "employee_growth",
"time_frame": 30,
"bucket": "low"
}
}
],
"credit_count": 4759
}
}
Related APIs
Company Signals
Companies that just triggered a signal.
Job Changes
New jobs, promotions, and title moves.
Person Search
Search 1B+ profiles with combined filters.
Person Enrichment
Enrich a person with full contact data.
⌘I

