curl --request PATCH \
--url https://api.tamtam.ai/api/v2/linkedin-content-signals/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"accept_all_posts": true,
"author_profile_urls": [
"<string>"
],
"company_linkedin_ids": [
"<string>"
],
"contacts_list_ids": [
"<string>"
],
"detects_event_attendance": true,
"is_enabled": true,
"keyword_queries": [
"<string>"
],
"max_contacts_per_sweep": 250,
"max_engagers_per_post": 250,
"max_posts_per_contact": 25,
"max_posts_per_sweep": 500,
"mentioned_company_linkedin_ids": [
"<string>"
],
"mentioned_profile_urls": [
"<string>"
],
"min_engagements": 1,
"name": "<string>",
"post_filter": "<string>",
"post_sources": [],
"search_window": "<string>",
"use_cases": [
{
"name": "Lean",
"prompt": "The post mentions lean, kaizen or continuous improvement on the shop floor."
}
]
}
'import requests
url = "https://api.tamtam.ai/api/v2/linkedin-content-signals/{id}"
payload = {
"accept_all_posts": True,
"author_profile_urls": ["<string>"],
"company_linkedin_ids": ["<string>"],
"contacts_list_ids": ["<string>"],
"detects_event_attendance": True,
"is_enabled": True,
"keyword_queries": ["<string>"],
"max_contacts_per_sweep": 250,
"max_engagers_per_post": 250,
"max_posts_per_contact": 25,
"max_posts_per_sweep": 500,
"mentioned_company_linkedin_ids": ["<string>"],
"mentioned_profile_urls": ["<string>"],
"min_engagements": 1,
"name": "<string>",
"post_filter": "<string>",
"post_sources": [],
"search_window": "<string>",
"use_cases": [
{
"name": "Lean",
"prompt": "The post mentions lean, kaizen or continuous improvement on the shop floor."
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accept_all_posts: true,
author_profile_urls: ['<string>'],
company_linkedin_ids: ['<string>'],
contacts_list_ids: ['<string>'],
detects_event_attendance: true,
is_enabled: true,
keyword_queries: ['<string>'],
max_contacts_per_sweep: 250,
max_engagers_per_post: 250,
max_posts_per_contact: 25,
max_posts_per_sweep: 500,
mentioned_company_linkedin_ids: ['<string>'],
mentioned_profile_urls: ['<string>'],
min_engagements: 1,
name: '<string>',
post_filter: '<string>',
post_sources: [],
search_window: '<string>',
use_cases: [
{
name: 'Lean',
prompt: 'The post mentions lean, kaizen or continuous improvement on the shop floor.'
}
]
})
};
fetch('https://api.tamtam.ai/api/v2/linkedin-content-signals/{id}', 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.tamtam.ai/api/v2/linkedin-content-signals/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'accept_all_posts' => true,
'author_profile_urls' => [
'<string>'
],
'company_linkedin_ids' => [
'<string>'
],
'contacts_list_ids' => [
'<string>'
],
'detects_event_attendance' => true,
'is_enabled' => true,
'keyword_queries' => [
'<string>'
],
'max_contacts_per_sweep' => 250,
'max_engagers_per_post' => 250,
'max_posts_per_contact' => 25,
'max_posts_per_sweep' => 500,
'mentioned_company_linkedin_ids' => [
'<string>'
],
'mentioned_profile_urls' => [
'<string>'
],
'min_engagements' => 1,
'name' => '<string>',
'post_filter' => '<string>',
'post_sources' => [
],
'search_window' => '<string>',
'use_cases' => [
[
'name' => 'Lean',
'prompt' => 'The post mentions lean, kaizen or continuous improvement on the shop floor.'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.tamtam.ai/api/v2/linkedin-content-signals/{id}"
payload := strings.NewReader("{\n \"accept_all_posts\": true,\n \"author_profile_urls\": [\n \"<string>\"\n ],\n \"company_linkedin_ids\": [\n \"<string>\"\n ],\n \"contacts_list_ids\": [\n \"<string>\"\n ],\n \"detects_event_attendance\": true,\n \"is_enabled\": true,\n \"keyword_queries\": [\n \"<string>\"\n ],\n \"max_contacts_per_sweep\": 250,\n \"max_engagers_per_post\": 250,\n \"max_posts_per_contact\": 25,\n \"max_posts_per_sweep\": 500,\n \"mentioned_company_linkedin_ids\": [\n \"<string>\"\n ],\n \"mentioned_profile_urls\": [\n \"<string>\"\n ],\n \"min_engagements\": 1,\n \"name\": \"<string>\",\n \"post_filter\": \"<string>\",\n \"post_sources\": [],\n \"search_window\": \"<string>\",\n \"use_cases\": [\n {\n \"name\": \"Lean\",\n \"prompt\": \"The post mentions lean, kaizen or continuous improvement on the shop floor.\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<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.patch("https://api.tamtam.ai/api/v2/linkedin-content-signals/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"accept_all_posts\": true,\n \"author_profile_urls\": [\n \"<string>\"\n ],\n \"company_linkedin_ids\": [\n \"<string>\"\n ],\n \"contacts_list_ids\": [\n \"<string>\"\n ],\n \"detects_event_attendance\": true,\n \"is_enabled\": true,\n \"keyword_queries\": [\n \"<string>\"\n ],\n \"max_contacts_per_sweep\": 250,\n \"max_engagers_per_post\": 250,\n \"max_posts_per_contact\": 25,\n \"max_posts_per_sweep\": 500,\n \"mentioned_company_linkedin_ids\": [\n \"<string>\"\n ],\n \"mentioned_profile_urls\": [\n \"<string>\"\n ],\n \"min_engagements\": 1,\n \"name\": \"<string>\",\n \"post_filter\": \"<string>\",\n \"post_sources\": [],\n \"search_window\": \"<string>\",\n \"use_cases\": [\n {\n \"name\": \"Lean\",\n \"prompt\": \"The post mentions lean, kaizen or continuous improvement on the shop floor.\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tamtam.ai/api/v2/linkedin-content-signals/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accept_all_posts\": true,\n \"author_profile_urls\": [\n \"<string>\"\n ],\n \"company_linkedin_ids\": [\n \"<string>\"\n ],\n \"contacts_list_ids\": [\n \"<string>\"\n ],\n \"detects_event_attendance\": true,\n \"is_enabled\": true,\n \"keyword_queries\": [\n \"<string>\"\n ],\n \"max_contacts_per_sweep\": 250,\n \"max_engagers_per_post\": 250,\n \"max_posts_per_contact\": 25,\n \"max_posts_per_sweep\": 500,\n \"mentioned_company_linkedin_ids\": [\n \"<string>\"\n ],\n \"mentioned_profile_urls\": [\n \"<string>\"\n ],\n \"min_engagements\": 1,\n \"name\": \"<string>\",\n \"post_filter\": \"<string>\",\n \"post_sources\": [],\n \"search_window\": \"<string>\",\n \"use_cases\": [\n {\n \"name\": \"Lean\",\n \"prompt\": \"The post mentions lean, kaizen or continuous improvement on the shop floor.\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"accept_all_posts": true,
"author_profile_urls": [
"<string>"
],
"collection": "engagers",
"company_linkedin_ids": [
"<string>"
],
"contacts_list_ids": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"detects_event_attendance": true,
"id": "<string>",
"is_enabled": true,
"keyword_queries": [
"<string>"
],
"max_contacts_per_sweep": 123,
"max_engagers_per_post": 123,
"max_posts_per_contact": 123,
"max_posts_per_sweep": 123,
"mentioned_company_linkedin_ids": [
"<string>"
],
"mentioned_profile_urls": [
"<string>"
],
"min_engagements": 123,
"name": "Shop-floor visibility pains",
"post_filter": "<string>",
"post_sources": [
"<string>"
],
"search_sort": "date_posted",
"search_window": "<string>",
"subject": "engagers",
"updated_at": "2023-11-07T05:31:56Z",
"use_cases": [
{
"name": "Lean",
"prompt": "The post mentions lean, kaizen or continuous improvement on the shop floor."
}
],
"last_sweep_engagers_collected": 123,
"last_sweep_outcome": "<string>",
"last_sweep_posts_analyzed": 123,
"last_swept_at": "2023-11-07T05:31:56Z"
}{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}Update a LinkedIn content signal
Change the fields you send and keep the rest: {"is_enabled": false} pauses a signal without touching its definition. Lists (use_cases, company_linkedin_ids) are replaced whole when sent.
Editing any use-case re-judges every post of the past week on the next sweep, and each re-judged post is billed again: it is a new analysis. Set is_enabled: false to stop sweeping and stop spending without losing the signal or anything it has collected.
curl --request PATCH \
--url https://api.tamtam.ai/api/v2/linkedin-content-signals/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"accept_all_posts": true,
"author_profile_urls": [
"<string>"
],
"company_linkedin_ids": [
"<string>"
],
"contacts_list_ids": [
"<string>"
],
"detects_event_attendance": true,
"is_enabled": true,
"keyword_queries": [
"<string>"
],
"max_contacts_per_sweep": 250,
"max_engagers_per_post": 250,
"max_posts_per_contact": 25,
"max_posts_per_sweep": 500,
"mentioned_company_linkedin_ids": [
"<string>"
],
"mentioned_profile_urls": [
"<string>"
],
"min_engagements": 1,
"name": "<string>",
"post_filter": "<string>",
"post_sources": [],
"search_window": "<string>",
"use_cases": [
{
"name": "Lean",
"prompt": "The post mentions lean, kaizen or continuous improvement on the shop floor."
}
]
}
'import requests
url = "https://api.tamtam.ai/api/v2/linkedin-content-signals/{id}"
payload = {
"accept_all_posts": True,
"author_profile_urls": ["<string>"],
"company_linkedin_ids": ["<string>"],
"contacts_list_ids": ["<string>"],
"detects_event_attendance": True,
"is_enabled": True,
"keyword_queries": ["<string>"],
"max_contacts_per_sweep": 250,
"max_engagers_per_post": 250,
"max_posts_per_contact": 25,
"max_posts_per_sweep": 500,
"mentioned_company_linkedin_ids": ["<string>"],
"mentioned_profile_urls": ["<string>"],
"min_engagements": 1,
"name": "<string>",
"post_filter": "<string>",
"post_sources": [],
"search_window": "<string>",
"use_cases": [
{
"name": "Lean",
"prompt": "The post mentions lean, kaizen or continuous improvement on the shop floor."
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
accept_all_posts: true,
author_profile_urls: ['<string>'],
company_linkedin_ids: ['<string>'],
contacts_list_ids: ['<string>'],
detects_event_attendance: true,
is_enabled: true,
keyword_queries: ['<string>'],
max_contacts_per_sweep: 250,
max_engagers_per_post: 250,
max_posts_per_contact: 25,
max_posts_per_sweep: 500,
mentioned_company_linkedin_ids: ['<string>'],
mentioned_profile_urls: ['<string>'],
min_engagements: 1,
name: '<string>',
post_filter: '<string>',
post_sources: [],
search_window: '<string>',
use_cases: [
{
name: 'Lean',
prompt: 'The post mentions lean, kaizen or continuous improvement on the shop floor.'
}
]
})
};
fetch('https://api.tamtam.ai/api/v2/linkedin-content-signals/{id}', 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.tamtam.ai/api/v2/linkedin-content-signals/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'accept_all_posts' => true,
'author_profile_urls' => [
'<string>'
],
'company_linkedin_ids' => [
'<string>'
],
'contacts_list_ids' => [
'<string>'
],
'detects_event_attendance' => true,
'is_enabled' => true,
'keyword_queries' => [
'<string>'
],
'max_contacts_per_sweep' => 250,
'max_engagers_per_post' => 250,
'max_posts_per_contact' => 25,
'max_posts_per_sweep' => 500,
'mentioned_company_linkedin_ids' => [
'<string>'
],
'mentioned_profile_urls' => [
'<string>'
],
'min_engagements' => 1,
'name' => '<string>',
'post_filter' => '<string>',
'post_sources' => [
],
'search_window' => '<string>',
'use_cases' => [
[
'name' => 'Lean',
'prompt' => 'The post mentions lean, kaizen or continuous improvement on the shop floor.'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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.tamtam.ai/api/v2/linkedin-content-signals/{id}"
payload := strings.NewReader("{\n \"accept_all_posts\": true,\n \"author_profile_urls\": [\n \"<string>\"\n ],\n \"company_linkedin_ids\": [\n \"<string>\"\n ],\n \"contacts_list_ids\": [\n \"<string>\"\n ],\n \"detects_event_attendance\": true,\n \"is_enabled\": true,\n \"keyword_queries\": [\n \"<string>\"\n ],\n \"max_contacts_per_sweep\": 250,\n \"max_engagers_per_post\": 250,\n \"max_posts_per_contact\": 25,\n \"max_posts_per_sweep\": 500,\n \"mentioned_company_linkedin_ids\": [\n \"<string>\"\n ],\n \"mentioned_profile_urls\": [\n \"<string>\"\n ],\n \"min_engagements\": 1,\n \"name\": \"<string>\",\n \"post_filter\": \"<string>\",\n \"post_sources\": [],\n \"search_window\": \"<string>\",\n \"use_cases\": [\n {\n \"name\": \"Lean\",\n \"prompt\": \"The post mentions lean, kaizen or continuous improvement on the shop floor.\"\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<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.patch("https://api.tamtam.ai/api/v2/linkedin-content-signals/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"accept_all_posts\": true,\n \"author_profile_urls\": [\n \"<string>\"\n ],\n \"company_linkedin_ids\": [\n \"<string>\"\n ],\n \"contacts_list_ids\": [\n \"<string>\"\n ],\n \"detects_event_attendance\": true,\n \"is_enabled\": true,\n \"keyword_queries\": [\n \"<string>\"\n ],\n \"max_contacts_per_sweep\": 250,\n \"max_engagers_per_post\": 250,\n \"max_posts_per_contact\": 25,\n \"max_posts_per_sweep\": 500,\n \"mentioned_company_linkedin_ids\": [\n \"<string>\"\n ],\n \"mentioned_profile_urls\": [\n \"<string>\"\n ],\n \"min_engagements\": 1,\n \"name\": \"<string>\",\n \"post_filter\": \"<string>\",\n \"post_sources\": [],\n \"search_window\": \"<string>\",\n \"use_cases\": [\n {\n \"name\": \"Lean\",\n \"prompt\": \"The post mentions lean, kaizen or continuous improvement on the shop floor.\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tamtam.ai/api/v2/linkedin-content-signals/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"accept_all_posts\": true,\n \"author_profile_urls\": [\n \"<string>\"\n ],\n \"company_linkedin_ids\": [\n \"<string>\"\n ],\n \"contacts_list_ids\": [\n \"<string>\"\n ],\n \"detects_event_attendance\": true,\n \"is_enabled\": true,\n \"keyword_queries\": [\n \"<string>\"\n ],\n \"max_contacts_per_sweep\": 250,\n \"max_engagers_per_post\": 250,\n \"max_posts_per_contact\": 25,\n \"max_posts_per_sweep\": 500,\n \"mentioned_company_linkedin_ids\": [\n \"<string>\"\n ],\n \"mentioned_profile_urls\": [\n \"<string>\"\n ],\n \"min_engagements\": 1,\n \"name\": \"<string>\",\n \"post_filter\": \"<string>\",\n \"post_sources\": [],\n \"search_window\": \"<string>\",\n \"use_cases\": [\n {\n \"name\": \"Lean\",\n \"prompt\": \"The post mentions lean, kaizen or continuous improvement on the shop floor.\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"accept_all_posts": true,
"author_profile_urls": [
"<string>"
],
"collection": "engagers",
"company_linkedin_ids": [
"<string>"
],
"contacts_list_ids": [
"<string>"
],
"created_at": "2023-11-07T05:31:56Z",
"detects_event_attendance": true,
"id": "<string>",
"is_enabled": true,
"keyword_queries": [
"<string>"
],
"max_contacts_per_sweep": 123,
"max_engagers_per_post": 123,
"max_posts_per_contact": 123,
"max_posts_per_sweep": 123,
"mentioned_company_linkedin_ids": [
"<string>"
],
"mentioned_profile_urls": [
"<string>"
],
"min_engagements": 123,
"name": "Shop-floor visibility pains",
"post_filter": "<string>",
"post_sources": [
"<string>"
],
"search_sort": "date_posted",
"search_window": "<string>",
"subject": "engagers",
"updated_at": "2023-11-07T05:31:56Z",
"use_cases": [
{
"name": "Lean",
"prompt": "The post mentions lean, kaizen or continuous improvement on the shop floor."
}
],
"last_sweep_engagers_collected": 123,
"last_sweep_outcome": "<string>",
"last_sweep_posts_analyzed": 123,
"last_swept_at": "2023-11-07T05:31:56Z"
}{
"detail": "Property foo is required but is missing.",
"errors": [
{
"location": "<string>",
"message": "<string>",
"value": "<unknown>"
}
],
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "https://example.com/errors/example"
}Authorizations
Account API key passed in the Authorization header
Path Parameters
Query Parameters
Target account UUID. Required for staff callers; ignored for customer API keys.
Body
Switch the AI post judge off (true) or on (false). Either way the current window's posts are re-marked on the next sweep.
New list of LinkedIn profile URLs, replacing the current one. Send an empty list to remove the people facet (the signal must then have keyword queries or companies).
Engagers only: switch between collecting the people who engaged with a relevant post (engagers) and the person who wrote it (post_authors). Relevant posts not yet extracted are collected the new way on the next sweep. Rejected for the authors subject.
engagers, post_authors New list of numeric LinkedIn company IDs, replacing the current one. Send an empty list to remove the company facet (the signal must then have keyword queries or people).
Contacts lists whose members an authors signal watches. Resolved to contacts at sweep time, so a contact added to the list later is picked up without editing the signal. Authors only; at least one of contacts_list_ids or author_profile_urls is required in that subject.
20Turn the built-in event rule on or off. Turning it on replaces the current relevance rule; the current window's posts are re-judged on the next sweep. Cannot be combined with accept_all_posts or post_filter.
false pauses the signal: no sweep, no spend, history kept. true resumes it.
New list of short LinkedIn content queries, replacing the current one. Send an empty list to remove the keyword facet (the signal must then have companies or people).
10Authors cost dial: how many contacts have their posts fetched per sweep, least-recently-checked first, so a large list drains over several sweeps. One LinkedinContentSignalAuthor credit each. Defaults to 50.
1 <= x <= 500How many likers and how many commenters are read per relevant post.
1 <= x <= 500Authors cost dial: how many of each watched contact's recent posts are fetched and judged. Defaults to 10.
1 <= x <= 50How many new posts one pass of a sweep reads and, at most, judges (up to 10 passes per sweep).
1 <= x <= 1000New list of numeric LinkedIn company IDs the posts must mention, replacing the current one. Send an empty list to remove the mentioned-companies facet.
New list of LinkedIn profile URLs of people the posts must mention, replacing the current one. Send an empty list to remove the mentioned-people facet.
Only consider posts with reactions + comments >= this.
x >= 0New label. Unique per account.
1New keyword relevance rule, replacing the current one (same syntax as on create). Send an empty string to go back to the AI judge on the use-cases. The current window's posts are re-judged on the next sweep. Cannot be combined with accept_all_posts.
500Authors only: which of a watched person's posts count. authored (the default) is what they wrote themselves; mentioned is posts by anyone that tag them, answering "is anyone talking about this person?". Both together reads both corpora. mentioned costs more than authored -- one search per contact per sweep, plus a one-off profile lookup for each contact whose LinkedIn member ID is not already known -- and it can answer nothing for a contact with no LinkedIn profile, which the per-contact counters report separately. Billed as LinkedinContentSignalMention, one per contact searched.
2authored, mentioned Engagers only: switch the search order between date_posted (Latest) and relevance (Top match). Applies from the next sweep.
date_posted, relevance Engagers only: past_24h, past_week or past_month, or an empty string to follow sweep_frequency again. Rejected when shorter than the time between two sweeps. Applies from the next sweep.
Switch what the signal watches. Changing subject re-validates the whole definition: the facets the new subject does not use must be empty.
engagers, authors New ordered list of use-cases, replacing the current one. Any change re-judges every post of the past week on the next sweep, and each re-judged post is billed again.
1 - 10 elementsShow child attributes
Show child attributes
Response
OK
When true, every post the search returns is taken as relevant without the AI judge (no LinkedinPostAnalyzed credit); the people who engaged are still filtered on their headline and billed. Use-cases are optional in that mode.
LinkedIn profile URLs of people whose posts are searched, normalised to https://www.linkedin.com/in/. Authors (companies and people) are a union, combined with keywords into one search.
Engagers only: which person a relevant post yields. engagers (the default): the people who liked or commented on it. post_authors: the person who wrote it -- the one shopping in public when the post itself is the buying signal. Posts written by a company page have no person and are skipped. Each collected author is one event with interaction_type Author, filtered and billed like an engager.
engagers, post_authors Numeric LinkedIn company IDs whose posts are searched. Combined with each keyword query into one search.
Contacts lists whose members an authors signal watches. Resolved to contacts at sweep time, so a contact added to the list later is picked up without editing the signal. Authors only; at least one of contacts_list_ids or author_profile_urls is required in that subject.
Whether the built-in event rule is this signal's relevance rule: a post is relevant when its author said they will be at a named, upcoming event. The event found is reported on the post.
A disabled signal is not swept and costs nothing, but keeps its history.
The short LinkedIn content queries, exactly as you wrote them. Each one runs as its own search. Empty for a search that only follows companies or people.
Authors cost dial: how many contacts have their posts fetched per sweep, least-recently-checked first, so a large list drains over several sweeps. One LinkedinContentSignalAuthor credit each. Defaults to 50.
Cost dial: how many likers and how many commenters are read per relevant post.
Authors cost dial: how many of each watched contact's recent posts are fetched and judged. Defaults to 10.
Cost dial: how many new posts one pass of a sweep reads and, at most, judges. A sweep runs up to 10 passes, each reading past the posts it already knows, and stops once it has collected about 50 people or finds nothing new. Re-found posts keep their cached verdict and cost nothing.
Numeric LinkedIn company IDs the posts must mention (tag), whoever wrote them. Combined with the keyword queries and authors into the same searches.
LinkedIn profile URLs of people the posts must mention (tag), whoever wrote them, normalised to https://www.linkedin.com/in/.
Only posts with reactions + comments >= this are considered.
Your label for this signal. Unique per account.
"Shop-floor visibility pains"
The seller's own relevance rule, when the AI judge is not used: a boolean keyword expression over the post's text (words, quoted phrases, AND, OR, NOT, parentheses). Empty means the use-cases and the AI judge decide. When set, every post the search returns is judged by the rule alone, at no LinkedinPostAnalyzed credit, and use-cases are optional.
Authors only: which of a watched person's posts count. authored (the default) is what they wrote themselves; mentioned is posts by anyone that tag them, answering "is anyone talking about this person?". Both together reads both corpora. mentioned costs more than authored -- one search per contact per sweep, plus a one-off profile lookup for each contact whose LinkedIn member ID is not already known -- and it can answer nothing for a contact with no LinkedIn profile, which the per-contact counters report separately. Billed as LinkedinContentSignalMention, one per contact searched.
The order the searches ask LinkedIn for. date_posted (LinkedIn's Latest): the newest posts of the window first. relevance (Top match): the posts LinkedIn finds most relevant to the query first, which suits a broad query. The sweep's date window applies to both.
date_posted, relevance How far back the searches look, and so the oldest a post may be to count: past_24h, past_week or past_month. Empty when the window follows sweep_frequency (daily reads the past week, weekly and once the past month).
What the signal watches. engagers (default): search LinkedIn for posts and collect the people who liked or commented on the relevant ones. authors: take people you already know -- the contacts lists below -- and judge their own posts, answering "has this person posted about this?" per contact. The use-cases mean the same thing in both.
engagers, authors Ordered list of named use-cases, each with its own AI prompt. A post is relevant when it falls into at least one; the names are stamped on the engagers it yields.
Show child attributes
Show child attributes
How many people the last run collected from relevant posts. Each one cost one LinkedinContentSignalEngager credit.
What the last run did. One of:
- completed: it ran; last_sweep_posts_analyzed and last_sweep_engagers_collected say what it did. Zero is a real answer.
- out_of_credits: skipped before spending, because the account could not pay for a single post analysis or a single engager. This is the one to check when a feed goes quiet — topping up resumes it on the next sweep.
- failed: it ran and something went wrong, usually the provider. Self-correcting, since the next sweep re-reads an overlapping window.
How many posts the last run had the AI judge. Each one cost one LinkedinPostAnalyzed credit; cached re-finds are not counted.
When this signal last ran. Absent until its first sweep.