LinkedIn Company Posts API
The recent posts a company page shows logged-out visitors (about 10), with engagement{likes,comments}. Flat 1 credit.
GET request to /v1/linkedin/company-posts that responds with clean JSON and costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the LinkedIn Company Posts API?
Pass a LinkedIn company URL and get the recent public posts its page shows a logged-out visitor — about 10. Older posts are not available: LinkedIn only shows them to signed-in members, and Captapi never signs in. Each row always includes id, url (www.linkedin.com — locale hosts like fr. are canonicalised), text, publishedAt, author{name,url}, and engagement{likes,comments}. likes and comments are real public counts (0 is a real zero). Homepage structured data often ships text without counts; we read each post page for reaction/comment totals. Every 200 includes totalReturned, nextCursor and hasMore (numeric offset). You can page through the posts the guest page shows with a smaller limit; when you reach the last of them, hasMore is false and truncatedReason is public_page_limit with a note — there is no deeper pagination. timings{nativeMs,totalMs} name the fetch. If the clock runs out after some posts were read, we return them with degraded=true and degradedReason=deadline. A page that exists but shows no posts publicly is 200 with an empty list, truncatedReason=no_public_posts and 0 credits. A page we could not read (including a sign-in wall) is 502 UPSTREAM_UNAVAILABLE, retryable, 0 credits. A company URL LinkedIn 404s is resolved to its live page name when there is a safe match (resolvedFrom), otherwise 404. Flat 1 credit. Pass cache=true for the 24h shared cache.
What you get
- the ~10 recent posts a logged-out visitor sees
- totalReturned + nextCursor + hasMore on every 200
- truncatedReason=public_page_limit at the end — no deeper pagination
- engagement{likes,comments} read from each post page
- flat 1 credit; empty public page 0 credits
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/linkedin/company-posts?url=https%3A%2F%2Fwww.linkedin.com%2Fcompany%2Fshopify" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"company": "microsoft",
"totalReturned": 2,
"posts": [
{
"platform": "linkedin",
"type": "post",
"url": "https://www.linkedin.com/posts/microsoft_july-2026-activity-7487862338335801344-bBsC",
"text": "Doctors are busy, visits can seem rushed. Many people – especially women – can feel like their doctor hasn’t really heard them.\n \nIn July's edition of The Monthly Tech-In, we explore how AI is helping clinicians spend more time listening to their patients and less time on administrative tasks. Beyond healthcare, we share stories about how farmers, researchers and executives are using AI to meet real-world challenges. \n \nLearn more about the people putting AI into practice.",
"publishedAt": "2026-07-28T13:31:39.195Z",
"author": {
"name": "Microsoft",
"url": "https://www.linkedin.com/company/microsoft"
},
"engagement": {
"likes": 966,
"comments": 76,
"reposts": null
},
"id": "7487862338335801344"
},
{
"platform": "linkedin",
"type": "post",
"url": "https://www.linkedin.com/posts/satyanadella_just-wrapped-our-earnings-call-it-was-a-activity-7488369807969370112-3kA1",
"text": "Just wrapped our earnings call. It was a very strong close to what was a record fiscal year for Microsoft.\n \n· Annual revenue: $331B, +18%\n· MS Cloud: $214B, + 27%\n· And Azure: $100B+, +41%\n \nAnd even bigger opportunity ahead!\n \nI wanted to share some more perspective on two areas of focus for us:\n \nFirst, we are building a new model system, where the harness, context, memory, and action space are separate from any one model family, thereby moving the frontier on the cost -to-outcome curve. \n \nAnd it’s not just about cost. It also has the added benefit of business continuity and resilience because every model is substitutable. \n \nThis is the system we are using in our products, with great results. And we are making it available for our customers via Foundry too.\n\nYou can read more about this from Mustafa Suleyman here: https://lnkd.in/gQwfAbuc\n \nSecond, when it comes to Copilot, we are innovating rapidly, from chat to Cowork to Autopilots.\n \nWe have also been super focused on improving the quality and performance of Copilot. Over the last three quarters, user satisfaction scor …",
"publishedAt": "2026-07-29T23:08:09.380Z",
"author": {
"name": "Satya Nadella",
"url": "https://www.linkedin.com/in/satyanadella"
},
"engagement": {
"likes": 10710,
"comments": 436,
"reposts": null
},
"id": "7488369807969370112"
}
],
"nextCursor": "2",
"hasMore": true
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success and a data object with the following fields:
Top-level fields
companyCompany. Example: "microsoft".totalReturnedPosts on this page (length of posts[]). Always present on 200.nextCursorNumeric offset for the next page (e.g. "5") within the posts the public page shows. null means the end of the list — not a missing key.hasMoretrue when nextCursor is set. false + nextCursor null means every public post is in hand.
Posts
Each item in posts contains:
platformPlatform identifier for this response (matches the endpoint's platform).typeContent type of the item.urlCanonical https://www.linkedin.com/posts/… — locale subdomains (fr., de., uk.) are rewritten to www.textText content.publishedAtPublish date (ISO 8601) when the platform exposes an absolute timestamp.authorAuthor name or handle.engagementAlways keyed {likes,comments,reposts}. likes/comments read from each post page when the homepage omits them; 0 is a real zero. reposts has not been observed non-null on this guest surface.idId of this posts item.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | LinkedIn company URL, e.g. https://linkedin.com/company/slug. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| limit | integer | No | Max items to return (default 20, max 100). Only the ~10 posts the public page shows are available. Flat 1 credit. |
| cursor | string | No | Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (numeric offset, e.g. 5). A null nextCursor means the end of the list. Only the recent posts LinkedIn shows logged-out visitors (about 10) are available. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh.
Variable cost: Flat 1 credit for a page of posts. A page that shows no posts publicly (truncatedReason=no_public_posts) is 0 credits.
linkedin_company_posts via @captapi/mcp. Set it up →How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/linkedin/company-postsand parse the JSON response.
Use cases
Content Pipelines
Ingest a channel's catalog in bulk.
Monitoring
Detect new uploads automatically.
Archiving
Snapshot a creator's library — metadata plus CDN media URLs (re-fetch before mediaUrlsExpireAt).
Analytics
Aggregate performance across many videos.
Frequently asked questions
What does the LinkedIn Company Posts API do?+
The LinkedIn Company Posts API lets you list items in bulk with metadata from a public LinkedIn post using one GET request to /v1/linkedin/company-posts. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the LinkedIn Company Posts API cost?+
Each successful call costs 1 credit. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a LinkedIn API key or OAuth?+
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle access, rate limits, retries, and authentication for you.
Why do I get about 10 posts even with limit=100?+
A company page shows logged-out visitors only its most recent posts — about 10. Older posts are visible only to signed-in members, and Captapi never signs in. When you reach the last of the public posts, hasMore is false and truncatedReason is public_page_limit. There is no deeper pagination.
How do I page through them?+
Use a smaller limit and pass nextCursor back as cursor. totalReturned, nextCursor and hasMore are on every 200; a null nextCursor is the end.
What does degraded / degradedReason=deadline mean?+
When the clock runs out after some posts were read, we return them with degraded=true instead of a 503 that throws away a listing we already have. Retry if you need every post's engagement read. A timeout with zero rows is 503 at 0 credits.
I got 200 with posts: [] and truncatedReason no_public_posts. Is that a failure?+
No — it is LinkedIn's answer. The company page exists but shows no posts to logged-out visitors, so there is nothing to retry. The note names the page we read (name and follower count) because the usual cause is a stub or duplicate registration: company/oecd is a ~600-follower stub while the OECD that posts daily lives under another slug. Check the URL; 0 credits.
The URL I passed 404s, but I got a 503 instead of "Company not found". Why?+
LinkedIn said 404 for your slug, and we tried to find the live page name behind it (our-world-in-data lives at ourworldindata). When LinkedIn's edge rate-limits the candidate page we need to check, we cannot tell "wrong name" from "blocked", so the response is a retryable 503 that lists the names tried — never an invented 404. A 404 is returned only when every candidate was checked.
What does a call cost?+
A flat 1 credit for a page of posts. A page that shows no posts publicly is 0 credits, and failed calls are 0 credits.
Is the LinkedIn Company Posts API suitable for production use?+
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
More LinkedIn APIs
Ready to use the LinkedIn Company Posts API?
Sign up, grab your key, and make your first call in 60 seconds.