Skip to main content

Lead events

Webhooks fired by the Leads product. See Webhooks overview for setup, envelope format, signature verification, retries, and security.

Each webhook subscribes to one or more event types. Subscriptions are independent: a webhook that only subscribes to lead2.created will never receive activity.detected, and vice versa.

EventWhen it firesVolume
lead2.createdThe first time a person is seen as a lead for your brand. Fires once per person, ever.Low
activity.detectedEvery time a tracked person comments, reacts, or reposts on your tracked content. Fires for the first engagement and every subsequent one. Payload includes an isFirstActivity flag so you can distinguish first-touch.High

The engagements array​

Both events ship an engagements array using the same shape as the public REST API (GET /signal-leads/:id). Each entry has:

FieldTypeDescription
idstringEngagement id
typestring | nullcomment / reaction / repost
reactionTypestring | nulle.g. LIKE, EMPATHY (only when type is reaction)
commentTextstring | nullSanitized comment text (only when type is comment)
postUrlstring | nullThe post that was engaged with
postPostedAtstring | nullWhen the post was originally published (ISO 8601)
postAuthorstring | nullDisplay name of the post author
trackedAtstringWhen Limelight detected the engagement (ISO 8601)

activity.detected always sends a single-item engagements array — the engagement that triggered the event. lead2.created includes up to 20 most-recent engagements known for the lead at delivery time.

lead2.created​

{
"id": "wh_...",
"event": "lead2.created",
"version": "1",
"createdAt": "2026-04-16T10:22:00.000Z",
"brandId": "brand_abc",
"data": {
"lead2": {
"id": 1234,
"extId": "li-foo",
"name": "Alice Example",
"headline": "CTO at Example",
"username": "alice",
"title1": "CTO",
"liProfileUrl": "https://linkedin.com/in/alice",
"profileImgUrl": "https://cdn/img.jpg",
"leadCompany": {
"id": 98,
"name": "ACME Corp",
"domain": "acme.com"
}
},
"engagements": [
{
"id": "9876",
"type": "comment",
"reactionType": null,
"commentText": "Love this!",
"postUrl": "https://www.linkedin.com/feed/update/1",
"postPostedAt": "2026-04-15T08:00:00.000Z",
"postAuthor": "Pat Author",
"trackedAt": "2026-04-16T10:21:50.000Z"
}
]
}
}

activity.detected​

{
"id": "wh_...",
"event": "activity.detected",
"version": "1",
"createdAt": "2026-04-16T10:22:00.000Z",
"brandId": "brand_abc",
"data": {
"isFirstActivity": true,
"lead2": { /* same shape as lead2.created */ },
"engagements": [
{
"id": "9876",
"type": "comment",
"reactionType": null,
"commentText": "Love this!",
"postUrl": "https://www.linkedin.com/feed/update/1",
"postPostedAt": "2026-04-15T08:00:00.000Z",
"postAuthor": "Pat Author",
"trackedAt": "2026-04-16T10:21:50.000Z"
}
]
}
}

Manual resend​

From the Lead Feed, open any lead's ⋯ menu and choose Send to webhook to re-push lead2.created or the most recent activity.detected to a webhook of your choice.

See Manual resend in the overview for general rules (retention, rate limits).

Notes​

  • The raw inputMeta scraped from LinkedIn is never sent in webhook payloads. Only the small, stable subset documented above is shipped (commentText, reactionType, postUrl, postAuthor).