LinkedIn Profile & Company Posts Scraper (Engagers & Comments)
Pricing
from $1.20 / 1,000 results
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
Maintained by CommunityActor stats
5
Bookmarked
280
Total users
74
Monthly active users
6 days ago
Last modified
Categories
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:
| Workflow | Input | Behavior |
|---|---|---|
| Profile or company feed | Profile URL, company URL, company:slug, or plain username | Discovers up to maxPosts posts for each target, then optionally extracts reactions, reposts, and comments for every discovered post. |
| Direct post analysis | LinkedIn post or feed-update URL | Uses 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
- Add one or more values to
targetUrls. - Set the maximum number of posts for every profile or company target.
- Enable only the engagement datasets you need.
- Set a limit for reactions, reposts, and comments per post.
- Start the Actor and open the default dataset.
- Filter the
typecolumn 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
| Target | Example | Detected mode |
|---|---|---|
| Profile URL | https://www.linkedin.com/in/satyanadella/ | Profile feed |
| Company URL | https://www.linkedin.com/company/google/ | Company feed |
| Showcase URL | https://www.linkedin.com/showcase/example/ | Company feed |
| Explicit company slug | company:google | Company feed |
| Explicit profile slug | profile:satyanadella | Profile feed |
| Plain username | satyanadella | Profile feed |
| Post URL | https://www.linkedin.com/posts/...activity-.../ | Direct post |
| Feed update URL | https://www.linkedin.com/feed/update/urn:li:activity:... | Direct post |
Duplicate targets are normalized and removed before processing.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
targetUrls | array | Yes | Examples in form | Profile URLs, company URLs, post URLs, explicit prefixes, or plain usernames. |
maxPosts | integer | No | 10 | Maximum posts per profile or company target. Set 0 to continue until the feed ends or an internal pagination, budget, or safety limit is reached. |
includeQuotePosts | boolean | No | true | Include quote-type posts discovered in feeds. |
includeReposts | boolean | No | true | Include repost-type posts discovered in feeds. |
scrapeReactions | boolean | No | false | Extract reaction or engager rows for each selected post. |
maxReactions | integer | No | 10 | Maximum reaction rows per post. Set 0 for all available results within internal safety limits. |
scrapeReposts | boolean | No | false | Extract repost or reshare rows for each selected post. |
maxReposts | integer | No | 10 | Maximum repost rows per post. Set 0 for all available results within internal safety limits. |
scrapeComments | boolean | No | false | Extract comment rows for each selected post. |
maxComments | integer | No | 10 | Maximum top-level comment rows per post. Set 0 for all available results within internal safety limits. |
commentSortOrder | string | No | Most relevant | Select 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:
type | Created when | Billable row |
|---|---|---|
post | A profile/company post is discovered, or a direct post target is initialized. | Yes |
reaction | scrapeReactions is enabled and a public engager is returned. | Yes |
repost | scrapeReposts is enabled and a public reshare is returned. | Yes |
comment | scrapeComments 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
| Field | Description |
|---|---|
type | Always post. |
id | LinkedIn activity or post identifier when available. |
entityId | Normalized post identifier. |
fullUrn | Full LinkedIn URN when available. |
shareUrn | Share or UGC post URN when available. |
linkedinUrl | Public LinkedIn post URL. |
content | Public post text. |
postType | Provider-reported post type, such as original, quote, or repost. |
postLanguageCode | Reported content language code. |
author.type | profile or company. |
author.name | Public author or company name. |
author.publicIdentifier | Profile username when available. |
author.linkedinUrl | Public author or company URL. |
author.info | Profile headline or company follower summary when available. |
author.followers | Company follower count when available. |
author.avatar.url | Public author or company image URL. |
postedAt.timestamp | Publication Unix timestamp. |
postedAt.date | Publication date string. |
postedAt.postedAgoShort | Relative publication time. |
postedAt.postedAgoText | Relative publication time. |
engagement.likes | Total reported reactions. |
engagement.comments | Reported comment count. |
engagement.shares | Reported repost count. |
engagement.reactions | Reaction breakdown with type and count. |
article | Article metadata when the post contains an article. |
postImages | Public image objects containing URL, width, and height. |
postVideo | Video thumbnail, temporary media URL, and duration when available. |
document | Document title, page count, URL, and thumbnail when available. |
media | Provider media object for formats not normalized separately. |
resharedPost | Original post metadata when the feed item is a reshare. Its nested shape can vary. |
query.targetKind | profile, company, or post. |
query.targetUrl | Original target supplied by the user. |
query.targetValue | Normalized profile, company, or post target. |
Reaction fields
| Field | Description |
|---|---|
type | Always reaction. |
id | Composite reaction identifier. |
reactionType | Reported LinkedIn reaction type. |
actor.id | Reactor URN or identifier. |
actor.name | Public reactor name. |
actor.linkedinUrl | Public reactor profile URL. |
actor.position | Public headline or position. |
actor.pictureUrl | Public profile image URL. |
actor.picture.url | The same image represented as an object. |
postId | Associated LinkedIn post identifier. |
query.post | Associated public post URL. |
Repost fields
| Field | Description |
|---|---|
type | Always repost. |
id | Repost identifier. |
linkedinUrl | Public repost URL. |
reposter.id | Reposter URN or identifier. |
reposter.name | Public reposter name. |
reposter.linkedinUrl | Public reposter profile URL. |
reposter.pictureUrl | Public profile image URL. |
reposter.picture.url | The same image represented as an object. |
reposter.isPremium | Reported LinkedIn Premium status when available. |
resharedPost | Provider-supplied original post object. |
stats | Provider-supplied repost engagement statistics. |
visibility | Reported visibility. |
repostType | Provider-reported repost type. |
timestamp | Repost timestamp. |
postId | Associated original post identifier. |
query.post | Associated original post URL. |
Comment fields
| Field | Description |
|---|---|
type | Always comment. |
id | Comment identifier. |
linkedinUrl | Public comment URL when available. |
commentary | Public comment text. |
createdAt | Comment creation date. |
createdAtTimestamp | Comment creation Unix timestamp. |
createdAgoText | Relative creation time. |
numComments | Reported number of replies. |
reactionTypeCounts | Comment reaction breakdown with type and count. |
actor.name | Public commenter name. |
actor.linkedinUrl | Public commenter profile URL. |
actor.position | Public commenter headline. |
actor.pictureUrl | Public commenter image URL. |
actor.picture.url | The same image represented as an object. |
pinned | Whether the comment is reported as pinned. |
edited | Whether the comment is reported as edited. |
replies | Provider-supplied nested replies. Nested fields can vary and are kept inside the comment row. |
postId | Associated post identifier. |
query.post | Associated 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 plan | Per dataset row | 500 rows | 1,000 rows | 5,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
| Configuration | Maximum rows per post | Free-plan event cost per post |
|---|---|---|
| Post only | 1 | $0.0016 |
| Post + 10 reactions | 11 | $0.0176 |
| Post + 10 reactions + 10 comments | 21 | $0.0336 |
| Post + 10 reactions + 10 reposts + 10 comments | 31 | $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.
Related Actors by Scraping Solutions
- LinkedIn Posts Engagers | Likers, Commenters, Reshares
- LinkedIn Profile Comments & Reactions Scraper
- LinkedIn Jobs Intelligence & Hiring Signals
- LinkedIn Company Finder & B2B Lead Generator
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.