One URL in. Clean JSON out.
Give the endpoint a public LinkedIn post URL and it returns the reaction, comment and repost counts as JSON, along with the post text and who wrote it. No LinkedIn Marketing API application, no OAuth, no page admin rights. 5 credits per post.
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": {"platform": "linkedin","entity_id": "7181111111111111111","url": "https://www.linkedin.com/posts/linkedin_hiring-activity-7181111111111111111","author": {"handle": "linkedin","name": "Example Creator"},"posted_at": "2026-06-30T14:05:00Z","metrics": {"views": 1204593,"likes": 88410,"comments": 2314,"shares": 10092}},"request_id": "req_01JZX4M8Q2TE9W"}
The payload
One object per call, describing a single post. You get the three public engagement counters LinkedIn shows under a post, the full body text, the publish timestamp, and a small author object. That is the complete set — LinkedIn does not put impression or view counts on the public page, so this endpoint does not return them. Only the post owner sees those, inside LinkedIn's own analytics tab.
The `text` field is the post body as written, newlines and emoji included. LinkedIn truncates long posts behind a "see more" toggle in the UI, but the full text comes back here. Documents, images and video attachments are not returned; if a post is nothing but a carousel PDF with no caption, `text` can come back null.
Reaction counts are a single total. LinkedIn splits reactions into like, celebrate, support, love, insightful and funny, and it shows that breakdown in the UI, but the counter this endpoint reads is the sum. If you need sentiment, read the comments instead.
Comment count as LinkedIn displays it. Includes replies on some post shapes, so treat it as an order-of-magnitude figure.
Pricing
One post is 5 credits — about 2.5¢ on the monthly plan, 2.3¢ on annual. $5 covers roughly 200 posts, cached reads cost the same as fresh ones, and failed calls are never charged.
Estimate only, on a full-year basis. 5 credits per returned post. 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.
LinkedIn lets authors restrict a post to connections only, and posts inside groups are visible only to members. Those return an error, not a partial object, and the call is not charged. If you can open the URL in a private browser window while logged out, this endpoint can read it. If you cannot, neither can we.
The same applies to posts from deactivated accounts and anything LinkedIn has removed. We do not hold a logged-in session and do not attempt one.
Copy the link straight from the post's three-dot menu. That gives you a /feed/update/urn:li:activity:… or /posts/handle_slug-… form, and both work. Links copied from the browser address bar while scrolling the feed sometimes carry a tracking suffix after ?; that is harmless.
A profile URL is not a post URL. Passing /in/someone here will not error usefully — send that to the LinkedIn Profile API instead.
LinkedIn updates public engagement figures on its own schedule and rounds at scale. Two calls minutes apart on a busy post can differ, and the difference is not necessarily real growth. If you are drawing a curve, sample at a fixed cadence — the same minute each hour, or the same hour each day — so your intervals are even.
Posts older than a few weeks are effectively static. There is little value in re-polling them, and it is the easiest credit saving available.
The author object carries a handle and a display name, nothing more. That is what the post page exposes. It also means the name may be a company name rather than a person's when the post came from a company page, and `handle` can be null for those. Do not assume the handle is always a /in/ slug.
Responses sit in the fast cache class, so a repeat call for the same post inside the window comes back in milliseconds with x-cache: hit. A hit still costs 5 credits. Pass fresh=true when you deliberately need to skip the cache, such as the first read of a monitoring cycle. Failed calls are never charged.
Questions
Send a GET to /v1/linkedin/stats with the post URL and your API key. LinkedIn's Marketing Developer Platform requires a partner application, an approved app and page admin rights, and even then it only reports on pages you control. This endpoint reads the same public post page a signed-out visitor sees, so it works on any account, including ones you have no relationship with.
No, and no public API can. LinkedIn shows impressions only to the post's author inside its own analytics panel — the figure never appears on the public page. What you get here is reactions, comments and reposts. If impressions matter to your reporting, export them from LinkedIn while signed in as the owner and join them to this data on the post URN.
5 credits per post. Credits are $0.005 each on the monthly plan and $0.0045 on annual, so roughly 2.5 cents a call, and $5 covers about 200 posts. Cached responses cost the same as fresh ones. Calls that fail are not charged, including posts that turn out to be private.
Yes. The `likes` field is the total across all six LinkedIn reaction types, matching the number LinkedIn prints next to the reaction icons. There is no per-type breakdown in the response. If you need to know whether people were congratulating or disagreeing, pull the comment text with the LinkedIn Comments API and read it.
One URL per call. Run them in parallel — the calls are independent and the API expects concurrent traffic. If you are starting from a company page rather than a list of links, the LinkedIn Company Posts API returns a page of posts with the counters already attached — the same 5 credits per post, but one request instead of many. There is no equivalent endpoint for an individual's posts.
LinkedIn often renders post age as a relative string like "2mo" rather than a timestamp, and on those shapes there is no absolute date to normalize. Rather than guessing a date from "2mo", the field comes back null. If publish time is essential to your pipeline, record the first time you saw the post and use that as a floor.
We read only pages that load without a login, exactly as a browser would. We do not authenticate, do not bypass access controls, and cannot reach connection-only posts, group posts or private profiles. That said, LinkedIn's terms of service and your own local regulations apply to what you do with the data, and that is your call to make, not ours.
Next
100 trial credits on signup — no card, key on screen immediately.