LinkedIn Company Posts Scraper - Page Posts, No Login avatar

LinkedIn Company Posts Scraper - Page Posts, No Login

Pricing

from $0.87 / 1,000 successful public company posts

Go to Apify Store
LinkedIn Company Posts Scraper - Page Posts, No Login

LinkedIn Company Posts Scraper - Page Posts, No Login

Scrape the recent posts a LinkedIn company page shows, with no login, cookies or API key. Each row holds the full post text, post URL, activity id, publish time and image links. A signed-out page carries the latest handful of posts. $0.90 per 1,000 posts.

Pricing

from $0.87 / 1,000 successful public company posts

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

4

Monthly active users

a day ago

Last modified

Share

Paste LinkedIn company page URLs and get the posts each page shows, one row per post: 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 signed-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. And the reaction and comment counts are null on plenty of posts.

InputPublic /company/ URLs
OutputOne row per post: full text, post URL, activity id, publish time, images, and reaction and comment counts when the page carries them
Ceiling50 companies per run, 100 posts per company
Account neededNone
Price$0.90 per 1,000 posts on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 5,500

🔍 What LinkedIn Company Posts Scraper does

Open a company page signed out and LinkedIn still shows its recent posts in the page itself. This reads them, 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 written 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 data you get from each company post

What you getField
The company, its page and slugcompanyName, companyUrl, companySlug
The post link and LinkedIn's own id for itpostUrl, activityId
The full post texttext
The headline of an attached articleheadline
When it was published, and last editeddatePublished, dateModified
Comment and reaction counts, when the page carries themcommentCount, reactionCount
Image links on the postimageUrls
When the row was readretrievedAt

▶️ How to scrape LinkedIn company posts

  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.

Run it with nothing in the input and you get one labelled sample row, free.

💰 How much does it cost to scrape LinkedIn company posts?

$0.90 per 1,000 posts on the Free plan. Paid plans pay a little less: $0.89 on Starter, $0.88 on Scale and $0.87 on Business. On the free plan, the $5 Apify gives you each month covers about 5,500 posts.

One charge per post row. 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 you give it

{
"companyUrls": [
"https://www.linkedin.com/company/openai/",
"https://www.linkedin.com/company/apify/"
],
"maxCompanies": 10,
"maxPostsPerCompany": 20
}
FieldDefaultWhat it is
companyUrlsnonePublic /company/ URLs. The form opens with one example filled in.
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 shows, which is usually fewer.
requestTimeoutSecs205 to 60 seconds per page.

Set maxCompanies to match your list. The input box takes 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 real run, with one internal field left out:

{
"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": [],
"retrievedAt": "2026-09-14T05:45:28.621Z"
}
FieldHow to read it
activityIdYour dedupe key.
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.
imageUrlsDeduplicated. An empty list for a text-only post.
headlinenull for an ordinary post.

🧾 Reading the output

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

RowHow to spot itBilled
A postsourceType: "public_company_post"yes
The sample row_sample: true, only on an 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, so filter on it.

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.
NOT_SERVEDThis post was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
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.
TIME_LIMITThe run reached its time limit and stopped early. The posts already written stay and are charged. Give the run more time, or ask for fewer companies, to get the rest.

A sample or diagnostic row never fails the run. The one exception is TIME_LIMIT when the time limit stopped the run before any post came back: then the run ends as failed.

💡 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.
  • 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 signed-out page carries, which is the recent few. No paging.
  • No comments.
  • 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.
  • It is not an official LinkedIn tool. Dami's Studio is independent and is not affiliated with or endorsed by LinkedIn, or by any other company named on this page.

🧭 Which LinkedIn scraper do you need?

If you wantUse
Recent posts from a company pageThis one
Size, followers, headquarters and website for company page URLsLinkedIn Companies Scraper
The ads a company runs, from LinkedIn's Ad LibraryLinkedIn Ads Scraper

❓ Questions people ask

Do I need a LinkedIn account to scrape company posts?

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 show more of them.

Why are the reaction counts empty?

The page did not publish them in a form 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.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/linkedin-company-posts-scraper. Either way the run happens on your Apify account at the same price.

This reads public company pages only, never anything behind a login. Apify's write-up on the legality of web scraping 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.