# LinkedIn Post Reactions & Comments Scraper ✅ No Cookies (`data_pool/linkedin-post-engagement-scraper`) Actor

Get every engager on a LinkedIn post — reactors and commenters — in one actor, deduplicated into a single lead list. No login or cookies required.

- **URL**: https://apify.com/data\_pool/linkedin-post-engagement-scraper.md
- **Developed by:** [Data Pool](https://apify.com/data_pool) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 engager returneds

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/platform/actors/running/actors-in-store#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 Post Engagement Scraper - No Cookies, No Login

Get **everyone who engaged with a LinkedIn post** — the people who reacted *and* the people who commented — as one clean, deduplicated lead list. **No LinkedIn login, no account connection, no cookies to paste.** Just drop in post links and run.

### Why this Actor

Most tools make you buy **two separate scrapers** — one for likers, one for commenters — then merge and deduplicate the results yourself.

This Actor returns **both in a single run**, already merged. If someone both liked *and* commented on a post, you get **one row** for that person showing both actions — not two rows you have to reconcile.

And because it runs without any LinkedIn credentials from you, **your own LinkedIn account is never involved and never at risk**. There is nothing to connect, nothing to paste, and nothing to keep logged in.

### What you get

For every person who engaged:

- **Name and headline** — who they are and what they do
- **Profile URL** — go straight to their profile
- **Profile picture** and whether it's a person or a company page
- **How they engaged** — reacted, commented, or both
- **Which reaction** they gave (like, celebrate, support, …)
- **Their comment text** and when they posted it
- **The post** they engaged with, plus its author

### Input

| Field | Description |
|---|---|
| **Post URLs** (required) | One or more LinkedIn posts. Paste normal post links, `lnkd.in` short links, `urn:li:activity:…` IDs, or post IDs — all work. |
| **Engagement types** | Collect *Reactions (likers)*, *Comments (commenters)*, or both. Default: both. |
| **Max engagers per post** | Cap the results per post, counted across both types. Use `0` for no limit. Default `200`. |
| **Include comment replies** | Also collect people who replied to comments. Finds more leads; takes longer. |
| **Deduplicate people** | On by default — one row per person per post. Turn off to get one row per individual action. |

#### Example input

```json
{
  "postUrls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7491138591868469248/"
  ],
  "engagementTypes": ["reactions", "comments"],
  "maxItemsPerPost": 50,
  "dedupePeople": true
}
```

### Output

Each engager is one dataset item — export to JSON, CSV, or Excel, or pull it via the API:

```json
{
  "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7491138591868469248/",
  "postAuthorName": "Jane Doe",
  "engagementTypes": ["reaction", "comment"],
  "reactionValue": "LIKE",
  "commentText": "Great post — this matches what we're seeing too.",
  "commentedAt": "2026-07-01T12:00:00Z",
  "commentReplyCount": 2,
  "isCommentReply": false,
  "person": {
    "name": "John Smith",
    "headline": "VP Engineering @ Acme",
    "profileUrl": "https://www.linkedin.com/in/john-smith",
    "publicIdentifier": "john-smith",
    "pictureUrl": "https://media.licdn.com/…",
    "type": "individual"
  }
}
```

A note on timestamps: LinkedIn provides a time for **comments** but not for **reactions**, so `commentedAt` is empty on rows where the person only reacted. We leave it empty rather than showing a made-up time.

### How to scrape LinkedIn post comments and reactions

Paste the post URL into **Post URLs**, leave **Engagement types** on both, and run. That's the whole setup — there is no login step, no cookie to extract from your browser, and no account to connect.

#### How to get only the commenters (or only the likers)

Set **Engagement types** to just *Comments (commenters)* or just *Reactions (likers)*. Everything else stays the same, and you only pay for the rows you actually get back.

#### How to scrape engagement from many posts at once

**Post URLs** takes a list, so paste as many posts as you like in one run. Each row records which post it came from in `postUrl`, so a single export can cover an entire campaign, a competitor's month of content, or every post from an event hashtag.

#### How to turn a topic into a lead list

Run our [LinkedIn Post Scraper](https://apify.com/data_pool/linkedin-post-scraper) to find posts about your topic by keyword, then feed those post URLs into this Actor. You go from "people are talking about X" to "here is the list of people, with profile links" in two steps.

#### How to monitor a post's engagement over time

Put the Actor on a [schedule](https://docs.apify.com/platform/schedules) — daily or hourly — with the same post URLs. Each run captures the audience as it stands, so you can watch a launch post accumulate an audience and follow up while interest is fresh.

### LinkedIn Post Engagement API

Every run is available through the [Apify API](https://docs.apify.com/api/v2), so you can use this Actor as a **LinkedIn reactions and comments API** rather than a manual tool. Start a run, poll it, and read the dataset as JSON from your own backend, or have results pushed to you with a [webhook](https://docs.apify.com/platform/integrations/webhooks) when a run finishes. Client libraries are available for Python and JavaScript.

### Integrations

- **n8n**, **Make**, and **Zapier** — trigger runs and pipe engagers straight into your CRM, spreadsheet, or email tool using Apify's [official integrations](https://docs.apify.com/platform/integrations).
- **Google Sheets / Airtable / Slack** — push new engagers into a sheet or a channel as they are found.
- **AI agents (MCP)** — the Actor is callable from AI agents through Apify's MCP server, so an assistant can pull a post's audience on request.
- **Webhooks** — fire your own endpoint the moment a run completes.

### Common uses

- **Warm lead generation** — everyone engaging with a post on your topic is already interested. Reach out to them instead of cold lists.
- **Competitor audience mining** — see who engages with your competitors' content.
- **Event and launch follow-up** — capture everyone who responded to an announcement.
- **Community and advocacy** — find the people who consistently amplify your content.
- **Influencer research** — see which audiences a creator actually reaches.

### Limits and scale

- Results reflect what LinkedIn surfaces for a post at the time of the run. Very large engagement lists (many thousands) may be returned partially.
- Use **Max engagers per post** to keep large jobs predictable, and **maximum spend per run** to cap cost.
- Runs are paced deliberately to stay well within normal usage patterns. Big multi-post jobs take longer rather than being pushed through aggressively.

### Pricing

**$1.50 per 1,000 engagers — that's it.** No subscription, no monthly minimum, and no charge for engagers you don't receive.

Duplicates merged by the Actor aren't charged twice, and you can set a **maximum spend per run** so costs stay predictable.

### FAQ

**Do I need a LinkedIn account, login, or cookies?**
No. That is the point of this Actor. You never connect an account, paste an `li_at` cookie, or log in anywhere.

**Can my LinkedIn account get banned for using this?**
Your account isn't used, so it isn't exposed. Tools that ask you to paste a cookie or connect your profile put *your* account in the loop — this one doesn't.

**Is scraping LinkedIn legal?**
Collecting publicly visible information is broadly permitted in many jurisdictions, but it is also restricted by LinkedIn's own terms, and personal data carries obligations under laws such as GDPR. You are responsible for having a lawful basis for what you collect and how you use it. If you are unsure — particularly for outreach in the EU — take legal advice.

**Can I export to Excel or CSV?**
Yes. Every run's dataset exports to JSON, CSV, Excel, XML, or RSS, from the Console or the API.

**Can I run this on a schedule?**
Yes, using Apify [Schedules](https://docs.apify.com/platform/schedules) — hourly, daily, weekly, or a custom cron expression.

**Does it work with n8n, Make, or Zapier?**
Yes, through Apify's official integrations for each. See [Integrations](#integrations) above.

**What if a post has no engagement, or the URL is wrong?**
The run finishes cleanly and simply returns no rows for that post. You are not charged for engagers that were never returned.

**Does it get comment replies too?**
Only if you switch on **Include comment replies**. It is off by default because it makes runs longer and returns a lot more rows.

**Why is `commentedAt` empty on some rows?**
LinkedIn timestamps comments but not reactions. Rows for people who only reacted have no time available, and we leave the field empty rather than inventing one.

**How many engagers can I get from one post?**
As many as LinkedIn surfaces for it. Set **Max engagers per post** to `0` to remove our cap and take everything available.

### More LinkedIn scrapers — no cookies required

- **[LinkedIn Post Scraper](https://apify.com/data_pool/linkedin-post-scraper)** — find posts by keyword. Pair it with this Actor to turn a topic into a lead list.
- **[LinkedIn Jobs Scraper](https://apify.com/data_pool/linkedin-jobs-scraper)** — search job postings with LinkedIn's own filters.

### Support and feedback

Something not working, or a field you wish this returned? **[Open an issue](https://apify.com/data_pool/linkedin-post-engagement-scraper/issues)** — issues are read and answered quickly, and most requests are small changes.

If this Actor is useful to you, **please leave a review**. Reviews are the main way other people find it.

### Notes

- Results depend on what LinkedIn surfaces for a post at the time of the run, and very large engagement lists may be partially available.
- Please use scraped data responsibly and in line with applicable laws (including data-protection rules such as GDPR) and LinkedIn's terms. You are responsible for having a lawful basis to collect and process the data you request.

# Actor input Schema

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

LinkedIn post URLs, lnkd.in short links, activity URNs (urn:li:activity:...), or post IDs. Tip: feed these straight from the output of our LinkedIn Post Keyword Scraper.

## `engagementTypes` (type: `array`):

Which engagers to collect. By default both reactors and commenters are returned.

## `maxItemsPerPost` (type: `integer`):

Maximum engagers to return per post, counted across all selected engagement types. Use 0 for no limit.

## `includeCommentReplies` (type: `boolean`):

Also collect people who replied to comments. Increases results and run time.

## `dedupePeople` (type: `boolean`):

Return one row per person per post, merging their reaction and comment into a single record. Turn off to get one row per engagement action.

## Actor input object example

```json
{
  "postUrls": [
    "urn:li:activity:7491138591868469248"
  ],
  "engagementTypes": [
    "reactions",
    "comments"
  ],
  "maxItemsPerPost": 200,
  "includeCommentReplies": false,
  "dedupePeople": true
}
```

# Actor output Schema

## `engagers` (type: `string`):

Everyone who engaged with the given posts — reactors and commenters, one item per person (or per action when deduplication is off).

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

// Run the Actor and wait for it to finish
const run = await client.actor("data_pool/linkedin-post-engagement-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 = { "postUrls": ["https://www.linkedin.com/feed/update/urn:li:activity:7491138591868469248/"] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_pool/linkedin-post-engagement-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/ISwAG2wkdAnBi97Sn/builds/GQMZl6otzqNU2ZTKt/openapi.json
