Create Signal
curl --request POST \
--url https://api.datamagnet.co/api/v1/signal/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"signal_type": "<string>",
"profile_urls": [
{}
],
"additional_emails": [
{}
],
"webhook_url": "<string>",
"webhook_secret": "<string>",
"keywords": [
{}
],
"icp": {},
"industries": [
{}
],
"date_posted": "<string>",
"company_urls": [
{}
],
"tracking_mode": "<string>"
}
'import requests
url = "https://api.datamagnet.co/api/v1/signal/create"
payload = {
"signal_type": "<string>",
"profile_urls": [{}],
"additional_emails": [{}],
"webhook_url": "<string>",
"webhook_secret": "<string>",
"keywords": [{}],
"icp": {},
"industries": [{}],
"date_posted": "<string>",
"company_urls": [{}],
"tracking_mode": "<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({
signal_type: '<string>',
profile_urls: [{}],
additional_emails: [{}],
webhook_url: '<string>',
webhook_secret: '<string>',
keywords: [{}],
icp: {},
industries: [{}],
date_posted: '<string>',
company_urls: [{}],
tracking_mode: '<string>'
})
};
fetch('https://api.datamagnet.co/api/v1/signal/create', 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.datamagnet.co/api/v1/signal/create",
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_type' => '<string>',
'profile_urls' => [
[
]
],
'additional_emails' => [
[
]
],
'webhook_url' => '<string>',
'webhook_secret' => '<string>',
'keywords' => [
[
]
],
'icp' => [
],
'industries' => [
[
]
],
'date_posted' => '<string>',
'company_urls' => [
[
]
],
'tracking_mode' => '<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.datamagnet.co/api/v1/signal/create"
payload := strings.NewReader("{\n \"signal_type\": \"<string>\",\n \"profile_urls\": [\n {}\n ],\n \"additional_emails\": [\n {}\n ],\n \"webhook_url\": \"<string>\",\n \"webhook_secret\": \"<string>\",\n \"keywords\": [\n {}\n ],\n \"icp\": {},\n \"industries\": [\n {}\n ],\n \"date_posted\": \"<string>\",\n \"company_urls\": [\n {}\n ],\n \"tracking_mode\": \"<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.datamagnet.co/api/v1/signal/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"signal_type\": \"<string>\",\n \"profile_urls\": [\n {}\n ],\n \"additional_emails\": [\n {}\n ],\n \"webhook_url\": \"<string>\",\n \"webhook_secret\": \"<string>\",\n \"keywords\": [\n {}\n ],\n \"icp\": {},\n \"industries\": [\n {}\n ],\n \"date_posted\": \"<string>\",\n \"company_urls\": [\n {}\n ],\n \"tracking_mode\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datamagnet.co/api/v1/signal/create")
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 \"signal_type\": \"<string>\",\n \"profile_urls\": [\n {}\n ],\n \"additional_emails\": [\n {}\n ],\n \"webhook_url\": \"<string>\",\n \"webhook_secret\": \"<string>\",\n \"keywords\": [\n {}\n ],\n \"icp\": {},\n \"industries\": [\n {}\n ],\n \"date_posted\": \"<string>\",\n \"company_urls\": [\n {}\n ],\n \"tracking_mode\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"message": {
"signal_type": "job_change",
"status": "active",
"profile_urls": [
"https://linkedin.com/in/satyanadella",
"https://linkedin.com/in/williamgates"
],
"email_recipients": [
"user@example.com",
"teammate@example.com"
],
"webhook_url": "https://yourapp.com/webhooks/signals"
}
}
Create Signal
Create a signal monitor that tracks LinkedIn profiles for job changes, new posts, or keyword, industry, company, and person engagement events.
POST
/
api
/
v1
/
signal
/
create
Create Signal
curl --request POST \
--url https://api.datamagnet.co/api/v1/signal/create \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"signal_type": "<string>",
"profile_urls": [
{}
],
"additional_emails": [
{}
],
"webhook_url": "<string>",
"webhook_secret": "<string>",
"keywords": [
{}
],
"icp": {},
"industries": [
{}
],
"date_posted": "<string>",
"company_urls": [
{}
],
"tracking_mode": "<string>"
}
'import requests
url = "https://api.datamagnet.co/api/v1/signal/create"
payload = {
"signal_type": "<string>",
"profile_urls": [{}],
"additional_emails": [{}],
"webhook_url": "<string>",
"webhook_secret": "<string>",
"keywords": [{}],
"icp": {},
"industries": [{}],
"date_posted": "<string>",
"company_urls": [{}],
"tracking_mode": "<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({
signal_type: '<string>',
profile_urls: [{}],
additional_emails: [{}],
webhook_url: '<string>',
webhook_secret: '<string>',
keywords: [{}],
icp: {},
industries: [{}],
date_posted: '<string>',
company_urls: [{}],
tracking_mode: '<string>'
})
};
fetch('https://api.datamagnet.co/api/v1/signal/create', 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.datamagnet.co/api/v1/signal/create",
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_type' => '<string>',
'profile_urls' => [
[
]
],
'additional_emails' => [
[
]
],
'webhook_url' => '<string>',
'webhook_secret' => '<string>',
'keywords' => [
[
]
],
'icp' => [
],
'industries' => [
[
]
],
'date_posted' => '<string>',
'company_urls' => [
[
]
],
'tracking_mode' => '<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.datamagnet.co/api/v1/signal/create"
payload := strings.NewReader("{\n \"signal_type\": \"<string>\",\n \"profile_urls\": [\n {}\n ],\n \"additional_emails\": [\n {}\n ],\n \"webhook_url\": \"<string>\",\n \"webhook_secret\": \"<string>\",\n \"keywords\": [\n {}\n ],\n \"icp\": {},\n \"industries\": [\n {}\n ],\n \"date_posted\": \"<string>\",\n \"company_urls\": [\n {}\n ],\n \"tracking_mode\": \"<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.datamagnet.co/api/v1/signal/create")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"signal_type\": \"<string>\",\n \"profile_urls\": [\n {}\n ],\n \"additional_emails\": [\n {}\n ],\n \"webhook_url\": \"<string>\",\n \"webhook_secret\": \"<string>\",\n \"keywords\": [\n {}\n ],\n \"icp\": {},\n \"industries\": [\n {}\n ],\n \"date_posted\": \"<string>\",\n \"company_urls\": [\n {}\n ],\n \"tracking_mode\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datamagnet.co/api/v1/signal/create")
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 \"signal_type\": \"<string>\",\n \"profile_urls\": [\n {}\n ],\n \"additional_emails\": [\n {}\n ],\n \"webhook_url\": \"<string>\",\n \"webhook_secret\": \"<string>\",\n \"keywords\": [\n {}\n ],\n \"icp\": {},\n \"industries\": [\n {}\n ],\n \"date_posted\": \"<string>\",\n \"company_urls\": [\n {}\n ],\n \"tracking_mode\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"message": {
"signal_type": "job_change",
"status": "active",
"profile_urls": [
"https://linkedin.com/in/satyanadella",
"https://linkedin.com/in/williamgates"
],
"email_recipients": [
"user@example.com",
"teammate@example.com"
],
"webhook_url": "https://yourapp.com/webhooks/signals"
}
}
Create Signal
Create a new signal monitor. The required fields depend on thesignal_type.
| Signal type | Monitors |
|---|---|
job_change | Job/company changes on tracked profiles |
new_post | New LinkedIn posts from tracked profiles |
keyword_engagement | People engaging with posts matching your keywords |
industry_engagement | People engaging with posts from target industries |
company_engagement | People engaging with posts from specific companies |
person_engagement | People engaging with posts from or about specific people |
job_change / new_post
Track specific LinkedIn profiles. If a monitor already exists for the givensignal_type, the new profile_urls are merged (set union) into the existing monitor — no duplicate tracking is created.
Required
string
required
"job_change" or "new_post"array
required
A non-empty list of LinkedIn profile URLs to track.
["https://linkedin.com/in/satyanadella", "https://linkedin.com/in/williamgates"]
Optional
array
Extra email addresses to notify when a signal fires. Your registered account email is always included automatically.
string
HMAC secret for signing webhook payloads. Adds an
X-Datamagnet-Signature header to each delivery.Response
{
"message": {
"signal_type": "job_change",
"status": "active",
"profile_urls": [
"https://linkedin.com/in/satyanadella",
"https://linkedin.com/in/williamgates"
],
"email_recipients": [
"user@example.com",
"teammate@example.com"
],
"webhook_url": "https://yourapp.com/webhooks/signals"
}
}
object
There is at most one active monitor per
signal_type per account. Calling /signal/create again with the same signal_type merges the new profile_urls into the existing monitor. If the existing monitor is paused, resume it first via /signal/update with action: resume.keyword_engagement
Monitor LinkedIn for posts matching your keywords and surface the people who liked or commented on them, filtered and scored against your Ideal Customer Profile (ICP). Unlikejob_change and new_post, you can create multiple keyword_engagement signals — each targeting a different keyword set or ICP. Each signal is identified by a signal_id returned in the response.
For the full ICP field reference and lead scoring details, see the Keyword Engagement guide.
Required
string
required
"keyword_engagement"array
required
Seed keywords to monitor. Minimum 1. The system automatically expands these with semantically related variants on the first run.
["sales intelligence", "CRM automation", "outbound prospecting"]
Optional
object
Ideal Customer Profile filter. If omitted, every engaging lead is returned unfiltered. See the ICP Filter Reference for all available fields.
{
"job_titles": ["VP Sales", "Head of Revenue"],
"seniority_levels": ["vp", "c_level", "director"],
"industries": ["SaaS", "B2B Software"],
"locations": ["United States", "United Kingdom"],
"company_size": ["51 - 200", "201 - 500"],
"exclude_titles": ["Intern", "Student"],
"mandatory_keywords": ["sales"],
"negative_keywords": ["recruiting", "hiring"]
}
array
Extra email addresses to receive the lead digest.
string
URL to receive qualified leads via POST after each run.
string
HMAC secret for signing webhook payloads.
Response
{
"message": {
"signal_id": "9f4a2c81-3b7e-4d12-a5f1-c8e0d9b2f3a4",
"signal_type": "keyword_engagement",
"status": "active",
"keywords": ["sales intelligence", "CRM automation"],
"icp": {
"job_titles": ["VP Sales", "Head of Revenue"],
"seniority_levels": ["vp", "c_level", "director"],
"industries": ["SaaS", "B2B Software"]
},
"email_recipients": ["user@example.com"],
"webhook_url": "https://yourapp.com/webhooks/signals"
}
}
object
Show Fields
Show Fields
string
Unique identifier for this signal. Save this — required for update and delete operations.
string
Always
"keyword_engagement".string
Always
active after creation.array
The seed keywords provided.
object
The ICP configuration, if provided.
array
Email addresses that will receive lead digests.
string
Only present if configured.
industry_engagement
Monitor LinkedIn for posts originating from companies in your target industries and surface the people who engage with them, filtered and scored against your Ideal Customer Profile. You can create multipleindustry_engagement signals — each identified by a signal_id returned in the response. See the Industry Engagement guide for the full ICP reference and lead scoring details.
Required
string
required
"industry_engagement"array
required
A list of LinkedIn industry names to monitor. Each name is resolved to its LinkedIn numeric ID automatically.Unrecognised names are returned in
["software development", "financial services", "information technology and internet"]
unresolved_industries and skipped.Optional
object
Ideal Customer Profile filter. See the ICP Filter Reference for all available fields.
string
Only surface leads who engaged with posts published within this window. Valid values:
"past-24h" · "past-week" · "past-month"array
Extra email addresses to receive the lead digest.
string
URL to receive qualified leads via POST after each run.
string
HMAC secret for signing webhook payloads.
Response
{
"message": {
"signal_id": "3a1b9c42-7d2e-4f88-b6c1-e9f0a2d3c5b7",
"signal_type": "industry_engagement",
"status": "active",
"industry_groups": [
{ "ids": [4], "label": "software development" },
{ "ids": [43], "label": "financial services" }
],
"unresolved_industries": ["saas tools"],
"icp": {
"seniority_levels": ["vp", "c_level", "director"]
},
"email_recipients": ["user@example.com"]
}
}
object
Show Fields
Show Fields
string
Unique identifier for this signal. Save this — required for update and delete operations.
string
Always
"industry_engagement".string
Always
active after creation.array
The industry groups provided.
object
The ICP configuration, if provided.
array
Email addresses that will receive lead digests.
string
Only present if configured.
company_engagement
Monitor LinkedIn for posts from specific companies and surface the people who engage with them, filtered and scored against your Ideal Customer Profile. You can create multiplecompany_engagement signals — each identified by a signal_id returned in the response. See the Company Engagement guide for the full ICP reference and lead scoring details.
Required
string
required
"company_engagement"array
required
A list of LinkedIn company profile URLs to monitor. The company ID is resolved automatically from each URL.Unresolvable URLs are returned in
[
"https://www.linkedin.com/company/salesforce/",
"https://www.linkedin.com/company/hubspot/"
]
unresolved_company_urls and skipped.Optional
object
Ideal Customer Profile filter. See the ICP Filter Reference for all available fields.
string
Only surface leads who engaged with posts published within this window. Valid values:
"past-24h" · "past-week" · "past-month"array
Extra email addresses to receive the lead digest.
string
URL to receive qualified leads via POST after each run.
string
HMAC secret for signing webhook payloads.
Response
{
"message": {
"signal_id": "7c3e1f85-2a9d-4b6c-8e0f-d1a2b3c4d5e6",
"signal_type": "company_engagement",
"status": "active",
"company_groups": [
{ "ids": [1441], "label": "Salesforce" },
{ "ids": [2382228], "label": "HubSpot" }
],
"unresolved_company_urls": ["https://www.linkedin.com/company/nonexistent/"],
"icp": {
"seniority_levels": ["vp", "c_level", "director"]
},
"email_recipients": ["user@example.com"]
}
}
object
Show Fields
Show Fields
string
Unique identifier for this signal. Save this — required for update and delete operations.
string
Always
"company_engagement".string
Always
active after creation.array
The company groups provided.
object
The ICP configuration, if provided.
array
Email addresses that will receive lead digests.
string
Only present if configured.
person_engagement
Monitor LinkedIn for posts and/or mentions from specific people and surface the users who engage with that content, filtered and scored against your Ideal Customer Profile. You can create multipleperson_engagement signals — each identified by a signal_id returned in the response. See the Person Engagement guide for the full ICP reference, tracking modes, and lead scoring details.
Required
string
required
"person_engagement"array
required
A list of LinkedIn profile URLs for the people to monitor. The Unresolvable URLs are returned in
member_id is resolved automatically from each profile.[
"https://www.linkedin.com/in/satyanadella/",
"https://www.linkedin.com/in/williamhgates/"
]
unresolved_profile_urls and skipped.Optional
string
What content to monitor.
"posts" — posts by the person · "mentions" — posts mentioning them · "both" (default) — both.object
Ideal Customer Profile filter. See the ICP Filter Reference for all available fields.
string
Only surface leads who engaged with content published within this window. Valid values:
"past-24h" · "past-week" · "past-month"array
Extra email addresses to receive the lead digest.
string
URL to receive qualified leads via POST after each run.
string
HMAC secret for signing webhook payloads.
Response
{
"message": {
"signal_id": "b2d4f6a8-1c3e-5g7h-9i0j-k1l2m3n4o5p6",
"signal_type": "person_engagement",
"status": "active",
"person_groups": [
{ "member_id": "ACoAABcd1234", "label": "Satya Nadella" },
{ "member_id": "ACoAAEfgh5678", "label": "Bill Gates" }
],
"unresolved_profile_urls": ["https://www.linkedin.com/in/private-profile/"],
"tracking_mode": "both",
"icp": {
"seniority_levels": ["vp", "c_level", "director"]
},
"email_recipients": ["user@example.com"]
}
}
object
Show Fields
Show Fields
string
Unique identifier for this signal. Save this — required for update and delete operations.
string
Always
"person_engagement".string
Always
active after creation.array
The people being monitored.
string
The active tracking mode:
"posts", "mentions", or "both".object
The ICP configuration, if provided.
array
Email addresses that will receive lead digests.
string
Only present if configured.
Was this page helpful?