{
  "data": {
    "id": "CBKbM1dBIO5OKW2ZN",
    "actId": "9IrDMYd0zWDgF1HtA",
    "userId": "IYgBDiXtHOijAaUel",
    "startedAt": "2026-10-19T01:11:21.261Z",
    "finishedAt": "2026-10-19T01:12:02.519Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CI"
    },
    "stats": {
      "durationMillis": 41161,
      "runTimeSecs": 41.161,
      "computeUnits": 0.045734444444444446,
      "imageSizeBytes": 3153146880
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "QYo53EZkJk0prePWY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"LinkedIn Comments Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"required\": [\n    \"postUrls\",\n    \"cookie\"\n  ],\n  \"properties\": {\n    \"postUrls\": {\n      \"title\": \"Post URLs\",\n      \"type\": \"array\",\n      \"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.\",\n      \"editor\": \"stringList\",\n      \"prefill\": [\n        \"https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/\"\n      ]\n    },\n    \"cookie\": {\n      \"title\": \"LinkedIn Cookie\",\n      \"type\": \"string\",\n      \"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.\",\n      \"editor\": \"textarea\",\n      \"isSecret\": true\n    },\n    \"maxCommentsPerPost\": {\n      \"title\": \"Max Comments Per Post\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of top-level comments to scrape per post.\",\n      \"editor\": \"number\",\n      \"default\": 50,\n      \"prefill\": 50,\n      \"minimum\": 1,\n      \"maximum\": 500\n    },\n    \"includeReplies\": {\n      \"title\": \"Include Replies\",\n      \"type\": \"boolean\",\n      \"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.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"replyDepth\": {\n      \"title\": \"Reply Depth\",\n      \"type\": \"integer\",\n      \"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.\",\n      \"editor\": \"number\",\n      \"default\": 1,\n      \"prefill\": 1,\n      \"minimum\": 1,\n      \"maximum\": 3\n    },\n    \"sortBy\": {\n      \"title\": \"Sort Comments By\",\n      \"type\": \"string\",\n      \"description\": \"Sort order for comments. RELEVANCE uses LinkedIn's default 'Most relevant'. RECENT shows newest first.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"RELEVANCE\",\n        \"RECENT\"\n      ],\n      \"enumTitles\": [\n        \"Most relevant\",\n        \"Most recent\"\n      ],\n      \"default\": \"RELEVANCE\",\n      \"prefill\": \"RELEVANCE\"\n    },\n    \"minReactions\": {\n      \"title\": \"Minimum Reactions\",\n      \"type\": \"integer\",\n      \"description\": \"Skip comments with fewer than this many reactions (likes + other reaction types). 0 disables the filter and emits every comment.\",\n      \"editor\": \"number\",\n      \"default\": 0,\n      \"prefill\": 0,\n      \"minimum\": 0,\n      \"maximum\": 100000\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"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.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en\",\n        \"es\",\n        \"fr\",\n        \"de\",\n        \"pt\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"Spanish\",\n        \"French\",\n        \"German\",\n        \"Portuguese\"\n      ],\n      \"default\": \"en\",\n      \"prefill\": \"en\"\n    },\n    \"excludeAuthorTypes\": {\n      \"title\": \"Exclude Author Types\",\n      \"type\": \"array\",\n      \"description\": \"Drop comments authored by the selected actor types. PERSON = individual member profiles, COMPANY = company / organization pages.\",\n      \"editor\": \"select\",\n      \"items\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"PERSON\",\n          \"COMPANY\"\n        ],\n        \"enumTitles\": [\n          \"Person\",\n          \"Company\"\n        ]\n      },\n      \"uniqueItems\": true,\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"proxyConfiguration\": {\n      \"title\": \"Proxy Configuration\",\n      \"type\": \"object\",\n      \"description\": \"Optional Apify proxy configuration. Residential proxy recommended for best results.\",\n      \"editor\": \"proxy\"\n    }\n  }\n}",
    "readme": "# LinkedIn Post Comment & Reply Thread Extractor\n\nFeed this actor one or more LinkedIn post links and a session cookie, and it returns the top-level comments on each post (up to your per-post limit) — optionally with nested reply threads — as structured rows with author identity, engagement counts, and linked profiles.\n\n## What this actor does\n\n- Scrapes top-level comments from one or more LinkedIn post URLs, with a relevance or recency sort preference.\n- Optionally follows reply threads up to 3 levels deep, emitting each reply as its own row linked to its parent via `parentCommentId`.\n- Classifies each commenter as a person or company page, and pulls any LinkedIn profile or company links out of the comment text.\n- Filters out comments below a minimum reaction count, and can exclude comments from person or company authors entirely.\n- Omits text and URL fields it couldn't populate for a given comment; the counts (`reactionsCount`, `repliesCount`, `authorFollowersCount`), `isReply` and `authorType` are always present.\n\n## Output per comment\n\n| Field | Description |\n|---|---|\n| `commentId` | Unique numeric ID for the comment. |\n| `postUrl` | Canonical URL of the source post. |\n| `postId` | Numeric activity ID of the source post. |\n| `authorName` | Commenter's full name. |\n| `authorProfileUrl` | URL to the commenter's LinkedIn profile or company page. |\n| `authorHeadline` | Commenter's headline/title. |\n| `authorAvatar` | CDN URL of the commenter's profile photo. |\n| `authorType` | `PERSON`, `COMPANY`, or `UNKNOWN` when it can't be determined. |\n| `authorFollowersCount` | Commenter's follower count, when LinkedIn exposes one (0 otherwise). |\n| `commentText` | Full text of the comment. |\n| `commentedAt` | ISO 8601 UTC timestamp of when the comment was posted. |\n| `commentEditedAt` | ISO 8601 UTC timestamp of the last edit, when the comment was edited. |\n| `reactionsCount` | Total reactions on the comment (`0` when none or unknown). |\n| `reactionBreakdown` | Reaction counts by type (e.g. `like`, `praise`), when more than one type is present. |\n| `repliesCount` | Number of replies to this comment (`0` when none or unknown). |\n| `isReply` | `true` if this row is a reply, `false` if top-level. |\n| `parentCommentId` | ID of the parent comment (replies only). |\n| `mentionedUsers` | LinkedIn profile URLs (`linkedin.com/in/...`) that appear in the comment text, when any are present. |\n| `mentionedCompanies` | Company slugs from `linkedin.com/company/...` links in the comment text, when any are present. |\n| `attachmentImageUrl` | URL of an attached image, when the comment includes one. |\n| `attachmentVideoUrl` | URL of an attached video, when the comment includes one. |\n| `scrapedAt` | ISO 8601 UTC timestamp of when the row was scraped. |\n\nIf no cookie is supplied, or the supplied cookie is or becomes invalid, the run writes a record with `_status: \"no_data\"`, `_reason`, `_message`, `_help` and `scrapedAt` fields explaining what to fix, and stops. Comments already saved before the cookie stopped working stay in the dataset.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `postUrls` | List of strings | – | LinkedIn post URLs to scrape comments from. Accepts `/feed/update/urn:li:activity:ID/` or `/posts/username_slug-ID/` formats. Required. |\n| `cookie` | String | – | A LinkedIn session cookie: either the `li_at` value, or the full cookies JSON array exported from a browser extension. Required. |\n| `maxCommentsPerPost` | Integer | `50` | Maximum top-level comments to scrape per post (1–500). Replies don't count toward it. |\n| `includeReplies` | Boolean | `false` | Also fetch replies to top-level comments, each output as its own row. |\n| `replyDepth` | Integer | `1` | How many reply levels to recurse when `includeReplies` is on: `1` = direct replies, up to `3`. Up to 10 replies are read per comment. |\n| `sortBy` | String (select) | `RELEVANCE` | `RELEVANCE` (LinkedIn's \"Most relevant\") or `RECENT` (newest first). A preference only: depending on how LinkedIn serves a post's comments, they may come back in LinkedIn's default order. |\n| `minReactions` | Integer | `0` | Skip comments and replies with fewer than this many reactions. `0` disables the filter. |\n| `language` | String (select) | `en` | Preferred LinkedIn UI language; influences which translation of comment text is returned. |\n| `excludeAuthorTypes` | List of strings | `[]` | Drop comments and replies from the selected author types: `PERSON`, `COMPANY`. Comments whose author type is `UNKNOWN` are always kept. |\n| `proxyConfiguration` | Object | – | Optional Apify proxy settings. |\n\n### Example: default run\n\n```json\n{\n  \"postUrls\": [\"https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/\"],\n  \"cookie\": \"YOUR_LI_AT_VALUE\",\n  \"maxCommentsPerPost\": 50\n}\n```\n\n### Example: with nested replies, newest first\n\n```json\n{\n  \"postUrls\": [\"https://www.linkedin.com/posts/williamhgates_climate-7329761432933134337/\"],\n  \"cookie\": \"YOUR_LI_AT_VALUE\",\n  \"includeReplies\": true,\n  \"replyDepth\": 2,\n  \"sortBy\": \"RECENT\"\n}\n```\n\n### Example: high-engagement comments from people only\n\n```json\n{\n  \"postUrls\": [\"https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/\"],\n  \"cookie\": \"YOUR_LI_AT_VALUE\",\n  \"minReactions\": 10,\n  \"excludeAuthorTypes\": [\"COMPANY\"]\n}\n```\n\n## Use cases\n\n- **Audience sentiment** — read how people are reacting to a company announcement or thought-leadership post.\n- **Lead discovery** — surface engaged commenters as warm prospects, filtered to real people by `excludeAuthorTypes`.\n- **Influencer research** — see who's actively replying to a creator's posts and how deep the conversation threads go.\n- **Brand monitoring** — track mentions of your company or product inside comment threads on relevant posts.\n- **Community moderation review** — pull full reply chains to review how a sensitive post's discussion unfolded.\n\n## FAQ\n\n**Does this need a LinkedIn account?** Yes. A valid session cookie (`li_at` or an exported cookies JSON array) from a logged-in account is required to read comment data.\n\n**Why would `authorName` be missing from a comment?** Deleted accounts or heavily restricted profiles can leave author fields empty. If a comment has no extractable ID at all, it's skipped entirely.\n\n**Does the actor see deleted comments?** No. Deleted comments are removed from LinkedIn's own response, so the actor only sees whatever is still live at scrape time.\n\n**How deep do reply threads go?** Up to 3 levels via `replyDepth`, only when `includeReplies` is enabled. At each level the actor reads up to 10 replies per comment, and replies beyond the chosen depth aren't fetched.\n\n**Why did I get fewer comments than `maxCommentsPerPost`?** The post may simply have fewer comments, `minReactions`/`excludeAuthorTypes` may have dropped some, or LinkedIn may serve that post's comments in a way that only exposes its first batch. Comments are not de-duplicated across different input URLs pointing to the same post.\n\n**Can I scrape comments on a post I don't have access to?** No. Only posts visible to the account behind your cookie can be scraped — private or connection-restricted posts outside your network will fail.\n\n**Why is a cookie required for public-looking posts?** LinkedIn's comment data isn't available through any unauthenticated public endpoint, even for posts that appear public in a browser without logging in.\n\n**What happens if my cookie expires mid-run?** The run stops and adds a record with `_status: \"no_data\"` plus a `_reason`/`_message`/`_help` explanation; any comment rows saved before that point remain. Log into LinkedIn, copy a fresh `li_at` value, and start a new run.\n\n**Is this affiliated with LinkedIn?** No. This is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "linkedin-post-comment-and-reply-thread-extractor",
      "title": "LinkedIn Post Comment & Reply Thread Extractor",
      "description": "Pull top-level comments from LinkedIn posts, with optional nested reply threads, author identity, reaction counts, and linked profiles found in the comment text.",
      "version": "1.0",
      "buildTag": "latest",
      "environmentVariables": {},
      "dockerfile": "../Dockerfile",
      "defaultRunOptions": {
        "memoryMbytes": 1024
      },
      "input": {
        "title": "LinkedIn Comments Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "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.",
            "editor": "stringList",
            "prefill": [
              "https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/"
            ]
          },
          "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.",
            "editor": "textarea",
            "isSecret": true
          },
          "maxCommentsPerPost": {
            "title": "Max Comments Per Post",
            "type": "integer",
            "description": "Maximum number of top-level comments to scrape per post.",
            "editor": "number",
            "default": 50,
            "prefill": 50,
            "minimum": 1,
            "maximum": 500
          },
          "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,
            "prefill": false
          },
          "replyDepth": {
            "title": "Reply Depth",
            "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.",
            "editor": "number",
            "default": 1,
            "prefill": 1,
            "minimum": 1,
            "maximum": 3
          },
          "sortBy": {
            "title": "Sort Comments By",
            "type": "string",
            "description": "Sort order for comments. RELEVANCE uses LinkedIn's default 'Most relevant'. RECENT shows newest first.",
            "editor": "select",
            "enum": [
              "RELEVANCE",
              "RECENT"
            ],
            "enumTitles": [
              "Most relevant",
              "Most recent"
            ],
            "default": "RELEVANCE",
            "prefill": "RELEVANCE"
          },
          "minReactions": {
            "title": "Minimum Reactions",
            "type": "integer",
            "description": "Skip comments with fewer than this many reactions (likes + other reaction types). 0 disables the filter and emits every comment.",
            "editor": "number",
            "default": 0,
            "prefill": 0,
            "minimum": 0,
            "maximum": 100000
          },
          "language": {
            "title": "Language",
            "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.",
            "editor": "select",
            "enum": [
              "en",
              "es",
              "fr",
              "de",
              "pt"
            ],
            "enumTitles": [
              "English",
              "Spanish",
              "French",
              "German",
              "Portuguese"
            ],
            "default": "en",
            "prefill": "en"
          },
          "excludeAuthorTypes": {
            "title": "Exclude Author Types",
            "type": "array",
            "description": "Drop comments authored by the selected actor types. PERSON = individual member profiles, COMPANY = company / organization pages.",
            "editor": "select",
            "items": {
              "type": "string",
              "enum": [
                "PERSON",
                "COMPANY"
              ],
              "enumTitles": [
                "Person",
                "Company"
              ]
            },
            "uniqueItems": true,
            "default": [],
            "prefill": []
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Optional Apify proxy configuration. Residential proxy recommended for best results.",
            "editor": "proxy"
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "LinkedIn Post Comment & Reply Thread Extractor Output",
        "description": "LinkedIn post comments and reply threads with author identity, reaction counts, and linked profiles.",
        "properties": {
          "comments": {
            "type": "string",
            "title": "Post Comments",
            "description": "Dataset containing all scraped LinkedIn post comments and replies.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Overview",
              "transformation": {
                "fields": [
                  "authorName",
                  "commentText",
                  "commentedAt",
                  "reactionsCount",
                  "isReply",
                  "postUrl",
                  "scrapedAt"
                ]
              },
              "display": {
                "component": "table",
                "properties": {
                  "authorName": {
                    "label": "Author",
                    "format": "text"
                  },
                  "commentText": {
                    "label": "Comment",
                    "format": "text"
                  },
                  "commentedAt": {
                    "label": "Commented At",
                    "format": "text"
                  },
                  "reactionsCount": {
                    "label": "Reactions",
                    "format": "number"
                  },
                  "isReply": {
                    "label": "Is Reply",
                    "format": "text"
                  },
                  "postUrl": {
                    "label": "Post URL",
                    "format": "link"
                  },
                  "scrapedAt": {
                    "label": "Scraped At",
                    "format": "text"
                  }
                }
              }
            }
          }
        }
      },
      "readme": "# LinkedIn Post Comment & Reply Thread Extractor\n\nFeed this actor one or more LinkedIn post links and a session cookie, and it returns the top-level comments on each post (up to your per-post limit) — optionally with nested reply threads — as structured rows with author identity, engagement counts, and linked profiles.\n\n## What this actor does\n\n- Scrapes top-level comments from one or more LinkedIn post URLs, with a relevance or recency sort preference.\n- Optionally follows reply threads up to 3 levels deep, emitting each reply as its own row linked to its parent via `parentCommentId`.\n- Classifies each commenter as a person or company page, and pulls any LinkedIn profile or company links out of the comment text.\n- Filters out comments below a minimum reaction count, and can exclude comments from person or company authors entirely.\n- Omits text and URL fields it couldn't populate for a given comment; the counts (`reactionsCount`, `repliesCount`, `authorFollowersCount`), `isReply` and `authorType` are always present.\n\n## Output per comment\n\n| Field | Description |\n|---|---|\n| `commentId` | Unique numeric ID for the comment. |\n| `postUrl` | Canonical URL of the source post. |\n| `postId` | Numeric activity ID of the source post. |\n| `authorName` | Commenter's full name. |\n| `authorProfileUrl` | URL to the commenter's LinkedIn profile or company page. |\n| `authorHeadline` | Commenter's headline/title. |\n| `authorAvatar` | CDN URL of the commenter's profile photo. |\n| `authorType` | `PERSON`, `COMPANY`, or `UNKNOWN` when it can't be determined. |\n| `authorFollowersCount` | Commenter's follower count, when LinkedIn exposes one (0 otherwise). |\n| `commentText` | Full text of the comment. |\n| `commentedAt` | ISO 8601 UTC timestamp of when the comment was posted. |\n| `commentEditedAt` | ISO 8601 UTC timestamp of the last edit, when the comment was edited. |\n| `reactionsCount` | Total reactions on the comment (`0` when none or unknown). |\n| `reactionBreakdown` | Reaction counts by type (e.g. `like`, `praise`), when more than one type is present. |\n| `repliesCount` | Number of replies to this comment (`0` when none or unknown). |\n| `isReply` | `true` if this row is a reply, `false` if top-level. |\n| `parentCommentId` | ID of the parent comment (replies only). |\n| `mentionedUsers` | LinkedIn profile URLs (`linkedin.com/in/...`) that appear in the comment text, when any are present. |\n| `mentionedCompanies` | Company slugs from `linkedin.com/company/...` links in the comment text, when any are present. |\n| `attachmentImageUrl` | URL of an attached image, when the comment includes one. |\n| `attachmentVideoUrl` | URL of an attached video, when the comment includes one. |\n| `scrapedAt` | ISO 8601 UTC timestamp of when the row was scraped. |\n\nIf no cookie is supplied, or the supplied cookie is or becomes invalid, the run writes a record with `_status: \"no_data\"`, `_reason`, `_message`, `_help` and `scrapedAt` fields explaining what to fix, and stops. Comments already saved before the cookie stopped working stay in the dataset.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `postUrls` | List of strings | – | LinkedIn post URLs to scrape comments from. Accepts `/feed/update/urn:li:activity:ID/` or `/posts/username_slug-ID/` formats. Required. |\n| `cookie` | String | – | A LinkedIn session cookie: either the `li_at` value, or the full cookies JSON array exported from a browser extension. Required. |\n| `maxCommentsPerPost` | Integer | `50` | Maximum top-level comments to scrape per post (1–500). Replies don't count toward it. |\n| `includeReplies` | Boolean | `false` | Also fetch replies to top-level comments, each output as its own row. |\n| `replyDepth` | Integer | `1` | How many reply levels to recurse when `includeReplies` is on: `1` = direct replies, up to `3`. Up to 10 replies are read per comment. |\n| `sortBy` | String (select) | `RELEVANCE` | `RELEVANCE` (LinkedIn's \"Most relevant\") or `RECENT` (newest first). A preference only: depending on how LinkedIn serves a post's comments, they may come back in LinkedIn's default order. |\n| `minReactions` | Integer | `0` | Skip comments and replies with fewer than this many reactions. `0` disables the filter. |\n| `language` | String (select) | `en` | Preferred LinkedIn UI language; influences which translation of comment text is returned. |\n| `excludeAuthorTypes` | List of strings | `[]` | Drop comments and replies from the selected author types: `PERSON`, `COMPANY`. Comments whose author type is `UNKNOWN` are always kept. |\n| `proxyConfiguration` | Object | – | Optional Apify proxy settings. |\n\n### Example: default run\n\n```json\n{\n  \"postUrls\": [\"https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/\"],\n  \"cookie\": \"YOUR_LI_AT_VALUE\",\n  \"maxCommentsPerPost\": 50\n}\n```\n\n### Example: with nested replies, newest first\n\n```json\n{\n  \"postUrls\": [\"https://www.linkedin.com/posts/williamhgates_climate-7329761432933134337/\"],\n  \"cookie\": \"YOUR_LI_AT_VALUE\",\n  \"includeReplies\": true,\n  \"replyDepth\": 2,\n  \"sortBy\": \"RECENT\"\n}\n```\n\n### Example: high-engagement comments from people only\n\n```json\n{\n  \"postUrls\": [\"https://www.linkedin.com/feed/update/urn:li:activity:7329761432933134337/\"],\n  \"cookie\": \"YOUR_LI_AT_VALUE\",\n  \"minReactions\": 10,\n  \"excludeAuthorTypes\": [\"COMPANY\"]\n}\n```\n\n## Use cases\n\n- **Audience sentiment** — read how people are reacting to a company announcement or thought-leadership post.\n- **Lead discovery** — surface engaged commenters as warm prospects, filtered to real people by `excludeAuthorTypes`.\n- **Influencer research** — see who's actively replying to a creator's posts and how deep the conversation threads go.\n- **Brand monitoring** — track mentions of your company or product inside comment threads on relevant posts.\n- **Community moderation review** — pull full reply chains to review how a sensitive post's discussion unfolded.\n\n## FAQ\n\n**Does this need a LinkedIn account?** Yes. A valid session cookie (`li_at` or an exported cookies JSON array) from a logged-in account is required to read comment data.\n\n**Why would `authorName` be missing from a comment?** Deleted accounts or heavily restricted profiles can leave author fields empty. If a comment has no extractable ID at all, it's skipped entirely.\n\n**Does the actor see deleted comments?** No. Deleted comments are removed from LinkedIn's own response, so the actor only sees whatever is still live at scrape time.\n\n**How deep do reply threads go?** Up to 3 levels via `replyDepth`, only when `includeReplies` is enabled. At each level the actor reads up to 10 replies per comment, and replies beyond the chosen depth aren't fetched.\n\n**Why did I get fewer comments than `maxCommentsPerPost`?** The post may simply have fewer comments, `minReactions`/`excludeAuthorTypes` may have dropped some, or LinkedIn may serve that post's comments in a way that only exposes its first batch. Comments are not de-duplicated across different input URLs pointing to the same post.\n\n**Can I scrape comments on a post I don't have access to?** No. Only posts visible to the account behind your cookie can be scraped — private or connection-restricted posts outside your network will fail.\n\n**Why is a cookie required for public-looking posts?** LinkedIn's comment data isn't available through any unauthenticated public endpoint, even for posts that appear public in a browser without logging in.\n\n**What happens if my cookie expires mid-run?** The run stops and adds a record with `_status: \"no_data\"` plus a `_reason`/`_message`/`_help` explanation; any comment rows saved before that point remain. Log into LinkedIn, copy a fresh `li_at` value, and start a new run.\n\n**Is this affiliated with LinkedIn?** No. This is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation.\n"
    },
    "buildNumber": "1.0.1",
    "imageDigest": "c608922952df0d1ffb4195ddffbc9f04619990fddcfd1aba9fd91292b7aa681d",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.045734444444444446
    }
  }
}