LinkedIn Post Comments Scraper: Top Comments, No Login avatar

LinkedIn Post Comments Scraper: Top Comments, No Login

Pricing

from $1.35 / 1,000 comments

Go to Apify Store
LinkedIn Post Comments Scraper: Top Comments, No Login

LinkedIn Post Comments Scraper: Top Comments, No Login

Scrape the comments LinkedIn shows a logged-out visitor under any public post: text, commenter name and profile link, exact time, reactions, and the post's author and full comment count. About 10 comments per post. No login.

Pricing

from $1.35 / 1,000 comments

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

10 LinkedIn comments with commenter, exact time and reactions in 4 seconds

From The Mine Works, makers of Amazon Product Scraper and B2B Leads Finder, with over 245,000 runs across 280+ public actors.

Updated 26 Oct 2026: first release. Post links, urns or ids in, one row per comment out: text, commenter name and profile link, exact time, reaction count, and the post's author and true comment count on every row. Bookmark this Actor on its Store page so it is one click away next time.

Read this first: how many comments you get

LinkedIn shows a visitor who is not logged in the first page of a post's comments only. That is 9 or 10 comments per post, ranked "most relevant" by LinkedIn, and a "See more comments" link that leads to its sign-up page. This actor does not log in, so 10 is the ceiling: in our test, 24 posts with 10 or more comments each returned 10 comments for 17 of them, 9 for 5, and fewer for 2 where LinkedIn hid some. Setting maxCommentsPerPost above 10 returns the same 10.

If you need every comment under a post, this is not the tool. If you need the top comments of many posts, with who wrote them and how many comments each post really has, in seconds and for cents, it is.

Guide and FAQs: LinkedIn Post Comments Scraper on themineworks.com.

Why choose this actor?

  • The comments LinkedIn ranks highest, with the people behind them. Text with line breaks, commenter name, canonical profile link (/in/ or /company/), whether it is a person or a page, profile picture, reactions on the comment, attached images, and whether the post's own author wrote it.
  • An exact time for every comment. LinkedIn shows "1mo". Each comment id carries its creation time, so posted_at is an ISO timestamp accurate to the second, next to posted_ago as LinkedIn shows it. We checked it against the dates LinkedIn publishes for the same comments.
  • The real size of the thread, on every row. post_comment_count is LinkedIn's own count of all comments on the post and post_comments_shown is how many a logged-out visitor can see, so you always know what you did not get. 35 posts in our test had 2,639 comments in total; LinkedIn showed 249 of them.
  • Cheap to run. A post page is about 22 KB over the wire (about 190 KB unpacked) and takes about 3 seconds. 257 requests in our tests at up to 12 at a time returned no refusals and no sign-in pages.
  • Pay per comment, nothing for errors. Links that are not posts, posts LinkedIn will not show, duplicates and the summary row are never charged. No LinkedIn account, cookies or API key.

Run it on Apify

Part of The Mine Works LinkedIn family: LinkedIn Company Scraper, LinkedIn Post Scraper, LinkedIn Employees Scraper, LinkedIn Profile Scraper, LinkedIn Email Finder, LinkedIn Newsletter Scraper.

Try it in one minute

Paste this into the input (JSON view) and press Start. It returns the first 10 comments of a public post by Satya Nadella that has 177 comments. It took 4 seconds in our test run:

{
"postUrls": ["https://www.linkedin.com/feed/update/urn:li:activity:7503582702164574208"],
"maxCommentsPerPost": 10
}

Put several posts on separate lines to read them in one run. A post that two of your inputs point at is delivered once.

Apify's free plan includes $5 of credit every month, which covers about 2,700 comments at this actor's price.

Copy to your AI assistant

themineworks/linkedin-post-comments-scraper on Apify. Reads the comments LinkedIn shows a logged-out visitor under public LinkedIn posts, with no login: about 10 per post (the first page, ranked most relevant), one flat row per comment. Call ApifyClient("TOKEN").actor("themineworks/linkedin-post-comments-scraper").call(run_input={"postUrls": ["https://www.linkedin.com/posts/microsoft_activity-7503582702164574208-jTf2"], "maxCommentsPerPost": 10}), then client.dataset(run["defaultDatasetId"]).list_items().items. Give postUrls (list of post links, urns such as urn:li:activity:7503582702164574208, or the bare number; up to 500 per run). Optional: maxCommentsPerPost (default 10, 1 to 100, LinkedIn shows at most about 10 logged out). Comment rows have no _type field and carry comment_id, comment_url, text, commenter_name, commenter_headline, commenter_profile_url, commenter_username, commenter_type, commenter_image_url, posted_at, posted_ago, reaction_count, image_urls, is_post_author, position, post_id, post_url, post_author_name, post_author_url, post_published_at, post_comment_count, post_reaction_count, post_comments_shown, scraped_at. Each run also writes one row with _type "summary", one with _type "info" when comments were delivered, and a row with _type "error" for each input that could not be read; none of these is charged. Replies, reply counts and the pinned mark are not shown to logged-out visitors and are not returned. Full spec: GET https://api.apify.com/v2/acts/themineworks~linkedin-post-comments-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral

Key features

  • Any post link. The link from "Copy link to post" (/posts/<name>_<words>-activity-<number>-<code>), a /feed/update/urn:li:activity:<number> link, an urn such as urn:li:ugcPost:<number>, or the bare number. Tracking parameters are ignored.
  • Post context on every row. Post id and link, author name and link, publish time, LinkedIn's comment and reaction counts for the post, and how many comments were shown. Group by post_id to compare posts.
  • LinkedIn's own order. position is the rank LinkedIn gives the comment (1 = first). It is the "most relevant" order, which favours comments with reactions.
  • Companies and people told apart. commenter_type is person, company, school or showcase, so you can filter pages out of a list of people.
  • Stops cleanly. A post LinkedIn answers with a sign-in page on two different IPs is reported as private or removed. Eight unreadable posts in a row end the run. The run stops before its time limit and keeps every row. The summary row says why.
  • A run summary with one entry per post: comments on the post, comments LinkedIn showed, comments delivered, requests used.

What you do not get

Say it before you buy it. Not shown to a logged-out visitor, so not in the data:

  • Comments past the first page (the 10 limit above).
  • Replies and reply counts. The page shows the comment, not its thread.
  • The pinned mark and the "Author" badge. is_post_author is worked out by comparing the commenter with the post's author instead.
  • Most commenters' headlines. LinkedIn prints a headline under a few commenters' names (7 of 249 comments in our test); commenter_headline has it when it is there and is empty otherwise.
  • Who reacted or reposted. Only counts are public.

How to use it

Basic: the top comments of a few posts

{
"postUrls": [
"https://www.linkedin.com/posts/microsoft_activity-7503582702164574208-jTf2",
"urn:li:activity:7508124905897467904",
"7506360360753364993"
]
}

One request per post. The three formats can be mixed.

Who engages with a competitor

Collect the links of a competitor's recent posts (the LinkedIn Company Posts Scraper lists them), paste them here, and filter the rows on commenter_type: "person". Each row carries commenter_profile_url for the next step.

Engagement check across many posts

{
"postUrls": ["...", "..."],
"maxCommentsPerPost": 3
}

post_comment_count and post_reaction_count are on every row, so even 3 comments per post give you LinkedIn's real counters for each post at the same price per comment.

Brand and sentiment sampling

Read the text of the highest ranked comments of your own posts or a campaign's posts. Because LinkedIn ranks by engagement, the sample leans toward the comments people reacted to.

Input parameters

ParameterTypeDefaultWhat it does
postUrlsarray of stringsrequiredPost links, urns or ids, one per line. Up to 500 per run.
maxCommentsPerPostinteger10Most comments per post, 1 to 100. LinkedIn shows about 10, so more than 10 returns the same 10.

What data do you get?

One row per comment. Comment rows have no _type field; the summary, info and error rows do, so a filter on _type separates them.

FieldWhat it is
comment_idLinkedIn comment id, e.g. 7503590284941774849
comment_urlLink to the comment (opens the post with the comment highlighted when you are signed in)
textComment text with line breaks. Empty for an image only comment
commenter_nameDisplay name, or the page name for a company
commenter_headlineHeadline when LinkedIn shows it (about 1 comment in 35)
commenter_profile_url, commenter_usernameCanonical https://www.linkedin.com/in/... link and its last part
commenter_typeperson, company, school or showcase
commenter_image_urlProfile picture, when the commenter has one
posted_at, posted_agoISO 8601 UTC time from the comment id, and the label LinkedIn shows (1mo, 4d)
reaction_countReactions on the comment
image_urlsImages attached to the comment, when there are any
is_post_authorTrue when the commenter is the person or page that wrote the post
positionPlace in LinkedIn's order, 1 = first
post_id, post_urlThe post's activity id and link
post_author_name, post_author_urlWho wrote the post
post_published_atWhen the post was published, from its id
post_comment_count, post_reaction_countLinkedIn's counters for the whole post
post_comments_shownHow many comments a logged-out visitor can see on this post
scraped_atWhen the row was written

Summary row (_type: "summary", never charged): posts_requested, posts_read, posts_failed, posts_with_comments, posts_without_comments, comments_delivered, charged_for, comments_shown_by_linkedin, comments_on_posts_total, comments_not_reachable, avg_comments_shown_per_post, duplicate_posts_skipped, http_requests, http_megabytes, bytes_per_comment_delivered, ended_on_deadline, stopped_by_max_cost, stopped_by_block_guard, shortfall_reason, and per_post. The same summary is saved as the OUTPUT record of the run.

Error rows (_type: "error", never charged): one per input that could not be read, with error_type (invalid_url, not_found, wall, blocked, layout, fetch_error), identifier, reason and http_status.

Stable fields for automations

These were present in every comment row of our test runs (249 rows from 35 posts), and their names will not change:

FieldWhat it is
comment_idThe key to store and join on
comment_urlLink to the comment
commenter_nameWho wrote it
commenter_profile_urlTheir profile or page
commenter_typePerson or page
posted_atExact time
reaction_countReactions on the comment
positionLinkedIn's rank
post_idThe post
post_comment_countThe post's full comment count
post_comments_shownHow many were visible

Optional, present only when LinkedIn shows a value: text (247 of 249; the rest were image only), commenter_image_url (207), image_urls (8), commenter_headline (7).

Output examples

A comment from the sample post, with the commenter's identity replaced by a placeholder (the shape and the other values are as returned, test run of 26 Oct 2026):

{
"comment_id": "7503590284941774849",
"comment_url": "https://www.linkedin.com/feed/update/urn:li:activity:7503582702164574208?commentUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A7503580660893118464%2C7503590284941774849%29",
"text": "Satya, this raises an interesting question beyond football.\nThe advantage may not simply come from giving coaches more information or more AI. It may depend on where AI enters the decision-making sequence.\n...",
"commenter_name": "Jordan Example",
"commenter_profile_url": "https://www.linkedin.com/in/jordan-example",
"commenter_username": "jordan-example",
"commenter_type": "person",
"commenter_image_url": "https://media.licdn.com/dms/image/v2/D4E03AQ.../profile-displayphoto-scale_400_400/...",
"posted_at": "2026-09-09T23:08:53Z",
"posted_ago": "1mo",
"reaction_count": 7,
"is_post_author": false,
"position": 1,
"post_id": "7503582702164574208",
"post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7503582702164574208",
"post_author_name": "Satya Nadella",
"post_author_url": "https://www.linkedin.com/in/satyanadella",
"post_published_at": "2026-09-09T22:38:46Z",
"post_comment_count": 177,
"post_reaction_count": 3020,
"post_comments_shown": 10
}

A company page that commented, from a Microsoft post:

{
"comment_id": "7519075396072656896",
"text": "The most useful measure of AI adoption is not how ...",
"commenter_name": "Example Tech",
"commenter_profile_url": "https://www.linkedin.com/company/example-tech",
"commenter_type": "company",
"posted_at": "2026-10-22T16:41:12Z",
"posted_ago": "3d",
"reaction_count": 1,
"position": 6,
"post_author_name": "Microsoft",
"post_author_url": "https://www.linkedin.com/company/microsoft",
"post_comment_count": 90,
"post_comments_shown": 10
}

The summary row of a 45 link run, trimmed (10 of the links led to posts that another link had already covered):

{
"_type": "summary",
"posts_requested": 45,
"posts_read": 35,
"duplicate_posts_skipped": 10,
"comments_delivered": 249,
"comments_shown_by_linkedin": 249,
"comments_on_posts_total": 2639,
"comments_not_reachable": 2390,
"avg_comments_shown_per_post": 7.1,
"http_requests": 47,
"http_newer_layout_cut": 2,
"http_sign_in_walls": 0,
"http_refused": 0,
"http_megabytes": 9.01
}

An error row for a link that is not a post (nothing charged):

{ "_type": "error", "error_type": "invalid_url", "identifier": "https://www.linkedin.com/in/satyanadella", "reason": "This is a profile or company link, not a post. Open the post, use \"Copy link to post\" from its three dots menu, and paste that link." }

Pricing

Pay per event: you pay for the comments you receive, plus a flat $0.003 per run, whatever memory you choose.

EventWhen it is chargedFree planBronze (Starter)Silver (Scale)Gold (Business)
comment-scrapedOnce per comment row stored in your dataset$1.80 per 1,000$1.80 per 1,000$1.80 per 1,000$1.35 per 1,000
run-startOnce per run, after the first post returned comments$0.003$0.003$0.003$0.003

The price of one comment is the price per 1,000 divided by 1,000.

Never charged:

  • inputs that are not LinkedIn posts (each gets an error row);
  • posts LinkedIn will not show to a visitor who is not logged in (private or removed posts);
  • a post that a second input of the same run points at;
  • comments past your maxCommentsPerPost;
  • the summary, info and error rows;
  • a run with no valid input, or one whose posts show no comments: the start fee is charged only once a post has returned comments;
  • anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

Run it on a schedule

  1. Open the actor in Apify Console, set your input and click Save as a new task.
  2. In the task, open Schedules, click Add schedule and pick how often (every day, every Monday at 08:00 and so on).
  3. Compare runs on comment_id to see new top comments, and on post_comment_count to watch a post's thread grow.
  4. Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.

FAQ

What does this actor read?

The public page LinkedIn serves for a post to a visitor who is not logged in: the post's counters and the first page of its comments, as anyone sees them in a private browser window. It does not log in, send anything to LinkedIn, or read what sits behind the sign-in page.

Why only about 10 comments per post?

Because that is all LinkedIn shows a visitor who is not logged in. We tried the sort order, paging parameters, a comment deep link, the embed page and the mobile host on a post with 177 comments: every one returned the same 10 comments, no comments, or a redirect. A tool that returns hundreds of comments per post has to be logged in as someone. This one is not, on purpose, so it cannot do that.

Can I get replies?

No. The logged-out page shows comments without their replies and without reply counts. Neither is in the rows.

Why is commenter_headline usually empty?

LinkedIn prints a headline under the commenter's name for about 1 comment in 35 when you are not logged in. The headline is on the commenter's profile page, but LinkedIn refuses most profile requests from cloud servers and each profile page is about 700 KB, so we do not fetch them. If you need headlines, use the commenter_profile_url column with our LinkedIn Profile Scraper.

Why did some of my posts return an error?

wall means LinkedIn sent the visitor to its sign-in page on two different IPs: the post is private, was removed, or the id is wrong. not_found is an HTTP 404. blocked means LinkedIn refused the request on every try. Each failed post has an error row with the reason, and nothing is charged for it.

Do posts with no comments cost anything?

No. A post that shows no comments produces no rows and no charge. Its counters appear in the summary row.

How long does a run take?

In our tests: 4 seconds for the "Try it" input, 68 seconds for 45 links (35 distinct posts) at three posts at a time, and 90 requests in 45 seconds at six at a time. The default time limit is 3,600 seconds; the actor stops before it and keeps every row.

Do I need an account, cookies or a proxy?

No. The actor reads public pages over Apify Proxy, which is included. Nothing to set up.

Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has two ready views: Comments, and Comments by post. In CSV and Excel, image_urls is flattened into columns.

Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/linkedin-post-comments-scraper

  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http linkedin-post-comments-scraper "https://mcp.apify.com/?tools=themineworks/linkedin-post-comments-scraper"

Is it legal to scrape LinkedIn post comments?

The actor reads only what LinkedIn shows to anyone without logging in. Comments are written by people, so names and profile links are personal data: you are responsible for how you use them, including GDPR and CCPA, and for LinkedIn's terms. This is general information, not legal advice.

Integrations

  • Google Sheets: send each run's comments to a sheet with Apify's Google Sheets integration; one row per comment fits a sheet as is.
  • Make, Zapier and n8n: start a run and read its dataset with the Apify apps and nodes, for example "top comments on our latest post to Slack every Monday".
  • Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
  • API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
  • MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

More from The Mine Works

LinkedIn

Social media and video

Leads and business directories

Marketing, SEO and reviews

Real estate

Science, health and government data

Jobs and hiring

Company and business data

E-commerce and marketplaces

Food and local services

Developer and AI tools

More tools

Support

Found a post that shows more comments in a private browser window than this actor returns, or a field that comes back empty? Open an issue in the Issues tab with the post link and the run ID, and we will look at it. For a field you need or a new source, email dmineworks@gmail.com.

Read the top comments of any public LinkedIn post, with the commenter, profile link, exact time, reactions and the post's true comment count, about 10 per post, no login.