# LinkedIn Post Reactions Scraper (`qaseemiqbal/linkedin-post-reactions-scraper`) Actor

Extract people and entities that reacted to LinkedIn posts, including reaction type, name, headline, profile URL, and image URLs.

- **URL**: https://apify.com/qaseemiqbal/linkedin-post-reactions-scraper.md
- **Developed by:** [Muhammad Qaseem Iqbal](https://apify.com/qaseemiqbal) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### What is LinkedIn Post Reactions Scraper?

**LinkedIn Post Reactions Scraper** extracts reaction-level data from public LinkedIn posts and saves it as a structured Apify dataset. Paste a LinkedIn post URL, choose a reaction type such as Like or Praise, and get a clean list of people or entities that reacted to the post.

Use it to analyze LinkedIn engagement, identify interested audiences, export post reactions to CSV or Excel, monitor campaign engagement, or connect LinkedIn reaction data to research, CRM, BI, or automation workflows.

### What can LinkedIn Post Reactions Scraper do?

- Extract one dataset row per LinkedIn post reaction.
- Filter by `ALL`, `LIKE`, `PRAISE`, `EMPATHY`, `APPRECIATION`, or `INTEREST`.
- Collect reactor names, headlines, profile URLs, profile image URLs, and URNs when available.
- Process one post URL or multiple post URLs in a batch.
- Use automatic pagination for larger posts or manual pagination for one page at a time.
- Export results as JSON, JSONL, CSV, Excel, XML, HTML table, RSS, and other Apify-supported formats.
- Automate runs with Apify API, schedules, webhooks, Google Sheets, Make, Zapier, Slack, Airbyte, or your own app.

### What data can you extract from LinkedIn post reactions?

| Data point | Description |
|---|---|
| `reactionType` | Reaction type returned for the reactor, such as `LIKE` or `PRAISE`. |
| `reactorName` | Name of the person or entity that reacted, when available. |
| `reactorHeadline` | LinkedIn headline or subtitle shown for the reactor. |
| `reactorProfileUrl` | LinkedIn profile URL for the reactor, when available. |
| `reactorUrn` | LinkedIn URN or internal identifier returned for the reactor. |
| `reactorType` | Normalized entity type, such as person, company, or unknown. |
| `profilePictureSmall` | Small profile image URL. |
| `profilePictureMedium` | Medium profile image URL. |
| `profilePictureLarge` | Large profile image URL. |
| `profilePictureOriginal` | Largest available profile image URL. |
| `postUrl` | Source LinkedIn post URL. |
| `postId` | Normalized LinkedIn post or activity ID, when available. |
| `pageNumber` | Page number used during extraction. |
| `resultPosition` | Position of the reaction in the extracted result sequence. |
| `scrapedAt` | ISO timestamp when the record was extracted. |
| `dedupeKey` | Stable key for removing duplicates in downstream systems. |

### How to use LinkedIn Post Reactions Scraper

1. Open the Actor on Apify.
2. Paste a public LinkedIn post URL into **LinkedIn post URL or ID**.
3. Choose a reaction type, or keep **All reactions**.
4. Choose **Auto pagination** for most runs, or **Manual pagination** if you only need one page.
5. Set a maximum result limit to control run size and cost.
6. Click **Start**.
7. Open the **Dataset** tab to preview, filter, or export the results.

For batch runs, use **Start URLs** and add multiple LinkedIn post URLs.

### Input

| Input field | Type | Required | Description |
|---|---:|---:|---|
| `postUrlOrId` | string | No | One LinkedIn post URL or post ID. Use this for quick single-post runs. |
| `startUrls` | array | No | Batch list of LinkedIn post URLs. Required if `postUrlOrId` is empty. |
| `reactionType` | string | No | `ALL`, `LIKE`, `PRAISE`, `EMPATHY`, `APPRECIATION`, or `INTEREST`. |
| `paginationMode` | string | No | `auto` collects multiple pages; `manual` collects one page. |
| `pageNumber` | integer | No | Page number used in manual pagination mode. |
| `limit` | integer | No | Page size from 1 to 100. |
| `maxResultsPerPost` | integer | No | Maximum reactions to save per post in auto mode. |
| `maxResults` | integer | No | Maximum reactions to save across the whole run. |
| `deduplicateResults` | boolean | No | Removes duplicate reactions from repeated inputs or overlapping pages. |
| `includeProfilePictures` | boolean | No | Adds profile image URLs when available. |
| `proxyConfiguration` | object | No | Proxy settings. Apify Proxy is recommended for production runs. |

#### Example input

```json
{
  "postUrlOrId": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/",
  "reactionType": "ALL",
  "paginationMode": "auto",
  "maxResultsPerPost": 500,
  "maxResults": 1000,
  "deduplicateResults": true,
  "includeProfilePictures": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

#### Batch input example

```json
{
  "startUrls": [
    {
      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/"
    },
    {
      "url": "https://www.linkedin.com/posts/example-company_product-launch-activity-7301111111111111111-aB12"
    }
  ],
  "reactionType": "PRAISE",
  "paginationMode": "auto",
  "maxResultsPerPost": 300
}
```

#### Input tips

- Use full LinkedIn post URLs for best results.
- Use `ALL` when you want the complete reaction list returned by the scraper.
- Use a specific reaction type when you only care about one signal, such as `PRAISE`.
- Keep `limit` at `100` for efficient pagination.
- Lower `maxConcurrency` if you see rate limits or unstable runs.
- Duplicate post URLs are normalized and deduplicated when deduplication is enabled.
- Manual pagination is useful when you want page 1, page 2, page 3, and so on as separate controlled runs.

### Output

Results are saved to the default Apify dataset. Each dataset item represents one LinkedIn post reaction.

You can export the dataset from Apify as JSON, JSONL, CSV, Excel/XLSX, XML, HTML table, RSS, or access it programmatically through the Apify API.

#### Example output

```json
{
  "reactionType": "LIKE",
  "reactorUrn": "ACoAAANJH5ABQBGTZESH7RCoKqp5CgbqrExample",
  "reactorName": "Himanshu Shekhar",
  "reactorHeadline": "Digital Transformation Leader | IT Strategy | BPM | Low Code No Code | Financial Services",
  "reactorProfileUrl": "https://www.linkedin.com/in/himanshu-example/",
  "reactorProfileId": "himanshu-example",
  "reactorType": "PERSON",
  "profilePictureSmall": "https://media.licdn.com/dms/image/example/profile-displayphoto-shrink_100_100/0/example.jpg",
  "profilePictureMedium": "https://media.licdn.com/dms/image/example/profile-displayphoto-shrink_200_200/0/example.jpg",
  "profilePictureLarge": "https://media.licdn.com/dms/image/example/profile-displayphoto-shrink_400_400/0/example.jpg",
  "profilePictureOriginal": "https://media.licdn.com/dms/image/example/profile-displayphoto-shrink_800_800/0/example.jpg",
  "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/",
  "postId": "7302346926123456789",
  "inputUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/",
  "pageNumber": 1,
  "resultPosition": 1,
  "scrapedAt": "2026-06-17T12:00:00.000Z",
  "dedupeKey": "7302346926123456789|ACoAAANJH5ABQBGTZESH7RCoKqp5CgbqrExample|LIKE",
  "metadata": {
    "reactionTypeRequested": "ALL",
    "paginationMode": "auto",
    "limit": 100,
    "source": "linkedin"
  }
}
```

### How much does it cost to scrape LinkedIn post reactions?

The final cost depends on the Actor pricing model, run duration, number of posts, number of reactions, proxy usage, memory, retries, and whether the extraction path uses lightweight HTTP requests or browser automation.

To control cost, set `maxResultsPerPost`, use a specific `reactionType` when possible, keep concurrency moderate, avoid debug mode unless troubleshooting, and use scheduled runs with sensible limits for ongoing monitoring.

Do not assume that every LinkedIn post can be scraped at the same speed. Large posts, restricted posts, target-site rate limits, and retries can increase runtime and Compute Unit usage.

### Integrations and API

You can use LinkedIn Post Reactions Scraper manually in Apify Console or automate it with Apify platform features.

Common workflows include scheduled monitoring, CSV or Excel export, Google Sheets delivery, Make or Zapier automation, Slack notifications, custom webhooks, CRM routing, BI ingestion, and internal tools that need a LinkedIn reactions API alternative.

#### Run with the Apify API

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('USERNAME/linkedin-post-reactions-scraper').call({
  postUrlOrId: 'https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/',
  reactionType: 'ALL',
  paginationMode: 'auto',
  maxResultsPerPost: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Replace `USERNAME/linkedin-post-reactions-scraper` with the final Actor ID.

#### Export LinkedIn reactions to CSV, Excel, JSON, or Google Sheets

After the run finishes, open the Actor run, go to the **Dataset** tab, click **Export**, and choose CSV, Excel, JSON, JSONL, XML, HTML, or another supported format. Use Apify integrations if you want to send the data to Google Sheets or another tool automatically.

### Responsible use and legality

This Actor is intended for extracting data that you have a legitimate reason to process. LinkedIn reaction data may include personal data such as names, profile URLs, headlines, and profile images. You are responsible for complying with applicable laws and regulations, including GDPR and other privacy laws where relevant.

Do not use the Actor for spam, harassment, unlawful profiling, unauthorized collection of private information, or activities that violate applicable terms or laws. This README does not provide legal advice.

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedIn is a registered trademark of LinkedIn Corporation. All trademarks are property of their respective owners.

### FAQ

#### Do I need a LinkedIn account?

The Actor is designed to work without requiring a LinkedIn account in the MVP. Results still depend on what is publicly available and accessible during the run.

#### Can I scrape every reaction from a viral LinkedIn post?

The Actor supports pagination and configurable limits, but you should not assume unlimited extraction. Very large posts may take longer, cost more, or be limited by LinkedIn availability, rate limits, or technical changes.

#### Can I filter by reaction type?

Yes. You can select `ALL`, `LIKE`, `PRAISE`, `EMPATHY`, `APPRECIATION`, or `INTEREST`.

#### Why are some profile fields missing?

LinkedIn may return limited information for some reactors. Profiles can be private, restricted, deleted, unavailable in your region, or returned without complete image or headline data.

#### Can I use this as a LinkedIn reactions API?

Yes. You can run the Actor with the Apify API and fetch the dataset programmatically. It is not an official LinkedIn API, and availability depends on the Actor's extraction method and LinkedIn's public accessibility.

#### Can I schedule the Actor?

Yes. Create an Apify Task with your preferred input and use Apify schedules to run it automatically.

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

Yes. Apify datasets can be exported to CSV, Excel/XLSX, JSON, JSONL, XML, HTML table, and other supported formats.

#### What happens if one post fails in a batch run?

The Actor continues processing the remaining posts where possible. Failed posts and warnings are reported in the run log and summary records.

### Troubleshooting

| Problem | Possible cause | What to try |
|---|---|---|
| No results returned | Post has no visible reactions, is restricted, deleted, or unavailable | Check the post URL in a browser and try another public post. |
| Invalid input error | The URL is not a supported LinkedIn post URL | Use a LinkedIn feed update or post activity URL. |
| Fewer results than expected | LinkedIn returned fewer visible reactions or a limit was reached | Increase `maxResultsPerPost`, use `ALL`, or try manual pagination. |
| Run is slow | Large post, retries, proxy latency, or browser mode | Lower result limits or process fewer posts per run. |
| Run is blocked or rate limited | Too much concurrency or target-site protection | Lower `maxConcurrency`, keep Apify Proxy enabled, and retry later. |
| Duplicate rows | Same post was entered multiple times or pages overlapped | Enable `deduplicateResults`. |
| Missing profile pictures | LinkedIn did not return image URLs for some reactors | Keep `includeProfilePictures` enabled, but expect nulls for unavailable images. |
| API run works but export columns look nested | JSON contains nested objects | Use the default dataset view or select flat fields when exporting. |

### Support and feedback

Use the **Issues** tab on the Actor page for bug reports, feature requests, or questions. Include the run ID, input used, expected behavior, and a short description of what happened.

Custom enhancements may be possible, such as additional output fields, monitoring workflows, or integrations with related LinkedIn and enrichment Actors.

# Actor input Schema

## `postUrlOrId` (type: `string`):

Paste one public LinkedIn post URL or numeric activity ID. Leave this empty when using Start URLs for batch runs.

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

Optional batch list of public LinkedIn post URLs. Each item should be a LinkedIn feed update URL or post activity URL.

## `reactionType` (type: `string`):

Choose which reactions to extract. Select All reactions to include every supported reaction type returned for the post.

## `paginationMode` (type: `string`):

Auto collects pages until limits are reached. Manual fetches one configured page only.

## `pageNumber` (type: `integer`):

Page number used only in Manual pagination mode. Page 1 is the first page.

## `limit` (type: `integer`):

Maximum number of reactions requested per page. The target site may return fewer.

## `maxResultsPerPost` (type: `integer`):

Maximum number of reaction rows to save for each LinkedIn post in Auto pagination mode.

## `maxResults` (type: `integer`):

Maximum number of reaction rows to save across the entire run.

## `deduplicateResults` (type: `boolean`):

Skip duplicate reactions caused by repeated URLs, overlapping pages, or repeated cursors.

## `includeProfilePictures` (type: `boolean`):

Include available LinkedIn profile image URLs in the dataset. The Actor stores image URLs only; it does not download images.

## `includeRawMetadata` (type: `boolean`):

Include limited technical metadata for troubleshooting. Keep this disabled for cleaner CSV and Excel exports.

## `proxyConfiguration` (type: `object`):

Proxy settings. Apify Proxy is recommended for production runs because LinkedIn availability can vary by network.

## `maxConcurrency` (type: `integer`):

Maximum number of posts processed at the same time. Lower this if you see rate limits or unstable runs.

## `requestTimeoutSecs` (type: `integer`):

Maximum time in seconds to wait for a single page request before retrying or failing it.

## `maxRequestRetries` (type: `integer`):

Number of retries for temporary network errors, rate limits, or unavailable responses.

## `debugMode` (type: `boolean`):

Enable more verbose logs and limited diagnostics for troubleshooting. This may increase log size.

## Actor input object example

```json
{
  "postUrlOrId": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/",
  "startUrls": [
    {
      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/"
    }
  ],
  "reactionType": "ALL",
  "paginationMode": "auto",
  "pageNumber": 1,
  "limit": 100,
  "maxResultsPerPost": 500,
  "maxResults": 5000,
  "deduplicateResults": true,
  "includeProfilePictures": true,
  "includeRawMetadata": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 3,
  "requestTimeoutSecs": 30,
  "maxRequestRetries": 3,
  "debugMode": false
}
```

# Actor output Schema

## `reactions` (type: `string`):

Dataset items. Each item represents one LinkedIn post reaction.

## `summary` (type: `string`):

Compact JSON summary with totals, status counts, dataset ID, and warnings.

## `detailedSummary` (type: `string`):

Detailed JSON summary by post, including partial failures and deduplication counts.

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

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

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

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

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

```

## CLI example

```bash
echo '{
  "postUrlOrId": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/",
  "startUrls": [
    {
      "url": "https://www.linkedin.com/feed/update/urn:li:activity:7302346926123456789/"
    }
  ]
}' |
apify call qaseemiqbal/linkedin-post-reactions-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=qaseemiqbal/linkedin-post-reactions-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Post Reactions Scraper",
        "description": "Extract people and entities that reacted to LinkedIn posts, including reaction type, name, headline, profile URL, and image URLs.",
        "version": "1.0",
        "x-build-id": "WDvwXkh71EKCGUTAc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/qaseemiqbal~linkedin-post-reactions-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-qaseemiqbal-linkedin-post-reactions-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/qaseemiqbal~linkedin-post-reactions-scraper/runs": {
            "post": {
                "operationId": "runs-sync-qaseemiqbal-linkedin-post-reactions-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/qaseemiqbal~linkedin-post-reactions-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-qaseemiqbal-linkedin-post-reactions-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "postUrlOrId": {
                        "title": "LinkedIn post URL or ID",
                        "type": "string",
                        "description": "Paste one public LinkedIn post URL or numeric activity ID. Leave this empty when using Start URLs for batch runs."
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Optional batch list of public LinkedIn post URLs. Each item should be a LinkedIn feed update URL or post activity URL.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "reactionType": {
                        "title": "Reaction type",
                        "enum": [
                            "ALL",
                            "LIKE",
                            "PRAISE",
                            "EMPATHY",
                            "APPRECIATION",
                            "INTEREST"
                        ],
                        "type": "string",
                        "description": "Choose which reactions to extract. Select All reactions to include every supported reaction type returned for the post.",
                        "default": "ALL"
                    },
                    "paginationMode": {
                        "title": "Pagination mode",
                        "enum": [
                            "auto",
                            "manual"
                        ],
                        "type": "string",
                        "description": "Auto collects pages until limits are reached. Manual fetches one configured page only.",
                        "default": "auto"
                    },
                    "pageNumber": {
                        "title": "Page number",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Page number used only in Manual pagination mode. Page 1 is the first page.",
                        "default": 1
                    },
                    "limit": {
                        "title": "Page size",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of reactions requested per page. The target site may return fewer.",
                        "default": 100
                    },
                    "maxResultsPerPost": {
                        "title": "Maximum results per post",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of reaction rows to save for each LinkedIn post in Auto pagination mode.",
                        "default": 500
                    },
                    "maxResults": {
                        "title": "Maximum results total",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of reaction rows to save across the entire run.",
                        "default": 5000
                    },
                    "deduplicateResults": {
                        "title": "Deduplicate results",
                        "type": "boolean",
                        "description": "Skip duplicate reactions caused by repeated URLs, overlapping pages, or repeated cursors.",
                        "default": true
                    },
                    "includeProfilePictures": {
                        "title": "Include profile pictures",
                        "type": "boolean",
                        "description": "Include available LinkedIn profile image URLs in the dataset. The Actor stores image URLs only; it does not download images.",
                        "default": true
                    },
                    "includeRawMetadata": {
                        "title": "Include raw metadata",
                        "type": "boolean",
                        "description": "Include limited technical metadata for troubleshooting. Keep this disabled for cleaner CSV and Excel exports.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Apify Proxy is recommended for production runs because LinkedIn availability can vary by network.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "maxConcurrency": {
                        "title": "Maximum concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum number of posts processed at the same time. Lower this if you see rate limits or unstable runs.",
                        "default": 3
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout",
                        "minimum": 10,
                        "maximum": 180,
                        "type": "integer",
                        "description": "Maximum time in seconds to wait for a single page request before retrying or failing it.",
                        "default": 30
                    },
                    "maxRequestRetries": {
                        "title": "Maximum request retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of retries for temporary network errors, rate limits, or unavailable responses.",
                        "default": 3
                    },
                    "debugMode": {
                        "title": "Debug mode",
                        "type": "boolean",
                        "description": "Enable more verbose logs and limited diagnostics for troubleshooting. This may increase log size.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
