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 | at least twice a day, more often for people who post a lot | nothing from account limits |
companyPosts | at least twice a day, more often for companies that post a lot | nothing from account limits |
The first check opens the person's profile or the company page once, to record who the signal watches. That visit counts as 1 of stPersonProfileViews or stCompanyPageViews, and the person may see the account among their profile viewers, as after any visit. Later checks find new posts through LinkedIn search, without opening the profile, so they spend neither limit. The baseline is the posts already there at the first check.
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.