# LinkedIn User Comments & Reactions Scraper No Cookies (`maximedupre/linkedin-profile-comments-reactions-scraper`) Actor

Collect public LinkedIn comments and reactions made by selected profiles on other people's posts. Get activity links, profile and post context, dates, engagement, and available attachments in a dataset. No LinkedIn login or cookies are needed.

- **URL**: https://apify.com/maximedupre/linkedin-profile-comments-reactions-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.05 / 1,000 profile activities

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?

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

### 🔎 Find public LinkedIn profile activity

Social media analysts, researchers, and developers can use this Actor to collect public engagement activity from one or more LinkedIn profiles. It saves one dataset row for each public comment or reaction a supplied profile made on another person's post, with the activity link, profile identity, original post, dates, engagement counts, and available attachments. The structured rows make it easier to review public conversations and use the data in a workflow.

- Review public activity from a profile with **[LinkedIn Activity Scraper](https://apify.com/maximedupre/linkedin-profile-comments-reactions-scraper/examples/linkedin-activity-scraper)**.
- Build a profile activity view with **[LinkedIn Profile Activity Scraper](https://apify.com/maximedupre/linkedin-profile-comments-reactions-scraper/examples/linkedin-profile-activity-scraper)**.
- Keep only reactions from a profile with **[LinkedIn Profile Reactions Scraper](https://apify.com/maximedupre/linkedin-profile-comments-reactions-scraper/examples/linkedin-profile-reactions-scraper)**.
- Find comments written by a profile with **[LinkedIn Profile Comments Scraper](https://apify.com/maximedupre/linkedin-profile-comments-reactions-scraper/examples/linkedin-profile-comments-scraper)**.
- Collect comments and reactions together with **[LinkedIn Profile Comments and Reactions Scraper](https://apify.com/maximedupre/linkedin-profile-comments-reactions-scraper/examples/linkedin-profile-comments-and-reactions-scraper)**.

#### 📦 Comments and reactions with post context

Each row says whether the activity is a comment or reaction and links it to the supplied profile and original post. Optional fields are omitted when the public source does not provide them. Comment rows include comment text and comment reaction counts when shown. Reaction rows include the reaction type. Both shapes can include the activity time, direct activity link, post text, post author, post engagement, and attachments when available.

#### ▶️ Choose a profile activity run

**How to run**

1. Choose comments, reactions, or both.
2. Add one or more public LinkedIn profile URLs or profile identifiers.
3. Optionally choose reaction types, a UTC date range or recent-days window, and result limits.
4. Start the run and open the default dataset for the structured rows.

All submitted profiles use the same time window. The Actor collects activity made by those profiles on other people's posts. It does not collect people who engaged with the supplied profiles' own posts. Results reflect what the public source exposes when the run executes, so private, deleted, connection-only, or otherwise hidden activity is not included.

#### ⚙️ Input

Add public profile targets, choose the activity to collect, and set any filters or limits you need.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `resultType` | string | Required. Chooses `comments`, `reactions`, or `commentsAndReactions`. |
| `profileTargets` | array of strings | Required. Lists one or more public LinkedIn profile URLs or profile identifiers. |
| `reactionTypes` | array of strings | Optional. Keeps only the reaction types you enter for Reactions or Comments and reactions. It is ignored for Comments. Leave it empty to keep every type. |
| `timeWindow` | object | Optional. Uses a UTC date range or a recent-days window. Leave all fields empty to collect all available activity. |
| `timeWindow.startDate` | string | Optional UTC start date. Use it with `timeWindow.endDate`. |
| `timeWindow.endDate` | string | Optional UTC end date. Use it with `timeWindow.startDate`. |
| `timeWindow.lastDays` | integer | Optional positive number of recent days. Use it instead of the start and end dates. |
| `maxItemsPerProfile` | integer | Optional positive limit for each profile. Leave it empty to return all available results for each profile until the source is exhausted. |
| `maxItems` | integer | Optional positive limit for the whole run. Leave it empty to return all available results until the source is exhausted. |

**Default input example**

This example is copied from the public input of a successful current-beta comments run.

```json
{
  "resultType": "comments",
  "profileTargets": [
    "https://www.linkedin.com/in/satyanadella/"
  ],
  "maxItemsPerProfile": 20,
  "maxItems": 100
}
```

#### 🧾 Output

Each dataset row uses one of the two shapes below. Use the dotted paths in the tables to find nested values. Optional fields are omitted when the public source does not provide them.

**Comment activity row**

| Field | Type | What it does |
| --- | --- | --- |
| `activityType` | string | Always `comment` for this shape. |
| `activityAt` | ISO 8601 date-time string | Time when the supplied profile made the activity, when provided. |
| `activityUrl` | URL string | Direct link to the public comment or reaction, when provided. |
| `profile` | object | Public identity of the profile that made the activity. |
| `profile.name` | string | Public name of the supplied profile. |
| `profile.profileUrl` | URL string | Public LinkedIn profile link. |
| `profile.profileId` | string | Source profile identifier, when provided. |
| `post` | object | Public post where the profile made the activity. |
| `post.id` | string | Source post identifier, when provided. |
| `post.url` | URL string | Direct link to the original post. |
| `post.text` | string | Original post text or available text preview. |
| `post.publishedAt` | ISO 8601 date-time string | Time when the original post was published, when provided. |
| `post.author` | object | Public identity of the original post author. |
| `post.author.name` | string | Public name of the original post author. |
| `post.author.profileUrl` | URL string | Public LinkedIn profile link of the original post author, when provided. |
| `post.author.profileId` | string | Source profile identifier of the original post author, when provided. |
| `post.engagement` | object | Engagement totals and reaction labels for the original post, when provided. |
| `post.engagement.reactionCount` | integer | Total reactions on the original post. |
| `post.engagement.commentCount` | integer | Total comments on the original post. |
| `post.engagement.reactionTypes` | array of strings | Reaction labels shown on the original post, when provided. |
| `post.attachments` | array of objects | Images, videos, or linked article details from the original post, when available. |
| `post.attachments[].type` | string | Attachment type: `image`, `video`, or `article`. |
| `post.attachments[].url` | URL string | Public link for the attachment, when provided. |
| `post.attachments[].title` | string | Attachment title, when provided. |
| `post.attachments[].description` | string | Attachment description, when provided. |
| `post.attachments[].imageUrl` | URL string | Preview image link for the attachment, when provided. |
| `comment` | object | Public comment made by the supplied profile. |
| `comment.id` | string | Source comment identifier, when provided. |
| `comment.text` | string | Text of the public comment. |
| `comment.reactionCount` | integer | Total reactions on the comment, when provided. |

This complete row is from a successful current-beta comments run.

```json
{
  "activityType": "comment",
  "activityAt": "2026-07-09T18:45:43.939Z",
  "activityUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7477760679408599040/",
  "profile": {
    "name": "Satya Nadella",
    "profileUrl": "https://www.linkedin.com/in/satyanadella/",
    "profileId": "satyanadella"
  },
  "post": {
    "id": "urn:li:activity:7477760679408599040",
    "url": "https://www.linkedin.com/posts/michaelabbott_one-of-the-privileges-of-teaching-cs153-activity-7477760679408599040-MXGW",
    "text": "one of the privileges of teaching cs153 (Frontier Systems) at Stanford Online is getting to bring people into the room who have actually built the future.",
    "publishedAt": "2026-06-30T16:31:16.025Z",
    "author": {
      "name": "michael abbott",
      "profileUrl": "https://www.linkedin.com/in/michaelabbott/",
      "profileId": "michaelabbott"
    },
    "engagement": {
      "reactionCount": 557,
      "commentCount": 27,
      "reactionTypes": [
        "LIKE",
        "PRAISE",
        "EMPATHY"
      ]
    }
  },
  "comment": {
    "id": "urn:li:activity:7477760679408599040",
    "text": "Thanks for having me, michael. Great to chat with your students about the industry and career growth!",
    "reactionCount": 24
  }
}
```

**Reaction activity row**

| Field | Type | What it does |
| --- | --- | --- |
| `activityType` | string | Always `reaction` for this shape. |
| `activityAt` | ISO 8601 date-time string | Time when the supplied profile made the activity, when provided. |
| `activityUrl` | URL string | Direct link to the public reaction or comment, when provided. |
| `profile` | object | Public identity of the profile that made the activity. |
| `profile.name` | string | Public name of the supplied profile. |
| `profile.profileUrl` | URL string | Public LinkedIn profile link. |
| `profile.profileId` | string | Source profile identifier, when provided. |
| `post` | object | Public post where the profile made the activity. |
| `post.id` | string | Source post identifier, when provided. |
| `post.url` | URL string | Direct link to the original post. |
| `post.text` | string | Original post text or available text preview. |
| `post.publishedAt` | ISO 8601 date-time string | Time when the original post was published, when provided. |
| `post.author` | object | Public identity of the original post author. |
| `post.author.name` | string | Public name of the original post author. |
| `post.author.profileUrl` | URL string | Public LinkedIn profile link of the original post author, when provided. |
| `post.author.profileId` | string | Source profile identifier of the original post author, when provided. |
| `post.engagement` | object | Engagement totals and reaction labels for the original post, when provided. |
| `post.engagement.reactionCount` | integer | Total reactions on the original post. |
| `post.engagement.commentCount` | integer | Total comments on the original post. |
| `post.engagement.reactionTypes` | array of strings | Reaction labels shown on the original post, when provided. |
| `post.attachments` | array of objects | Images, videos, or linked article details from the original post, when available. |
| `post.attachments[].type` | string | Attachment type: `image`, `video`, or `article`. |
| `post.attachments[].url` | URL string | Public link for the attachment, when provided. |
| `post.attachments[].title` | string | Attachment title, when provided. |
| `post.attachments[].description` | string | Attachment description, when provided. |
| `post.attachments[].imageUrl` | URL string | Preview image link for the attachment, when provided. |
| `reaction` | object | Public reaction made by the supplied profile. |
| `reaction.type` | string | Reaction type given by the supplied profile. |

This complete row is from a successful current-beta reactions run.

```json
{
  "activityType": "reaction",
  "activityUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7487914022294630400/",
  "profile": {
    "name": "Satya Nadella",
    "profileUrl": "https://www.linkedin.com/in/satyanadella/",
    "profileId": "satyanadella"
  },
  "post": {
    "id": "urn:li:activity:7487901334461939712",
    "url": "https://www.linkedin.com/posts/judsonalthoff_microsoft-fy26-q4-earnings-activity-7487901334461939712-pAhO",
    "text": "Microsoft FY26 Q4 Earnings",
    "publishedAt": "2026-07-28T16:06:36.595Z",
    "author": {
      "name": "Judson Althoff",
      "profileUrl": "https://www.linkedin.com/in/judsonalthoff/",
      "profileId": "judsonalthoff"
    },
    "engagement": {
      "reactionCount": 1495,
      "commentCount": 73,
      "reactionTypes": [
        "LIKE",
        "PRAISE",
        "EMPATHY"
      ]
    },
    "attachments": [
      {
        "type": "article",
        "url": "http://aka.ms/FY26Q4Blog?trk=public_profile__reactions-text",
        "title": "aka.ms/FY26Q4Blog"
      }
    ]
  },
  "reaction": {
    "type": "LIKE"
  }
}
```

#### 💳 Pricing

**How charging works**

Pricing follows saved activity rows. Each saved row is one public comment or reaction, and the event includes available post context. The price shown on the Store page depends on your Apify pricing tier. Set a per-profile or total limit when you want to cap the number of returned rows and the charges that can follow.

#### 🔌 Integrations

Use the default dataset in Apify or standard Apify dataset access to read the machine-readable rows. Each row keeps direct links to LinkedIn activity and the original post when the source provides them.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Does this Actor find people who reacted to a supplied profile's posts?

No. It collects comments and reactions made by the supplied profiles on other people's posts. It does not collect the people who engaged with those profiles' own posts.

##### Can I use a profile URL and a profile identifier in one run?

Yes. Add one or more public LinkedIn profile URLs or profile identifiers to `profileTargets`.

##### Can I collect comments and reactions in one run?

Yes. Choose `Comments and reactions` in `resultType`.

##### Can I filter reaction types when I collect comments?

No. `reactionTypes` applies to Reactions and Comments and reactions. It is ignored when `Comments` is selected.

##### Can each profile use a different time window?

No. All submitted profiles use the same `timeWindow` in one run.

##### What does leaving a result limit empty do?

Leaving `maxItemsPerProfile` empty returns all available results for each profile until the source is exhausted. Leaving `maxItems` empty returns all available results until the source is exhausted.

##### Do I need a LinkedIn login or cookies?

No. The Actor uses public LinkedIn activity and does not require a LinkedIn login or cookies.

##### What if a profile or activity is private?

Private, connection-only, deleted, or otherwise hidden activity is not included. Public source gaps or changes can also limit historical coverage.

##### Why can an output field be missing?

Some fields are optional because the public source may not provide them. The Actor leaves those fields out instead of filling them with made-up values.

### 📝 Changelog

**v0.0** (01-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~linkedin-profile-comments-reactions-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- **[LinkedIn Profile Comments Scraper No Cookies](https://apify.com/maximedupre/scrape-linkedin-profile-comments)**: Collect profile activity, comments on recent profile posts, or comments from a public post or article.
- **[LinkedIn Profile Comments & Reactions Scraper No Cookies](https://apify.com/scraping_solutions/linkedin-profile-comments-reactions-scraper-no-cookies)**: Run a separate public profile comments and reactions collection.
- **[LinkedIn User Comments & Reactions Scraper \[NO COOKIES\] ✅](https://apify.com/unseenuser/LinkedIn-user-comments-reactions)**: Review recent public comments and reactions from a LinkedIn user.
- **[LinkedIn User Comments & Reactions Scraper](https://apify.com/khadinakbar/linkedin-user-comments-reactions-scraper)**: Collect profile comment text, reaction types, timestamps, and original post context.
- **[LinkedIn User Reactions Scraper \[NO COOKIES\] ✅](https://apify.com/unseenuser/LinkedIn-user-reactions)**: Focus a run on reactions given by a public LinkedIn user.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `resultType` (type: `string`):

Choose which public activity to collect: comments, reactions, or both.

## `profileTargets` (type: `array`):

Add one or more public LinkedIn profile URLs or profile identifiers. The Actor collects activity made by those profiles on other people's posts.

## `reactionTypes` (type: `array`):

Optional. Keep only the reaction types you choose for Reactions or Comments and reactions. Leave it empty to keep every type. This field is ignored for Comments.

## `timeWindow` (type: `object`):

Optional. Use a UTC date range or a recent-days window. Leave all fields empty to collect all available activity. Enter dates and times in UTC when using JSON.

## `maxItemsPerProfile` (type: `integer`):

Optional. Set a positive limit for each profile. Leave it empty to return all available results for each profile until the source is exhausted.

## `maxItems` (type: `integer`):

Optional. Set a positive limit for the whole run. Leave it empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "resultType": "comments",
  "profileTargets": [
    "https://www.linkedin.com/in/satyanadella/"
  ],
  "maxItemsPerProfile": 20,
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open the dataset with one row for each public comment or reaction made by a supplied profile.

# 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 = {
    "resultType": "comments",
    "profileTargets": [
        "https://www.linkedin.com/in/satyanadella/"
    ],
    "maxItemsPerProfile": 20,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/linkedin-profile-comments-reactions-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 = {
    "resultType": "comments",
    "profileTargets": ["https://www.linkedin.com/in/satyanadella/"],
    "maxItemsPerProfile": 20,
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/linkedin-profile-comments-reactions-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 '{
  "resultType": "comments",
  "profileTargets": [
    "https://www.linkedin.com/in/satyanadella/"
  ],
  "maxItemsPerProfile": 20,
  "maxItems": 100
}' |
apify call maximedupre/linkedin-profile-comments-reactions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/linkedin-profile-comments-reactions-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/QjknntUsgpfu2xs7E/builds/bnyaZi8ShBsNx8hkl/openapi.json
