LinkedIn Company Posts Scraper
Pricing
from $0.87 / 1,000 successful public company posts
LinkedIn Company Posts Scraper
LinkedIn company posts scraper for the recent posts a company page shows to signed-out visitors. Each row holds the full post text, post URL, activity id, publish date and time, and image links. $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
11
Total users
4
Monthly active users
a day ago
Last modified
Categories
Features
Share
LinkedIn company posts scraper for company page URLs, one row per post: the full post text, the post URL, the activity id, the publish time and any images. No account, no cookie.
The honest part first: the latest posts per company, 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 comment count only comes when you switch on Read each post's own page.
| Input | Public /company/ URLs or page names, or single post links |
| Output | One row per post: full text, post URL, activity id, publish time, images, post type, and reaction and comment counts when the page carries them |
| Ceiling | 200 companies per run, 100 posts per company, 100 post links |
| 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 |
| A post or an article | postType |
| Image, video, document, article or text, and a video's cover picture (only with Read each post's own page) | mediaType, videoThumbnailUrl |
▶️ How to scrape LinkedIn company posts
- Open LinkedIn Company Posts Scraper and click Try for free.
- Paste company URLs or page names into Public LinkedIn company URLs, one per line.
- Set Maximum companies to at least the number you pasted. For new posts only, fill in Only posts published on or after.
- 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, and neither are posts left out by the date filter. Reading each post's own page costs nothing extra.
📥 What you give it
{"companyUrls": ["https://www.linkedin.com/company/openai/","https://www.linkedin.com/company/apify/"],"maxCompanies": 10,"maxPostsPerCompany": 20,"postedAfter": "2026-10-01"}
| Field | Default | What it is |
|---|---|---|
companyUrls | none | Public /company/ URLs, or just the page name (openai). The form opens with one example filled in. |
maxCompanies | 10 | 1 to 200. How many of those URLs the run actually opens. |
maxPostsPerCompany | 20 | 1 to 100. A cap on rows per company, not a target. |
postedAfter | none | A date like 2026-10-01, or a full time like 2026-10-01T09:00:00Z. Older posts are left out and not charged. A post with no date is kept, and the status line counts them. Anything else stops the run before a page is read. |
includePostDetails | false | Opens each post's own page for its comment count and media type. One more page per post. |
postUrls | none | Single post links, as Copy link to post gives them. Up to 100. Only posts by the company named in the link come back. |
maxConcurrency | 3 | 1 to 5 pages read at once. After a "too many requests" answer the rest go one at a time. |
requestTimeoutSecs | 20 | 5 to 60 seconds per page. |
Set maxCompanies to match your list. A link past it is not read and gets a free
OVER_MAX_COMPANIES row instead. Two hundred is the ceiling for one run, so split a longer list.
The run's default time limit is 180 seconds. For more companies, give
the run more time. If it runs out, the posts already written stay and a free TIME_LIMIT row says so.
📤 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": "Stripe","companyUrl": "https://www.linkedin.com/company/stripe","companySlug": "stripe","postUrl": "https://www.linkedin.com/posts/stripe_fundraise-directly-into-your-stripe-treasury-activity-7516531847267311616-ltsY","activityId": "7516531847267311616","headline": null,"text": "Fundraise directly into your Stripe Treasury account. Deposits are automatically matched to each SAFE. Access settled funds immediately and earn 2% cash back with your Stripe card. Get started: https://lnkd.in/ehzHMhcv.","datePublished": "2026-10-15T16:14:02.796Z","dateModified": null,"commentCount": null,"reactionCount": 16,"imageUrls": [],"retrievedAt": "2026-10-17T03:39:30.453Z","postType": "post"}
| Field | How to read it |
|---|---|
activityId | Your dedupe key. |
text | The post body as published, whole. |
datePublished | A real timestamp when the page carries one, which on company posts it usually does. |
reactionCount | All reactions together, when the page carries the count. null when it does not, never a guess. |
commentCount | null from the company page alone. Filled when Read each post's own page is on, or for a post link. |
imageUrls | The post's pictures, or the preview picture of a link it shares. Empty when there are none, as on a video or a document. |
headline | null for an ordinary post. |
mediaType | Only with post details on. null means that post's page did not load; its row is still there. |
🧾 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, page name or post link, or a postedAfter that is not a date. Nothing was requested for it. |
NO_RESULTS | The company page was read and carried no posts by that company, or none on or after postedAfter. A renamed company lands here too, because the posts on the page that answers belong to a different slug. |
OVER_MAX_COMPANIES | This link was past maxCompanies, so it was not read. Raise it to read this one. |
NOT_COMPANY_POST | A post link whose post is not written by the company named in the link. |
NOT_SERVED | The company page or post was not served this run, so nothing on it could be read. Re-run it later. Runs before 13 October 2026 wrote BLOCKED here. |
RATE_LIMITED | LinkedIn was getting too many requests and did not send the page. Re-run it in a few minutes. |
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. |
UNEXPECTED_ERROR | The run stopped early on an unexpected error. The results before this row are kept. |
A sample or diagnostic row never fails the run, TIME_LIMIT and BAD_INPUT included: a run the time limit stopped before any post came back still ends as succeeded, with an amber status message.
💡 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, with
postedAfterset so the old posts are not paid for again.
🚧 What it does not do
- No post history. Only the recent few. No paging.
- No list of who reacted or commented, and no comment text. Counts only.
- No reaction breakdown by type and no repost count.
- No personal posts. Only posts by the company itself. Employee posts and partner posts on the page are left out on purpose, and so are plain reposts.
- No video files. A video gets its type and cover picture, never the file.
- No reshare chain. A post that quotes another comes with the company's own words, not the quoted post's text or author.
- 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 |
| A person's public profile from its link | LinkedIn Profile Scraper |
| A person's posts and reposts | LinkedIn Post Scraper |
| Posts that match keywords | LinkedIn Post Search Scraper |
| The comments on a post | LinkedIn Comments 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?
That is the ceiling for that company. Raising maxPostsPerCompany does not change it.
Why is the comment count empty?
Switch on Read each post's own page and the comment count comes from each post's page, at no extra charge.
Can I get only new posts?
Yes. Set postedAfter to a date and older posts are left out and not charged. There is no upper
date.
Can I call it from code or connect it to an AI assistant?
The API tab has code for Python, JavaScript
and the CLI. MCP clients like Claude and ChatGPT use
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/linkedin-company-posts-scraper; coding assistants can
load our skill file.
All three bill 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.