LinkedIn Post Comments & Engagements Scraper avatar

LinkedIn Post Comments & Engagements Scraper

Pricing

from $6.00 / 1,000 linkedin comment scrapeds

Go to Apify Store
LinkedIn Post Comments & Engagements Scraper

LinkedIn Post Comments & Engagements Scraper

Paste public LinkedIn post or article URLs to get each visible comment (text, commenter name, profile URL) plus one engagement summary per post with likes, reactions, comments and shares. No cookies or login needed.

Pricing

from $6.00 / 1,000 linkedin comment scrapeds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

25

Total users

4

Monthly active users

3 days ago

Last modified

Share

What is LinkedIn Post Comments & Engagements Scraper?

Paste public LinkedIn post URLs and get every visible comment plus one engagement summary per post, with no cookies or login. Use this Apify Actor to scrape known public LinkedIn post URLs and save one dataset record per post summary row and/or comment row. It accepts public LinkedIn post, feed update, and Pulse article URLs, then returns visible comments, commenter profile URLs, post authors, likes, reactions, comment counts, engagement totals, and scrape metadata. The output is organized so each record represents either a post-level engagement summary or an individual comment, which makes the dataset useful for CRM enrichment, lead research, analyst review, and Apify MCP workflows.

Each comment row carries the comment text, commenter name and profile URL, and the parent post's author and engagement totals, so commenters can go straight into a lead list. It is an Apify Actor usable through Apify MCP.

Best fit and connected workflows

This Actor fits well when you already have a list of public LinkedIn post URLs and want to turn those URLs into structured engagement data.

Typical workflows include:

  • social listening around specific posts or articles
  • comment-based lead research from known public posts
  • engagement review for sales and marketing teams
  • enrichment pipelines that start with a post URL and continue into downstream filtering, tagging, or reporting
  • AI-agent workflows that need structured comment and engagement records from a known LinkedIn URL set

Because the Actor accepts explicit URLs, it works naturally as the collection step after URL discovery. If your workflow begins with searching or finding posts first, you can route the discovered URLs into this Actor for comment and engagement extraction.

Practical scenario

A sales researcher has a spreadsheet of public LinkedIn post URLs from a conference speaker list. She sends those URLs into this Actor with outputMode set to both. The dataset returns the post author name, post title, reaction count, comment count, and the visible comment text plus commenter profile URLs. She uses the post author and commenter fields to decide which posts show active public discussion, then forwards the commenter profile URLs to her review queue for manual follow-up.

Input fields

FieldTypePurpose
postUrlsarray of stringsOne or more public LinkedIn post, feed update, or Pulse article URLs. Required.
maxPostsintegerCaps the number of unique post URLs processed from the input list.
maxCommentsPerPostintegerCaps the number of comment rows saved for each post. Use 0 when you only want post-level rows.
outputModestringSelects both, comments, or posts.
dedupeCommentsbooleanRemoves duplicate comments per post using comment URL, commenter profile URL, and text.
maxConcurrencyintegerSets how many post URLs are processed in parallel.

Focused JSON input example

{
"postUrls": [
"https://www.linkedin.com/pulse/being-father-has-made-me-better-leader-vice-versa-austen-allred/"
],
"maxPosts": 10,
"maxCommentsPerPost": 25,
"outputMode": "both",
"dedupeComments": true,
"maxConcurrency": 2
}

Output fields

The dataset can include post summary rows, comment rows, or both. Every saved row includes recordType, postUrl, source, and scrapedAt.

FieldTypeMeaning
recordTypestringpost for a summary row or comment for a comment row.
postUrlstringOriginal LinkedIn post URL from the input.
resolvedPostUrlstring or nullCanonical URL for the post.
postIdstring or nullLinkedIn activity or article identifier when available.
postTitlestring or nullPost title, article name, or headline when available.
postTextstring or nullVisible post body or article description.
datePublishedstring or nullPublication date or timestamp.
postAuthorNamestring or nullVisible author name.
postAuthorUrlstring or nullLinkedIn profile or page URL for the author.
postAuthorFollowersinteger or nullAuthor follower count when exposed.
likeCountinteger or nullPost like count when exposed.
reactionCountinteger or nullTotal post reaction count when exposed.
commentCountinteger or nullTotal post comment count when exposed.
shareCountinteger or nullShare or repost count when exposed.
engagementCountinteger or nullConvenience total of available likes or reactions, comments, and shares.
commentsSavedinteger or nullNumber of comment rows saved for the post.
commentPositioninteger or nullOne-based position of the comment in the public list.
commentIdstring or nullComment identifier when available.
commentTextstring or nullVisible LinkedIn comment text.
commentUrlstring or nullDirect comment URL or permalink when available.
commenterNamestring or nullVisible commenter name.
commenterProfileUrlstring or nullLinkedIn profile URL for the commenter when exposed.
commenterHeadlinestring or nullVisible commenter headline when exposed.
commentReactionCountinteger or nullReaction or like count for the comment when exposed.
replyCountinteger or nullReply count for the comment when exposed.
sourcestringCollection route for the record (primary).
runIdstring or nullApify run ID that produced the record.
scrapedAtstringISO timestamp for when the row was saved.

Sample JSON output record

Sample comment row (commenter anonymised; other values from a real export):

{
"recordType": "comment",
"postUrl": "https://www.linkedin.com/pulse/being-father-has-made-me-better-leader-vice-versa-austen-allred/",
"resolvedPostUrl": "https://www.linkedin.com/pulse/being-father-has-made-me-better-leader-vice-versa-austen-allred",
"postTitle": "Being a Father Has Made me a Better Leader, and Vice Versa",
"datePublished": "2020-06-21T14:35:59.000+00:00",
"postAuthorName": "Austen Allred",
"postAuthorUrl": "https://www.linkedin.com/in/austenallred",
"likeCount": 217,
"reactionCount": 217,
"commentCount": 17,
"engagementCount": 234,
"commentPosition": 1,
"commentText": "Austen, thanks for sharing!",
"commenterName": "Example Commenter",
"commenterProfileUrl": "https://www.linkedin.com/in/example-commenter",
"source": "primary",
"scrapedAt": "2026-10-12T06:20:05.351Z"
}

How it works

The Actor reads each public LinkedIn post URL you supply and stores the results in the default dataset. Depending on outputMode, it writes post-level engagement summaries, comment rows, or both. Each run writes OUTPUT and RUN_SUMMARY with an outcome: COMPLETE, PARTIAL (some URLs could not be loaded), VALID_EMPTY (no public comments), INVALID_INPUT or UPSTREAM_FAILED (the source was unavailable for every URL; retry later).

The output is designed for two destinations:

  • The default dataset for row-level analysis
  • The default key-value store for the machine-readable run summary

Pricing

LinkedIn Post Comments Scraper - Comments & Engagements uses Pay per event pricing with Apify platform usage included. You pay the post-engagement-scraped event once per post summary row, the comment-scraped event once per comment row, and the small apify-actor-start event. For example, one post summary row and twenty comment rows are 1 post-engagement-scraped event plus 20 comment-scraped events. Set outputMode to comments or posts to pay for only the rows you need.

For the current pricing details, open the live Pricing tab on the Actor page. The pricing tab is the source of truth for event charges.

Use with AI agents (MCP)

This Actor is available as an Apify Actor usable through Apify MCP. It is a tool for retrieving structured LinkedIn post comments and engagement rows from known public URLs.

Actor identity: khadinakbar/linkedin-post-comments-engagements-scraper

A typical agent prompt can look like this:

Fetch the public LinkedIn post URLs I provide, return post-level engagement rows and visible comments, and preserve the commenter profile URLs, comment text, reaction counts, and scrape timestamps for downstream analysis.

How to interpret the output:

  • post rows summarize the post-level engagement context.
  • comment rows represent one visible comment each.
  • source identifies the collection route.
  • scrapedAt gives the time the row was saved.
  • runId connects the dataset row back to the Apify run that produced it.

Provenance and scope:

  • The Actor works from known public LinkedIn post URLs.
  • The contract includes post URLs, comments, commenters, post authors, likes, reactions, shares, and engagement totals.
  • Output reflects the public comments visible for each URL.

Pagination and cost guidance:

  • Use maxPosts to cap the number of unique URLs processed.
  • Use maxCommentsPerPost to cap comment rows saved per post.
  • Keep dedupeComments enabled for cleaner datasets.
  • Use outputMode to narrow the output to posts, comments, or both.
  • Keep maxConcurrency at the default when you want predictable run time and cost tracking.

Apify API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const actor = client.actor('khadinakbar/linkedin-post-comments-engagements-scraper');
const run = await actor.call({
postUrls: [
'https://www.linkedin.com/pulse/being-father-has-made-me-better-leader-vice-versa-austen-allred/'
],
maxPosts: 10,
maxCommentsPerPost: 25,
outputMode: 'both',
dedupeComments: true,
maxConcurrency: 2,
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(dataset.items);

Best results and outcome guidance

Start with exact public post URLs that already match the audience or topic you want to inspect. Use outputMode: both when you want the clearest combined view of post engagement and comment content. Set maxCommentsPerPost to 0 when you only need post-level metrics. Keep dedupeComments enabled for cleaner downstream analysis.

Continue the workflow

Builder's note

I built this for teams that turn engaged commenters into warm leads. I found that the dataset contract separates recordType into post and comment, which makes it straightforward to treat summary rows and comment rows differently in downstream workflows.

FAQ

Is this Actor for discovering LinkedIn posts by keyword?

This Actor is designed for known public LinkedIn post URLs. It works well after a discovery step that collects URLs.

Can I use it for post-level engagement only?

Yes. Set maxCommentsPerPost to 0 and choose outputMode: posts.

Can I save only comments?

Yes. Set outputMode: comments.

Does it return commenter profile URLs?

Yes, when LinkedIn shows the commenter's public profile for that comment.

Why are there fewer comment rows than the post's comment count?

The public view of a post shows a preview of its comments, often only a handful, and the Actor saves the comments that are publicly visible. RUN_SUMMARY.postResults[].commentsAvailable shows how many were visible for each post, so set maxCommentsPerPost to match.

Does it work with Apify MCP?

Yes. It is an Apify Actor usable through Apify MCP and returns structured dataset rows for agent workflows.

Responsible use

Use the output in line with applicable laws, LinkedIn-related platform terms, privacy requirements, and your own governance practices. The Actor is intended for publicly visible LinkedIn data. Respect data minimization, store only the fields you need, and review any downstream use of commenter or author information before sharing it further.