How it fits together
1
Create a watch
Create an engagement watch
with either a keyword query or a competitor’s LinkedIn company ID.
2
Point it at your personas
Pass
persona_ids from List personas to say who
counts as a lead. Sharpen a persona later and every watch using it sharpens too.3
Poll the feed
List engagement signals returns
who has engaged. Save
next_cursor and pass it back to pick up where you left off.The two kinds of watch
A topic query is passed to LinkedIn exactly as you write it, boolean operators included:
kind and its target are fixed once created. Repointing one would leave the people
it has already collected describing something it no longer watches, so create a second watch
instead.
Who counts as a lead
persona_ids decides. Each engager’s job title is matched against those personas using the
same rules the rest of TAMTAM uses, including their seniority bands and country constraints.
Two behaviours are worth knowing because they are deliberate:
- Engagers who match nothing are still collected, with an empty
matched_persona_ids. Widening a persona later therefore surfaces people you had already collected, rather than only affecting future sweeps. - Filtering happens when you read. Pass
persona_idto List engagement signals for matched people only. Reading unfiltered is how you tell nobody relevant engaged from my personas are too narrow — if every engager comes back unmatched, the personas are usually the problem.
persona_ids filters nobody and collects everyone who engaged.
A new watch starts from now, not from history
A watch collects people who engage after you create it, plus whatever is still inside LinkedIn’s most recent window at its first sweep. It cannot reach back further, because LinkedIn’s content search only serves recent posts — there is no way to ask it for last quarter. So a brand-new watch looks thin for a day or two and then fills in. That is the one place our provider’s limits are visible to you, and it is worth knowing before you conclude a query is wrong: judge a watch on its second week, not its first afternoon.Polling the feed
Identical to ICP signals: call with no cursor, process the events, savenext_cursor, pass it back next time.
next_cursor comes back on every non-empty page including the last, and has_more: false
means you are caught up rather than finished.
Delivery is at-least-once. Every event carries a stable id. Store the ids you have
processed and skip repeats; do not assume an event arrives exactly once.
Events are ordered by detected_at, oldest first. occurred_at is when the engagement
happened — LinkedIn does not timestamp a reaction, so it is when we saw it, and it is not a
field to sort or deduplicate on.
What an engager gives you
job_title and company_name come from LinkedIn as free text, alongside the reaction. They
are not resolved records: company_name carries no LinkedIn company ID, and neither field
is guaranteed present. country_code appears only when we actually observed it — it is never
filled in from the watch’s own countries filter, so its absence means unknown rather than
“outside your filter”.
To turn an engager into something richer, take profile_url to
Enrich people.
Controlling cost
You are billed 1 credit per person collected, on the same line as enrichment and research (MaxCompanyEnrichments). Managing watches and reading the feed are free, however often you
poll. See Credits.
Your ceiling per sweep is max_posts_per_sweep × max_engagers_per_post, and nothing else.
Both default conservatively. Raise them once a watch is producing what you expect rather than
up front, and prefer several narrow watches over one broad one: a precise query at a low cap
returns better leads than a vague query at a high one.
People who match none of your personas are collected too, and cost the same. That is what makes
widening a persona later surface the people already waiting — narrow the caps rather than the
collection if you want to spend less.
A sweep re-reads a fixed recent window rather than everything since your last poll, so it
always overlaps with the previous run. That overlap costs you nothing — repeated people are
recognised and not re-collected — and it is what makes a missed or failed sweep harmless.
If a watch goes quiet, ask the watch why.
List engagement watches reports
what each one’s last run did:
That distinction is the whole reason the field exists — an empty feed looks identical whether
nobody engaged, the account ran dry, or the watch is simply new.
To stop a watch without losing what it has collected, set
is_enabled: false. A disabled
watch is not swept and costs nothing.
Deleting it discards every
person it ever surfaced.