100 free credits on signup · no card required

LinkedIn Company Posts API

One URL in. Clean JSON out.

Give this endpoint a LinkedIn company page URL or its handle and it returns that company's recent public posts as a JSON array — post text, reaction and comment counts, reposts, and the publish timestamp. Billing is per post returned, at 5 credits each, so a 20-post pull costs 100 credits. No LinkedIn app review, no OAuth, no logged-in session.

Credits 5 / post
Input ?url=
Cache 3h
Paging limit
GET · BEARER
Request composing…
Cached 3 hours
page 1 hourly
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<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...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 8 typed fields
{
"data": [
{
"id": "7181111111111111111",
"url": "https://www.linkedin.com/posts/linkedin_hiring-activity-7181111111111111111",
"text": "We are hiring across engineering and support.",
"posted_at": "2026-07-04T11:00:00Z",
"metrics": {
"reactions": 842,
"comments": 63,
"reposts": 41
}
}
],
"meta": {
"count": 2,
"limit": 20,
"item": "post"
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 Post objects, newest first

An array of post objects, newest first, exactly as the company page shows them to a logged-out visitor. Each object carries the post body, the three public engagement counters, when it went up, and an author block. It is the shape you want for a competitor content log: append it to a table, key on the post id, and you have a running record of what a company published and how it landed.

02 Read the author block

The author block matters more here than you might expect. Company pages surface posts published by the organisation itself, but reshares and employee-attributed content can appear in the same feed, so `author.name` is not always the company. Read it rather than assuming.

03 Limit controls your bill

Set `limit` to control how many posts come back; the default is 20. Because the price is per post, `limit` is your cost dial — halve it and you halve the bill for that call.

Field explorer Pick a key to see its type and the caveats.
number|null Nullable Sortable metric
comments

Comment count only. Pull the comment bodies with the LinkedIn Comments API.

{
"id": "7181111111111111111",
"url": "https://www.linkedin.com/posts/linkedin_hiring-activity-7181111111111111111",
"text": "We are hiring across engineering and support.",
"likes": 0,
"comments": 63,
"shares": 0,
"posted_at": "2026-07-04T11:00:00Z",
"author": { … }
}
Good fit

Reach for this when

  • Building a competitor content log — poll a set of company pages on a weekly schedule and store every new post id with its counters.
  • Feeding a social listening or brand-monitoring pipeline that needs the actual text of what companies in a category are saying, not just volume metrics.
  • Measuring posting cadence: count posts per week from `posted_at` and you have a defensible answer to how often a competitor publishes.
  • Sourcing content for summarisation or classification — the `text` field goes straight into an LLM prompt without any HTML cleanup on your side.
  • Finding the posts worth investigating further, then passing their URLs to the LinkedIn Post Stats API or the Comments API.
Different job?

There's an endpoint for that

  • You want the company's own profile data — employee count, industry, headquarters, description. That is the LinkedIn Company API, one call, not a per-post charge.
  • You have a single post URL and only need its numbers. Use the LinkedIn Post Stats API instead of pulling a whole page feed to find one item.
  • You need the comment text under a post. This endpoint returns counts; the LinkedIn Comments API returns the comments themselves.
  • You are looking for posts across many companies by keyword rather than from one page. That is the LinkedIn Post Search API.

Pricing

Start free, pay for what comes back

Each post returned is 5 credits — about 2.5¢ on the monthly plan. Billing is per post, so a default 20-post pull runs 50¢, and an empty result still costs 1 credit.

Estimate your bill
$15/ month
30 posts/day × 5 credits × 365 days = 54,750 credits/yr, or $183/yr on the annual plan plus 43 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 54,750
Plan Annual $54/yr
Per post

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.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

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

Docs you can build on

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.

Failed calls are never charged Public data only, no login session Built for parallel traffic

Every post in the response costs 5 credits. Leave `limit` at its default of 20 and the call is 100 credits; ask for 100 posts and it is 500. If you are polling for new content on a schedule, a small limit is almost always the right call — you only need enough overlap to be sure you did not miss anything between runs.

If the page has fewer posts than you asked for, you are charged for what actually comes back, not for the limit you requested.

This is a top-of-feed read, not a paginated archive walk. A larger `limit` reaches further back, but there is no offset or page token to resume from, and very old posts on an active page may be out of reach at any limit. For long-run history, start polling now and accumulate rather than trying to backfill in one shot.

Company feeds mix in reshared content and posts attributed to individuals. If your analysis assumes every row is first-party corporate output, filter on `author.handle` before you aggregate. Both keys inside `author` can be null on items where the feed omits attribution.

LinkedIn rounds public counters on high-engagement posts and shows a single reaction total rather than a per-type breakdown. Treat `likes` as an order-of-magnitude signal on big posts and an exact figure on small ones. `shares` is the least reliable of the three and is often absent entirely.

Repeat calls for the same company inside the cache window return the stored array in milliseconds and set x-cache: hit. A cache hit is billed the same as a fresh pull, since the credits are priced per post returned either way. Pass fresh=true to force a re-read when you know a company just published.

Questions

Frequently asked

Send a GET to /v1/linkedin/company-posts with the company page URL or handle and your API key. LinkedIn's official Pages API only works for pages you administer and requires an approved app, which rules it out for competitor research. This endpoint reads the same public page a logged-out browser sees and returns the posts as JSON.

5 credits per post, so 50 posts is 250 credits. Credits are $0.005 each on monthly billing and $0.0045 on annual, putting a 50-post pull at roughly $1.25 or $1.13. You are charged for posts actually returned, so a page with only 12 posts costs 60 credits even if you asked for 50. Failed calls are not charged.

Yes. Both work. Send the handle from the page URL — the part after /company/ — or the full https://www.linkedin.com/company/handle link. The endpoint resolves either to the same page. Handles are what you usually have in a CRM export, so passing them directly saves a string-building step.

As far as the `limit` you set reaches on that page's public feed, newest first. There is no cursor or offset, so you cannot resume a deep crawl across calls, and a company that posts daily will have older content beyond practical reach. If you need years of history, poll on a schedule from today and build the archive yourself.

No. LinkedIn shows celebrate, insightful, support and the rest separately in its own UI, but the public page data collapses them into one total, and that total is what `likes` holds. If per-type reaction counts are essential to your analysis, no public-page endpoint can supply them and you would need the official API on a page you administer.

No. This endpoint targets company pages specifically. For an individual's profile data, use the LinkedIn Profile API. If you want posts from a person and only have their name or role, the LinkedIn People Search API is the place to start, and individual posts you find can be measured with the LinkedIn Post Stats API.

No. We read public content only, logged out. A page that requires a session, has been removed, or is region-restricted returns an error rather than a partial array, and the call is not billed. There is no login involved anywhere in this endpoint, by design.

Next

Pairs well with

Full LinkedIn API reference →
/v1/linkedin/company
LinkedIn Company API Company page data: industry, size, followers and description. 10 cr / company
/v1/linkedin/comments
LinkedIn Comments API Paginated comments on a LinkedIn post; charged per comment returned. 5 cr / comment
/v1/linkedin/search
LinkedIn Search API Keyword search over public LinkedIn posts. 5 cr / result
/v1/facebook/channel-posts
Facebook Channel Posts API Latest posts from a Facebook page with per-post metrics. 3 cr / post

More LinkedIn endpoints

/v1/linkedin/stats Reactions, comments and reposts for a LinkedIn post. 5 credits / post /v1/linkedin/comments Paginated comments on a LinkedIn post; charged per comment returned. 5 credits / comment /v1/linkedin/profile Public profile data for a LinkedIn member: headline, positions, education. 10 credits / profile /v1/linkedin/company Company page data: industry, size, followers and description. 10 credits / company /v1/linkedin/search Keyword search over public LinkedIn posts. 5 credits / result /v1/linkedin/people-search Search public LinkedIn profiles by keyword, title, company or location. 5 credits / profile

Try the LinkedIn Company Posts endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/linkedin/company-posts
Get your free API key