LinkedIn Profile & Company Posts Scraper (Engagers & Comments) avatar

LinkedIn Profile & Company Posts Scraper (Engagers & Comments)

Pricing

from $1.20 / 1,000 results

Go to Apify Store
LinkedIn Profile & Company Posts Scraper (Engagers & Comments)

LinkedIn Profile & Company Posts Scraper (Engagers & Comments)

Scrape LinkedIn posts from profiles and companies, and extract engagers, reposts, and comments. Supports post URLs, runs in parallel, and delivers clean structured data for lead generation, analytics, and automation.

Pricing

from $1.20 / 1,000 results

Rating

5.0

(1)

Developer

Scraping Solutions

Scraping Solutions

Maintained by Community

Actor stats

5

Bookmarked

280

Total users

74

Monthly active users

6 days ago

Last modified

Share

LinkedIn Profile & Company Posts Scraper | Engagers & Comments

Extract public LinkedIn posts from profiles and company pages, or analyze specific post URLs directly. Optionally collect reactions, reposts, and comments in the same run for lead generation, content analysis, competitor monitoring, influencer research, and automated reporting.

The Actor accepts multiple targets, processes them concurrently, and writes every post or engagement record to one structured Apify dataset.

What this Actor does

  • Scrapes posts from public LinkedIn profiles.
  • Scrapes posts from public LinkedIn company and showcase pages.
  • Accepts direct LinkedIn post URLs for engagement extraction.
  • Optionally extracts people who reacted to each post.
  • Optionally extracts people who reposted or reshared each post.
  • Optionally extracts comments and preserves nested replies supplied with each comment.
  • Includes post text, media, author, publication time, and engagement statistics when available.
  • Processes multiple targets and post enrichments concurrently.
  • Retries temporary upstream failures with exponential backoff.
  • Streams successful batches to the default dataset and stops gracefully when the run charge limit is reached.

Feed scraping and direct post mode

The Actor supports two related workflows:

WorkflowInputBehavior
Profile or company feedProfile URL, company URL, company:slug, or plain usernameDiscovers up to maxPosts posts for each target, then optionally extracts reactions, reposts, and comments for every discovered post.
Direct post analysisLinkedIn post or feed-update URLUses that post as the engagement target without scanning a profile or company feed. The base post row can contain limited metadata, while selected engagement records are collected from the post URL.

includeQuotePosts and includeReposts filter posts discovered from profile or company feeds. They are different from scrapeReposts, which extracts the people or repost records associated with each selected post.

Quick start

  1. Add one or more values to targetUrls.
  2. Set the maximum number of posts for every profile or company target.
  3. Enable only the engagement datasets you need.
  4. Set a limit for reactions, reposts, and comments per post.
  5. Start the Actor and open the default dataset.
  6. Filter the type column to separate posts, reactions, reposts, and comments.

Profile and company posts

{
"targetUrls": [
"https://www.linkedin.com/in/satyanadella/",
"https://www.linkedin.com/company/google/"
],
"maxPosts": 10,
"includeQuotePosts": true,
"includeReposts": true,
"scrapeReactions": false,
"scrapeReposts": false,
"scrapeComments": false
}

Direct post with engagers and comments

{
"targetUrls": [
"https://www.linkedin.com/posts/example_activity-0000000000000000000-example"
],
"maxPosts": 1,
"scrapeReactions": true,
"maxReactions": 100,
"scrapeReposts": true,
"maxReposts": 50,
"scrapeComments": true,
"maxComments": 100,
"commentSortOrder": "Most relevant"
}

Accepted target formats

TargetExampleDetected mode
Profile URLhttps://www.linkedin.com/in/satyanadella/Profile feed
Company URLhttps://www.linkedin.com/company/google/Company feed
Showcase URLhttps://www.linkedin.com/showcase/example/Company feed
Explicit company slugcompany:googleCompany feed
Explicit profile slugprofile:satyanadellaProfile feed
Plain usernamesatyanadellaProfile feed
Post URLhttps://www.linkedin.com/posts/...activity-.../Direct post
Feed update URLhttps://www.linkedin.com/feed/update/urn:li:activity:...Direct post

Duplicate targets are normalized and removed before processing.

Input

FieldTypeRequiredDefaultDescription
targetUrlsarrayYesExamples in formProfile URLs, company URLs, post URLs, explicit prefixes, or plain usernames.
maxPostsintegerNo10Maximum posts per profile or company target. Set 0 to continue until the feed ends or an internal pagination, budget, or safety limit is reached.
includeQuotePostsbooleanNotrueInclude quote-type posts discovered in feeds.
includeRepostsbooleanNotrueInclude repost-type posts discovered in feeds.
scrapeReactionsbooleanNofalseExtract reaction or engager rows for each selected post.
maxReactionsintegerNo10Maximum reaction rows per post. Set 0 for all available results within internal safety limits.
scrapeRepostsbooleanNofalseExtract repost or reshare rows for each selected post.
maxRepostsintegerNo10Maximum repost rows per post. Set 0 for all available results within internal safety limits.
scrapeCommentsbooleanNofalseExtract comment rows for each selected post.
maxCommentsintegerNo10Maximum top-level comment rows per post. Set 0 for all available results within internal safety limits.
commentSortOrderstringNoMost relevantSelect Most relevant or Most recent.

Understanding result volume

Every post, reaction, repost, and top-level comment is a separate dataset row and a separate billable result. Nested replies remain inside their parent comment row and are not written as additional top-level dataset rows.

For example, one post with limits of 10 reactions, 10 reposts, and 10 comments can produce up to:

1 post + 10 reactions + 10 reposts + 10 comments = 31 dataset rows

If five posts are processed with the same limits, the theoretical maximum is 155 rows. Actual output can be lower because LinkedIn may expose fewer public records, pagination can end, filters can remove feed posts, duplicates can be skipped, or the run charge limit can be reached.

Output model

Use the type field to identify the schema of each dataset row:

typeCreated whenBillable row
postA profile/company post is discovered, or a direct post target is initialized.Yes
reactionscrapeReactions is enabled and a public engager is returned.Yes
repostscrapeReposts is enabled and a public reshare is returned.Yes
commentscrapeComments is enabled and a public top-level comment is returned.Yes

Fields can be absent when LinkedIn or the upstream source does not expose a value.

Post fields

FieldDescription
typeAlways post.
idLinkedIn activity or post identifier when available.
entityIdNormalized post identifier.
fullUrnFull LinkedIn URN when available.
shareUrnShare or UGC post URN when available.
linkedinUrlPublic LinkedIn post URL.
contentPublic post text.
postTypeProvider-reported post type, such as original, quote, or repost.
postLanguageCodeReported content language code.
author.typeprofile or company.
author.namePublic author or company name.
author.publicIdentifierProfile username when available.
author.linkedinUrlPublic author or company URL.
author.infoProfile headline or company follower summary when available.
author.followersCompany follower count when available.
author.avatar.urlPublic author or company image URL.
postedAt.timestampPublication Unix timestamp.
postedAt.datePublication date string.
postedAt.postedAgoShortRelative publication time.
postedAt.postedAgoTextRelative publication time.
engagement.likesTotal reported reactions.
engagement.commentsReported comment count.
engagement.sharesReported repost count.
engagement.reactionsReaction breakdown with type and count.
articleArticle metadata when the post contains an article.
postImagesPublic image objects containing URL, width, and height.
postVideoVideo thumbnail, temporary media URL, and duration when available.
documentDocument title, page count, URL, and thumbnail when available.
mediaProvider media object for formats not normalized separately.
resharedPostOriginal post metadata when the feed item is a reshare. Its nested shape can vary.
query.targetKindprofile, company, or post.
query.targetUrlOriginal target supplied by the user.
query.targetValueNormalized profile, company, or post target.

Reaction fields

FieldDescription
typeAlways reaction.
idComposite reaction identifier.
reactionTypeReported LinkedIn reaction type.
actor.idReactor URN or identifier.
actor.namePublic reactor name.
actor.linkedinUrlPublic reactor profile URL.
actor.positionPublic headline or position.
actor.pictureUrlPublic profile image URL.
actor.picture.urlThe same image represented as an object.
postIdAssociated LinkedIn post identifier.
query.postAssociated public post URL.

Repost fields

FieldDescription
typeAlways repost.
idRepost identifier.
linkedinUrlPublic repost URL.
reposter.idReposter URN or identifier.
reposter.namePublic reposter name.
reposter.linkedinUrlPublic reposter profile URL.
reposter.pictureUrlPublic profile image URL.
reposter.picture.urlThe same image represented as an object.
reposter.isPremiumReported LinkedIn Premium status when available.
resharedPostProvider-supplied original post object.
statsProvider-supplied repost engagement statistics.
visibilityReported visibility.
repostTypeProvider-reported repost type.
timestampRepost timestamp.
postIdAssociated original post identifier.
query.postAssociated original post URL.

Comment fields

FieldDescription
typeAlways comment.
idComment identifier.
linkedinUrlPublic comment URL when available.
commentaryPublic comment text.
createdAtComment creation date.
createdAtTimestampComment creation Unix timestamp.
createdAgoTextRelative creation time.
numCommentsReported number of replies.
reactionTypeCountsComment reaction breakdown with type and count.
actor.namePublic commenter name.
actor.linkedinUrlPublic commenter profile URL.
actor.positionPublic commenter headline.
actor.pictureUrlPublic commenter image URL.
actor.picture.urlThe same image represented as an object.
pinnedWhether the comment is reported as pinned.
editedWhether the comment is reported as edited.
repliesProvider-supplied nested replies. Nested fields can vary and are kept inside the comment row.
postIdAssociated post identifier.
query.postAssociated public post URL.

Example output

Post row

{
"type": "post",
"id": "7285003244957773826",
"entityId": "7285003244957773826",
"linkedinUrl": "https://www.linkedin.com/posts/example_activity-7285003244957773826-example/",
"content": "A public LinkedIn post used for analysis.",
"postType": "original",
"postLanguageCode": "en",
"author": {
"type": "profile",
"name": "Example Person",
"publicIdentifier": "example-person",
"linkedinUrl": "https://www.linkedin.com/in/example-person/",
"info": "Example headline",
"avatar": {
"url": "https://media.licdn.com/example-avatar.jpg"
}
},
"postedAt": {
"timestamp": 1787063530,
"date": "2026-08-18 14:32:10",
"postedAgoShort": "1d",
"postedAgoText": "1 day ago"
},
"engagement": {
"likes": 245,
"comments": 18,
"shares": 7,
"reactions": [
{"type": "LIKE", "count": 210},
{"type": "PRAISE", "count": 35}
]
},
"query": {
"targetUrl": "https://www.linkedin.com/in/example-person/",
"targetKind": "profile",
"targetValue": "example-person"
}
}

Reaction, repost, and comment rows

[
{
"type": "reaction",
"id": "7285003244957773826:urn:li:fsd_profile:123:LIKE",
"reactionType": "LIKE",
"actor": {
"id": "urn:li:fsd_profile:123",
"name": "Example Reactor",
"linkedinUrl": "https://www.linkedin.com/in/example-reactor/",
"position": "Marketing Director"
},
"postId": "7285003244957773826",
"query": {
"post": "https://www.linkedin.com/posts/example_activity-7285003244957773826-example/"
}
},
{
"type": "repost",
"id": "repost-123",
"linkedinUrl": "https://www.linkedin.com/posts/example-reposter_activity-000-example/",
"reposter": {
"id": "urn:li:fsd_profile:456",
"name": "Example Reposter",
"linkedinUrl": "https://www.linkedin.com/in/example-reposter/"
},
"postId": "7285003244957773826"
},
{
"type": "comment",
"id": "comment-789",
"commentary": "Useful analysis. Thanks for sharing.",
"createdAt": "2026-08-18",
"numComments": 2,
"actor": {
"name": "Example Commenter",
"linkedinUrl": "https://www.linkedin.com/in/example-commenter/",
"position": "Growth Lead"
},
"pinned": false,
"edited": false,
"replies": [],
"postId": "7285003244957773826"
}
]

The example values are illustrative. Field names and row types match the Actor's current output contract.

Pricing

This Actor uses pay-per-event pricing. One apify-default-dataset-item event is charged for every post, reaction, repost, or comment row successfully delivered to the default dataset.

Apify planPer dataset row500 rows1,000 rows5,000 rows
Free$0.00160$0.80$1.60$8.00
Starter / Bronze$0.00145$0.725$1.45$7.25
Scale / Silver$0.00135$0.675$1.35$6.75
Business / Gold$0.00120$0.60$1.20$6.00
Platinum / Diamond$0.00120$0.60$1.20$6.00

There is no Actor-start event in the current pricing configuration. Apify platform compute usage is charged separately. Confirm the current prices displayed in the Actor's Pricing tab before a large run.

Cost examples

ConfigurationMaximum rows per postFree-plan event cost per post
Post only1$0.0016
Post + 10 reactions11$0.0176
Post + 10 reactions + 10 comments21$0.0336
Post + 10 reactions + 10 reposts + 10 comments31$0.0496

These are maximum event-cost examples and exclude separate Apify platform usage. Public availability can produce fewer rows.

Use cases

Lead generation

Identify public professionals who react to, repost, or comment on relevant industry content.

Social media analytics

Compare post frequency, formats, topics, and public engagement for profiles and companies.

Competitor monitoring

Track public company posts and study who actively participates in competitor conversations.

Influencer and thought-leader research

Analyze content cadence, media formats, reactions, and comments around relevant LinkedIn creators.

Content performance

Compare reactions, comments, reposts, post types, and media formats across selected posts.

Campaign analysis

Collect public posts and engagement generated by executives, partners, advocates, or campaign participants.

Community research

Find recurring public engagers and commenters across multiple posts or target accounts.

Reporting and automation

Send structured LinkedIn data into spreadsheets, databases, CRMs, dashboards, and scheduled workflows.

Reliability and availability

  • Temporary rate limits and server errors are retried with exponential backoff.
  • Multiple targets are processed concurrently.
  • Engagement collection runs concurrently across discovered posts.
  • Posts and engagement records are delivered in batches during the run.
  • A failed enrichment request does not automatically discard previously delivered rows.
  • The Actor checks the remaining event budget before collecting and delivering additional rows.
  • Pagination stops when the public feed ends, repeats, reaches the selected limit, or reaches an internal safety cap.
  • LinkedIn can restrict, reorder, remove, or stop exposing public content without notice.
  • Private, restricted, deleted, malformed, or unavailable targets can produce fewer results or none.
  • Public image and media URLs can expire.

Export and integrations

Export the default dataset as JSON, JSONL, CSV, Excel, XML, HTML, or RSS. Run the Actor through the Apify API, save reusable Tasks, schedule recurring monitoring, trigger webhooks, connect supported automation tools, or include the Actor in compatible MCP workflows.

FAQ

Do I need a LinkedIn login or cookies?

No customer-provided LinkedIn login or cookies are required for supported public targets.

Can I process profiles, companies, and posts in one run?

Yes. Add all supported values to targetUrls. The Actor detects each target type automatically.

Is maxPosts applied to direct post URLs?

No feed pagination is needed for a direct post URL. It represents one post target. maxPosts controls profile and company feed discovery.

What does maxPosts: 0 mean?

It requests as many available feed posts as possible until the feed ends or an internal pagination, budget, or safety limit is reached. It does not guarantee an unlimited download.

What is the difference between includeReposts and scrapeReposts?

includeReposts decides whether repost-type posts remain in a profile or company feed. scrapeReposts creates separate rows describing people or records that reposted each selected post.

Are replies separate dataset rows?

No. Replies returned with a comment are stored inside that comment's replies array. Only the top-level comment creates a comment row.

Why did I receive fewer engagers than requested?

LinkedIn may expose fewer public records than the visible aggregate count. Pagination exhaustion, duplicate removal, deleted accounts, restrictions, upstream availability, safety caps, and the run charge limit can also reduce output.

Does enabling all enrichment options increase cost?

Yes. Every returned post, reaction, repost, and top-level comment is a separate billable dataset row. Use only the enrichment types required for your project.

What happens when the run reaches its maximum total charge?

The Actor stops requesting and delivering additional billable rows. Results already written to the dataset remain available.

Are duplicate targets removed?

Yes. Equivalent normalized targets are removed before processing. Pagination also tracks returned identifiers to prevent repeated engagement records where supported.

Can I use the Actor through API or MCP?

Yes. Use Actor ID Urr7eW7fzVO4CrILw through the Apify API or include it in compatible MCP workflows.

Can I export to CSV or Excel?

Yes. Use the default dataset's Export menu or retrieve the rows through the Apify API.

Does the Actor provide private contact information?

No. It returns fields made available through the supported public LinkedIn content and engagement sources.

What compliance requirements apply?

You are responsible for using the data lawfully and following applicable privacy, data-protection, intellectual-property, employment, marketing, and platform requirements.

Responsible use

Use public LinkedIn data lawfully and proportionately. Do not use the output for spam, harassment, unlawful profiling, discriminatory employment decisions, unauthorized surveillance, or attempts to bypass privacy controls. Respect applicable platform, intellectual-property, marketing, and data-protection requirements.

Categories

Lead Generation, Social Media, Marketing

Support

Open an issue on the Actor support page. Include the run ID, public target URL, selected limits and enrichment options, expected behavior, and actual behavior. Never include passwords, cookies, API keys, or private personal data.