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
personPostsat least twice a day, more often for people who post a lotnothing from account limits
companyPostsat least twice a day, more often for companies that post a lotnothing 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

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: