# LinkedIn Comments Scraper (`crawlerbros/linkedin-comments-scraper`) Actor

Scrape comments and replies from any LinkedIn post. Get comment text, author details, timestamps, and engagement metrics.

- **URL**: https://apify.com/crawlerbros/linkedin-comments-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## LinkedIn Comments Scraper

Extract comments and replies from any LinkedIn post at scale. Get full author details, comment text, timestamps, and engagement metrics — exported as clean structured data.

### What This Actor Does

LinkedIn Comments Scraper fetches comments from one or more LinkedIn post URLs using LinkedIn's official Voyager API. For each comment it returns the author's name, profile URL, headline, comment text, timestamp, and reaction count. Optionally, it also fetches replies to top-level comments and links each reply back to its parent via `parentCommentId`.

**Key features:**
- Scrapes comments from `/feed/update/` and `/posts/` URL formats
- Fetches up to 500 top-level comments per post
- Optionally retrieves replies (nested comments) as separate dataset rows
- Automatically paginates through all available comments
- Works without a browser — pure HTTP via LinkedIn's Voyager API

---

### Input

| Field | Type | Required | Description |
|---|---|---|---|
| `postUrls` | string[] | Yes | One or more LinkedIn post URLs to scrape. Supports both `/feed/update/urn:li:activity:…/` and `/posts/username_slug-ID/` formats. |
| `cookie` | string | Yes | Your LinkedIn session cookie (`li_at`). See setup instructions below. |
| `maxCommentsPerPost` | integer | No | Maximum top-level comments to scrape per post. Default: `50`. Range: 1–500. |
| `includeReplies` | boolean | No | Set `true` to also fetch replies to top-level comments. Default: `false`. |
| `proxyConfiguration` | object | No | Apify proxy settings. Residential proxy recommended for best reliability. |

#### Accepted Post URL Formats

````

https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/
https://www.linkedin.com/posts/williamhgates\_climate-7329761432933134337/

````

---

### Output

Each scraped comment is a separate dataset row. Replies (when `includeReplies` is enabled) are also individual rows, identified by `isReply: true`.

| Field | Type | Description |
|---|---|---|
| `commentId` | string | Unique numeric comment ID extracted from LinkedIn's internal URN. |
| `postUrl` | string | Canonical URL of the source post (query strings stripped). |
| `postId` | string | Numeric activity ID of the source post. |
| `authorName` | string | Full name of the commenter. |
| `authorProfileUrl` | string | Full URL to the commenter's LinkedIn profile. |
| `authorHeadline` | string | The commenter's LinkedIn headline/job title. |
| `authorAvatar` | string | CDN URL of the commenter's profile photo. |
| `commentText` | string | Full text of the comment. |
| `commentedAt` | string | ISO 8601 UTC timestamp when the comment was posted. |
| `reactionsCount` | integer | Total number of reactions on this comment. |
| `repliesCount` | integer | Number of replies on this comment (only on top-level comments). |
| `isReply` | boolean | `true` if this row is a reply to another comment; `false` for top-level. |
| `parentCommentId` | string | `commentId` of the parent comment (only present when `isReply` is `true`). |
| `scrapedAt` | string | ISO 8601 UTC timestamp when this record was scraped. |

#### Example Output — Top-Level Comment

```json
{
  "commentId": "7330000000000000001",
  "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/",
  "postId": "7329761432933134337",
  "authorName": "Jane Doe",
  "authorProfileUrl": "https://www.linkedin.com/in/janedoe/",
  "authorHeadline": "VP of Product at TechCorp",
  "authorAvatar": "https://media.licdn.com/dms/image/D4E03AQGexample/profile-displayphoto.jpg",
  "commentText": "This is such an insightful post! Thanks for sharing.",
  "commentedAt": "2024-11-14T22:13:20+00:00",
  "reactionsCount": 12,
  "repliesCount": 3,
  "isReply": false,
  "scrapedAt": "2024-11-15T09:00:00+00:00"
}
````

#### Example Output — Reply

```json
{
  "commentId": "7330000000000000002",
  "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/",
  "postId": "7329761432933134337",
  "authorName": "John Smith",
  "authorProfileUrl": "https://www.linkedin.com/in/johnsmith/",
  "authorHeadline": "Software Engineer",
  "commentText": "Totally agree with Jane!",
  "commentedAt": "2024-11-14T23:45:00+00:00",
  "reactionsCount": 2,
  "isReply": true,
  "parentCommentId": "7330000000000000001",
  "scrapedAt": "2024-11-15T09:00:01+00:00"
}
```

***

### Setting Up Your LinkedIn Cookie

The actor authenticates using your LinkedIn session cookie. This is a secure, read-only token that does not expose your password.

**Steps to get your `li_at` cookie:**

1. Log into [LinkedIn](https://www.linkedin.com) in your browser.
2. Open **DevTools** (`F12` or right-click → Inspect).
3. Go to **Application** → **Cookies** → `https://www.linkedin.com`.
4. Find the cookie named `li_at` and copy its **value**.
5. Paste this value into the `cookie` input field.

**Alternatively — full cookie export:**

If you use a browser extension like [EditThisCookie](https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg), you can export all cookies as a JSON array and paste that directly. The actor will automatically extract `li_at` from the array.

> **Note:** Keep your `li_at` cookie private. It grants read access to your LinkedIn account. Do not share it with anyone.

***

### Using `includeReplies`

When `includeReplies` is set to `true`, the actor fetches replies for every top-level comment that has at least one reply. Each reply is pushed to the dataset as a separate row with `isReply: true` and a `parentCommentId` field pointing back to its parent comment.

**Example input with replies:**

```json
{
  "postUrls": ["https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/"],
  "cookie": "YOUR_LI_AT_VALUE",
  "maxCommentsPerPost": 50,
  "includeReplies": true
}
```

With this configuration, a post that has 20 top-level comments — where 5 of them have 3 replies each — will produce 20 + 15 = 35 dataset rows.

***

### Frequently Asked Questions

**Why do some comments have no `authorName`?**
Deleted accounts or very restricted privacy settings may result in comments with empty author fields. The actor skips any record that cannot be assigned a unique `commentId`.

**What happens to deleted comments?**
LinkedIn removes deleted comments from the API response. The actor only sees what LinkedIn's API returns at the time of scraping.

**Are anonymous comments supported?**
LinkedIn does not allow truly anonymous comments — all commenters have a profile. However, some users may have private profiles, in which case the author name will still be returned but `authorHeadline` or `authorAvatar` may be absent.

**How many comments can I scrape?**
The LinkedIn Comments API returns up to 500 top-level comments per post (controlled by `maxCommentsPerPost`). Replies are fetched one page (up to 10 replies) per top-level comment by default.

**Will the actor get rate-limited?**
The actor uses polite delays between API calls. For large scraping jobs (many posts or very high `maxCommentsPerPost`), using a residential proxy is recommended to avoid LinkedIn's rate limiting.

**Can I scrape comments from private posts?**
No. The actor uses your `li_at` cookie, so it can only access posts visible to your LinkedIn account. Posts from connections or public posts work best.

**Why is a cookie required?**
LinkedIn's Voyager API requires authentication for all endpoints — including public post comments. There is no publicly accessible unauthenticated API for this data.

**My cookie stopped working — what should I do?**
LinkedIn session cookies (`li_at`) typically expire after several weeks or when you log out. Simply log back into LinkedIn, copy your new `li_at` value, and update the actor input.

***

### Tips for Best Results

- **Use residential proxy**: LinkedIn is more likely to rate-limit datacenter IP ranges. Enabling residential proxy in `proxyConfiguration` significantly improves reliability.
- **Batch multiple posts**: Pass multiple URLs in `postUrls` to scrape them in one run.
- **Start with `includeReplies: false`**: For posts with many comments, fetching replies multiplies the number of API calls. Enable it only when you need the reply data.
- **Fresh cookie**: Use a cookie obtained within the last few days for best reliability.

### Explore the rest of the LinkedIn suite

Need a different LinkedIn surface? Pair this actor with any of the others in the LinkedIn Suite — all published under the same publisher and built to share the same cookie format and output conventions.

| Actor | What it scrapes |
|---|---|
| [LinkedIn Company Employees Scraper](https://apify.com/crawlerbros/linkedin-company-employees-scraper) | Employee list for any company (by URN) |
| [LinkedIn Company Info Scraper](https://apify.com/crawlerbros/linkedin-company-info-scraper) | Company About page (size, HQ, industry, specialties) |
| [LinkedIn Company Posts Scraper](https://apify.com/crawlerbros/linkedin-company-posts-scraper) | Posts published from a company page |
| [LinkedIn Events Scraper](https://apify.com/crawlerbros/linkedin-events-scraper) | Events by keyword/URL with full event detail |
| [LinkedIn Hashtag Posts Scraper](https://apify.com/crawlerbros/linkedin-hashtag-posts-scraper) | Posts ranked under a `#hashtag` |
| [LinkedIn Jobs Scraper](https://apify.com/crawlerbros/linkedin-jobs-scraper) | Job listings via the public jobs-guest API |
| [LinkedIn Jobs Scraper Ultra](https://apify.com/crawlerbros/linkedin-jobs-scraper-ultra) | Same as jobs-scraper + full detail enrichment |
| [LinkedIn Learning Courses Scraper](https://apify.com/crawlerbros/linkedin-learning-courses-scraper) | LinkedIn Learning course catalog by keyword |
| [LinkedIn People Search Scraper](https://apify.com/crawlerbros/linkedin-people-search-scraper) | People search with every LinkedIn facet (role, company, school, location, etc.) |
| [LinkedIn Post Reactions Scraper](https://apify.com/crawlerbros/linkedin-post-reactions-scraper) | Reactors on a post (name, headline, reaction type) |
| [LinkedIn Post Scraper](https://apify.com/crawlerbros/linkedin-post-scraper) | Full post (text, media, engagement counts, author) |
| [LinkedIn Post Search Scraper](https://apify.com/crawlerbros/linkedin-post-search-scraper) | Posts matching a keyword (with date/author/network filters) |
| [LinkedIn Profile Posts Scraper](https://apify.com/crawlerbros/linkedin-profile-posts-scraper) | All posts/reposts/articles for one profile |
| [LinkedIn Profile Scraper](https://apify.com/crawlerbros/linkedin-profile-scraper) | Public profile fields (name, headline, positions, education, skills) |
| [LinkedIn Profile Scraper Pro](https://apify.com/crawlerbros/linkedin-profile-scraper-pro) | Profile fields + extras (recommendations, organizations, languages) |
| [LinkedIn Profile Scraper Pro Ultra](https://apify.com/crawlerbros/linkedin-profile-scraper-pro-ultra) | Pro + premium fields (contact info, followers list when allowed) |
| [LinkedIn Profile Scraper Ultra](https://apify.com/crawlerbros/linkedin-profile-scraper-ultra) | Profile + the full upstream dash-120 surface |
| [LinkedIn Profile Search by Name](https://apify.com/crawlerbros/linkedin-profile-search-by-name) | Search profiles by person name (great for matching CSVs of names) |
| [LinkedIn Schools Alumni Scraper](https://apify.com/crawlerbros/linkedin-schools-alumni-scraper) | Alumni list for any LinkedIn school page |
| [LinkedIn Top Content Scraper](https://apify.com/crawlerbros/linkedin-top-content-scraper) | Trending / top-engagement posts by topic |
| [LinkedIn User Activity Scraper](https://apify.com/crawlerbros/linkedin-user-activity-scraper) | Reactions + comments + posts feed for one profile |

All actors share the same `cookie` input format (plain `li_at` OR full cookies JSON array) and the same omit-empty output convention.

# Actor input Schema

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

LinkedIn post URLs to scrape comments from. Accepts formats like: https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/ or https://www.linkedin.com/posts/username\_some-slug-7329761432933134337/. Use a public, high-engagement post URL for best results. The prefill example uses a Bill Gates post from early 2025.

## `cookie` (type: `string`):

Your LinkedIn session cookie. Accepts either: (1) the li\_at value from browser DevTools → Application → Cookies, or (2) full cookies JSON array exported from an extension like EditThisCookie.

## `maxCommentsPerPost` (type: `integer`):

Maximum number of top-level comments to scrape per post.

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

Whether to fetch replies to top-level comments. Each reply is output as a separate dataset row with isReply=true and parentCommentId linking to the parent.

## `replyDepth` (type: `integer`):

How many levels deep to recurse when fetching replies. Only honored when Include Replies is enabled. 1 = direct replies only, 2 = replies of replies, 3 = three levels.

## `sortBy` (type: `string`):

Sort order for comments. RELEVANCE uses LinkedIn's default 'Most relevant'. RECENT shows newest first.

## `minReactions` (type: `integer`):

Skip comments with fewer than this many reactions (likes + other reaction types). 0 disables the filter and emits every comment.

## `language` (type: `string`):

Preferred LinkedIn UI language. Sets the Accept-Language header and x-li-lang for Voyager API calls; influences which translations LinkedIn returns for comment text.

## `excludeAuthorTypes` (type: `array`):

Drop comments authored by the selected actor types. PERSON = individual member profiles, COMPANY = company / organization pages.

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

Optional Apify proxy configuration. Residential proxy recommended for best results.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/"
  ],
  "maxCommentsPerPost": 50,
  "includeReplies": false,
  "replyDepth": 1,
  "sortBy": "RELEVANCE",
  "minReactions": 0,
  "language": "en",
  "excludeAuthorTypes": []
}
```

# 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:7329761432933134337/"
    ],
    "maxCommentsPerPost": 50,
    "includeReplies": false,
    "replyDepth": 1,
    "sortBy": "RELEVANCE",
    "minReactions": 0,
    "language": "en",
    "excludeAuthorTypes": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/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 = {
    "postUrls": ["https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/"],
    "maxCommentsPerPost": 50,
    "includeReplies": False,
    "replyDepth": 1,
    "sortBy": "RELEVANCE",
    "minReactions": 0,
    "language": "en",
    "excludeAuthorTypes": [],
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/linkedin-comments-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 '{
  "postUrls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/"
  ],
  "maxCommentsPerPost": 50,
  "includeReplies": false,
  "replyDepth": 1,
  "sortBy": "RELEVANCE",
  "minReactions": 0,
  "language": "en",
  "excludeAuthorTypes": []
}' |
apify call crawlerbros/linkedin-comments-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Comments Scraper",
        "description": "Scrape comments and replies from any LinkedIn post. Get comment text, author details, timestamps, and engagement metrics.",
        "version": "1.28",
        "x-build-id": "uqEnK9TbHPGa05jEv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~linkedin-comments-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-linkedin-comments-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/crawlerbros~linkedin-comments-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-linkedin-comments-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/crawlerbros~linkedin-comments-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-linkedin-comments-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",
                "required": [
                    "postUrls",
                    "cookie"
                ],
                "properties": {
                    "postUrls": {
                        "title": "Post URLs",
                        "type": "array",
                        "description": "LinkedIn post URLs to scrape comments from. Accepts formats like: https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/ or https://www.linkedin.com/posts/username_some-slug-7329761432933134337/. Use a public, high-engagement post URL for best results. The prefill example uses a Bill Gates post from early 2025.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cookie": {
                        "title": "LinkedIn Cookie",
                        "type": "string",
                        "description": "Your LinkedIn session cookie. Accepts either: (1) the li_at value from browser DevTools → Application → Cookies, or (2) full cookies JSON array exported from an extension like EditThisCookie."
                    },
                    "maxCommentsPerPost": {
                        "title": "Max Comments Per Post",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of top-level comments to scrape per post.",
                        "default": 50
                    },
                    "includeReplies": {
                        "title": "Include Replies",
                        "type": "boolean",
                        "description": "Whether to fetch replies to top-level comments. Each reply is output as a separate dataset row with isReply=true and parentCommentId linking to the parent.",
                        "default": false
                    },
                    "replyDepth": {
                        "title": "Reply Depth",
                        "minimum": 1,
                        "maximum": 3,
                        "type": "integer",
                        "description": "How many levels deep to recurse when fetching replies. Only honored when Include Replies is enabled. 1 = direct replies only, 2 = replies of replies, 3 = three levels.",
                        "default": 1
                    },
                    "sortBy": {
                        "title": "Sort Comments By",
                        "enum": [
                            "RELEVANCE",
                            "RECENT"
                        ],
                        "type": "string",
                        "description": "Sort order for comments. RELEVANCE uses LinkedIn's default 'Most relevant'. RECENT shows newest first.",
                        "default": "RELEVANCE"
                    },
                    "minReactions": {
                        "title": "Minimum Reactions",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Skip comments with fewer than this many reactions (likes + other reaction types). 0 disables the filter and emits every comment.",
                        "default": 0
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "en",
                            "es",
                            "fr",
                            "de",
                            "pt"
                        ],
                        "type": "string",
                        "description": "Preferred LinkedIn UI language. Sets the Accept-Language header and x-li-lang for Voyager API calls; influences which translations LinkedIn returns for comment text.",
                        "default": "en"
                    },
                    "excludeAuthorTypes": {
                        "title": "Exclude Author Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Drop comments authored by the selected actor types. PERSON = individual member profiles, COMPANY = company / organization pages.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "PERSON",
                                "COMPANY"
                            ],
                            "enumTitles": [
                                "Person",
                                "Company"
                            ]
                        },
                        "default": []
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Optional Apify proxy configuration. Residential proxy recommended for best results."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
