LinkedIn Company Posts Scraper avatar

LinkedIn Company Posts Scraper

Pricing

from $1.35 / 1,000 posts

Go to Apify Store
LinkedIn Company Posts Scraper

LinkedIn Company Posts Scraper

Posts from any LinkedIn company page or person: text, exact publication time, reactions, comment counts and media. No login, no cookie. Up to 70 posts per company, and a date filter so a repeat run only pays for what is new. Comment text optional.

Pricing

from $1.35 / 1,000 posts

Rating

0.0

(0)

Developer

Stable

Stable

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

6 days ago

Last modified

Share

Paste LinkedIn company pages, people, or single post links. Get their posts as CSV, Excel or JSON — text, engagement, media and the exact minute each one was published. No LinkedIn account, no cookie, nothing to install.

{ "companies": ["stripe"], "maxPostsPerSource": 70 }

Unofficial. This Actor is not affiliated with, endorsed by or sponsored by LinkedIn or Microsoft. It reads only publicly available pages, does not log in and does not bypass any access control. All product names and trademarks belong to their respective owners.

What one row looks like

From a real run, unedited except for the comment list, which is trimmed to one:

{
"postId": "7496332962540589056",
"postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7496332962540589056/",
"postedAt": "2026-08-20T22:30:53Z",
"sourceType": "company",
"sourceKey": "stripe",
"text": "Kraken is launching Krak Cards in the US, powered by Stripe Issuing. Spend crypto anywhere Visa is accepted.",
"textLength": 108,
"reactions": 105,
"comments": 7,
"topReactions": "LIKE, EMPATHY, PRAISE",
"authorName": "Stripe",
"authorHeadline": "1,657,349 followers",
"authorUrl": "https://www.linkedin.com/company/stripe",
"authorType": "company",
"isRepost": true,
"quotedAuthorName": "Kraken",
"quotedAuthorUrl": "https://www.linkedin.com/company/krakenfx",
"quotedText": "Krak Card has landed in the U.S. Most cards force a trade-off…",
"mediaType": "video",
"mediaUrl": "https://dms.licdn.com/playlist/vid/v2/D5605AQHqmHlYPqjGkA/…",
"commentsFetched": 5,
"commentList": [
{
"text": "Thats dope! Well done Kraken team!",
"commentedAt": "2026-08-21T09:07:16Z",
"authorName": "Oleh Muraviov",
"authorUrl": "https://ch.linkedin.com/in/oleh-muraviov-995a04161",
"likes": 0
}
]
}

The publication time is exact on every row

postedAt is a real timestamp — 2026-08-20T22:30:53Z — for the first post and for the seventieth alike. LinkedIn's own public page prints 2mo past the first few, so a date column built by reading the page runs out after ten posts. This one does not: it is recovered from the post itself and checked, where LinkedIn does print a date, against theirs. On the posts where both exist they agree to the second.

That matters the moment you sort, group by week, or ask "what did they publish between the funding round and the launch".

Fields

29 columns across a run; 12 on every row, the rest present when the post has them.

FieldWhat it is
postId · postUrlThe post's id, and a link that opens it
postedAtExact publication time, ISO 8601, UTC
postedAtSourceLinkedIn's own printed date, where it prints one — for checking the column above
text · textLengthThe post body, and its length
reactions · commentsLinkedIn's own totals
topReactionsWhich reactions, most used first: LIKE, PRAISE, EMPATHY, INTEREST, ENTERTAINMENT, APPRECIATION
authorName · authorHeadline · authorUrl · authorTypeWho posted it, and whether that is a person or a company
isRepostWhether this is somebody else's content
repostedByNameWho put it in the feed you asked about, when they are not the author
repostId · repostedAtThe reshare's own id and time, which differ from the original's
quotedAuthorName · quotedAuthorUrl · quotedTextThe post being quoted, when this one quotes another
mediaTypevideo, image, link or empty
mediaUrl · mediaUrls · thumbnailUrlDirect links to what is attached
linkUrl · linkTitleThe shared link and its headline
commentsFetched · commentListComment text, author, time and likes — when you turn comments on
sourceType · sourceKeyWhich of your inputs this row came from
scrapedAtWhen this row was read

A repost names both people

If a company reposts an employee, authorName is the employee who wrote it and repostedByName is the company that amplified it. If a post quotes another post, authorName wrote the commentary and quotedAuthorName wrote what is being commented on. These are different relationships and they stay different columns, because "who wrote this" and "who chose to share it" are different questions.

Filters, and why they are the cheap part

Every filter here is decided before a row is stored, so a post a filter drops costs you nothing — no charge, and no second request for its comments.

FilterUse
postedAfter · postedBeforeBoth bounds include the day you name
minReactions · minCommentsAgainst LinkedIn's own totals
skipRepostsOnly what they wrote themselves
onlyWithTextDrops a bare reshare with no words of its own

postedAfter is the one that pays for itself. Set it to your last run's date and a weekly check over a company that posts twice a week costs two posts instead of seventy.

Recipes

  • Watch a competitor's page weekly. companies, postedAfter = last Monday. Schedule it and you get only what is new.
  • Find who engages. Turn includeComments on for the posts that cleared minReactions — you get commenter names and profile links.
  • Study what works. Run one company at maxPostsPerSource: 70, then sort by reactions and group by mediaType and hour of postedAt.
  • Track one person's output. Put them in profiles; about a dozen recent posts come back with the same columns.
  • Re-read one post. Paste its link into postUrls to refresh its counts, or to pull its comments on their own.

What it costs

Pay per event, and there are exactly two:

EventWhat it isGOLD, per 1,000
PostOne stored post, all its columns$1.35
Post with commentsThe extra request that fetches comment text$1.35

Comments are charged once per post, not once per comment. A post with two comments and a post with forty cost the same. Turning comments off — the default — means that event never fires.

PlanPer 1,000 posts
Free$2.00
Bronze$2.00
Silver$1.70
Gold · Platinum · Diamond$1.35

A run of 70 posts from one company is 7 requests and about 11 seconds. Apify's $5 of monthly free credit is roughly 2,500 posts on the free plan, or about 1,250 with comments on.

Limits

Said plainly, because they are properties of what LinkedIn shows the public and no scraper can talk them away.

  • 70 posts per company page. That is where LinkedIn's public feed stops. Ask for more and you still get 70; the run summary names every company that reached the ceiling, so a company that stopped at 70 is never confused with a company that has only 70 posts.
  • About a dozen posts per person. A public profile shows a fixed window and offers no way to ask for more.
  • Comments are the ones a signed-out visitor sees — usually the first handful, not all of them. The full count is in comments on every row regardless, and commentsFetched says how many actually came back.
  • No reactor list. Counts and the top reaction types, not the names of the people who reacted.
  • Long-form articles are not posts. A person's /pulse/ articles are a different content type with no exact timestamp, and they are left out rather than mixed into the same columns.
  • A company's name is not its address. Back Market lives at back-market. A wrong address is reported by name in the summary and never charged for.
  • Free-plan users get everything the paid plans do, at the Free rate above, until their platform credit runs out; the run then stops cleanly and keeps what it collected.

Output

CSV, Excel, JSON, XML or the API. Four ready-made views: Posts (what was said), Engagement (how it did), Authors (who said it) and Media. Every run also writes a RUN_SUMMARY with what was stored, what was filtered out and why, which companies hit the ceiling, and how much traffic it used.

FAQ

No. This reads the pages LinkedIn serves to a visitor who is not signed in. There is no field to paste a session into, and nothing about your account is involved.

How much does it cost to scrape 10,000 posts?

$13.50 on Gold, $20.00 on the Free plan. With comment text on, double it.

Why is a date filter cheaper than filtering afterwards?

Because the publication time is known before the row is stored. A post outside your window is never charged for and never triggers the second request that comments would need — so a repeating run costs what changed, not what exists.

Can I get all posts a company has ever published?

No, and no listing that reads the public page can. LinkedIn's public feed ends at 70 posts per company. This one says so and reports which companies reached it.

Does it work for people as well as companies?

Yes, in the same run — profiles takes public profile addresses. The window there is about a dozen recent posts, because that is all a public profile shows.

What happens on a post that no longer exists?

It is reported in the run summary by id and not charged for.