Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
LinkedIn Post Comments Scraper icon

LinkedIn Post Comments Scraper

Scrape public LinkedIn post comments: text, author name, profile URL, reactions. No login or cookie. Up to 10 per post. $0.60 per 1,000 comments.

100 runs on Apify $0.0006 per comment ($0.6 / 1,000)
Run this in the cloudRun on Apify →

Social Media Scrapers

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust postUrls, maxCommentsPerPost, maxRetries (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.0006 per comment = $0.6 per 1,000

You are charged forWhenPrice
Comment returnedCharged once per genuine public LinkedIn comment row. Sample and diagnostic rows are never charged.$0.0006

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-10, and they are what you are actually charged.

Inputs

FieldWhat it doesType
postUrlsPublic LinkedIn activity URLs, /posts/ URLs containing activity-{id}, a bare activity ID, or urn:li:activity:{id}. Empty input returns one labeled, uncharged sample row.array
maxCommentsPerPostUpper bound on charged comment rows per post. LinkedIn's logged-out view exposes at most 10 top-level comments per post, so values above 10 have no effect.integer
maxRetriesHow many times to retry a post on a different proxy session and browser fingerprint before giving up and writing an uncharged diagnostic row.integer
requestTimeoutSecsMaximum duration of each page request, in seconds.integer

What you get

A structured dataset — each result includes fields like:

commentIdcommentTextauthorNameauthorProfileUrllikeCountcommentAgeTextpostUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

1 ready-to-run use cases

LinkedIn Post Comments Scraper

Get the comments on a LinkedIn post: author, text, time and reactions. Paste the post URL and run.

Related tools in Social Media Scrapers

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

RedNote Scraper iconSocial Media Scrapers

RedNote Scraper

Scrape public RedNote (Xiaohongshu) notes: description, author, likes, collects, comments, shares and images. No login. $0.90 per 1,000 notes.

Ready to run — no setup

RedNote (Xiaohongshu) Profile Scraper iconSocial Media Scrapers

RedNote (Xiaohongshu) Profile Scraper

Scrape RedNote (Xiaohongshu) profiles: nickname, RedNote ID, followers, likes, verified badge, IP location and recent notes. $2.90 per 1,000.

1 use cases

Douyin Hot Search Scraper iconSocial Media Scrapers

Douyin Hot Search Scraper

Get Douyin trending topics: rank, hot value, views, video count, badge and cover image. Hot, entertainment and society boards. No login. $0.40/1,000.

1 use cases

Facebook Comments Scraper iconSocial Media Scrapers

Facebook Comments Scraper

Scrape comments from any public Facebook post or reel: author, text, date, likes and replies. No login needed from you. $0.25 per 1,000 comments.

1 use cases

Facebook Groups Scraper iconSocial Media Scrapers

Facebook Groups Scraper

Scrape public Facebook group posts: author, text, time, permalink, photos, videos and engagement counts. No login needed. $0.70 per 1,000 posts.

Ready to run — no setup

Facebook Reels Scraper iconSocial Media Scrapers

Facebook Reels Scraper

Scrape public Facebook Page Reels: views, reactions, comments, shares, captions, hashtags, duration and MP4 links. No login needed. $0.35/1k.

1 use cases

See all Social Media Scrapers →

LinkedIn Post Comments Scraper: who commented on a public post, and what they said

Paste the URLs of public LinkedIn posts and get the comments back as rows: the comment text, the author's name, a link to their profile, the reaction count on the comment and how old it is. No account, no cookie.

Here is the limit, up front, because it decides whether this is any use to you. LinkedIn shows a signed-out visitor at most 10 top-level comments per post. That is what this returns. On a post with 760 comments you get ten of them, and no input setting changes that.

InputPublic post URLs, activity URLs or activity IDs
OutputOne row per comment
Ceiling10 comments per post, 200 posts per run
Account neededNone
Price$0.60 per 1,000 comments, flat on every plan

💬 What LinkedIn Post Comments Scraper does

A public post page carries its top comments in the page itself, for anyone, signed in or not. This reads that block, one post at a time, and turns each comment into a row.

Every row also carries the post it came from: the post author, the total reaction count and the total comment count. Those totals are the post's real numbers, so you can always see how big a slice you are holding. Ten of 760 is still ten of 760, and the row says so.

You can hand it a post URL in any of the shapes LinkedIn hands out: a /feed/update/urn:li:activity:... link, a /posts/...activity-<id> link, a bare activity id, or the urn:li:activity:<id> form. The same post listed twice is fetched once.

📥 What you give it

{
  "postUrls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123798528/",
    "7302346926123798528"
  ]
}
FieldDefaultWhat it is
postUrlsprefilled with an exampleUp to 200 posts. URLs, activity ids or URNs, mixed however you like. Leave it empty and you get one labelled sample row, free.
maxCommentsPerPost100A cap, not a target. The page only ever exposes 10, so anything above 10 does nothing. Set it to 3 if you only want the top few.
maxRetries41 to 8. How many times a post is tried again before the run gives up on it and writes a free diagnostic row.
requestTimeoutSecs205 to 60 seconds per request.
proxyConfigurationemptyLeave it as it is. It is here for callers who want the traffic to leave through servers they already pay for, which go in its own proxyUrls list.

A ugcPost URN is not an activity URN. If your link carries urn:li:ugcPost:, open the post in a browser and copy the activity URL from the address bar instead.

📤 What you get back

A real row from a recent run. The comment URL is cut short and one bookkeeping field is left out:

{
  "ok": true,
  "_sample": false,
  "sourceType": "public_linkedin_post_comment",
  "commentId": "7302369905079660544",
  "commentText": "Surprising that nobody here is discussing data sovereignty. Microsoft, as a US company, is subject to the CLOUD Act and Patriot Act, meaning AI-uploaded data or stored files could potentially be accessed by US authorities. ...",
  "commentUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123798528/?commentUrn=urn%3Ali%3Acomment%3A...",
  "authorName": "Richard Oerlemans",
  "authorProfileUrl": "https://ch.linkedin.com/in/richardoerlemans",
  "likeCount": 281,
  "commentAgeText": "1y",
  "approximateCreatedAt": "2025-09-20T14:47:23.564Z",
  "postActivityId": "7302346926123798528",
  "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123798528/",
  "postAuthorName": "Satya Nadella",
  "postReactionCount": 20352,
  "postCommentCount": 760,
  "retrievedAt": "2026-09-20T14:47:23.564Z"
}
FieldWhat it is
commentIdThe comment's own id. Your dedupe key across runs.
commentUrlA link that opens the post with that comment anchored, so you can check any row by hand.
authorProfileUrlThe commenter's public profile. Country subdomains like ch.linkedin.com are kept, because that is where the page lives. Feed it straight into the profile actor below if you want their details.
commentAgeTextLinkedIn's own wording: 1y, 9mo, 3w. That is the only date the page publishes.
approximateCreatedAtThe age above, subtracted from the time of the run. Good enough to sort by, wrong for anything that needs a real timestamp.
postReactionCount, postCommentCountThe post's totals, not your row count. The gap between postCommentCount and the rows you got is what is behind the login wall.

🧾 Reading the output

Three kinds of row, and only comments cost anything.

RowHow to spot itCharged
A commentsourceType: "public_linkedin_post_comment"yes
The sample row_sample: true, and it only appears when you run with empty inputno
A diagnosticok: false and _diagnostic: trueno

There is no charged field on these rows. sourceType is what separates a real comment from a sample or a diagnostic.

A diagnostic row carries an errorCode:

CodeWhat it means
BAD_INPUTNot a post URL, activity id or activity URN this actor can read. A ugcPost URN lands here.
NO_RESULTSThe post loaded and showed no comments to a signed-out visitor. This is a property of the post, not a bad run: trying again gets the same answer.
BLOCKEDThe post could not be read this time. A deleted post, a private post and a genuine refusal all land here; the details field on the row carries the status that came back.

Neither a sample nor a diagnostic row fails the run, and neither is charged.

▶️ How to run it

1. Open LinkedIn Post Comments Scraper and click Try for free. 2. Paste post URLs into Public LinkedIn post URLs or activity URNs, one per line. 3. Lower Maximum comments per post if you only want the top two or three. 4. Click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.60 per 1,000 comments. Flat on every Apify plan, no volume tiers.

One charge per comment row. A post that shows no comments to a signed-out visitor costs you nothing for results, and neither do sample or diagnostic rows. A post you list twice is fetched once.

Ten comments per post is the practical ceiling, so a hundred posts is about a thousand rows at most.

💡 What people use it for

  • Pulling the people who engaged with a post that matters in your market, then looking them up.
  • Reading the objections under a competitor's announcement, in the words customers used.
  • Keeping a record of the public responses to your own posts, outside LinkedIn.
  • Spotting which commenters keep showing up across a set of posts in one industry.

🚧 What it does not do

  • No more than 10 comments per post. Not a setting, not a tier. It is what the page shows

without an account.

  • No replies. Top-level comments only.
  • No reaction lists. You get the count on a comment, not who reacted.
  • No exact timestamps. LinkedIn publishes 1y and 9mo, so that is what there is.
  • No image-only comments. A comment with no text is skipped rather than written as an empty

row.

  • No comments on private or deleted posts, and none from a post that hides them from

signed-out visitors. Many posts do.

  • No emails or phone numbers. You get the profile URL, and the rest is up to you.

🧭 Which LinkedIn scraper do you need?

If you wantUse
Comments under a postThis one
The posts themselves, by keywordLinkedIn Post Search Scraper
Recent posts from one personLinkedIn Profile Posts Scraper
Posts from a company pageLinkedIn Company Posts Scraper
Details for the commenters you foundLinkedIn Profiles Scraper

❓ Questions people ask

Can I get all 760 comments if I pay more? No. Ten is what a signed-out visitor sees, and this never signs in.

Do I need a LinkedIn account? No, and there is no cookie field. Nothing to paste, nothing to renew.

Why did a post return nothing? Because it shows no comments to signed-out visitors. The NO_RESULTS row tells you which post, and re-running it will not change the answer.

Are the dates real? commentAgeText is. approximateCreatedAt is that age subtracted from the run time, so treat it as an estimate.

Can I get the commenters' job titles? Not from here. Take authorProfileUrl into the profiles actor above.

Is scraping LinkedIn legal? This reads only what LinkedIn publishes to the open web. Comments are personal data, which GDPR and similar laws cover, so have a lawful reason for collecting them. Apify's write-up on scraping and the law is a reasonable starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the post URL. The errorCode and the details field on the diagnostic row usually explain it on their own.