# LinkedIn Post Comments (`data-slayer/linkedin-post-comments`) Actor

Extract root comments and available top replies from public LinkedIn post URLs, including commenter names, profile URLs, headlines, timestamps, reply totals, and reaction breakdowns. Batch up to 1,000 posts and export structured JSON, CSV, or Excel—no LinkedIn cookies or login required.

- **URL**: https://apify.com/data-slayer/linkedin-post-comments.md
- **Developed by:** [Data Slayer](https://apify.com/data-slayer) (community)
- **Categories:** Social media, Lead generation
- **Features:** Limited permissions
- **Stats:** 10 total users, 3 monthly users, 64.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 post comment results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LinkedIn Post Comments

Paste one or many public LinkedIn post URLs and get every root comment as structured data — comment text, commenter profile, per-comment reaction counts, and available top replies. No cookies, no login, no LinkedIn account risk.

**Cookieless · Fresh data · No LinkedIn login or account risk.**

### Watch the demo

Video tutorial coming soon.

### What you get

Each dataset item is one unique root comment, analysis-ready:

- Comment text, LinkedIn comment URL, ID, and timestamp
- Commenter name, headline, LinkedIn profile URL, image URL, and stable ID when available
- Total replies and the number of top replies included in the record
- Total reactions plus like, praise, empathy, appreciation, interest, and other-reaction counts
- Pinned and edited status
- The post URL, post ID, and reported root-comment count
- Available top replies — text, authors, timestamps, reactions, and URLs — in a nested array

Results are stored in an Apify dataset and can be exported as JSON, CSV, or Excel. The default Comments view is designed for analysis; the flat commenter fields make the same records ready for spreadsheets and CRM workflows.

#### Output example

```json
{
  "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001",
  "post_id": "7408723748973056001",
  "post_comment_count": 445,
  "comment_id": "7408723949095772161",
  "comment_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001?commentUrn=...",
  "comment_text": "A thoughtful example comment about the post.",
  "commented_at": "2025-12-22T04:23:56.899Z",
  "commented_at_timestamp": 1766377436899,
  "is_pinned": false,
  "is_edited": false,
  "reply_count": 2,
  "top_reply_count": 1,
  "total_reaction_count": 55,
  "like_count": 45,
  "praise_count": 0,
  "empathy_count": 7,
  "appreciation_count": 3,
  "interest_count": 0,
  "other_reaction_count": 0,
  "commenter_id": "ACoAAAExampleCommenterId",
  "commenter_type": "profile",
  "commenter_name": "Example Commenter",
  "commenter_headline": "Marketing leader",
  "commenter_linkedin_url": "https://www.linkedin.com/in/example-commenter",
  "commenter_image_url": "https://media.licdn.com/dms/image/example-profile-photo",
  "top_replies": [
    {
      "reply_id": "7408730400212037632",
      "reply_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001?replyUrn=...",
      "reply_text": "A useful follow-up reply.",
      "replied_at": "2025-12-22T04:49:34.966Z",
      "replied_at_timestamp": 1766378974966,
      "is_pinned": false,
      "is_edited": false,
      "reply_count": 0,
      "total_reaction_count": 19,
      "like_count": 17,
      "praise_count": 0,
      "empathy_count": 0,
      "appreciation_count": 0,
      "interest_count": 2,
      "other_reaction_count": 0,
      "commenter_id": "ACoAAAExampleReplyAuthorId",
      "commenter_type": "profile",
      "commenter_name": "Example Reply Author",
      "commenter_headline": "Research analyst",
      "commenter_linkedin_url": "https://www.linkedin.com/in/example-reply-author",
      "commenter_image_url": null
    }
  ]
}
```

### Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `post_urls` | Array of strings | Yes | — | Add 1–1,000 supported public LinkedIn post URLs. Duplicate URLs are normalized and removed while preserving first-seen order. |
| `max_comments_per_post` | Integer | No | `100` | Maximum deduplicated root comments saved per post. Accepted range: `0`–`1,000`. Use `0` to fetch all available roots, subject to a 100-page safety cap per post. Nested top replies do not count toward this limit. |

Supported URL formats:

```text
https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001
https://www.linkedin.com/posts/username_topic-activity-7408723748973056001-AbCd
https://www.linkedin.com/posts/username_topic-ugcPost-7408723748973056001-AbCd
```

Tracking parameters and fragments are removed. A comment-specific URL is normalized to its parent post; targeted single-comment scraping is not supported.

### How to use it

1. Copy one or more supported public LinkedIn post URLs.
2. Paste them into **LinkedIn Post URLs**.
3. Set **Maximum comments per post**, or keep the default of 100.
4. Click **Start**.
5. Open the dataset to inspect or export the comment records as JSON, CSV, or Excel.

No LinkedIn account, session cookie, browser extension, or proxy configuration is requested in the input form.

### Use cases

- Analyze the discussion and engagement around your own or relevant industry posts
- Find people publicly commenting on topics connected to your market
- Export commenter profiles for research, qualification, or responsible outreach
- Build social-listening, sentiment-analysis, and content-research datasets
- Compare reaction and reply patterns across multiple posts
- Feed structured comments into AI, BI, CRM, spreadsheet, or automation workflows

### Pricing

This actor charges per comment result saved (pay-per-event). The current price per result is shown on the actor's **Pricing** tab — there is no subscription and no minimum. Use `max_comments_per_post` to cap exactly how many results a run can produce, so costs never surprise you.

### Integrations

- **API** — trigger runs and fetch results programmatically
- **Scheduling** — scrape new comments on a recurring basis
- **Webhooks** — get notified when a run completes
- **Make** and **Zapier** — connect to 1,000+ apps without code
- **Google Sheets** — pipe results directly into a spreadsheet
- **MCP** — use this actor as a tool inside Claude, Cursor, or any MCP-compatible AI agent

API example:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/data-slayer~linkedin-post-comments/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "post_urls": [
      "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
    ],
    "max_comments_per_post": 100
  }'
```

### Other LinkedIn Actors by data-slayer

| Actor | What it does |
|---|---|
| [LinkedIn Post Performance Scraper](https://apify.com/data-slayer/linkedin-post-analytics-scraper) | Likes, comments, shares and reaction breakdown for any post |
| [LinkedIn Post Engagers Scraper](https://apify.com/data-slayer/linkedin-post-engagers-email-finder-no-cookies) | Everyone who engaged with a post — commenters, reactors, reposters |
| [LinkedIn Post Reactions Scraper](https://apify.com/data-slayer/linkedin-post-reactions) | Everyone who reacted to a post, with reactor profiles |
| [LinkedIn Post Reposts Scraper](https://apify.com/data-slayer/linkedin-post-reposts) | Everyone who reposted or shared a post |
| [LinkedIn Profile Posts Scraper](https://apify.com/data-slayer/linkedin-profile-posts-scraper) | Recent posts from a profile, with engagement metrics |
| [LinkedIn Profile Scraper](https://apify.com/data-slayer/linkedin-profile-scraper) | Full profile data from any LinkedIn profile URL |
| [LinkedIn Profile Engagers Scraper](https://apify.com/data-slayer/linkedin-audience-email-finder-no-cookies) | Everyone who engaged across a profile's recent posts, ranked by engagement |
| [LinkedIn Profile Reactions Scraper](https://apify.com/data-slayer/linkedin-profile-reactions) | Reactions a profile left on other people's posts |
| [LinkedIn Profile Comments Scraper](https://apify.com/data-slayer/linkedin-profile-comments) | Comments a profile left on other people's posts |
| [LinkedIn Company Scraper](https://apify.com/data-slayer/linkedin-company-scraper) | Full company profile data |
| [LinkedIn Company Posts Scraper](https://apify.com/data-slayer/linkedin-company-posts-scraper) | Recent posts from any company page |
| [LinkedIn People Search (ICP)](https://apify.com/data-slayer/linkedin-people-search) | Find people by title, seniority, function, company, location |
| [LinkedIn Company Search (ICP)](https://apify.com/data-slayer/linkedin-company-search) | Find companies by industry, size, location and tech stack |
| [LinkedIn Company Employees](https://apify.com/data-slayer/linkedin-company-employees) | Employees at a company, filtered by title, seniority and function |
| [LinkedIn Job Scraper](https://apify.com/data-slayer/linkedin-job-scraper) | Full details for LinkedIn job postings |
| [LinkedIn Job Change Tracker](https://apify.com/data-slayer/linkedin-job-change-tracker) | People who recently changed jobs |

### Which LinkedIn actor should I use?

| I have… | And I want… | Use |
|---|---|---|
| A post URL | Everyone who commented | LinkedIn Post Comments Scraper |
| A post URL | Everyone who engaged (commenters + reactors + reposters) | LinkedIn Post Engagers Scraper |
| A post URL | Likes, comments, shares & reaction breakdown | LinkedIn Post Performance Scraper |
| A post URL | Everyone who reacted | LinkedIn Post Reactions Scraper |
| A post URL | Everyone who reposted | LinkedIn Post Reposts Scraper |
| Profile URL(s) | Their recent posts & engagement | LinkedIn Profile Posts Scraper |
| A profile URL | Comments they left on others' posts | LinkedIn Profile Comments Scraper |

### Example tasks

Ready-made configurations you can run as-is, each with its own guide:

- [Get all comments on a LinkedIn post](https://apify.com/data-slayer/linkedin-post-comments/examples/get-all-comments-on-a-linkedin-post)
- [Find commenters for warm outreach](https://apify.com/data-slayer/linkedin-post-comments/examples/find-commenters-for-warm-outreach)
- [Analyze comment sentiment on a launch](https://apify.com/data-slayer/linkedin-post-comments/examples/analyze-comment-sentiment-on-a-launch)

### FAQ

#### Do I need a LinkedIn account, cookie, or login?

No. The input requires supported public LinkedIn post URLs. It does not request your LinkedIn credentials or session cookies.

#### Does the comment limit include replies?

No. `max_comments_per_post` counts unique root-comment dataset items. Available top replies are nested inside those records and do not count toward the limit.

#### Does `top_replies` contain every reply?

Not necessarily. `reply_count` is the reported total, while `top_reply_count` is the number of reply objects actually included. Treat `top_replies` as the available top-reply sample rather than a complete reply-thread guarantee.

#### What does a limit of zero mean?

`max_comments_per_post: 0` requests all available root comments, with a maximum of 100 pages per post. Large discussions can therefore take longer and consume more usage than a bounded run.

#### Can I process multiple posts in one run?

Yes. Add up to 1,000 supported post URLs. The runtime processes posts in bounded groups while preserving input-post order in the dataset.

#### Can I scrape one specific comment URL?

No. Comment-specific URLs are normalized to their parent post. The actor extracts root comments from the post according to the configured limit.

#### Why can `post_comment_count` differ from the number of dataset rows?

The reported count describes available root comments at the source. Your configured limit, duplicate removal, page cap, unavailable pages, or source changes can result in fewer saved rows.

#### Can I export to CSV or Excel?

Yes. Open the run's Dataset tab and choose JSON, CSV, Excel, or another Apify-supported export format.

### Limits and data notes

- Pagination continues automatically until the requested limit, the end of available pages, or the 100-page safety cap.
- `max_comments_per_post` is applied after duplicate removal; duplicate root comments keep their first occurrence.
- Results preserve input-post order and source order — the actor does not re-sort comments by timestamp.
- The actor writes a `RUN_SUMMARY` to the key-value store with per-post status (`succeeded`, `no_results`, `partial`, `failed`, or `capped`). If some posts fail, successful rows remain available.
- Works with public posts only. This actor reads only public data and uses no LinkedIn credentials.
- This independent actor is not affiliated with or endorsed by LinkedIn Corporation.

### Feedback and support

If a supported public post produces an unexpected result, open an issue from the actor's **Issues** tab and include the run ID, input URL format, and observed behavior. Do not include credentials or private data.

### Related actors

More from the same portfolio. Apify only auto-recommends actors in the same category, so here are the rest of ours:

| Actor | What it does |
|---|---|
| [LinkedIn Account Intent Feed](https://apify.com/data-slayer/linkedin-account-intent-feed) | LinkedIn workflow |
| [LinkedIn Buying-Committee Mapper](https://apify.com/data-slayer/linkedin-buying-committee-mapper) | LinkedIn workflow |
| [LinkedIn Champion Tracker](https://apify.com/data-slayer/linkedin-champion-job-change-tracker) | LinkedIn workflow |
| [LinkedIn Company Employees](https://apify.com/data-slayer/linkedin-company-employees) | LinkedIn workflow |
| [LinkedIn Company Posts Scraper](https://apify.com/data-slayer/linkedin-company-posts-scraper) | LinkedIn workflow |
| [LinkedIn Company Scraper](https://apify.com/data-slayer/linkedin-company-scraper) | LinkedIn workflow |
| [LinkedIn Company Search (ICP)](https://apify.com/data-slayer/linkedin-company-search) | LinkedIn workflow |
| [LinkedIn Competitor Content Intelligence](https://apify.com/data-slayer/linkedin-competitor-content-intelligence) | LinkedIn workflow |
| [LinkedIn Competitor Hijack Leads](https://apify.com/data-slayer/linkedin-competitor-hijack-leads) | LinkedIn workflow |
| [LinkedIn Engagement Audience Builder](https://apify.com/data-slayer/linkedin-engagement-audience-builder) | LinkedIn workflow |
| [LinkedIn Executive Post Monitor](https://apify.com/data-slayer/linkedin-executive-post-monitor) | LinkedIn workflow |
| [LinkedIn Hiring Pulse](https://apify.com/data-slayer/linkedin-hiring-pulse) | LinkedIn workflow |
| [LinkedIn Job Change Tracker](https://apify.com/data-slayer/linkedin-job-change-tracker) | LinkedIn workflow |
| [LinkedIn Job Scraper](https://apify.com/data-slayer/linkedin-job-scraper) | LinkedIn workflow |
| [LinkedIn Market Map Builder](https://apify.com/data-slayer/linkedin-market-map-builder) | LinkedIn workflow |
| [LinkedIn People Search (ICP)](https://apify.com/data-slayer/linkedin-people-search) | LinkedIn workflow |
| [LinkedIn Post Engagers Scraper](https://apify.com/data-slayer/linkedin-post-engagers-email-finder-no-cookies) | LinkedIn workflow |
| [LinkedIn Post Performance Scraper](https://apify.com/data-slayer/linkedin-post-analytics-scraper) | LinkedIn workflow |
| [LinkedIn Post Reactions](https://apify.com/data-slayer/linkedin-post-reactions) | LinkedIn workflow |
| [LinkedIn Post Reposts](https://apify.com/data-slayer/linkedin-post-reposts) | LinkedIn workflow |
| [LinkedIn Profile Comments](https://apify.com/data-slayer/linkedin-profile-comments) | LinkedIn workflow |
| [LinkedIn Profile Engagers Scraper](https://apify.com/data-slayer/linkedin-audience-email-finder-no-cookies) | LinkedIn workflow |
| [LinkedIn Profile Posts Scraper](https://apify.com/data-slayer/linkedin-profile-posts-scraper) | LinkedIn workflow |
| [LinkedIn Profile Reactions](https://apify.com/data-slayer/linkedin-profile-reactions) | LinkedIn workflow |
| [LinkedIn Profile Scraper · Fresh · No Cookies](https://apify.com/data-slayer/linkedin-profile-scraper) | LinkedIn workflow |
| [LinkedIn Skill Mapper](https://apify.com/data-slayer/linkedin-skill-mapper) | LinkedIn workflow |
| [LinkedIn Talent Flow Mapper](https://apify.com/data-slayer/linkedin-talent-flow-mapper) | LinkedIn workflow |
| [LinkedIn Talent Mapper](https://apify.com/data-slayer/linkedin-talent-mapper) | LinkedIn workflow |
| [LinkedIn Warm Path Finder](https://apify.com/data-slayer/linkedin-warm-path-finder) | LinkedIn workflow |
| [LinkedIn Why-Now Account Brief](https://apify.com/data-slayer/linkedin-why-now-account-brief) | LinkedIn workflow |

# Actor input Schema

## `post_urls` (type: `array`):

Required. Add 1–1,000 public LinkedIn post URLs. Supported formats include linkedin.com/posts/…-activity-…, linkedin.com/posts/…-ugcPost-…, and linkedin.com/feed/update/urn:li:activity:…. Tracking parameters are removed. Comment-specific URLs are normalized to their parent post; targeted single-comment scraping is not supported.

## `max_comments_per_post` (type: `integer`):

Maximum number of root comments to save for each post. Reply data returned with those comments does not count toward this limit. Enter 0 to fetch all available comments, with a 100-page safety cap per post.

## Actor input object example

```json
{
  "post_urls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
  ],
  "max_comments_per_post": 100
}
```

# Actor output Schema

## `results` (type: `string`):

One dataset item per unique root comment, in input-post and source order.

## `run_summary` (type: `string`):

Per-post completion, page, count, and sanitized error details.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "post_urls": [
        "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
    ],
    "max_comments_per_post": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("data-slayer/linkedin-post-comments").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "post_urls": ["https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"],
    "max_comments_per_post": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("data-slayer/linkedin-post-comments").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "post_urls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
  ],
  "max_comments_per_post": 100
}' |
apify call data-slayer/linkedin-post-comments --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data-slayer/linkedin-post-comments"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/wx3muiHV1xY1r0jda/builds/8JCrwFTfkhuQrf17g/openapi.json
