LinkedIn
GET /v1/linkedin/company-posts

LinkedIn Company Posts API

Company posts with engagement{likes,comments} — cursor pages up to 100. Flat 1 credit on the native path.

1 credit per request
TL;DR
Company posts with engagement{likes,comments} — cursor pages up to 100. Flat 1 credit on the native path. The LinkedIn Company Posts API (LinkedIn) is a single authenticated 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 recent public posts as clean JSON. Each row always includes id, url (www.linkedin.com — locale hosts like fr. are canonicalised), text, publishedAt, author{name,url}, and engagement{likes,comments,reposts}. likes and comments are real public counts (0 is a real zero). reposts stays keyed but is null on this surface — LinkedIn's guest company listing has not been observed to expose shares; we do not invent zeros. Homepage JSON-LD often ships text without counts; we hydrate each permalink for reaction/comment totals. Every 200 includes totalReturned, nextCursor, and hasMore (numeric offset; null nextCursor means the end of the list, max 100). timings{nativeMs,apifyMs,serpMs,totalMs} name which stage burned the seconds — including on 502/503. Native listing is budgeted at 85s inside a 110s ceiling (under Cloudflare's ~125s). When the clock runs out we return the posts already in hand with degraded=true and degradedReason=deadline instead of 503ing a listing that exists. An empty withheld listing is 502; a hang with zero rows is 503 at 0 credits. Billing: native listing is 1 credit (the typical path, even if a short Apify probe ran and added no rows). Apify deepen that actually contributes rows is ~0.8/result — not the default bill. Pass cache=true for the 24h shared cache.

What you get

  • totalReturned + nextCursor + hasMore on every 200
  • engagement{likes,comments} — reposts keyed, observed null on this surface
  • www.linkedin.com post URLs (locale hosts canonicalised)
  • timings on 200 and on 502/503
  • 1 credit native; deepen ~0.8/result only when Apify adds rows

Try it

Open in Playground

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

Sign in to run live
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. "20"). null means this is the end of the list (max 100) — not a missing key.
  • hasMoretrue when nextCursor is set. false + nextCursor null means the whole fetched feed 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 from permalink hydrate when homepage JSON-LD omits them; 0 is a real zero. reposts has not been observed non-null on this guest surface.
  • idId of this posts item.

Parameters

NameTypeRequiredDescription
urlstringYesLinkedIn 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.
limitintegerNoMax items to return (default 20, max 100). Flat 1 credit per call.
cursorstringNoPagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (numeric offset, e.g. 20). A null nextCursor means the end of the list (max 100 posts).
cachebooleanNoSet 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.

Using an AI agent? This endpoint is the MCP tool linkedin_company_posts via @captapi/mcp. Set it up →

How it works

  1. 1. Sign up — get 100 free credits, no card required.
  2. 2. Create a key from your dashboard.
  3. 3. Send one request to /v1/linkedin/company-posts and 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 proxies, rate limits, retries, and authentication for you.

How do I know if this is the whole company feed?+

Read totalReturned, nextCursor, and hasMore — they are on every 200. hasMore false and nextCursor null means the fetched list ended (max 100). A missing cursor key is a bug; a null nextCursor is the end.

What does degraded / degradedReason=deadline mean?+

Native listing is budgeted at 85s inside a 110s ceiling. When the clock runs out we return the posts already collected (homepage JSON-LD, plus any permalinks that finished) with degraded=true — not a 503 that throws away a listing we already have. Retry if you need a full engagement hydrate. An empty withheld listing is still 502; a hang with zero rows is 503 at 0 credits, and that 503 includes timings so you can see which stage burned the seconds.

Why is the page priced at 1 credit when older copy said ~16?+

The typical path is native listing at 1 credit — even if a short Apify probe ran and added no rows (source=direct / X-Captapi-Source). ~0.8/result applies only when Apify deepen actually contributes rows (source=apify). Budget 1 unless you page deep enough that native homepage JSON-LD is not enough.

Why is engagement.reposts missing?+

LinkedIn's guest listing almost never exposes ShareAction. We omit the key rather than ship null on every row. likes and comments stay; 0 is a real zero.

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.

LinkedIn Company Posts API | Captapi — Captapi