One keyword in. Clean JSON out.
Search public LinkedIn posts by keyword and get the matches back as JSON. Send a query string to /v1/linkedin/search and you get an array of posts with their text, engagement counts, publish time and author. 5 credits per result returned, so a 20-post search costs 100 credits.
The difference
On the left, what a headless browser hands you. On the right, what the endpoint hands you.
<div class="feed-shared-update-v2 artdeco-card" data-urn="urn:li:activity:7181111111111111111"><div class="update-components-text relative"><span dir="ltr">We just cut p95 latency in half by moving the cache closer to the edge.</span></div><div class="social-details-social-counts"><li class="social-details-social-counts__item"><span aria-label="842 reactions">842</span></li><li class="social-details-social-counts__comments">63 comments</li><li>41 reposts</li></div><time class="update-components-actor__sub-description">4d</time><code style="display:none">{"data":{"*elements":["urn:li:fsd_update:(urn:li:activity... {"data": [{"id": "7181111111111111111","url": "https://www.linkedin.com/posts/linkedin_hiring-activity-7181111111111111111","text": "We just cut p95 latency in half by moving the cache closer to the edge.","posted_at": "2026-07-04T11:00:00Z","metrics": {"reactions": 842,"comments": 63,"reposts": 41}}],"meta": {"count": 2,"limit": 20,"item": "result"},"request_id": "req_01JZX4M8Q2TE9W"}
The payload
An array. Each element is one public post: the body text, how many likes, comments and reposts it has picked up, when it went live, and a nested author object. Same shape the LinkedIn Post Stats API returns for a single URL, so a search result can be stored in the same table as a post you fetched by link.
Ordering comes from LinkedIn's own results for that query. It is relevance-weighted with a recency bias, not a strict reverse-chronological feed, and it is not stable between calls — run the same query tomorrow and posts will shift position. Deduplicate on the id field rather than assuming position means anything.
Result counts are a ceiling, not a promise. A narrow query may return four posts when you asked for fifty. You are billed per result actually returned, so a thin query is a cheap query.
Comment count. Pass the url to the LinkedIn Comments API if you need the text of them.
Pricing
Each returned post is 5 credits — about 2.5¢ on the monthly plan. A default 20-result search runs 50¢, and a query that matches nothing still costs 1 credit.
Estimate only, on a full-year basis. 5 credits per returned result. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.
Entry price, side by side
Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.
Engineering notes
We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.
5 credits per post returned. The limit parameter is your budget control — set it deliberately rather than leaving it at the default of 20. Asking for 200 results on a broad term like 'AI' will bill 1,000 credits and hand you a lot of noise.
Nothing is charged for results that do not come back. A query matching nine posts costs 45 credits even if you asked for 100.
We pass your string through to LinkedIn's post search. Quoted phrases work. Broad single words behave like a broad single word does in any search box: high volume, low precision. Two or three narrow queries almost always beat one wide one.
There is no date filter, no author filter and no language filter on the query itself. Filter after the fact using posted_at and author on the response.
LinkedIn is inconsistent about which counters it renders publicly. shares is null often enough that you should not build a chart that assumes it. text is null on image-only and video-only posts. author.handle is null for company-page posts because a company URL has no public identifier in the same slot.
Treat a null as 'LinkedIn did not show this', not as zero. Writing null through as 0 will quietly corrupt any average you compute later.
We read what a logged-out visitor sees. Posts limited to connections, posts inside groups, and anything behind a login are not reachable and never will be through this endpoint. Deleted posts drop out of results silently between runs, which is another reason to key on id and keep your own copy of the text.
Search responses sit in the fast cache class, so re-running an identical query and limit inside the window returns in milliseconds with x-cache: hit. A cache hit is billed the same as a fresh call. Add fresh=true when you are monitoring and need the window bypassed — for example the first call of each scheduled run.
Questions
Send a GET request to /v1/linkedin/search with your query and API key. You get back an array of matching public posts with text, engagement counts, timestamp and author. No LinkedIn developer application, no OAuth, no partner approval. LinkedIn's own Marketing API does not offer public post search to general developers, which is why this exists as a separate service.
5 credits per result returned. Credits are $0.005 each monthly and $0.0045 annual, so a post costs about 2.5 cents and a 20-result search runs roughly 50 cents. You are only billed for posts actually returned, so narrow queries that match little are cheap. Set limit to control the ceiling before you run anything broad.
Whatever one call returns. Set limit to what you can justify paying for; the default is 20. There is no second page — no cursor, no page token, no offset — so limit is the whole of what you will get, and re-running the query is a fresh search rather than a continuation. Beyond that the constraint is LinkedIn, not us: broad commercial terms will fill a large request, niche phrases often return single digits no matter how high you set the cap. Budget for the ceiling and expect to receive less.
Yes, include the hashtag in the query string and LinkedIn matches posts using it. Results are not restricted to that tag alone — LinkedIn will also surface posts that merely mention the phrase. If you need strict tag matching, filter the returned text field for the exact hashtag on your side.
No. Only content a logged-out visitor can load is reachable. Connection-only posts, group posts and anything behind a login are excluded. We do not use logged-in sessions and do not attempt to reach gated content. If a post disappears from later runs it usually means the author deleted it or made it private.
LinkedIn ranks post search by its own relevance model, which weighs recency and engagement and changes constantly. Position carries no meaning you can rely on across calls. Deduplicate on the id field, sort by posted_at or likes yourself if you need a stable order, and never treat result index as a rank.
You can find people discussing a topic — author.handle and author.name come back on each post, and you can feed a handle into the LinkedIn Profile API for more. What this endpoint does not do is return contact details, and it is not an email finder. Whatever you do with the profiles afterwards is subject to LinkedIn's terms and your local privacy law.
Next
100 trial credits on signup — no card, key on screen immediately.