LinkedIn Profile Posts Scraper avatar

LinkedIn Profile Posts Scraper

Pricing

from $1.35 / 1,000 posts

Go to Apify Store
LinkedIn Profile Posts Scraper

LinkedIn Profile Posts Scraper

Posts from any LinkedIn person's public profile: text, exact publication time, reactions, comment counts, media and repost source. No login, no cookie. About a dozen recent posts per person, date and reaction filters 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

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Paste LinkedIn profile addresses — satyanadella, linkedin.com/in/reidhoffman — and get each person's recent posts as CSV, Excel or JSON: text, engagement, media, repost source and the exact minute each one was published. No LinkedIn account, no cookie, nothing to install.

{ "profiles": ["satyanadella", "reidhoffman"], "maxPostsPerSource": 12 }

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:

{
"postId": "7505114604155322368",
"postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7505114604155322368/",
"postedAt": "2026-09-14T04:05:59Z",
"sourceType": "profile",
"sourceKey": "satyanadella",
"text": "Great example from Jeff Hollan showing how Foundry makes long-running agents enterprise-ready, starting with business outcomes and building security, safety guardrails, auditability, and FinOps into the system from the start, across the entire multi-agent, multi-model workflow.",
"textLength": 278,
"reactions": 868,
"comments": 121,
"topReactions": "LIKE, PRAISE, EMPATHY",
"authorName": "Satya Nadella",
"authorUrl": "https://www.linkedin.com/in/satyanadella",
"authorType": "person",
"isRepost": false,
"mediaType": "image",
"mediaUrl": "https://media.licdn.com/dms/image/v2/D5605AQG49bxsEGAXHw/videocover-high/…"
}

The publication time is exact on every row

postedAt is a real timestamp — 2026-09-14T04:05:59Z — on every post. LinkedIn's public profile prints 1w and 2mo, never a date, so a column built by reading the page cannot be sorted or grouped. This one is recovered from the post itself and checked, wherever LinkedIn does print a time, against theirs; on those posts they agree to the second.

That is what lets you ask "how often does this person post", "what did they publish the week of the launch", or "which weekday gets them the most reactions" — from a spreadsheet, without opening a single post.

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 time, 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 wrote it, and whether that is a person or a company
isRepostWhether this is somebody else's content the person reshared
repostedByNameThe person who reshared it, 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 person reshares a colleague's post, authorName is the colleague who wrote it and repostedByName is the person whose profile you asked about. If a post quotes another post, authorName wrote the commentary and quotedAuthorName wrote what is being commented on. "Who wrote this" and "who chose to share it" are different questions and they stay different columns.

Filters, and why they are the cheap part

Every filter 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 fifty people costs the posts that are new, not the whole window every time.

Recipes

  • Watch the people who matter to you. Fifty profiles, postedAfter = last Monday, on a weekly schedule: one table of what your prospects, customers or competitors' executives said this week.
  • Study a thought leader. One profile, skipReposts on, sort by reactions: which topics and which mediaType earn the most.
  • Find who engages with someone. Turn includeComments on for the posts that cleared minReactions — commenter names and profile links come back.
  • Build a content calendar benchmark. Twenty profiles in your niche, group postedAt by weekday and hour.
  • Re-read one post. Paste its link into postUrls to refresh its counts or 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. 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 over three people is 3 requests and about 10 seconds for 36 posts. 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.

  • About a dozen recent posts per person. A public profile shows a fixed window and offers no way to ask for more. For the full history you would need a signed-in session, which this Actor does not use and does not ask for. Run it on a schedule with postedAfter and the history accumulates.
  • 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 are left out.
  • A profile that hides its activity from visitors comes back empty, is named in the run summary and is 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, 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 1,000 people's latest posts?

About 12 posts each is 12,000 rows: $16.20 on Gold, $24.00 on the Free plan. With comment text on, double it.

Can I get everything a person has ever posted?

No, and no listing that reads the public profile can: it shows about a dozen recent posts. This one says so, and a weekly run with postedAfter builds the history from here on.

Does it work for company pages too?

Yes — paste a company address into the same field and up to 70 posts come back with the same columns. There is a separate listing built around company pages if that is your main use.

What happens on a profile that does not exist?

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