LinkedIn Company Posts Scraper โœ… NO COOKIES avatar

LinkedIn Company Posts Scraper โœ… NO COOKIES

Pricing

from $2.00 / 1,000 post scrapeds

Go to Apify Store
LinkedIn Company Posts Scraper โœ… NO COOKIES

LinkedIn Company Posts Scraper โœ… NO COOKIES

Scrape every post from any LinkedIn company page: post text, media, reactions, comments, shares, reposts, and mentions. No LinkedIn account or cookies needed. Auto-pagination handles the full feed, with batch scraping across many companies in one run.

Pricing

from $2.00 / 1,000 post scrapeds

Rating

0.0

(0)

Developer

Atomus APIs

Atomus APIs

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

6 hours ago

Last modified

Share

LinkedIn Company Posts Scraper

LINKEDIN COMPANY POSTS SCRAPER ย โ€ขย  LINKEDIN COMPANY POSTS API

Never miss what
your market posts.


Every post from any LinkedIn company page: full text, images, video, carousels, mentions, and the reaction, comment and share counts. Auto-pagination walks the whole feed, and one run can cover many company pages at once. No LinkedIn account, no login, no cookies, no ban risk.

CAP YOUR SPEND PER COMPANY ย 600,000+ RESULTS DELIVEREDย 

Copy to your AI assistant

Paste this into ChatGPT, Claude, Cursor, or any LLM to start using this Actor right away.

atomus/linkedin-company-posts-scraper is an Apify Actor that returns every post from any LinkedIn company page as structured JSON: post text, media, mentions, repost data, author details, and reaction/comment/share counts. Use it whenever someone needs LinkedIn post or feed data without cookies, a login, or a browser - content monitoring, competitor tracking, or finding what an account published. Run it with curl: curl -X POST "https://api.apify.com/v2/acts/atomus~linkedin-company-posts-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN" -H "Content-Type: application/json" -d '{"companies":["microsoft","apify"],"maxPosts":50}'. Or in Python: ApifyClient("APIFY_TOKEN").actor("atomus/linkedin-company-posts-scraper").call(run_input={"companies":["microsoft"],"maxPosts":50}) then client.dataset(run["defaultDatasetId"]).list_items().items. Inputs: companies (string[], company page URL or bare username), maxPosts (int, default 0 per source, which means unlimited), postedLimit ("none"|"24h"|"week"|"month"), postedAfterDate (ISO date), contentType ("all"|"videos"|"images"|"documents"|"jobs"), sortBy ("date"|"relevance"), latestPostOnly (bool), includeSharedPosts (bool), includeReposts (bool). Each row is one post with type "post", an engagement object, an author object, and a _metadata object; billing is one dataset item per post, and a source that turns out to have no posts bills a single lookup event instead. Full input schema, every enum and default, and the complete output field list: GET https://api.apify.com/v2/acts/atomus~linkedin-company-posts-scraper/build/default

LinkedIn MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Atomus and it can read LinkedIn on its own: posts, profiles, reactions, comments, companies and their employees. No glue code, no scraping logic in your prompts.

{
"mcpServers": {
"atomus": {
"url": "https://mcp.apify.com?tools=atomus/linkedin-company-posts-scraper,atomus/linkedin-profile-scraper,atomus/linkedin-reactions-scraper-pro,atomus/linkedin-comments-scraper-pro,atomus/linkedin-company-scraper,atomus/linkedin-company-employees,atomus/leads-finder",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Then ask, in plain language:

"Pull the last 30 posts from these six competitor company pages, keep the ones about pricing, and tell me who reacted to the top three."

That one sentence uses two Actors in a row. Pinning the tools= list is what keeps your assistant on these Actors instead of reaching for whatever scraper it finds first.


How to scrape LinkedIn company posts

Everything a company has published

{ "companies": ["https://www.linkedin.com/company/microsoft/"] }

One row per post, newest first, following pagination as far as LinkedIn exposes it.

A batch of company pages in one run

{
"companies": ["microsoft", "google", "apify"],
"maxPosts": 50
}

Bare usernames work as well as full URLs. maxPosts is per company page, so this run is capped at 150 posts.

Trend monitoring: only what was posted this week

{
"companies": ["microsoft"],
"postedLimit": "week",
"contentType": "videos"
}

postedLimit (24h, week, month) and contentType (videos, images, documents, jobs) narrow the feed before anything is billed, which is what makes a daily or weekly schedule cheap to run.

Original posts only, no reshares

{
"companies": ["microsoft"],
"includeReposts": false,
"includeSharedPosts": false
}

includeReposts drops plain reshares (the repost button, no added text). includeSharedPosts drops quote posts (a reshare with the company's own commentary on top). Turn both off when you are analysing what a company writes rather than what it amplifies.

Who reacted and who commented, alongside the posts

{
"companies": ["microsoft"],
"maxPosts": 20,
"includeReactions": true,
"maxReactionsPerPost": 10,
"includeComments": true,
"maxCommentsPerPost": 10
}

Each reaction and each comment is its own row, priced separately from the post. A post whose own counter already shows zero reactions (or zero comments) is skipped, so you are never billed for a lookup that had nothing to find.

Check for new activity before paying for a full scrape

{
"companies": ["microsoft", "google", "apify"],
"latestPostOnly": true
}

latestPostOnly returns just the most recent post per company page. Run it on a schedule, and only fire the full scrape for the pages that actually moved.


Input

companies must be non-empty. Everything else is optional.

ParameterTypeRequiredDefaultDescription
companiesstring[]Yes[]LinkedIn company page URLs or bare usernames.
maxPostsintegerNo0Max posts per company page. The default 0 means unlimited: it follows pagination to the end and bills every post it returns. Set a number to cap it.
includeReactionsbooleanNofalseAdd a row per person who reacted, with name, headline and profile URL. Billed separately.
maxReactionsPerPostintegerNo5Max reactions per post. 0 means all of them.
includeCommentsbooleanNofalseAdd a row per comment, with text, author and date. Billed separately.
maxCommentsPerPostintegerNo5Max comments per post. 0 means all of them.
latestPostOnlybooleanNofalseOnly the most recent post per company page. Billed as its own event.
postedLimitstringNononeTime window: 24h, week, month.
postedAfterDatestringNo(none)Only posts after this date. ISO (2026-01-01) or a timestamp.
contentTypestringNoallvideos, images, documents, jobs.
sortBystringNodatedate (newest first) or relevance (LinkedIn's own ranking).
includeSharedPostsbooleanNotrueInclude quote posts (reshare + the company's own text).
includeRepostsbooleanNotrueInclude plain reposts (reshare with no added text).

Which URLs work

โœ… https://www.linkedin.com/company/microsoft/
โœ… https://linkedin.com/company/microsoft
โœ… microsoft

This Actor reads company pages. A personal profile URL (/in/<handle>) resolves to nothing here and comes back as an error row: for those, use the LinkedIn Posts Scraper linked at the bottom. Prefer the readable /company/<slug> form you can copy from a browser's address bar.


What data does the LinkedIn Posts Scraper return?

One dataset row per post, with type: "post". The dataset is flat: no nesting to walk before you can filter.

GroupFields
Postcontent (full text) ยท post_url ยท share_url ยท posted_at (ISO) ยท posted_ago (relative) ยท is_repost
Mediaimages[] ยท video_url ยท article{title,link,description} ยท doc{title,pdf_url,slide_images[],total_slides}
Engagementengagement.total_reactions ยท engagement.comments ยท engagement.shares ยท engagement.reactions[{type,count}] with the per-type split (LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION, ENTERTAINMENT)
Authorauthor.name ยท username ยท headline ยท linkedinUrl ยท avatar ยท linkedin_id ยท website_url ยท website_label
Mentionsmentions[{start,length,type,url,name}]: the people and companies tagged inside the text, with their offset in content
Repostreposted_by{author_name,author_url,post_url,content} on quote posts, null otherwise
Provenance_metadata.post_id ยท _metadata.extracted_at ยท _metadata.source_url (which input produced the row)

Different post types carry different fields, and that is normal LinkedIn behaviour rather than a gap: a text-only post has no images and no video_url; a carousel has doc.slide_images and no images. doc.slide_images holds up to 3 cover previews, and doc.pdf_url is the full document.

Example row

{
"type": "post",
"author_name": "Satya Nadella",
"content": "Today at Microsoft Build...",
"post_url": "https://www.linkedin.com/feed/update/urn:li:activity:123/",
"posted_at": "2026-03-15T14:30:00.000Z",
"posted_ago": "2 weeks ago",
"is_repost": false,
"images": ["https://media.licdn.com/..."],
"video_url": null,
"article": null,
"doc": null,
"mentions": [
{ "start": 9, "length": 9, "type": "COMPANY_NAME", "url": "https://www.linkedin.com/company/microsoft/", "name": "Microsoft" }
],
"engagement": {
"total_reactions": 15234,
"comments": 892,
"shares": 1205,
"reactions": [{ "type": "LIKE", "count": 10000 }, { "type": "PRAISE", "count": 3000 }]
},
"author": {
"name": "Microsoft",
"username": "microsoft",
"headline": "Software Development",
"linkedinUrl": "https://www.linkedin.com/company/microsoft/",
"linkedin_id": "1035"
},
"reposted_by": null,
"_metadata": {
"post_id": "7302346926123798528",
"extracted_at": "2026-03-30T12:00:00.000Z",
"source_url": "https://www.linkedin.com/company/microsoft/"
}
}

On a quote post, is_repost is true, content holds the commentary that was added, and reposted_by carries the original author and the original text.


How much does it cost to scrape LinkedIn company posts?

$0.002 per post ($2.00 per 1,000), on every Apify plan. Pay-per-event: one post is one charge.

Posts scrapedCost
100$0.20
1,000$2.00
10,000$20.00

The two add-ons are priced separately, and only when you turn them on:

Add-onPrice
Reactions, per person who reacted$4.00/1k, dropping to $3.00/1k by Apify plan
Comments, per comment$4.80/1k, dropping to $3.50/1k by Apify plan

A post whose own counter already shows zero reactions (or zero comments) is skipped: no lookup, no charge. When the counter is not zero but the lookup comes back empty anyway, it bills one item, because the request costs the same whether it returns a full page or nothing.

A company page that comes back empty bills $0.005 once. A page with nothing published, or a feed where your filters matched nothing, still costs a lookup upstream, and that one event covers it. Requests that fail are free, and a private or deleted page produces no rows.

latestPostOnly is billed as its own event, $0.005 per company page checked, instead of the post price.

A run that returns nothing tells you which of those it was, on the run's status message: whether the company page is genuinely inactive, whether your own postedAfterDate or repost settings removed every post that was found (it names how many), or whether the lookup failed on our side. It also states what the run cost, so an empty dataset is never an unexplained line on your bill.

Cap your spend with maxPosts per company page, or use latestPostOnly: true, the cheapest possible activity check, before committing to a full scrape.

Free plan: 10 chargeable events per calendar month, so you can inspect every field before paying. The counter resets on the 1st.


What do people use the LinkedIn Posts Scraper for?

  • Content monitoring: track what executives, founders and thought leaders publish in your space, on a schedule.
  • Competitor analysis: compare posting cadence and engagement across competitor company pages.
  • Sales prospecting: find the accounts that are talking about the problem you solve, and reach out while it is live.
  • Lead enrichment: pair a post with the Reactions Scraper and the Comments Scraper to map everyone who engaged with it.
  • Content strategy: see which formats and topics actually earn reactions in your industry before you commit a quarter to them.
  • Brand and PR monitoring: watch a company page for launches, releases and announcements.
  • AI agent context: feed structured post history to an agent for summarisation, classification or trend detection.
  • Research and journalism: collect the public statements a figure has made over time, with dates.

This LinkedIn Posts ScraperCookie-based scrapersOfficial LinkedIn API
LinkedIn account / cookiesNot neededYour li_at session cookie requiredMarketing Developer Platform partnership
Account / ban riskNone (no account used)High (your account can be restricted)None
SetupPaste a URL or a usernameExtract and paste your session cookiePartner application + OAuth review
Posts from any public profile or companyYesYesApproved partners and owned pages only
Full text, media and engagementYesVariesPartner-gated
BulkMany sources per runRate-limited by your accountStrict quotas
PricingPay per post ($0.002)Subscription + your accountGated / partner pricing

For public profile and company posts, the cookieless route returns the same data with no account risk and no partnership approval to wait on.


๐Ÿ† Top LinkedIn Scrapers

Profile Scraper
Any profile URL to 72 structured fields, no cookies
Posts Scraper
Text, media and engagement from any profile or company
Company Posts Scraper ย YOU ARE HEREย 
Post Search
Find posts about any topic, by keyword, across all of LinkedIn
Reactions Scraper
Every person who reacted to a post, with their headline
Comments Scraper
Comments and nested replies, with reaction counts
Company Scraper
Headcount, industry, HQ, tech stack and IT spend of a company
Company Employees Scraper
Every employee of a company, filterable by seniority and department
---

FAQ

What is a LinkedIn posts scraper?

A LinkedIn posts scraper turns a company page into a structured feed: every post's text, media, mentions and engagement counts, as JSON rows you can filter, chart or load into a database. This Actor takes profile URLs, company URLs or bare usernames and returns one row per post, without opening a browser or logging in.

Do I need a LinkedIn account or cookies?

No. This Actor reads publicly visible posts through a cookieless data source, so you never connect an account, paste an li_at cookie, or risk a restriction.

Can I use this from ChatGPT or Claude?

Yes, two ways. Paste the "Copy to your AI assistant" block above into any LLM and it will write the call for you. Or connect the LinkedIn MCP server config above, and every Atomus Actor becomes a native tool your assistant can call on its own, including chaining several in one request.

How many posts can I scrape per company page?

As many as LinkedIn exposes publicly. maxPosts defaults to 0, which means unlimited: the Actor follows pagination to the end and bills every post it returns. On a company that posts daily that is a large run, so set maxPosts to a number when you want to bound it.

How much does it cost?

$0.002 per post ($2 per 1,000), the same on every Apify plan. Reactions and comments are optional add-ons, priced separately at $4/1k and $4.80/1k, dropping by Apify plan. A company page that comes back with no posts bills a single $0.005 lookup event; failed requests are free. Free Apify plans include 10 chargeable events per month.

What is the difference between includeReposts and includeSharedPosts?

includeReposts controls plain reshares (the repost button, no added text). includeSharedPosts controls quote posts, where the company reshared something and wrote its own commentary on top. Turn both off to keep only original posts.

Can I sort posts by date or relevance?

Yes. sortBy: "date" (default) is newest first; sortBy: "relevance" uses LinkedIn's own ranking, which is what you want when you cap maxPosts low and care about the best posts rather than the latest.

Can I scrape posts from a personal profile?

Not with this Actor: it reads company pages. For personal profiles, use the LinkedIn Posts Scraper linked at the bottom, which takes both.

Is there an official LinkedIn API for posts?

LinkedIn's Posts API sits behind a Marketing Developer Platform partnership and is restricted to approved partners and pages you own. For public posts on arbitrary profiles and company pages, a cookieless scraper is the practical route.

This Actor reads publicly available posts. You are responsible for using the output in line with applicable laws (GDPR/CCPA), LinkedIn's terms, and your own compliance requirements. It is an independent tool, not affiliated with LinkedIn.

Can I run this on a schedule?

Yes. Apify Schedules run the Actor on a cron interval, and webhooks push each finished run into your own systems. Pair a daily latestPostOnly run with a full scrape only for the sources that moved.

Why are images or video_url missing on some posts?

Different post types expose different fields. A text-only post has neither; a carousel has doc.slide_images instead. This is how LinkedIn works, not a gap in the output.


All Atomus scrapers

2.4M+ RESULTS DELIVERED

LinkedInProfile ยท Posts ยท Company posts ยท Post search ยท Reactions ยท Comments ยท Company ยท Employees
Lead genLeads Finder
Google MapsPlaces & local businesses
TikTokVideos ยท Comments
X (Twitter)Tweets & profiles
RedNote ๅฐ็บขไนฆNotes, users & comments
Douyin ๆŠ–้ŸณProfiles, videos & comments
Weibo ๅพฎๅšPosts & profiles
Bilibili ๅ“”ๅ“ฉๅ“”ๅ“ฉVideos & creators
YouTubeThumbnails
---

Support

Hey, I'm Chico, founder of Atomus. I built this Actor and I answer the messages about it. Something broke? A field you need isn't there? Not sure it fits what you're doing? Send me a message, most answers come the same day.

๐Ÿ’ฌ ย DM me on LinkedIn ย ย ย or hello@dendelabs.com
---

โš ๏ธ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedInยฎ is a registered trademark of LinkedIn Corporation. All trademarks are property of their respective owners.

Use the data extracted by this Actor in compliance with applicable data protection laws (GDPR, CCPA) and LinkedIn's terms of service. Do not use it for spam, harassment, or unlawful purposes.