# LinkedIn Profile Comments (`data-slayer/linkedin-profile-comments`) Actor

Extract comments written by one or more public LinkedIn profiles, with the commented-on post and engagement context.

- **URL**: https://apify.com/data-slayer/linkedin-profile-comments.md
- **Developed by:** [Data Slayer](https://apify.com/data-slayer) (community)
- **Categories:** Social media, Lead generation, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 comments

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Profile Comments

Give it one or more public LinkedIn profile URLs and get every comment those profiles wrote on other people's posts — full comment text, timestamps, comment engagement, plus the commented-on post with its author and engagement context. No LinkedIn cookies or login credentials.

**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 comment an input profile wrote on someone else's post:

- the comment text, LinkedIn comment URL, URN, and the timestamp the profile wrote it
- likes, reply count, and reaction breakdown reported on the comment itself
- commenter name, headline, LinkedIn profile URL, and image URL
- the commented-on post's URL, URN, text, publication time, and share URL
- the post author's name, headline, LinkedIn URL, and image URL
- post likes, comment count, share count, and reaction breakdown
- post repost/edited flags, relative age, mentions, attachments, and shared-post context when available

#### Output example

```json
{
  "profile_url": "https://www.linkedin.com/in/satyanadella",
  "profile_identifier": "satyanadella",
  "comment_text": "Congratulations to the whole team on this launch!",
  "comment_created_at": "2026-07-12T02:41:07.000Z",
  "comment_url": "https://www.linkedin.com/feed/update/urn:li:activity:7481741318122110976?commentUrn=urn:li:comment:(activity:7481741318122110976,7408723949095772161)",
  "comment_likes": 12,
  "comment_reply_count": 1,
  "comment_reactions": [
    {"reaction_type": "LIKE", "count": 12}
  ],
  "commenter_name": "Satya Nadella",
  "commenter_headline": "Chairman and CEO at Microsoft",
  "commenter_linkedin_url": "https://www.linkedin.com/in/satyanadella",
  "post_url": "https://www.linkedin.com/posts/bradsmi_a250-ugcPost-7481741318122110976-ImDL",
  "post_text": "To coincide with the #A250, Microsoft unveiled an AI experience...",
  "post_created_at": "2026-07-12T00:13:45.784Z",
  "post_author_name": "Brad Smith",
  "post_author_headline": "Vice Chair and President at Microsoft Corporation",
  "post_author_linkedin_url": "https://www.linkedin.com/in/bradsmi",
  "post_likes": 960,
  "post_comments": 84,
  "post_shares": 90,
  "post_reactions": [
    {"reaction_type": "LIKE", "count": 795},
    {"reaction_type": "PRAISE", "count": 41},
    {"reaction_type": "EMPATHY", "count": 87}
  ],
  "post_is_repost": false,
  "post_is_edited": false,
  "mentions": [],
  "attachments": [],
  "input_index": 0,
  "comment_index": 0,
  "fetched_at": "2026-07-13T00:00:00Z"
}
```

For CSV and spreadsheet exports, scalar fields stay as columns; `comment_reactions`, `post_reactions`, `mentions`, `attachments`, and `shared_post` export as compact JSON cells. IDs stay strings to prevent precision loss.

### Input

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `profile_urls` | array of strings | Yes | — | Add 1–1,000 public LinkedIn profile URLs in `linkedin.com/in/…` format. Regional LinkedIn hosts are accepted. Duplicates are normalized and removed while preserving first-seen order. |
| `max_comments_per_profile` | integer | No | `100` | Maximum deduplicated comment records saved per profile. Range: `0`–`1,000`. Use `0` to fetch all available comments, subject to a 100-page safety cap per profile. |
| `commented_within` | string | No | `any` | Only save comments written within `24h`, `week`, `month`, `3months`, `6months`, `year`, or use `any` to keep all available comments. |

Example:

```json
{
  "profile_urls": [
    "https://www.linkedin.com/in/satyanadella"
  ],
  "max_comments_per_profile": 100,
  "commented_within": "any"
}
```

Accepted URLs are normalized to `https://www.linkedin.com/in/...` — tracking parameters, fragments, and trailing slashes are removed, and duplicates are dropped while keeping first-seen order. Company pages, post URLs, search pages, Sales Navigator links, and bare profile identifiers without the full URL are rejected before any extraction request. If one URL is malformed, the run stops before processing and identifies the failing input position.

### How to scrape comments written by a LinkedIn profile

1. Copy one or more public LinkedIn profile URLs (up to 1,000 per run).
2. Paste them into **LinkedIn Profile URLs**.
3. Set **Maximum comments per profile**, or keep the default of 100.
4. Optionally limit results with **Comment age**.
5. Click **Start**.
6. Open the dataset to inspect or export the comment records as JSON, CSV, Excel, XML, or HTML.

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

### Use cases

- Understand what topics and authors a prospect or industry voice engages with in discussions.
- Analyze a profile's commenting behavior before sales or recruiting outreach.
- Find the posts where specific people in your market are actively participating.
- Build social-listening, influencer-research, or content-engagement datasets.
- Feed structured comment activity into AI, BI, CRM, spreadsheet, or automation workflows.

### Pricing

**$2 per 1,000 comments** (`$0.002` per comment). You are billed per unique comment record saved to the dataset — not per profile or per page.

### Integrations

- **API** — start runs and fetch results from Python, JavaScript, or any HTTP client
- **Scheduling** — run profile research daily, weekly, or on a custom cadence
- **Webhooks** — trigger another system when a run succeeds or fails
- **Make and Zapier** — route records into CRMs, spreadsheets, alerts, or enrichment workflows
- **Google Sheets and Excel** — export flat columns with nested context retained as JSON cells
- **MCP** — expose the actor as a structured tool to compatible AI agents

### Other LinkedIn Actors by data-slayer

| Actor | What it does |
|---|---|
| [LinkedIn Profile Scraper](https://apify.com/data-slayer/linkedin-profile-scraper) | Full profile data from any LinkedIn profile URL |
| [LinkedIn Profile Posts Scraper](https://apify.com/data-slayer/linkedin-profile-posts-scraper) | Recent posts from a profile, with engagement metrics |
| [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 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 Comments Scraper](https://apify.com/data-slayer/linkedin-post-comments) | Every comment on a post, with commenter profiles |
| [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 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 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 profile URL | Comments they left on others' posts | LinkedIn Profile Comments Scraper |
| A profile URL | Reactions they left on others' posts | LinkedIn Profile Reactions Scraper |
| Profile URL(s) | Their recent posts & engagement | LinkedIn Profile Posts Scraper |
| Profile URL(s) | Full profile data | LinkedIn Profile Scraper |
| A post URL | Everyone who commented | LinkedIn Post Comments Scraper |
| A post URL | Likes, comments, shares & reaction breakdown | LinkedIn Post Performance Scraper |
| A post URL | Everyone who engaged (commenters + reactors + reposters) | LinkedIn Post Engagers Scraper |

### FAQ

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

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

#### Does this return the comments on a profile's own posts?

No. This actor starts from a person's profile and returns comments that profile wrote on other people's posts. The [LinkedIn Post Comments Scraper](https://apify.com/data-slayer/linkedin-post-comments) answers the different question of who commented on one specific post.

#### What does `commented_within` filter on?

The timestamp of the comment itself — when the profile wrote it. The commented-on post can be much older than the comment.

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

`max_comments_per_profile: 0` requests all available comments, with a maximum of 100 pages per profile. Very active profiles can therefore take longer and consume more usage than a bounded run.

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

Yes. Add up to 1,000 public profile URLs. The runtime processes profiles in bounded groups of five while preserving input-profile order in the dataset.

#### Why can engagement counts differ between runs?

Comments, shares, and reactions keep changing after publication. Each record captures the values reported when that profile operation was fetched.

#### Why are some values null?

Public records do not always expose every identifier, author value, timestamp, or media field. Null means the value was unavailable or could not be parsed safely; the actor does not fill gaps with guesses.

#### Can profile-image or attachment links expire?

Yes. LinkedIn-hosted media URLs can be temporary. Store or download permitted assets promptly if your workflow needs them later.

### Limits and data notes

- Pagination is automatic; `max_comments_per_profile` is applied after the comment-age filter and duplicate removal.
- `commented_within` filters on the UTC timestamp of the comment itself, with an inclusive cutoff. Comments with missing or unparseable timestamps are excluded from bounded windows and retained when set to `any`.
- Every available page is examined until the cursor ends or the 100-page cap is reached; pagination is never stopped early because a page looks older.
- Run status and per-profile counts are written to `RUN_SUMMARY` in the key-value store (statuses: `succeeded`, `no_results`, `partial`, `failed`, `capped`). Errors are never mixed into the dataset.
- Use the actor and its output in accordance with applicable laws, platform terms, and your organization's data policies. This independent actor is not affiliated with or endorsed by LinkedIn.

### Feedback and support

If a supported public profile produces an unexpected result, open an issue from the Actor's **Issues** tab in Apify Console 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 Comments](https://apify.com/data-slayer/linkedin-post-comments) | 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 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

## `profile_urls` (type: `array`):

Required. Add 1–1,000 public LinkedIn profile URLs in linkedin.com/in/… format. Regional LinkedIn hosts are accepted. Tracking parameters, fragments, and trailing slashes are removed.

## `max_comments_per_profile` (type: `integer`):

Maximum number of unique comment records to save for each profile. Enter 0 to fetch all available comments, with a 100-page safety cap per profile.

## `commented_within` (type: `string`):

Only save comments written within this time window. Choose Any time to keep all available comments.

## Actor input object example

```json
{
  "profile_urls": [
    "https://www.linkedin.com/in/satyanadella"
  ],
  "max_comments_per_profile": 100,
  "commented_within": "any"
}
```

# Actor output Schema

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

One dataset item per unique comment written by an input profile, in input-profile and source order.

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

Per-profile 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 = {
    "profile_urls": [
        "https://www.linkedin.com/in/satyanadella"
    ],
    "max_comments_per_profile": 100,
    "commented_within": "any"
};

// Run the Actor and wait for it to finish
const run = await client.actor("data-slayer/linkedin-profile-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 = {
    "profile_urls": ["https://www.linkedin.com/in/satyanadella"],
    "max_comments_per_profile": 100,
    "commented_within": "any",
}

# Run the Actor and wait for it to finish
run = client.actor("data-slayer/linkedin-profile-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 '{
  "profile_urls": [
    "https://www.linkedin.com/in/satyanadella"
  ],
  "max_comments_per_profile": 100,
  "commented_within": "any"
}' |
apify call data-slayer/linkedin-profile-comments --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data-slayer/linkedin-profile-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/c1dQ029YeTNdbEaDJ/builds/FWzihhrDzwewb6LjR/openapi.json
