Skip to main content

Keyword Engagement Signal

The keyword_engagement signal monitors LinkedIn for posts matching your keywords, extracts the people who liked or commented on those posts, filters them against your Ideal Customer Profile (ICP), and scores each lead 1–3 based on fit and intent.
Unlike job_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 on creation.

Create a keyword engagement signal

Request

string
required
Must be "keyword_engagement".
array
required
Seed keywords to monitor on LinkedIn. Minimum 1. The system automatically expands these with semantically related variants on the first run.
object
Ideal Customer Profile filter. If omitted, every engaging lead passes through unfiltered. See the ICP Filter Reference section below for all available fields.
array
Extra email addresses to receive the lead digest. Your registered account email is always included.
string
URL to receive qualified leads via POST after each run. See Webhooks.
string
HMAC secret for signing webhook payloads.

Response

Response
string
Unique identifier for this keyword engagement signal. Save this — you need it for update and delete operations.
string
Always "keyword_engagement".
string
"active" after creation.
array
The seed keywords you provided.
object
The ICP configuration, if provided.

ICP filter reference

All fields are optional. If no ICP is provided, every lead passes with a score of 1.0.

Hard filters — reject leads that don’t match

array
Accepted location strings (country names, cities, or regions). A lead passes if any value appears in their LinkedIn location.
array
Job titles to exclude. Seniority-aware — "Intern" excludes "Marketing Intern" but not "VP Sales".
array
At least one keyword must appear in the lead’s profile text.
array
Target job titles. Matching is seniority- and function-aware. Leads with confidence below 0.6 are hard-rejected.
array
Restrict to specific seniority bands. Leads with unclassified seniority ("unknown") always pass.Valid values: "intern" "entry" "ic" "manager" "director" "vp" "c_level" "founder" "unknown"

Soft filters — affect score but don’t reject

array
Target company industries. Uses semantic matching — "Computer Software" matches ["SaaS", "Tech"]. Non-matches lower the ICP score rather than hard-rejecting.
array
Target LinkedIn company size bands. Non-matches lower the ICP score. Must match LinkedIn’s exact size band strings:"" · "2 - 10" · "11 - 50" · "51 - 200" · "201 - 500" · "501 - 1000" · "1001 - 5000" · "5001 - 10000" · "10001+"
array
Keywords that reduce or eliminate a lead’s score if found in their profile text.

Lead scoring

Each lead that passes the hard filters is scored on two dimensions: ICP Score (0.0–1.0) — average of all soft-filter scores (industries, company_size, negative_keywords). Leads with no ICP configured receive 1.0. Signal Score — based on:
  • Engagement type: comment = 1.0, like = 0.7
  • Recency: decays linearly over 14 days
  • Keyword specificity: longer, more specific keywords score higher
Lead Score (1–3)composite = 0.5 × icp_score + 0.5 × signal_score Leads are delivered via email digest and/or webhook after each daily run.