# LinkedIn Comments Scraper - \[✅ No Cookies] (`khadinakbar/linkedin-comments-scraper`) Actor

Extract public LinkedIn post comments and replies with structured author, text, reaction, reply, provider, and run summary fields. No LinkedIn cookies required. MCP/API-ready.

- **URL**: https://apify.com/khadinakbar/linkedin-comments-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 9 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 comment scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## LinkedIn Comments Scraper - No Cookies

Extract public comments and optional replies from LinkedIn post URLs, activity IDs, or LinkedIn URNs. The Actor is designed for AI agents, social listening workflows, lead discovery, content research, and engagement analysis.

This Actor uses managed public-data providers. It does not ask users for LinkedIn cookies, account credentials, or browser sessions.

### What it extracts

- Parent post URL, ID, text, author name, and publish time when available
- Top-level comments
- Optional nested replies
- Comment/reply author name, headline, profile URL, profile image, and author URN when available
- Comment text, timestamp, URL, reaction counts, reply counts, and reaction breakdowns when available
- Run summaries in `OUTPUT` and `RUN_SUMMARY` for automation and canary checks

### Input

Paste LinkedIn post URLs into `startUrls`, or use `postUrls` for line-separated URLs, numeric activity IDs, or `urn:li:activity` values.

```json
{
  "startUrls": [
    {
      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7312345678901234567/"
    }
  ],
  "maxComments": 100,
  "includeReplies": true,
  "maxRepliesPerComment": 25,
  "metadataOnly": false
}
```

### Output

Each saved comment or reply is one dataset row.

```json
{
  "recordType": "comment",
  "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7312345678901234567/",
  "postId": "7312345678901234567",
  "text": "Great launch. Curious how you are measuring adoption.",
  "authorName": "Jane Smith",
  "authorHeadline": "Revenue Operations Lead",
  "authorProfileUrl": "https://www.linkedin.com/in/jane-smith/",
  "reactionCount": 12,
  "replyCount": 2,
  "source": "scrapecreators",
  "scrapedAt": "2026-06-08T12:00:00.000Z"
}
```

When `metadataOnly` is enabled, the Actor saves one `recordType: "post"` row per input post and does not charge per comment.

### Pricing

Pay per event:

- `$0.01` per saved comment
- `$0.01` per saved reply when `includeReplies` is enabled
- Metadata rows, summaries, and validation exits are free

This is premium-priced against current LinkedIn comments actors because it is no-cookie, provider-backed, MCP-friendly, returns normalized rows plus machine-readable run summaries, and preserves 70%+ gross margin against worst-case ScrapeCreators/SociaVault provider costs.

### Configuration

The Actor owner should configure at least one provider key as an Apify secret:

- `SCRAPECREATORS_API_KEY`
- `SOCIAVAULT_API_KEY`

ScrapeCreators is tried first by default. SociaVault is used as fallback when configured.

### Notes and boundaries

- Public LinkedIn data only.
- No LinkedIn credentials or cookies are required.
- Private/login-only comments are not promised.
- Provider payloads can change; the normalizer scans common comment envelopes and records provider status codes in `RUN_SUMMARY`.
- This Actor is independent and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation.

# Actor input Schema

## `startUrls` (type: `array`):

LinkedIn post URLs to scrape. Activity IDs and URNs are also accepted through the Post URLs field.

## `postUrls` (type: `array`):

Optional line-separated list of LinkedIn post URLs, numeric activity IDs, or urn:li:activity values.

## `maxComments` (type: `integer`):

Maximum number of comment and reply rows to save across all posts.

## `includeReplies` (type: `boolean`):

Include nested replies when the provider payload contains them.

## `maxRepliesPerComment` (type: `integer`):

Caps nested replies per top-level comment.

## `metadataOnly` (type: `boolean`):

Save one post summary row per input instead of comment rows. Useful for cheap comment-count checks.

## `providerOrder` (type: `string`):

Choose which managed public-data provider to try first.

## `includeRawData` (type: `boolean`):

Attach raw comment objects to each dataset row for debugging. This increases dataset size.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7312345678901234567/"
    }
  ],
  "postUrls": [],
  "maxComments": 100,
  "includeReplies": true,
  "maxRepliesPerComment": 25,
  "metadataOnly": false,
  "providerOrder": "scrapecreators-first",
  "includeRawData": false
}
```

# Actor output Schema

## `comments` (type: `string`):

Structured dataset records for scraped public LinkedIn comments and replies.

## `commentsCsv` (type: `string`):

CSV export of the same LinkedIn comment and reply records.

## `runSummary` (type: `string`):

Machine-readable telemetry with comment counts, providers used, provider status codes, costs, and stop reason.

## `outputSummary` (type: `string`):

Compact agent-friendly summary with comments scraped, posts processed, providers used, and stop reason.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.linkedin.com/feed/update/urn:li:activity:7312345678901234567/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/linkedin-comments-scraper").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 = { "startUrls": [{ "url": "https://www.linkedin.com/feed/update/urn:li:activity:7312345678901234567/" }] }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/linkedin-comments-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7312345678901234567/"
    }
  ]
}' |
apify call khadinakbar/linkedin-comments-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/43uwRJdJgmyirrmd4/builds/RBQcqrxQayewWtKkb/openapi.json
