# LinkedIn Post Comments Scraper ✅ NO COOKIES (`atomus/linkedin-comments-scraper-pro`) Actor

Extract every comment and reply from any LinkedIn post: comment text, author name, headline, profile URL, reaction breakdown, and timestamps. Opt into nested replies, batch up to 1,000 posts per run, and pay only for the comments extracted. No LinkedIn account or cookies needed.

- **URL**: https://apify.com/atomus/linkedin-comments-scraper-pro.md
- **Developed by:** [Atomus APIs](https://apify.com/atomus) (community)
- **Categories:** Social media, Automation, Lead generation
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $4.80 / 1,000 comment scrapeds

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

## LinkedIn Post Comments & Replies Scraper

A **LinkedIn comments scraper** that extracts every comment on a LinkedIn post: **commenter name, headline, profile URL, comment text, a per-comment reaction breakdown, timestamps, and reply counts**. Optionally fetch the nested replies under each comment too. Paste a post URL and the Actor auto-paginates through the full public comment thread. **No LinkedIn account, login, or cookies required.**

Batch up to **1,000 posts in a single run**, opt into nested replies, or use metadata-only mode to pre-filter posts by comment count before you pay. You only pay for what is extracted.

> 💡 **More LinkedIn tools by Atomus:** https://apify.com/atomus

---

### What does this LinkedIn Comments Scraper do?

Paste one or more LinkedIn post URLs and it returns one structured JSON record per comment, with optional nested replies, ready for sentiment analysis, lead discovery, or an AI agent.

| Feature | Description |
|---------|-------------|
| 🔄 **Auto-pagination** | One run extracts every top-level comment on the post. No manual page management. |
| 💬 **Nested replies (opt-in)** | Turn on `includeReplies` to also fetch the replies under each comment, nested in the output. Off by default because replies add API calls (and cost). |
| 📦 **Batch processing** | Scrape up to 1,000 posts in a single run. |
| 📊 **Reaction breakdown** | Per-comment engagement: total reactions plus a breakdown by type (like, appreciation, empathy, interest, praise). |
| 🔢 **Metadata-only mode** | Just need the comment count per post? `metadataOnly` returns the totals without scraping the comments, so you can pre-filter a large list cheaply. |
| 📌 **Pinned & edited flags** | Know which comments are pinned or edited. |
| ✍️ **Author detection** | Identifies when the post author replies to a comment. |
| 🔀 **Sorting options** | Sort by most relevant or most recent. |
| 🔗 **All URL formats** | Paste any LinkedIn post link, even with tracking parameters. |
| 🔐 **No cookies needed** | No risk of account restrictions or bans. |

---

### How do I scrape comments from a LinkedIn post?

1. **Open the Actor** and paste one or more LinkedIn post URLs (or raw activity IDs) into `postUrls`.
2. *(Optional)* Turn on `includeReplies` to also pull the nested replies, set `sortBy` to `date` for newest-first, or cap with `maxComments`.
3. **Click Start.** The Actor auto-paginates each post and pushes one record per comment (and reply) to the dataset.
4. **Read the results.** Each item is a structured comment; a free summary item per post tells you how many comments and replies were extracted and the estimated cost.

No login, no browser session, no cookies, just post URLs in and structured comment data out.

---

### Input

#### Basic Usage

Just paste one or more LinkedIn post URLs:

```json
{
  "postUrls": [
    "https://www.linkedin.com/posts/satyanadella_no-one-becomes-a-clinician-to-do-paperwork-activity-7302346926123798528-jitu"
  ]
}
````

#### All Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `postUrls` | string\[] | ✅ Yes | (none) | LinkedIn post URLs or activity IDs (up to 1,000) |
| `maxComments` | integer | No | `0` | Max top-level comments per post. `0` = unlimited |
| `sortBy` | string | No | `relevance` | Sort by `relevance` or `date` (most recent) |
| `includeReplies` | boolean | No | `false` | Also fetch the replies to each comment and nest them in the output. Adds one API call per comment that has replies, so it increases run cost. |
| `maxRepliesPerComment` | integer | No | `0` | Max replies to fetch per comment when `includeReplies` is on. `0` = all. Ignored when `includeReplies` is off. |
| `metadataOnly` | boolean | No | `false` | Return only the comment count per post (no comments scraped). Charges 1 comment per post. Ignores the comment and reply options above. |

#### Supported URL Formats

All of these work, just paste whatever you have:

```
✅ https://www.linkedin.com/posts/satyanadella_activity-7302346926123798528-jitu
✅ https://www.linkedin.com/feed/update/urn:li:activity:7302346926123798528/
✅ https://www.linkedin.com/feed/update/urn:li:share:7302346926123798528/
✅ https://www.linkedin.com/posts/user_slug-activity-123/?utm_source=share&utm_medium=...
✅ 7302346926123798528
```

***

### Output

#### Comment Example

Each top-level comment is one item. The `replies` array is present only when `includeReplies` is enabled.

```json
{
  "comment_type": "comment",
  "text": "This is a great point! Healthcare professionals need better tools to focus on what matters most: patient care.",
  "is_pinned": false,
  "is_edited": false,
  "is_author": false,
  "reply_count": 3,
  "posted_at": {
    "timestamp": 1626782941000,
    "date": "2026-03-20T12:49:01.000Z"
  },
  "author": {
    "id": "ACoAAB8v74YB5oqaAg-4F2VRFh9tEt0zXfRsjpE",
    "name": "John Smith",
    "headline": "Healthcare Professional | Digital Health Advocate",
    "linkedinUrl": "https://www.linkedin.com/in/ACoAAB8v74YB...",
    "profile_pic": "https://media.licdn.com/dms/image/v2/..."
  },
  "stats": {
    "total_reactions": 25,
    "reactions": {
      "like": 20,
      "appreciation": 3,
      "empathy": 2
    },
    "replies": 3
  },
  "_metadata": {
    "comment_id": "7302375502034411520",
    "comment_url": "https://www.linkedin.com/feed/update/...",
    "post_url": "https://www.linkedin.com/posts/satyanadella_...",
    "post_id": "urn:li:activity:7302346926123798528",
    "extracted_at": "2026-03-30T12:00:00.000Z"
  }
}
```

#### Nested Replies Example (`includeReplies: true`)

When `includeReplies` is on, each comment carries a `replies` array. Every reply has `comment_type: "reply"` and links back to its parent via `_metadata.parent_comment_id` / `parent_comment_url`:

```json
{
  "comment_type": "comment",
  "text": "Completely agree, the tooling gap is real.",
  "reply_count": 2,
  "replies": [
    {
      "comment_type": "reply",
      "text": "Exactly. We saw the same thing in our clinics.",
      "is_author": false,
      "author": {
        "name": "Maria Lopez",
        "headline": "Clinical Operations Lead"
      },
      "_metadata": {
        "comment_id": "7302400000000000001",
        "parent_comment_id": "7302375502034411520",
        "parent_comment_url": "https://www.linkedin.com/feed/update/...",
        "post_url": "https://www.linkedin.com/posts/satyanadella_...",
        "extracted_at": "2026-03-30T12:00:00.000Z"
      }
    }
  ]
}
```

#### Metadata-only Example (`metadataOnly: true`)

One clean item per post, just the counts:

```json
{
  "type": "metadata",
  "post_url": "https://www.linkedin.com/posts/satyanadella_activity-7302346926123798528",
  "total_comments": 1243,
  "total_pages": 125,
  "extracted_at": "2026-03-30T12:00:00.000Z"
}
```

#### Run Summary

After each post, the actor pushes a free summary item (no charge) so you can see what was extracted and the estimated cost:

```json
{
  "type": "summary",
  "post_url": "https://www.linkedin.com/posts/satyanadella_...",
  "total_comments_on_post": 1243,
  "comments_extracted": 1243,
  "replies_extracted": 0,
  "include_replies": false,
  "estimated_cost_usd": 5.9664,
  "free_tier_capped": false,
  "extracted_at": "2026-03-30T12:00:00.000Z"
}
```

#### Output Fields Reference

| Field | Type | Description |
|-------|------|-------------|
| `comment_type` | string | `"comment"` for a top-level comment, `"reply"` for a nested reply |
| `text` | string | Full text of the comment or reply |
| `is_pinned` | boolean | `true` if the comment is pinned by the post author |
| `is_edited` | boolean | `true` if the comment has been edited |
| `is_author` | boolean | `true` if the commenter is the post author |
| `reply_count` | integer | Number of replies to this comment |
| `posted_at.timestamp` | number | Unix timestamp in milliseconds |
| `posted_at.date` | string | ISO date string |
| `author.id` | string | LinkedIn profile URN |
| `author.name` | string | Commenter's full name |
| `author.headline` | string | Commenter's LinkedIn headline |
| `author.linkedinUrl` | string | Direct link to commenter's profile |
| `author.profile_pic` | string | null | Profile photo URL or `null` |
| `stats.total_reactions` | integer | Total reactions on this comment |
| `stats.reactions` | object | Breakdown by type (`like`, `appreciation`, `empathy`, `interest`, `praise`) |
| `stats.replies` | integer | Number of replies (same as `reply_count`) |
| `replies` | array | Nested replies, present only on top-level comments when `includeReplies` is on |
| `_metadata.comment_id` | string | Unique comment identifier |
| `_metadata.comment_url` | string | Direct link to the comment on LinkedIn |
| `_metadata.parent_comment_id` | string | (Replies only) the id of the parent comment |
| `_metadata.parent_comment_url` | string | (Replies only) link to the parent comment |
| `_metadata.post_url` | string | The post URL you provided as input |
| `_metadata.post_id` | string | LinkedIn activity URN of the post |
| `_metadata.extracted_at` | string | ISO timestamp of extraction |

***

### How much does it cost to scrape LinkedIn comments?

This Actor uses **pay-per-event** pricing: **$4.80 per 1,000 comments**, and the same **$4.80 per 1,000 replies** when `includeReplies` is on. You only pay for what is extracted.

| Extracted | Cost |
|----------|------|
| 100 comments | $0.48 |
| 1,000 comments | $4.80 |
| 10,000 comments | $48.00 |

A few things worth knowing:

- **Replies are billed separately** from comments, at the same flat rate, and only when you enable `includeReplies`.
- **Each post charges a minimum of 1 comment**, even if it has zero comments, because the API call to fetch them still happens.
- **`metadataOnly` charges 1 comment per post** (just the count, no comments scraped).
- **Summary and error items are free** (they are not billed).

#### Free plan limit

Apify free-plan accounts get **20 extracted items (comments + replies) per month** so you can validate the output and inspect every field before paying. The cap resets on the 1st of each month, and any paid Apify plan removes it.

***

### Use it with AI agents and MCP

This Actor is built for AI agents and LLMs via the Apify MCP server. Each comment is a flat, predictable JSON record, ideal for sentiment analysis, summarization, or lead extraction.

**Key fields for agents:**

- `text`: the comment content for sentiment analysis or summarization
- `author.name` + `author.headline`: who said it and their professional context
- `author.linkedinUrl`: the commenter's profile for lead follow-up
- `stats.total_reactions`: how much engagement the comment received
- `is_author`: identifies replies from the post author
- `reply_count` / `replies`: conversation depth and the nested reply thread when `includeReplies` is on

**Example agent prompts:**

> "Get all comments from this LinkedIn post and summarize the main themes and sentiment."

> "Find the most engaged comments (highest reaction count) on this post and extract the commenters' profiles."

> "Analyze comments on competitor posts to identify common customer pain points."

***

### Use Cases

- **💬 Sentiment analysis**: understand how people feel about a topic or announcement.
- **🔎 Lead discovery**: find engaged professionals commenting on industry content.
- **📊 Content research**: analyze what questions and discussions posts generate.
- **🏆 Competitor intelligence**: monitor comments on competitor posts for insights.
- **👥 Community management**: track comment engagement and identify active members.
- **📈 Engagement benchmarking**: compare comment volume and quality across posts (use `metadataOnly` for fast, cheap counts).

***

### LinkedIn Comments Scraper vs cookie-based tools vs the official LinkedIn API

| | This LinkedIn Comments Scraper | Cookie-based scrapers | Official LinkedIn API |
|---|---|---|---|
| **LinkedIn account / cookies** | Not needed | Your logged-in cookies required | OAuth app + LinkedIn approval |
| **Account / ban risk** | None (no account used) | High (your account can be restricted) | None |
| **Setup** | Paste a post URL | Extract and paste your session cookie | Partner application + review |
| **Nested replies** | Yes (opt-in) | Varies | No public comment endpoint |
| **Reaction breakdown** | Yes, per comment | Rarely | No |
| **Bulk** | Up to 1,000 posts per run | Rate-limited by your account | No public comment endpoint |
| **Pricing** | $4.80 per 1,000 comments | Subscription + your account | Not available publicly |

LinkedIn exposes roughly the first **~1,200 comments per post** publicly; for the vast majority of posts that is the entire thread, and the cookieless approach returns it with zero account risk.

***

### Other LinkedIn scrapers by Atomus

| Actor | What it does |
|-------|--------------|
| [LinkedIn Post Reactions Scraper Pro](https://apify.com/atomus/linkedin-reactions-scraper-pro) | Extract every reactor on a LinkedIn post (name, headline, profile URL, reaction type). |
| [LinkedIn Posts Scraper](https://apify.com/atomus/linkedin-posts-scraper-pro) | Scrape posts, text, media, and engagement counts from any LinkedIn profile or company. |
| [LinkedIn Profile Scraper](https://apify.com/atomus/linkedin-profile-scraper) | Enrich LinkedIn profile URLs into full structured profiles: experience, education, skills, and more. |

See all tools at [apify.com/atomus](https://apify.com/atomus).

***

### FAQ

#### What is a LinkedIn comments scraper?

A LinkedIn comments scraper extracts the comments on a public LinkedIn post into structured data, commenter name, headline, profile URL, comment text, reaction breakdown, timestamps, and reply counts, without a LinkedIn account, login, or cookies. This Actor takes a post URL and returns one clean JSON record per comment, with optional nested replies.

#### How do I scrape comments from a LinkedIn post without an account?

Paste the post URL (or up to 1,000 URLs) into `postUrls` and run the Actor. It auto-paginates the public comment thread through a cookieless data source, so you never connect a LinkedIn account, paste a session cookie, or risk a ban.

#### Can I get the replies under each comment?

Yes. Turn on `includeReplies` and each comment carries a nested `replies` array, with every reply linked to its parent. Replies are off by default because they add API calls (and cost); use `maxRepliesPerComment` to cap how many you fetch per comment.

#### How much does it cost?

$4.80 per 1,000 comments, and the same $4.80 per 1,000 replies when `includeReplies` is on. You pay only for what's extracted; summary and error items are free. Free Apify plans include 20 extracted items per month so you can test before paying.

#### What is metadata-only mode for?

`metadataOnly: true` returns just the comment count per post (no comments scraped), charging 1 comment per post. Use it to pre-filter a large list of posts, find the ones with the most discussion, then scrape only those.

#### Is there an official LinkedIn API for post comments?

LinkedIn's official APIs are partner-gated and do not expose a public endpoint for reading arbitrary post comments. For extracting comments from public posts, a cookieless scraper like this one is the practical path.

#### Is it legal to scrape LinkedIn comments?

This Actor reads publicly available comment data through a third-party data source. You are responsible for using the output in line with applicable laws (GDPR/CCPA), LinkedIn's terms, and your own compliance requirements. It is an independent tool, not affiliated with LinkedIn.

#### How many comments can it extract per post?

LinkedIn exposes roughly the first ~1,200 comments per post publicly; for the vast majority of posts that is the full thread. Beyond that, the remaining comments are not available without a logged-in session, which this cookieless Actor intentionally does not use.

***

### ⚠️ Disclaimer

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.

# Actor input Schema

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

List of LinkedIn post URLs or activity IDs. Supports full URLs, activity IDs, share URLs, and URLs with tracking parameters.

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

Maximum comments to extract per post. 0 = unlimited (extracts all).

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

How to sort comments.

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

Only return how many comments each post has, without scraping the comments themselves. Fetches a single page per post to read the total, then stops. Great for pre-filtering a large list of posts to find the high-discussion ones before paying to scrape them all. Charges 1 comment per post (the API call still happens). When on, the comment and reply options below are ignored.

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

Also fetch the replies to each comment and nest them under that comment in the output. Off by default because replies require one extra API call per comment that has them, which increases run cost.

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

Maximum replies to fetch per comment when Include Replies is on. 0 = all replies. Ignored when Include Replies is off.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.linkedin.com/posts/satyanadella_no-one-becomes-a-clinician-to-do-paperwork-activity-7302346926123798528-jitu"
  ],
  "maxComments": 0,
  "sortBy": "relevance",
  "metadataOnly": false,
  "includeReplies": false,
  "maxRepliesPerComment": 0
}
```

# Actor output Schema

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

No description

# 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/posts/satyanadella_no-one-becomes-a-clinician-to-do-paperwork-activity-7302346926123798528-jitu"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("atomus/linkedin-comments-scraper-pro").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/posts/satyanadella_no-one-becomes-a-clinician-to-do-paperwork-activity-7302346926123798528-jitu"] }

# Run the Actor and wait for it to finish
run = client.actor("atomus/linkedin-comments-scraper-pro").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/posts/satyanadella_no-one-becomes-a-clinician-to-do-paperwork-activity-7302346926123798528-jitu"
  ]
}' |
apify call atomus/linkedin-comments-scraper-pro --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Post Comments Scraper ✅ NO COOKIES",
        "description": "Extract every comment and reply from any LinkedIn post: comment text, author name, headline, profile URL, reaction breakdown, and timestamps. Opt into nested replies, batch up to 1,000 posts per run, and pay only for the comments extracted. No LinkedIn account or cookies needed.",
        "version": "1.0",
        "x-build-id": "M56Upz5hGf11l5bdL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/atomus~linkedin-comments-scraper-pro/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-atomus-linkedin-comments-scraper-pro",
                "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/atomus~linkedin-comments-scraper-pro/runs": {
            "post": {
                "operationId": "runs-sync-atomus-linkedin-comments-scraper-pro",
                "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/atomus~linkedin-comments-scraper-pro/run-sync": {
            "post": {
                "operationId": "run-sync-atomus-linkedin-comments-scraper-pro",
                "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"
                ],
                "properties": {
                    "postUrls": {
                        "title": "Post URLs or IDs",
                        "minItems": 1,
                        "maxItems": 1000,
                        "type": "array",
                        "description": "List of LinkedIn post URLs or activity IDs. Supports full URLs, activity IDs, share URLs, and URLs with tracking parameters.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxComments": {
                        "title": "Max Comments per Post",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum comments to extract per post. 0 = unlimited (extracts all).",
                        "default": 0
                    },
                    "sortBy": {
                        "title": "Sort Comments By",
                        "enum": [
                            "relevance",
                            "date"
                        ],
                        "type": "string",
                        "description": "How to sort comments.",
                        "default": "relevance"
                    },
                    "metadataOnly": {
                        "title": "Metadata only (count, don't scrape)",
                        "type": "boolean",
                        "description": "Only return how many comments each post has, without scraping the comments themselves. Fetches a single page per post to read the total, then stops. Great for pre-filtering a large list of posts to find the high-discussion ones before paying to scrape them all. Charges 1 comment per post (the API call still happens). When on, the comment and reply options below are ignored.",
                        "default": false
                    },
                    "includeReplies": {
                        "title": "Include Replies",
                        "type": "boolean",
                        "description": "Also fetch the replies to each comment and nest them under that comment in the output. Off by default because replies require one extra API call per comment that has them, which increases run cost.",
                        "default": false
                    },
                    "maxRepliesPerComment": {
                        "title": "Max Replies per Comment",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum replies to fetch per comment when Include Replies is on. 0 = all replies. Ignored when Include Replies is off.",
                        "default": 0
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
