{
  "openapi": "3.0.1",
  "info": {
    "title": "Post Comments Engagements Scraper Linkedin With Repeat Engagers",
    "description": "LinkedIn Post Comments & Engagements Scraper extracts comments, reactions, engagement metrics, authors, and repeat engagers from posts. Ideal for identifying active audiences, tracking engagement, analyzing content performance, finding prospects, and building targeted B2B leads.",
    "version": "0.1",
    "x-build-id": "qzgx9uDzIlBNSIIqw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapier~post-comments-engagements-scraper-linkedin/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapier-post-comments-engagements-scraper-linkedin",
        "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/scrapier~post-comments-engagements-scraper-linkedin/runs": {
      "post": {
        "operationId": "runs-sync-scrapier-post-comments-engagements-scraper-linkedin",
        "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/scrapier~post-comments-engagements-scraper-linkedin/run-sync": {
      "post": {
        "operationId": "run-sync-scrapier-post-comments-engagements-scraper-linkedin",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "postUrls": {
            "title": "🔗 Posts to read (use several from one creator)",
            "type": "array",
            "description": "LinkedIn post URLs, activity/ugcPost URNs or bare numeric activity IDs — one per line. Frequency is only meaningful across a SET of posts from the same creator: two posts can only ever say 'once or twice'. 10+ posts is where repeat engagers become visible. The original startUrls key is still accepted.",
            "items": {
              "type": "string"
            }
          },
          "commentsPerPost": {
            "title": "💬 Comments to read per post",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Upper bound on comments read from each post (1–500). Logged out, LinkedIn itself serves a guest roughly the first 9–10 top-level comments per post, so this only bites on the cookie path. Every row reports commentsAvailable vs commentsTotal so the real coverage is visible. Default 100.",
            "default": 100
          },
          "minPostsEngaged": {
            "title": "🔁 Only return people seen on at least N posts",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "1 = keep everyone (default). 2 = return only repeat engagers — people who commented on at least two of the posts you scraped. Comments filtered out this way are NOT charged; an uncharged accounting row records how many were removed and why.",
            "default": 1
          },
          "superfanMinPosts": {
            "title": "🏆 Superfan threshold (posts engaged)",
            "minimum": 2,
            "maximum": 100,
            "type": "integer",
            "description": "How many of the scraped posts someone must comment on to be tiered as a superfan. 1 post = first-time, 2 up to this number = returning, this number or above = superfan. Default 3.",
            "default": 3
          },
          "minPostSampleForTier": {
            "title": "📏 Minimum posts before any tier is assigned",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "The honesty guard. Below this many successfully scraped posts, repeatEngagerTier reads 'insufficient-sample' and engagementRatePct is null — because calling someone a first-timer when you only looked at one post is noise, not insight. Default 3.",
            "default": 3
          },
          "includeCommenterRollup": {
            "title": "👥 Write the per-person rollup dataset",
            "type": "boolean",
            "description": "Writes one row per PERSON (not per comment) to a separate, uncharged child dataset named engagers-<runId>: postsEngagedCount, commentsCount, firstSeenAt, lastSeenAt, totalReactionsReceived, avgCommentLength, engagedPostUrls and postSampleSize. This is the ranked audience list. Default on.",
            "default": true
          },
          "enableEngagerLedger": {
            "title": "📚 Keep a cross-run frequency ledger",
            "type": "boolean",
            "description": "Persists engagement counts in a named key-value store so scheduled runs build a lasting record: run 2 finds the same people again with HIGHER counts. It accumulates — it never hides or suppresses a commenter for having been seen before. Default off.",
            "default": false
          },
          "ledgerKey": {
            "title": "🗂️ Ledger key",
            "type": "string",
            "description": "Which persistent ledger this run writes into. Use one key per creator or company page you track (e.g. 'microsoft') so audiences do not blend together. Ignored when the ledger is off. Default 'default'.",
            "default": "default"
          },
          "commentOrder": {
            "title": "🔀 Comment order",
            "enum": [
              "REVERSE_CHRONOLOGICAL",
              "RELEVANCE"
            ],
            "type": "string",
            "description": "Order requested from LinkedIn on the cookie path. Logged out, LinkedIn serves its own fixed guest ordering and ignores this. The original sortOrder key is still accepted.",
            "default": "REVERSE_CHRONOLOGICAL"
          },
          "liAt": {
            "title": "🍪 LinkedIn li_at cookie (optional)",
            "type": "string",
            "description": "Optional. Leave empty to run logged out — that is the default, verified path. Supplying your own li_at cookie switches to LinkedIn's authenticated engine for deeper comment pages, nested replies, per-type reaction breakdowns and the edited/pinned markers, which raises how many posts a person can be seen on. No cookie ships with this actor; the value is stored encrypted and used only for the requests that need it."
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "Optional. By default requests go direct and escalate to Apify datacenter, then residential, only if LinkedIn blocks or throttles (HTTP 999). Configure a proxy here to start from it instead."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}