Posts by Person or Company
🚧 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 personPosts and companyPosts signals watch one person or one company page and report every new post on it. Use them to engage with a prospect's post while it is fresh, or to follow what customers and competitors publish, instead of running st.retrievePersonPosts on the same people every day.
Events
Event type | Webhook event | What happened |
|---|---|---|
postPublished | signal.postPublished | A post appeared in the person's or company's activity that the signal has not seen before. |
Reposts count: if the person reposts someone else's post, it appears in their activity and is reported with post.type repost.
Creating
One signal watches one person or one company. Create one signal per target.
{
"type": "personPosts",
"personUrl": "https://www.linkedin.com/in/person1",
"label": "lead-1042"
}{
"type": "companyPosts",
"companyUrl": "https://www.linkedin.com/company/company1"
}personUrl– forpersonPosts: LinkedIn URL of the person, public or hashed.companyUrl– forcompanyPosts: LinkedIn URL of the company page.
| Type | Checked | Each check spends |
|---|---|---|
personPosts | twice a day | 1 of stPersonProfileViews |
companyPosts | twice a day | 1 of stCompanyPageViews |
A check reads the latest posts, the same as st.retrievePersonPosts or st.retrieveCompanyPosts. The baseline is the posts already there at the first check.
💡 A check reads up to the 20 most recent posts. A person who publishes more than 20 posts between two checks – which almost never happens – would have the oldest of them missed.
Event fields
{
"id": "c7e1a0f2-3d4b-4e5f-8a9b-0c1d2e3f4a5b",
"signalId": "5b0d3c1e-8f2a-4c1b-9e7d-2a6f4c8b1d90",
"signalType": "personPosts",
"label": "lead-1042",
"type": "postPublished",
"detectedAt": "2026-10-12T16:40:00Z",
"post": {
"url": "https://www.linkedin.com/feed/update/urn:li:activity:1234567890123456789",
"activityUrn": "urn:li:activity:1234567890123456789",
"time": "2026-10-12T14:05:00Z",
"type": "original",
"author": {
"type": "person",
"name": "Example Person",
"urn": "urn:li:member:123456789",
"profileUrl": "https://www.linkedin.com/in/person1",
"headline": "Product Marketing Lead"
},
"reposter": null,
"text": "We are hiring our first sales engineer.",
"repostText": null,
"hashtags": ["hiring"],
"mentions": [],
"externalLinks": [],
"images": [],
"documentSlides": [],
"hasVideo": false,
"videoThumbnail": null,
"hasPoll": false,
"reactionsCount": 4,
"commentsCount": 1,
"repostsCount": 0
}
}post– the new post, with the same fields as an item ofst.retrievePersonPosts.reactionsCount,commentsCountandrepostsCountare as they were at the check that found the post; they are not updated later.
The common fields – id, signalId, signalType, label, type, detectedAt – are described in Receiving events.
Reacting to a new post
A signal only reports; what to do is up to you. Every post URL in an event works as input for the engagement actions:
- like it with
st.reactToPost; - comment with
st.commentOnPost; - follow its discussion with a
postEngagementsignal on the samepost.url.