LinkedIn Company Posts Scraper - Page Posts, No Login
Pricing
from $0.87 / 1,000 successful public company posts
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
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
4
Monthly active users
a day ago
Last modified
Categories
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.
| Input | Public /company/ URLs |
| Output | One row per post: full text, post URL, activity id, publish time, images, and reaction and comment counts when the page carries them |
| Ceiling | 50 companies per run, 100 posts per company |
| Account needed | None |
| 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 get | Field |
|---|---|
| The company, its page and slug | companyName, companyUrl, companySlug |
| The post link and LinkedIn's own id for it | postUrl, activityId |
| The full post text | text |
| The headline of an attached article | headline |
| When it was published, and last edited | datePublished, dateModified |
| Comment and reaction counts, when the page carries them | commentCount, reactionCount |
| Image links on the post | imageUrls |
| When the row was read | retrievedAt |
▶️ How to scrape LinkedIn company posts
- Open LinkedIn Company Posts Scraper and click Try for free.
- Paste company URLs into Public LinkedIn company URLs, one per line.
- Set Maximum companies to at least the number you pasted.
- Click Start.
- 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}
| Field | Default | What it is |
|---|---|---|
companyUrls | none | Public /company/ URLs. The form opens with one example filled in. |
maxCompanies | 10 | 1 to 50. How many of those URLs the run actually opens. |
maxPostsPerCompany | 20 | 1 to 100. A cap on rows per company, not a target: you get what the page shows, which is usually fewer. |
requestTimeoutSecs | 20 | 5 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"}
| Field | How to read it |
|---|---|
activityId | Your dedupe key. |
text | The post body as published. Shortened above only to keep this page readable. |
datePublished | A real timestamp when the page carries one, which on company posts it usually does. |
commentCount, reactionCount | Often null, as in the row above. |
imageUrls | Deduplicated. An empty list for a text-only post. |
headline | null for an ordinary post. |
🧾 Reading the output
Three kinds of row, and only real posts cost anything.
| Row | How to spot it | Billed |
|---|---|---|
| A post | sourceType: "public_company_post" | yes |
| The sample row | _sample: true, only on an empty input | no |
| A diagnostic | ok: false and _diagnostic: true | no |
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.
| Code | What it means |
|---|---|
BAD_INPUT | Not a /company/ URL. Nothing was requested for it. |
NO_RESULTS | The 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_SERVED | This post was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED. |
RATE_LIMITED | Too many pages too close together. Space your runs out. |
SERVER_ERROR | LinkedIn returned an error of its own. |
NETWORK | The 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_LIMIT | The 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.
reactionCountandcommentCountarenullon 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
maxCompaniesget 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 want | Use |
|---|---|
| Recent posts from a company page | This one |
| Size, followers, headquarters and website for company page URLs | LinkedIn Companies Scraper |
| The ads a company runs, from LinkedIn's Ad Library | LinkedIn 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.
Is scraping LinkedIn legal?
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.