Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
LinkedIn Company Posts Scraper icon

LinkedIn Company Posts Scraper

Scrape public posts from any LinkedIn company page: post text, reactions, comments and URLs. No login or cookies. $0.90 per 1,000 posts.

378 runs on Apify $0.0009 per successful public company post ($0.9 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust companyUrls, maxCompanies, maxPostsPerCompany (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0009 per successful public company post = $0.9 per 1,000

You are charged forWhenPrice
Successful public company postCharged only after a matching public company post is written to the dataset.$0.0009

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.

Inputs

FieldWhat it doesType
companyUrlsPublic URLs in the form https://www.linkedin.com/company/company-slug/. This actor reads only public post records embedded in the returned company page. Empty input returns one clearly labeled, uncharged sample row.array
maxCompaniesMaximum valid public company URLs to request. Invalid, blocked, or postless pages return free diagnostic rows.integer
maxPostsPerCompanyMaximum matching public company posts returned from one supplied company page. This actor does not paginate or call LinkedIn private APIs.integer
requestTimeoutSecsTimeout for one public company page request.integer

What you get

A structured dataset — each result includes fields like:

companyNameheadlinetextpostUrldatePublishedtransport

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

LinkedIn Post Comments Scraper iconSocial Media Scrapers

LinkedIn Post Comments Scraper

Scrape public LinkedIn post comments: text, author name, profile URL, reactions. No login or cookie. Up to 10 per post. $0.60 per 1,000 comments.

1 use cases

RedNote Scraper iconSocial Media Scrapers

RedNote Scraper

Scrape public RedNote (Xiaohongshu) notes: description, author, likes, collects, comments, shares and images. No login. $0.90 per 1,000 notes.

Ready to run — no setup

RedNote (Xiaohongshu) Profile Scraper iconSocial Media Scrapers

RedNote (Xiaohongshu) Profile Scraper

Scrape RedNote (Xiaohongshu) profiles: nickname, RedNote ID, followers, likes, verified badge, IP location and recent notes. $2.90 per 1,000.

1 use cases

Douyin Hot Search Scraper iconSocial Media Scrapers

Douyin Hot Search Scraper

Get Douyin trending topics: rank, hot value, views, video count, badge and cover image. Hot, entertainment and society boards. No login. $0.40/1,000.

1 use cases

Facebook Comments Scraper iconSocial Media Scrapers

Facebook Comments Scraper

Scrape comments from any public Facebook post or reel: author, text, date, likes and replies. No login needed from you. $0.25 per 1,000 comments.

1 use cases

Facebook Groups Scraper iconSocial Media Scrapers

Facebook Groups Scraper

Scrape public Facebook group posts: author, text, time, permalink, photos, videos and engagement counts. No login needed. $0.70 per 1,000 posts.

Ready to run — no setup

See all Social Media Scrapers →

LinkedIn Company Posts Scraper: recent posts from a company page, no login

Paste linkedin.com/company/... URLs and get the posts LinkedIn publishes on each of those pages: the full post text, the post URL, the activity id, the publish time and any images. No account, no cookie, no API key.

The honest part first. A logged-out company page carries only its latest handful of posts, so this is a window on what a company is saying now, not an archive. There is no paging back through last year.

InputPublic /company/ URLs
OutputOne row per post
Ceiling50 companies per run
Account neededNone
Price$0.90 per 1,000 posts, flat on every plan

🏷️ What LinkedIn Company Posts Scraper does

Open a company page signed out and LinkedIn still publishes its recent posts in the page itself, for search engines. This reads that, for each company URL you give it, and writes one row per post.

Two rules decide what becomes a row. The post has to be authored by the company you asked for, so a partner's post sitting on the page is left out rather than filed under the wrong name. And it has to carry a real activity id, which is what makes the row joinable to anything else you collect.

The text is the post body as published, not a preview, so long posts arrive whole.

📥 What you give it

{
  "companyUrls": [
    "https://www.linkedin.com/company/openai/",
    "https://www.linkedin.com/company/apify/"
  ],
  "maxCompanies": 10,
  "maxPostsPerCompany": 20
}
FieldDefaultWhat it is
companyUrlsemptyPublic /company/ URLs. Leave it empty and you get one labelled sample row, free.
maxCompanies101 to 50. How many of those URLs the run actually opens.
maxPostsPerCompany201 to 100. A cap on rows per company, not a target: you get what the page publishes, which is usually fewer.
requestTimeoutSecs205 to 60 seconds per page.

Set maxCompanies to match your list. The input box will take more URLs than the run will fetch, and anything past maxCompanies is dropped without a row to tell you. Fifty is the ceiling for one run, so split a longer list.

📤 What you get back

A real row from a recent run:

{
  "ok": true,
  "_sample": false,
  "sourceType": "public_company_post",
  "companyName": "OpenAI",
  "companyUrl": "https://www.linkedin.com/company/openai",
  "companySlug": "openai",
  "postUrl": "https://www.linkedin.com/posts/openai_we-mobilized-250-people-to-strengthen-our-activity-7503863629813837824-XLk9",
  "activityId": "7503863629813837824",
  "headline": null,
  "text": "We mobilized 250+ people to strengthen our defenses across hundreds of systems. Our latest cyber models helped us find and fix vulnerabilities we might never have discovered otherwise. ...",
  "datePublished": "2026-09-10T17:15:04.365Z",
  "dateModified": null,
  "commentCount": null,
  "reactionCount": null,
  "imageUrls": [],
  "transport": "direct_http",
  "retrievedAt": "2026-09-14T05:45:28.621Z"
}
FieldWhat it is
activityIdLinkedIn's id for the post. Your dedupe key, and what links a row to a comments run.
textThe post body as published. Shortened above only to keep this page readable.
datePublishedA real timestamp when the page carries one, which on company posts it usually does.
commentCount, reactionCountOften null, as in the row above. They are only filled in when the page publishes them in the shape this reads, and plenty of pages do not. If engagement numbers are the point of your run, use the post search actor further down instead.
imageUrlsImage links on the post, deduplicated. An empty list for a text-only post.
headlineThe headline of an attached article, null for an ordinary post.

Nothing is inferred. A field the page does not publish comes back null or empty.

🧾 Reading the output

Three kinds of row, and only real posts cost anything.

RowHow to spot itCharged
A postsourceType: "public_company_post"yes
The sample row_sample: true, and it only appears when you run with empty inputno
A diagnosticok: false and _diagnostic: trueno

There is no charged field on these rows. sourceType is what separates a real post from a sample or a diagnostic.

A diagnostic row carries an errorCode:

CodeWhat it means
BAD_INPUTNot a /company/ URL. Nothing was requested for it.
NO_RESULTSThe page loaded and carried no posts by that company. A renamed company lands here too, because the posts on the page that answers belong to a different slug.
BLOCKEDLinkedIn answered with a challenge page instead of the company page. Try again later.
RATE_LIMITEDToo many pages too close together. Space your runs out.
SERVER_ERRORLinkedIn returned an error of its own.
NETWORKThe page did not arrive inside requestTimeoutSecs, or LinkedIn answered with something unusable. A company page that no longer exists shows up here rather than under a "not found" code.

Neither a sample nor a diagnostic row fails the run.

▶️ How to run it

1. Open LinkedIn Company Posts Scraper and click Try for free. 2. Paste company URLs into Public LinkedIn company URLs, one per line. 3. Set Maximum companies to at least the number you pasted. 4. Click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.90 per 1,000 posts. Flat on every Apify plan, no volume tiers.

One charge per post row. A company page with nothing on it costs you nothing for results, and sample and diagnostic rows are never charged. Since a page carries only a handful of posts, a run over ten companies is usually a few dozen rows, not thousands.

💡 What people use it for

  • Watching what a set of competitors announce, without following them from a personal account.
  • Collecting a company's own words about a launch, in full, for a brief or a report.
  • Picking up activity ids to feed into a comments run and see who is replying.
  • Checking on a schedule whether a company page has posted anything new since yesterday.

🚧 What it does not do

  • No post history. Only what the logged-out page carries, which is the recent few. No paging.
  • No comments. The comments actor below takes the postUrl or activityId from these rows.
  • No reliable engagement numbers. reactionCount and commentCount are null on plenty of

posts, and no setting changes that.

  • No personal posts. Only posts by the company itself. Employee posts and partner posts on the

page are left out on purpose.

  • No video files or documents. Image links only.
  • No reshare chain. You get the post as published on the page, not what it quoted.
  • URLs past maxCompanies get no row at all. They are dropped, silently.

🧭 Which LinkedIn scraper do you need?

If you wantUse
Recent posts from a company pageThis one
Posts with reliable reaction and comment counts, by keywordLinkedIn Post Search Scraper
Comments under one of those postsLinkedIn Post Comments Scraper
Recent posts from a personLinkedIn Profile Posts Scraper
The company page itself: size, HQ, websiteLinkedIn Companies Scraper

❓ Questions people ask

Do I need a LinkedIn account? No, and there is no cookie field. Nothing to paste, nothing to renew.

Why did I only get five posts from a big company? Because that is what the public page carries. Raising maxPostsPerCompany does not make LinkedIn publish more of them.

Why are the reaction counts empty? The page did not publish them in the shape this reads. It is common, and it is why that field is documented as unreliable rather than sold as a feature.

Can I get posts from a date range? Not as a filter. Every row carries datePublished, so filter after the fact.

Is scraping LinkedIn legal? This reads only pages LinkedIn publishes to the open web for search engines. Apify's write-up on scraping and the law is a reasonable starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the company URL. The errorCode on the diagnostic row usually explains it on its own.