LinkedIn Search Posts API
Returns public LinkedIn posts and Pulse articles matching a keyword, with each result's text, author, media, like and comment counts, and date.
10–480 credits, metered · cursor pagination · failed calls free · 10 free calls to start
curl "https://api.insightsocial.app/v1/linkedin/search/posts?query=ai+agents" \-H "x-api-key: $INSIGHTSOCIAL_API_KEY"
When to use it
Use it for broad keyword monitoring; it reads public search results, so treat coverage as best effort rather than complete.
Parameters
Query parameters for GET /v1/linkedin/search/posts. Send your key in the x-api-key header.
| Name | Required | Description |
|---|---|---|
| query | One of query, from_member, from_company | 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. |
| from_member | One of from_member, query, from_company | 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, because the source cannot use any of them. Pass this on its own, with no query, to walk one member's back catalogue. |
| from_company | One of from_company, query, from_member | 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. |
| page | No | 1-based page number of Google results. Defaults to 1. |
| sort_by | 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. |
| date_posted | 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. |
| content_type | No | Narrow to one kind of post. |
| limit | No | Return up to this many posts in one call, 1 to 200. Repeating the identical call inside the 2-minute cache window is free. 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). |
| cursor | No | The pagination.next_cursor from the previous page, sent back unchanged. Omit it for the first page. |
Response fields
The same unified schema every platform returns, so code written for LinkedIn works on the other eight. A field the platform did not provide is null and listed in unavailable.
| Field | Type | Notes |
|---|---|---|
| id | string | An identifier, always a string. Never parse it as a number: several platforms use ids above 2^53. |
| url | string | null | |
| kind | string | null | The format of the post. Format words only, never a platform name. short = short-form vertical video (a reel, a TikTok, a YouTube Short). |
| content.text | string | null | |
| content.media_urls | array | null | |
| content.thumbnail_url | string | null | |
| content.duration_seconds | number | null | |
| author.id | string | null | |
| author.username | string | null | |
| author.display_name | string | null | |
| author.avatar_url | string | null | |
| author.verified | boolean | null | |
| engagement.views | integer | null | A count. null when the platform does not expose it; 0 only when it is really zero. |
| engagement.likes | integer | null | A count. null when the platform does not expose it; 0 only when it is really zero. |
| engagement.comments | integer | null | A count. null when the platform does not expose it; 0 only when it is really zero. |
| engagement.shares | integer | null | A count. null when the platform does not expose it; 0 only when it is really zero. |
| engagement.saves | integer | null | A count. null when the platform does not expose it; 0 only when it is really zero. |
| flags.nsfw | boolean | null | |
| flags.spoiler | boolean | null | |
| flags.pinned | boolean | null | |
| flags.deleted | boolean | |
| flags.likes_hidden | boolean | null | |
| flags.comments_hidden | boolean | null | |
| flags.shares_hidden | boolean | null | |
| flags.views_hidden | boolean | null | |
| flags.saves_hidden | boolean | null | |
| published_at | string | null | ISO-8601 timestamp in UTC, ending in Z. |
| language | string | null | The content's language as the platform states it, e.g. en, pt-BR. Detected languages come later (§7.1). |
| ext | object | null | Platform-specific fields, snake_case. |
Every field, error and example is in the LinkedIn Search Posts API reference.
How much does the LinkedIn Search Posts API cost?
Metered: 10–480 credits a call. The ceiling is reserved when the call starts and you are charged what it actually read.
Failed calls are free
A call that errors or finds nothing costs 0 credits.
Know the price first
Add dry_run=1 and the response quotes the call without making it. Nothing is charged.
One balance
API calls and Chrome extension exports share the same credits, on the free plan too.
LinkedIn Search Posts API: frequently asked questions
Send GET /v1/linkedin/search/posts with either query or from_member or from_company and your key in the x-api-key header. Returns public LinkedIn posts and Pulse articles matching a keyword, with each result's text, author, media, like and comment counts, and date.
Metered: 10–480 credits a call. The ceiling is reserved when the call starts and you are charged what it actually read. A call that errors or finds nothing costs 0 credits, and an answer from the shared cache costs 2. Pro's 10,000 monthly credits cover about 1,000 calls at 10 credits each. Add dry_run=1 to see the price of a call without making it.
No. There is no LinkedIn app, OAuth flow or app review. One InsightSocial API key works for this endpoint and every other platform, and your first 10 calls priced at 100 credits or less are free.
This endpoint pages. Each response carries pagination.next_cursor and pagination.has_more. Send next_cursor back unchanged as the cursor parameter and stop when has_more is false. Every page is a separate call and is charged as one.
You get an error or an empty result, and it costs 0 credits. The API reads public LinkedIn data only, so private accounts and deleted content come back as not found rather than as partial data.
Yes. Add the hosted MCP server at https://api.insightsocial.app/mcp to your AI app and sign in. The assistant finds this endpoint by name, shows its price and calls it with your credits.
More LinkedIn endpoints
- LinkedIn Search Companies API100 credits
- LinkedIn Search Hashtag API100 credits
- LinkedIn People Search by URL API100 credits
- LinkedIn Search People API100–500 credits
- LinkedIn Search Jobs API100 credits
- LinkedIn Search Location API10 credits
- LinkedIn Search Schools API10 credits
- LinkedIn Search Industry API10 credits
- LinkedIn Profile API50 credits
- LinkedIn Company API50 credits
- LinkedIn Company by Domain API50 credits
- LinkedIn Profile Similar API50 credits