Comments and Reactions
🚧 Coming soon. Signals are not available yet. This page describes how they will work at launch – the
/signalsendpoints,signal.*events and the SDK, CLI and MCP signal commands do not work today.
The postEngagement signal watches a post and reports every new comment and reaction on it. Point it at your own posts to answer commenters and connect with the people who engaged, or at any other post – a competitor's launch, an industry discussion – to see who joins in.
Events
Event type | Webhook event | What happened |
|---|---|---|
commentAdded | signal.commentAdded | A new comment or a reply to a comment appeared under the post. |
reactionAdded | signal.reactionAdded | A new person or company reacted to the post. |
Creating
Watch one post by its URL:
{
"type": "postEngagement",
"postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789",
"label": "launch-post"
}Or watch the account's own posts:
{
"type": "postEngagement",
"myPosts": true
}postUrl– LinkedIn URL of the post to watch.myPosts–trueto watch the posts the account itself publishes. The signal covers the account's posts from the last 30 days, and every post the account publishes later joins it automatically. An account has at most onemyPostssignal.
Use exactly one of the two.
| Checked | Each check spends |
|---|---|
| 4 times a day for the first 7 days after the post was published, then daily until day 30 | nothing from account limits |
Engagement on LinkedIn comes in the first days after publishing, so a post is checked often while it is fresh and rarely after. At day 30 a post is no longer checked: a single-post signal gets the status stopped with watchPeriodEnded, and a myPosts signal simply leaves that post out.
The baseline is the comments and reactions already there at the first check.
Event fields
commentAdded
{
"id": "9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d",
"signalId": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"signalType": "postEngagement",
"label": "launch-post",
"type": "commentAdded",
"detectedAt": "2026-10-12T16:40:00Z",
"postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789",
"comment": {
"commentUrn": "urn:li:comment:(urn:li:activity:1234567890123456789,9876543210)",
"commentUrl": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789/?dashCommentUrn=urn%3Ali%3Afsd_comment%3A(9876543210%2Curn%3Ali%3Aactivity%3A1234567890123456789)",
"author": {
"type": "person",
"name": "John Doe",
"profileUrl": "https://www.linkedin.com/in/john-doe",
"headline": "Head of Growth",
"viewerState": { "connectionDegree": "2nd" }
},
"time": "2h",
"text": "Interested – how does it handle multiple accounts?",
"image": null,
"isReply": false
}
}postUrl– the post the comment belongs to. For amyPostssignal, this tells you which of your posts it is.comment– the new comment, with the same fields as an item ofst.retrievePostComments.timeis the relative age LinkedIn showed at the check.isReplyistruefor a reply to another comment.
Answer a comment by passing its commentUrl to st.replyToComment, or like it with st.reactToComment.
reactionAdded
{
"id": "3e4f5a6b-7c8d-4e9f-a0b1-c2d3e4f5a6b7",
"signalId": "1c2d3e4f-5a6b-4c7d-8e9f-0a1b2c3d4e5f",
"signalType": "postEngagement",
"label": "launch-post",
"type": "reactionAdded",
"detectedAt": "2026-10-12T16:40:00Z",
"postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789",
"reaction": {
"actor": {
"type": "person",
"name": "Jane Doe",
"urn": null,
"profileUrl": "https://www.linkedin.com/in/person1",
"headline": "Helping companies to use AI",
"viewerState": { "connectionDegree": "3rd+" }
},
"type": "insightful"
}
}reaction– who reacted and how, with the same fields as an item ofst.retrievePostReactions.
LinkedIn shows no time for reactions, so detectedAt – the check that found it – is the only time you get. One person is reported once per post: changing the reaction type or removing it produces no event.
The common fields – id, signalId, signalType, label, type, detectedAt – are described in Receiving events.
Turning engagement into connections
A frequent use: invite everyone who engaged with your post.
- Create a
myPostssignal once. - For each
commentAddedorreactionAddedevent whose author hasconnectionDegree2ndor3rd+, send an invitation withst.sendConnectionRequest, mentioning the post in the note. - Watch for acceptances with the
networksignal.
Invitations still count against stConnectionRequests. A popular post can produce more engagers in a day than the account should invite, so queue them rather than inviting all at once.