# Posts by Person or Company

Coming soon – the personPosts and companyPosts signals report every new post a LinkedIn person or company publishes.

> 🚧 **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`](/docs/action-st-retrieve-person-posts) 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.

```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](/faq/what-are-hashed-url-and-public-url).
- `companyUrl` – for `companyPosts`: 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`](/docs/action-st-retrieve-person-posts) or [`st.retrieveCompanyPosts`](/docs/action-st-retrieve-company-posts). 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`](/docs/action-st-retrieve-person-posts#result-options). `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](/docs/signal-events#polling).

## 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`](/docs/action-st-react-to-post);
- comment with [`st.commentOnPost`](/docs/action-st-comment-on-post);
- follow its discussion with a [`postEngagement`](/docs/signal-post-engagement) signal on the same `post.url`.
