LinkedIn Comments Scraper avatar

LinkedIn Comments Scraper

Pricing

from $2.00 / 1,000 linkedin comments

Go to Apify Store
LinkedIn Comments Scraper

LinkedIn Comments Scraper

Extract clean, deduplicated comments visible on public LinkedIn posts, with original author profile URLs, reactions, timestamps, optional author details, and clear per-post coverage. No login or cookies.

Pricing

from $2.00 / 1,000 linkedin comments

Rating

0.0

(0)

Developer

Chronometrica

Chronometrica

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

๐Ÿ’ฌ What does LinkedIn Comments Scraper do?

LinkedIn Comments Scraper extracts clean, deduplicated comment data from public LinkedIn post pages. Paste your own public LinkedIn post or feed URLs. No LinkedIn login, cookies, account, or API key is required.

Each saved row is one visible top-level comment. It can include the original public author profile URL, text, reactions, publish time, stable IDs, direct comment links, mentions, and optional public author details. The OUTPUT record explains invalid URLs, duplicate inputs, missing public rows, partial coverage, failed inputs, and charge limits.

Use it for audience research, brand monitoring, content research, campaign review, spreadsheets, and automated data pipelines.

With LinkedIn Comments Scraper, you can:

  • ๐Ÿ’ฌ Collect comments visible on known public LinkedIn posts.
  • ๐Ÿ”— Use your own copied public post or feed URLs.
  • ๐Ÿ†” Save post URNs, activity IDs, UGC post IDs, and public comment IDs.
  • ๐Ÿ‘ค Collect public author names, original profile links, and profile images.
  • ๐Ÿ”Ž Add public author IDs, headlines, locations, and organizations when needed.
  • ๐Ÿท๏ธ Identify public profile mentions and comments by the post author.
  • โค๏ธ Capture public reaction counts when LinkedIn shows them.
  • ๐Ÿ•’ Save a UTC publish time when available.
  • ๐Ÿงน Save repeated public comment IDs once.
  • ๐Ÿšฆ Get one result for each input with counts, completeness, and a stop reason.
  • ๐Ÿ“ฆ Export rows as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
  • โš™๏ธ Run through the Apify API, SDKs, webhooks, schedules, and integrations.

Each dataset row represents one public LinkedIn comment shown directly on one input post during one run. Results are saved as they are collected.

This Actor reads public LinkedIn post pages. It does not sign in, use a customer LinkedIn account, collect private data, or claim that a limited public preview is a complete comment thread.

The scope is explicit. The Actor collects top-level comments shown directly on a public post page. It does not offer a reply setting because LinkedIn does not expose reply threads reliably on public pages.

โœ… Clean and predictable runs

  • Paste 1โ€“100 public /posts/ or /feed/update/ URLs. The form shows this limit before the run starts.
  • Equivalent post URLs are collected once. Repeated public comment IDs are also saved once.
  • Each input gets a clear result. An unsupported URL is not reported as an empty post.
  • Set 1โ€“1,000 rows per post, or turn on collectAllAvailable to remove the numeric result limit.
  • The Actor does not use or change your LinkedIn session. A run cannot sign your LinkedIn account out.
  • One saved comment uses one comment event. Duplicate inputs, empty results, and failed inputs do not use a comment event.
  • Coverage fields show whether the public page exposed and saved the displayed comment count.

๐Ÿ“ฆ What LinkedIn comment data can I extract?

Data groupExample fields
๐Ÿ”— Post identityinputUrl, inputType, postUrl, postUrn, activityId, ugcPostId
๐Ÿ’ฌ Comment identitycommentId, commentUrl
๐Ÿ‘ค Author detailsauthorName, authorUrl, authorId, authorUrn, authorHeadline, authorLocation
๐Ÿ“ Comment detailstext, mentions, publishedAt, isPostAuthor
โค๏ธ Public signalsreactionsCount
๐Ÿ•’ ObservationobservedAt

Missing public values stay null. The Actor does not guess missing values or change a missing reaction count to zero.

โš™๏ธ Can I use this Actor through an API?

Yes. You can run LinkedIn Comments Scraper in Apify Console or use it through:

  • Apify API
  • Python SDK
  • JavaScript SDK
  • Webhooks
  • Scheduled runs
  • Apify integrations

This makes it easy to send comment rows to spreadsheets, databases, warehouses, dashboards, AI analysis tools, and internal services.

๐ŸŽฏ Why scrape LinkedIn comments?

Use caseHow comment data helps
๐Ÿ” Audience researchFind public questions, opinions, and repeated language.
๐Ÿ“ฃ Brand monitoringReview public response to products, news, and campaigns.
๐Ÿ’ก Content planningFind objections, follow-up topics, and useful ideas.
๐Ÿง‘ Author researchConnect comments with public author profiles when shown.
๐Ÿค– Text analysisSend clean comment text to your own analysis workflow.
๐Ÿงฑ Data pipeline buildingLoad comment observations into databases and applications.

The Actor collects public source data. It does not add sentiment labels or guess a person's intent.

๐Ÿ’ต Pricing event

When pay-per-result pricing is active, one unique saved comment row uses one linkedin-comment result event. Empty posts, duplicate posts, failed URLs, and inputs with no public comment rows use no result event. Repeated public comment IDs are saved and billed once.

When includeAuthorDetails is on, each unique saved comment author with useful extra public profile data uses one linkedin-comment-author-detail event. Repeated comments by the same author use one author-detail event. Missing profile details use no author-detail event.

Check the Pricing tab in Apify for the current price and billing model. Use maxComments, collectAllAvailable, and Apify's maximum charge setting to control result volume before a run. Start with a small limit when you test a new post.

๐Ÿš€ How do I use LinkedIn Comments Scraper?

  1. Create or sign in to your Apify account.
  2. Open LinkedIn Comments Scraper.
  3. Add one or more known public LinkedIn post or feed URLs.
  4. Set the maximum comment rows to save from each post.
  5. Turn on Remove the result limit only when you need every available row.
  6. Click Start.
  7. Open Output to inspect the rows and run summary.
  8. Download the dataset or send it to another tool.

โฌ‡๏ธ Input

{
"startUrls": [
"https://www.linkedin.com/posts/timferriss_how-to-become-dramatically-more-productive-activity-7386884213343428608-wrF3"
],
"maxComments": 100,
"collectAllAvailable": false
}

๐Ÿ”— Supported URLs

Use public LinkedIn URLs with a /posts/ or /feed/update/ path.

The Actor removes query strings and fragments from the clean postUrl. It normalizes the host and uses the typed post ID when available. Equivalent URL forms with the same typed ID are collected once. Each duplicate input still gets an explained result in OUTPUT.

Profile, company, search, event, article, and LinkedIn Jobs URLs are not supported as inputs. Exact comment and reply links are not supported. This Actor does not discover posts. Give it the post URLs that you want to check.

๐ŸŽ›๏ธ Input settings

SettingWhat it controls
startUrlsAdd 1โ€“100 known public LinkedIn post or feed URLs. Equivalent targets are collected once.
maxCommentsSaves 1โ€“1,000 visible comment rows from each post. The default is 100. collectAllAvailable can remove this limit.
includeAuthorDetailsRequests public IDs, headlines, locations, and organizations for every unique comment author. Successful author details use a separate event. The default is false.
collectAllAvailableIgnores maxComments and saves every comment row exposed by the public page. It is off by default and can greatly increase cost.

โฌ†๏ธ Output sample

The sample below follows the exact public field order. Public values vary by post, region, and run time.

{
"inputUrl": "https://www.linkedin.com/posts/example_public-post-activity-7386884213343428608-demo",
"inputType": "post_url",
"postUrl": "https://www.linkedin.com/posts/example_public-post-activity-7386884213343428608-demo",
"postUrn": "urn:li:activity:7386884213343428608",
"activityId": "7386884213343428608",
"ugcPostId": null,
"commentId": "7386916967833726976",
"commentUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7386884213343428608?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7386884213343428608%2C7386916967833726976%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287386916967833726976%2Curn%3Ali%3Aactivity%3A7386884213343428608%29",
"authorName": "Example Author",
"authorUrl": "https://www.linkedin.com/in/example-author",
"authorType": "person",
"authorId": null,
"authorUrn": null,
"authorPublicIdentifier": "example-author",
"authorImageUrl": "https://media.licdn.com/example-author-image",
"authorHeadline": null,
"authorLocation": null,
"authorCurrentOrganizations": [],
"isPostAuthor": false,
"text": "This is an example public comment.",
"mentions": [],
"publishedAt": "2025-10-23T00:10:47.413Z",
"reactionsCount": 1,
"observedAt": "2026-08-15T00:13:20.959Z"
}

๐Ÿ“Š Run summary

The OUTPUT record contains:

  • actorName: stable Actor output name;
  • schemaVersion: public output contract version;
  • startedAt and finishedAt: run times;
  • inputCount: number of submitted input URLs;
  • uniqueTargetCount: number of unique valid posts planned;
  • successfulInputs: number of posts read successfully;
  • failedInputs: number of invalid or failed inputs;
  • duplicateInputs: number of inputs that resolved to an earlier post;
  • notAttemptedInputs: number of inputs skipped after the charge limit;
  • savedRows: number of unique saved comment rows;
  • authorProfileRequests: number of unique public author pages requested;
  • authorDetailEvents: number of unique saved authors that produced an author-detail event;
  • rowsWithAuthorDetails: number of comment rows that received author details;
  • datasetId: ID of the result dataset;
  • stopReason: why the run stopped;
  • inputResults: one ordered result for every submitted URL.

Each inputResults item contains:

{
"inputUrl": "https://www.linkedin.com/posts/example_public-post-activity-7386884213343428608-demo",
"inputType": "post_url",
"postUrl": "https://www.linkedin.com/posts/example_public-post-activity-7386884213343428608-demo",
"postUrn": "urn:li:activity:7386884213343428608",
"activityId": "7386884213343428608",
"ugcPostId": null,
"duplicateOf": null,
"status": "partial",
"statusReason": "LinkedIn exposed fewer public comment rows than its shown count.",
"pageCommentCount": 48,
"publicRowsOnPage": 10,
"savedRows": 10,
"isPublicPageComplete": false,
"isComplete": false,
"stopReason": "public_preview_exhausted"
}

Input-level failures do not create fake comment rows. If every input fails, the run fails with a safe public message.

๐ŸŽฏ Input results and completeness

The dataset contains comment observations only. Input status and post-level counts stay in OUTPUT, where they cannot be mistaken for comment measures.

Use these fields together for each input:

FieldMeaning
pageCommentCountThe public comment count when available and when public count sources agree.
publicRowsOnPageThe unique comment rows read before the visible save limit, or null if no page was read.
savedRowsThe number of comment rows saved for this input.
isPublicPageCompletetrue when the public page exposed at least its shown public count.
isCompletetrue when the dataset saved at least the shown public count.
stopReasonThe visible setting, public preview, public row end, zero count, charge limit, duplicate, or error.

LinkedIn can show a count of 48 comments but expose only 10 rows to a public visitor. The input result uses pageCommentCount: 48, publicRowsOnPage: 10, savedRows: 10, isPublicPageComplete: false, and isComplete: false.

If the public page exposes all 48 rows but maxComments is 10, isPublicPageComplete is true and isComplete is false.

When collectAllAvailable is on, the Actor ignores maxComments. It still stops when the public source ends, the maximum charge is reached, time runs out, or the source fails.

publishedAt contains a UTC time only when the public information supports one.

postUrn keeps the exact typed parent URN from the comment. activityId contains only an activity ID. ugcPostId contains only a UGC post ID. These values can differ. The Actor does not move an ID from one type into another.

commentUrl opens the source comment when LinkedIn provides a valid comment identity. The current live release checks require a source ID and matching URL for every test comment. If LinkedIn does not provide that identity, commentId and commentUrl stay null. The Actor does not create comment IDs or comment links.

authorPublicIdentifier is the name in the public profile link. Use authorUrl to collect that person with LinkedIn Profile Scraper.

Input statuses are ok, empty, partial, duplicate, invalid_url, failed, or not_attempted. Check statusReason for a short explanation. partial means that the Actor saved fewer rows than the known public comment count. The visible maxComments setting, a public preview limit, or the run charge limit can cause this result. collectAllAvailable removes only the numeric result limit.

๐Ÿ”’ Public source boundary

LinkedIn Comments Scraper reads public LinkedIn post pages. It also reads public author profile pages when includeAuthorDetails is on.

When author details are on, the Actor requests every unique public comment author profile in the saved comment set. Public details can still be missing.

It does not:

  • use a LinkedIn account supplied by you;
  • open private posts or account-only comment lists;
  • collect private profiles or contact details;
  • search LinkedIn for posts;
  • collect posts, jobs, profiles, or company pages as result rows;
  • bypass access controls;
  • promise every comment in LinkedIn's displayed total.

โš ๏ธ Limits and interpretation

  • LinkedIn often shows only a small public comment preview.
  • A displayed comment count can be greater than the public rows available.
  • maxComments is a result maximum, not a result promise.
  • collectAllAvailable removes the numeric result limit. It does not change what LinkedIn exposes publicly.
  • Post-level counts and completeness are in OUTPUT, not repeated on rows.
  • If public comment-count sources disagree, pageCommentCount is null.
  • Comment order and public availability can change between runs.
  • Private, deleted, missing, or account-limited posts can fail.
  • Author details, reaction counts, and publish times can be missing. Missing values stay null.
  • Public profile and image links can change or expire.
  • Rows represent comments shown directly on the public post page. The Actor does not collect or rebuild reply threads.
  • Results are public-page snapshots. Use scheduled runs to observe changes.
  • LinkedIn can change its public pages. A later change can require an Actor update.

โ“ FAQ

Does this Actor need a LinkedIn login or API key?

No. It reads public LinkedIn post pages without a customer LinkedIn account. It does not use or change your LinkedIn browser session.

Can I paste my own LinkedIn post URL?

Yes. Paste a public LinkedIn /posts/ or /feed/update/ URL. The Actor validates each URL and gives unsupported URLs an invalid_url result instead of treating them as empty posts.

What are the run limits?

One run accepts up to 100 post URLs. maxComments accepts 1โ€“1,000 visible comment rows per post. Turn on collectAllAvailable to remove that numeric limit. LinkedIn can still expose fewer public rows. Check the input result for the exact stop reason.

Can I remove the result limit?

Yes. Turn on collectAllAvailable. The Actor then ignores maxComments and saves every comment row that LinkedIn exposes on the public page. Collection still stops at public source end, maximum charge, timeout, or failure.

Does it collect every comment on a post?

Not always. LinkedIn can show a larger total while exposing only a limited public preview. Check pageCommentCount, publicRowsOnPage, savedRows, isPublicPageComplete, and isComplete before you treat the result as a full comment list.

Why did I receive fewer rows than requested?

The post may expose fewer public comments than your setting. LinkedIn may also limit the public preview, or the post may be unavailable. The Apify maximum charge can also stop a run. Check OUTPUT and the input stop reason.

What does isComplete mean?

It is true only when the dataset saved at least the public comment count shown for the post. It is false when the visible setting, a public preview, or the maximum charge leaves rows out. It is null when LinkedIn does not show a public count.

Why is a field null?

LinkedIn did not show that value publicly at run time. The Actor does not guess the value or replace a missing count with zero.

How are duplicates handled?

Equivalent inputs with the same typed post ID are collected once. An activity ID and a UGC post ID are different types, even when their digits match. Repeated public comment IDs are also saved once. OUTPUT explains duplicate inputs. The current live test posts contain a numeric ID for each visible comment. If a future page row has no source ID, it stays in the dataset with commentId: null and commentUrl: null. The Actor does not use text or row position as an ID.

Does it collect replies?

No. It collects top-level comments shown directly on the public post page. It does not offer a reply setting because public LinkedIn pages do not expose reply threads reliably.

What happens when a post has no public comment rows?

The input creates no fake comment row and no result event. Its OUTPUT result shows whether the post was empty, unavailable, or failed.

๐Ÿ† Best practices

  • ๐ŸŽฏ Start with 10 to 25 rows for a new post.
  • ๐Ÿงพ Check OUTPUT before you treat a small or empty dataset as an error.
  • ๐Ÿšฆ Use the five count and completeness fields before you claim full coverage.
  • ๐Ÿ†” Use the post IDs to match comments with LinkedIn Post Scraper results.
  • ๐Ÿ‘ค Use authorUrl to collect a person with LinkedIn Profile Scraper.
  • ๐Ÿ•’ When you collect the same post more than once, choose the result you need.
  • ๐Ÿ”— Use commentUrl to open the source comment.
  • ๐Ÿ” Use scheduled runs when you want public comment snapshots over time.

๐Ÿ›Ÿ Support

For help, include the Apify run ID, one public post URL, the result you expected, and the observed dataset or OUTPUT result. State whether the issue affects one row or the whole run. Do not send LinkedIn account details or private links.

โš–๏ธ Responsible use

This Actor collects information that LinkedIn exposes on public post pages at run time. You are responsible for using the data lawfully and for following privacy, data-protection, research, LinkedIn, and Apify rules. Do not use public comments to harass people, infer sensitive traits, or make high-impact choices about individuals.

Continue the same workflow on this platform or compare public data across platforms.

Continue on LinkedIn

Compare comments across platforms