# Search › Posts (/docs/api-reference/linkedin/search-posts)

`GET https://api.insightsocial.app/v1/linkedin/search/posts`

Returns public LinkedIn posts and Pulse articles matching a keyword, with each result's text, author, media, like and comment counts, and date.

Use it for broad keyword monitoring; it reads public search results, so treat coverage as best effort rather than complete.

**Metered: 10–480 credits.** We reserve the ceiling when the call starts and charge what it actually used when it finishes.

Paginates by `cursor`: see [Pagination](https://www.insightsocial.app/docs/pagination).

Send your key in the `x-api-key` header.

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `query` | string | no | Keyword or phrase to search for. Optional when `from_member` or `from_company` is set: omit it to get that subject's posts unfiltered, and note that supplying a real content word narrows the results to posts matching it. Provide at least one of: `query`, `from_member`, `from_company`. |
| `from_member` | string | no | Filter to posts from one member, by their LinkedIn member urn — the bare `ACoAA…` value published as `author.ext.urn` by /v1/linkedin/profile. A profile URL, a public slug (`williamhgates`) or a `urn:li:fsd_profile:`-prefixed value is rejected. Pass this on its own, with no `query`, to walk one member's back catalogue. Provide at least one of: `query`, `from_member`, `from_company`. |
| `from_company` | string | no | Filter to posts from a company, by numeric LinkedIn company id (for example `1035`). A company slug or URL is rejected; read the id from `author.id` on /v1/linkedin/company. Provide at least one of: `query`, `from_member`, `from_company`. |
| `page` | integer | no | 1-based page number of Google results. Defaults to 1. |
| `sort_by` | string | no | Result ordering: `relevance` (default) or `date_posted`. On a subject-only call (`from_member` or `from_company` with no `query`) the results are ordered by date and `relevance` is rejected, because there is no query for them to be relevant to. One of: date_posted, relevance. |
| `date_posted` | string | no | Date filter based on Google-indexed results. One of `past_24h`, `past_week`, `past_month` (underscores, not hyphens). Note the JOB lanes use `past_24_hours` for the same concept; the two vocabularies are not interchangeable. One of: past_24h, past_week, past_month. |
| `content_type` | string | no | Narrow to one kind of post. One of: videos, photos, jobs, live_videos, documents, collaborative_articles. |
| `limit` | integer | no | Return up to this many posts in one call, 1 to 200. Requires `query`. Cannot be combined with `page` or `cursor`: the result always starts at the top and `pagination.next_cursor` is null. `pagination.has_more` says whether more posts were available when the call stopped, and `walk.stopped` says why it stopped (`limit`, `exhausted`, `deadline` or `sources_unavailable`). |
| `dry_run` | string | no | Set to 1 to get the price of this call without making it: data.dry_run carries credits_min and credits_max. Nothing is charged. One of: 1. |
| `since` | string | no | Only rows published on or after this date: YYYY-MM-DD (midnight UTC) or an ISO 8601 timestamp. Rows older than it are left off each page. This list is not in date order, so the walk does not stop at the date: keep following `next_cursor`, and each page costs what a page costs even when every row on it is filtered out. A row with no date is kept. |
| `until` | string | no | Only rows published on or before this date: YYYY-MM-DD (that whole UTC day is included) or an ISO 8601 timestamp. Newer rows are left off each page and the walk does not stop, so older pages follow. A row with no date is kept. |
| `cursor` | string | no | The `pagination.next_cursor` from the previous page, sent back unchanged. Omit it for the first page. |
