LinkedIn Profile Posts Scraper avatar

LinkedIn Profile Posts Scraper

Pricing

from $5.00 / 1,000 linkedin post scrapeds

Go to Apify Store
LinkedIn Profile Posts Scraper

LinkedIn Profile Posts Scraper

Scrape a LinkedIn person's recent public posts by profile URL. Returns post text, post URL, posted date, reactions, comments, shares, media, repost flag, and author identity. Provider-backed, no login or cookies. Charged $0.005 per post. MCP/API-ready.

Pricing

from $5.00 / 1,000 linkedin post scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

41

Total users

13

Monthly active users

2 days ago

Last modified

Share

LinkedIn Profile Posts Scraper — Posts by Person URL

LinkedIn Profile Posts Scraper is an Apify Actor for collecting a person's recent public LinkedIn posts by profile URL. It accepts one or more public linkedin.com/in/... profile URLs or bare vanity handles, and returns one dataset row per visible post or activity item from that profile's public activity preview. Each record can include post text, post URL, posted date, reactions, comments, shares, media, repost status, and author identity, plus a machine-readable run summary. This Actor is provider-backed, requires no LinkedIn login or cookies, and is usable through Apify MCP.

Best fit and connected workflows

This Actor fits workflows that start from a known LinkedIn person profile and need structured post data from that profile's recent public activity.

Common routing patterns include:

  • Prospect and account research: start with a person's profile URL, collect recent public posts, and review the post stream alongside the author's identity fields.
  • Social listening on individuals: track the public posting pattern of a founder, recruiter, executive, or creator from their profile URL.
  • Agent workflows: send a profile URL to an Apify MCP client and receive flat, structured rows that are easier to parse than free-form page output.
  • Data preparation pipelines: use authoredOnly, includeReposts, and enrichPostDetails to shape the output for tables, alerts, or review queues.

Practical scenario

Maya, a recruiter, has a candidate's public LinkedIn profile URL and wants the latest visible posts before a screening call. She runs the Actor with that profile URL, authoredOnly: true, and outputMode: "compact". The returned rows include authorName, postUrl, publishedAt, text, and activityKind, so she can see which posts were originally authored and which ones were reposts. She uses the most recent authored post as a discussion topic and then opens the postUrl for context.

Input

Use the profileUrls field for one or more public LinkedIn person profile URLs or bare handles. Each profile is resolved through managed data providers, so no LinkedIn login or cookies are required.

Input fields

FieldTypeRequiredDescription
profileUrlsarray of stringsYesPublic LinkedIn person profile URLs or handles whose recent posts you want. One handle per line is accepted.
maxPostsPerProfileintegerNoMaximum number of post rows saved per profile. Accepts 1 to 200. Default is 20.
authoredOnlybooleanNoKeeps only posts the profile owner authored themselves. Default is false.
includeRepostsbooleanNoIncludes reposts or shared content. Default is true.
enrichPostDetailsbooleanNoFetches full post details for exact engagement counts and fuller text. Default is false.
includeCommentsbooleanNoIncludes up to five public comments inside enriched post payloads. Default is false.
outputModestringNoUse full for richer post fields or compact for smaller agent records. Default is full.
includeRawDatabooleanNoAttaches raw provider payloads under rawPost and rawDetail. Default is false.
providerOrderstringNoChooses provider priority and fallback behavior. Default is scrapecreators-first.

Focused JSON example

{
"profileUrls": [
"https://www.linkedin.com/in/williamhgates/",
"satyanadella"
],
"maxPostsPerProfile": 20,
"authoredOnly": true,
"includeReposts": false,
"enrichPostDetails": false,
"includeComments": false,
"outputMode": "compact",
"includeRawData": false,
"providerOrder": "scrapecreators-first"
}

What you get

The default dataset contains one row per public post or activity item found for each requested profile. The table below shows the persisted dataset fields and how they are used.

Output fields

FieldTypeDescription
profileInputstringCanonical LinkedIn profile URL used as the source for the row.
profileUrlstring or nullPublic LinkedIn profile URL of the post author.
authorNamestring or nullPublic name of the profile owner who authored or shared the post.
authorHeadlinestring or nullProfile headline or about summary when outputMode is full.
authorLocationstring or nullPublic location of the profile owner when outputMode is full.
authorImagestring or nullPublic profile image URL when outputMode is full and exposed.
authorFollowersinteger or nullPublic follower count of the profile owner when exposed.
postUrlstring or nullPublic LinkedIn URL for the post, feed update, or article.
postIdstring or nullLinkedIn activity, share, article, or provider identifier when available.
activityTypestring or nullRaw activity label from the profile preview.
activityKindstringNormalized activity classification for filtering.
isRepostbooleanTrue when the profile owner reshared or reposted content from someone else.
isAuthoredbooleanTrue when the profile owner originally authored this post.
publishedAtstring or nullProvider-returned publication date or timestamp when available.
textstring or nullVisible post body, article text, or provider description.
likeCountinteger or nullPublic like count when available.
reactionCountinteger or nullTotal reaction count when available.
commentCountinteger or nullPublic comment count when available.
shareCountinteger or nullShare or repost count when available.
engagementCountinteger or nullConvenience total of available reactions or likes, comments, and shares.
mediaUrlstring or nullPrimary media or image URL when available.
mediaUrlsarray of stringsAll public media URLs when outputMode is full.
commentsPreviewarrayUp to five public comments returned inside an enriched post payload.
positionintegerOne-based position in the output order.
providerstringManaged data provider or provider chain used for the row.
runIdstring or nullApify run ID that produced the row.
scrapedAtstringISO 8601 timestamp when the row was saved.

Illustrative JSON record

{
"profileInput": "https://www.linkedin.com/in/williamhgates/",
"profileUrl": "https://www.linkedin.com/in/williamhgates/",
"authorName": "William H. Gates",
"authorHeadline": "Co-chair at the Gates Foundation",
"authorLocation": "United States",
"authorImage": "https://example.com/profile-image.jpg",
"authorFollowers": 30000000,
"postUrl": "https://www.linkedin.com/posts/williamhgates_example-activity-7354600338621906944",
"postId": "example-activity-7354600338621906944",
"activityType": "Posted by William H. Gates",
"activityKind": "posted",
"isRepost": false,
"isAuthored": true,
"publishedAt": "2026-01-01T12:00:00Z",
"text": "Example public post text",
"likeCount": null,
"reactionCount": 1234,
"commentCount": 56,
"shareCount": 12,
"engagementCount": 1302,
"mediaUrl": "https://example.com/media.jpg",
"mediaUrls": [
"https://example.com/media.jpg"
],
"commentsPreview": [
{
"commenterName": "Alex Kim",
"commenterProfileUrl": "https://www.linkedin.com/in/alexkim/",
"commentText": "Thanks for sharing this update.",
"commentReactionCount": 4,
"replyCount": 1
}
],
"position": 1,
"provider": "scrapecreators",
"runId": "example-run-id",
"scrapedAt": "2026-01-01T12:05:00Z"
}

How it works

The Actor resolves each requested profile through managed data providers. The live contract defines scrapecreators-first as the default provider order, with sociavault-first, scrapecreators-only, and sociavault-only available for explicit routing. Optional enrichment fetches each post's detail data for fuller text and exact engagement counts. includeComments adds a preview of up to five public comments inside enriched post payloads. The output is written to the default dataset, and a run summary is written to the default key-value store.

Pricing

This Actor uses Apify Pay per event pricing together with Apify platform usage pricing. The live contract charges an Actor start event, a LinkedIn post scraped event for each saved post row, and an optional Post detail enrichment event when enrichPostDetails is enabled.

For example, a run that saves ten posts and enriches three of them includes one Actor start event, ten post scraped events, and three post detail enrichment events, plus Apify platform usage for the run. For current pricing details, open the live Pricing tab on the Actor page.

Use with AI agents (MCP)

This Actor is available through Apify MCP as a structured tool for fetching recent public LinkedIn posts from a person profile URL. The exact Actor identity is khadinakbar/linkedin-profile-posts-scraper.

Tool description: provide one or more LinkedIn person profile URLs or handles, and the tool returns one record per public post or activity item, with optional enrichment for exact engagement counts and comments preview.

Fetch the recent public posts for this LinkedIn person profile URL. Return compact records, keep only authored posts, and include the dataset output so I can summarize the most recent topics and engagement fields.

Output interpretation:

  • activityKind gives the normalized type for downstream filtering.
  • isAuthored and isRepost help separate original posts from reshared content.
  • provider shows which managed provider or provider chain produced the row.
  • scrapedAt records when the row was saved.
  • commentsPreview is a preview inside enriched records, not a full comment archive.

Provenance and scope:

  • Records come from the public activity preview visible on the profile.
  • The Actor returns rows for public posts and other visible activity items exposed by the provider.
  • The dataset also carries profileInput, which links each row back to the requested profile URL.

Pagination and cost guidance:

  • maxPostsPerProfile caps the number of saved rows per profile and therefore caps billable post-scraped events per profile.
  • outputMode: "compact" keeps the payload smaller for agents.
  • enrichPostDetails: true adds post detail enrichment charges only for posts that are enriched.

API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor('khadinakbar/linkedin-profile-posts-scraper').call({
profileUrls: [
'https://www.linkedin.com/in/williamhgates/',
'satyanadella',
],
maxPostsPerProfile: 10,
authoredOnly: true,
includeReposts: false,
outputMode: 'compact',
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log('Run ID:', run.id);
console.log('Items:', dataset.items.length);
console.log(dataset.items);

Best results and outcome guidance

For focused results, start with a profile URL that clearly identifies one person, then choose the smallest field set that matches your workflow.

Helpful settings:

  • Use authoredOnly: true when you want only original posts from the profile owner.
  • Use includeReposts: false when reshared content is not relevant.
  • Use enrichPostDetails: true when exact reaction, comment, and share counts matter.
  • Use includeComments: true when you want the small public comments preview inside enriched records.
  • Use outputMode: "compact" when the data is headed into an AI agent or a compact table.

Continue the workflow

Design note

I found that the live dataset contract requires profileInput, activityKind, provider, and scrapedAt on every row, which keeps provenance and filtering available across all outputs.

FAQ

Can I pass a bare LinkedIn handle instead of a full profile URL?
Yes. The input contract accepts a bare vanity handle and expands it to a full /in/ profile URL.

Does this Actor return company-page feeds?
This Actor is built for person profiles. For company pages, use linkedin-company-posts-scraper.

Does it search by keyword or topic?
This Actor starts from a person profile URL. For keyword or general post search, use linkedin-posts-scraper.

Why might reaction or comment counts be missing?
The public profile preview often exposes only partial engagement data. Enable enrichPostDetails when you need exact counts.

Can I get the full public comment thread?
This Actor can include a comments preview inside enriched records. For exhaustive comment rows, use a dedicated comments actor.

Responsible use

Use this Actor to collect publicly visible LinkedIn profile post data in a way that respects applicable law, platform terms, and the rights of the people whose profiles you analyze. Keep usage aligned with legitimate research, analysis, and automation workflows. Review your downstream handling of personal data before storing, sharing, or enriching the output.