Posts by Person or Company

🚧 Coming soon. Signals are not available yet. This page describes how they will work at launch – the /signals endpoints, 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 typeWebhook eventWhat happened
postPublishedsignal.postPublishedA 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.

json
{
  "type": "personPosts",
  "personUrl": "https://www.linkedin.com/in/person1",
  "label": "lead-1042"
}
json
{
  "type": "companyPosts",
  "companyUrl": "https://www.linkedin.com/company/company1"
}
  • personUrl – for personPosts: LinkedIn URL of the person, public or hashed.
  • companyUrl – for companyPosts: LinkedIn URL of the company page.
TypeCheckedEach check spends
personPoststwice a day1 of stPersonProfileViews
companyPoststwice a day1 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

json
{
  "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 of st.retrievePersonPosts. reactionsCount, commentsCount and repostsCount are 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: