# Posts by Keyword

Coming soon – the postSearch signal reports new LinkedIn posts that match a keyword and filters: your topic, your brand or a competitor.

> 🚧 **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 `postSearch` signal runs a LinkedIn post search on a schedule and reports every post it has not seen before. Use it to find conversations about your topic, your product or a competitor as they start, instead of repeating the same [`st.searchPosts`](/docs/action-st-search-posts) request every day.

## Events

| Event `type` | Webhook event | What happened |
|---|---|---|
| `postFound` | `signal.postFound` | A post matching the search appeared that the signal has not reported before. |

## Creating

```json
{
  "type": "postSearch",
  "term": "linkedin automation api",
  "filter": {
    "datePosted": "pastWeek",
    "authorIndustries": ["Software Development"]
  },
  "label": "category-watch"
}
```

- `term` – keyword or phrase to search, from 1 to 50 characters. Either `term` or `customSearchUrl` is required.
- `filter` (optional) – the same filter as in [`st.searchPosts`](/docs/action-st-search-posts#parameters), except `sort`: a signal always searches by **latest**, because it looks for what is new.
- `customSearchUrl` (optional) – a LinkedIn content search URL, used instead of `term` and `filter`. Its sort order is replaced with latest.

| Checked | Each check spends |
|---|---|
| twice a day | 1 of `stSearchQueries` |

A check reads the 50 most recent matching posts. The baseline is the posts that match at the first check.

> 💡 Searches are the scarcest limit: by default an account has 300 a month. Two `postSearch` signals use about 120 of them. A precise phrase with filters gives fewer, better events than a broad word.

## Event fields

```json
{
  "id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "signalId": "7a8b9c0d-1e2f-4a3b-8c4d-5e6f7a8b9c0d",
  "signalType": "postSearch",
  "label": "category-watch",
  "type": "postFound",
  "detectedAt": "2026-10-12T09:50:00Z",
  "post": {
    "url": "https://www.linkedin.com/feed/update/urn:li:activity:2345678901234567890",
    "activityUrn": "urn:li:activity:2345678901234567890",
    "time": "2026-10-12T08:12:00Z",
    "type": "original",
    "author": {
      "type": "person",
      "name": "Example Person",
      "profileUrl": "https://www.linkedin.com/in/person3",
      "headline": "Founder at Example Company"
    },
    "reposter": null,
    "text": "Looking for a LinkedIn automation API that works with our own accounts. Any recommendations?",
    "repostText": null,
    "hashtags": [],
    "mentions": [],
    "externalLinks": [],
    "images": [],
    "documentSlides": [],
    "hasVideo": false,
    "videoThumbnail": null,
    "hasPoll": false,
    "reactionsCount": 2,
    "commentsCount": 5,
    "repostsCount": 0
  }
}
```

- `post` – the matching post, with the same fields as an item of [`st.searchPosts`](/docs/action-st-search-posts#result-options). Counters are as they were at the check that found it.

The common fields – `id`, `signalId`, `signalType`, `label`, `type`, `detectedAt` – are described in [Receiving events](/docs/signal-events#polling).

A post is reported once per signal, even if it later drops out of the search and comes back. Two `postSearch` signals that both match a post each report it.
