{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Profile Posts Scraper & LinkedIn Company Posts Scraper",
    "description": "LinkedIn feed of any profile or company URL as rows — post text, a real publish timestamp to the second, likes, comments, shares, the reaction breakdown, images, video and article links, and the author. No login, no cookies. A page with nothing public is never charged.",
    "version": "1.0",
    "x-build-id": "HthDiCgkXW4GAWvhl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~linkedin-posts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-linkedin-posts-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/steadyfetch~linkedin-posts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-linkedin-posts-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/steadyfetch~linkedin-posts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-linkedin-posts-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "LinkedIn page URLs",
            "type": "array",
            "description": "LinkedIn profile, company and school page links in one list — https://www.linkedin.com/in/<public-identifier>/, https://www.linkedin.com/company/<name>/, /showcase/<name>/ or /school/<name>/; a mobile or lnkd.in short link to one works too. A link to a single POST comes back as an uncharged row telling you to paste the author's page instead. Also answers to `urls` and `links`. Leave it empty and click Start for a small built-in sample — it collects nothing and charges nothing.",
            "items": {
              "type": "string"
            }
          },
          "profileUrls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "People's LinkedIn profiles, one per line — a https://www.linkedin.com/in/<public-identifier>/ link (a mobile or lnkd.in short link to a profile works too) or the bare public identifier. An old /pub/ link or a Sales Navigator link has no public address in it and comes back as an uncharged row saying what to paste; so does a profile that is not public. Use this field when your list is people only; otherwise use \"LinkedIn page URLs\".",
            "items": {
              "type": "string"
            }
          },
          "companyUrls": {
            "title": "Company URLs",
            "type": "array",
            "description": "LinkedIn company, showcase and school pages, one per line — a full https://www.linkedin.com/company/<name>/, /showcase/<name>/ or /school/<name>/ link or the bare universal name on its own. A page with no public posts comes back as an uncharged row. Use this field when your list is companies only; otherwise put everything in \"LinkedIn page URLs\".",
            "items": {
              "type": "string"
            }
          },
          "postsPerTarget": {
            "title": "Max posts per page",
            "type": "integer",
            "description": "Hard cap on the posts delivered for EACH page you name — three pages at 50 collect up to 150 in total. Any number from 1 to 500 is used exactly as typed (set 2 for the latest 2 posts of each page), and only delivered posts are charged; a number above 500 is moved to 500 and one uncharged row says so, rather than the run being refused before it starts. A page that runs short leaves an uncharged row saying so. Also answers to `resultsLimit`, `limit`, `count`, `maxPosts` and `maxResults` — the names other LinkedIn post scrapers use — and the smallest limit present binds.",
            "default": 50
          },
          "maxItems": {
            "title": "Max posts for the whole run",
            "type": "integer",
            "description": "Hard ceiling across every page in the run, whatever the per-page limit says — between 1 and 100,000, and a number outside that is moved to the nearest end on an uncharged row instead of the run being refused. Leave it empty for 1,000. The smallest limit present binds, and one uncharged note row says which name was read and what it was read as.",
            "default": 1000
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Keep only posts published on or after this moment: a date (2026-08-01, 1 Aug 2026, or 01.08.2026 day first) or a span counted back from now (24h, 7 days, 2 weeks, 3 months, 1 year, 7d, last month, today, yesterday). The walk stops as soon as a page's oldest post is older than this, so a narrow window costs less, not more."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Keep only posts published before this moment: a date (2026-09-01, 1 Sep 2026, or 01.09.2026 day first) or a span counted back from now (24h, 7 days, 2 weeks, 3 months, 1 year, 7d, last month, today, yesterday), the same forms as \"Posted after\". Pair it with \"Posted after\" for a closed window. A post outside the window is dropped before it takes a slot, so it is never delivered and never charged."
          },
          "includeReposts": {
            "title": "Include reposts",
            "type": "boolean",
            "description": "ON (default): a repost is delivered as a row marked `isRepost: true`, carrying the original post's id, link, author and its own publish time. OFF: reposts are dropped before they take a slot, so the page's own writing fills the count instead.",
            "default": true
          },
          "maxRunSeconds": {
            "title": "Max run seconds",
            "type": "integer",
            "description": "The run stops cleanly before this many seconds and reports what is left, instead of being killed by a timeout — between 30 and 7,200, and a number outside that is moved to the nearest end on an uncharged row. A time limit ends the collecting, never the delivering: posts already in hand are always written out.",
            "default": 1800
          },
          "includeSeen": {
            "title": "Include posts you already have",
            "type": "boolean",
            "description": "OFF (default): a post already delivered to your account is skipped — no row, no charge. LinkedIn lists posts newest first, so once a run reaches posts you already have it reads no older page for that link: you get what is new since your last run, and the rest of the number you asked for closes on one uncharged `skipped.all_repeat` row. A run pointed at a dataset with \"Skip posts in this dataset\" (the way to pick up where a stopped run left off) still reads past them. ON: those posts are delivered again anyway, marked `repeat: true`, still not charged, and the run keeps reading older pages. Either way, a page that had nothing new for your account is not read again for up to 24 hours under the same dates and the same setting (half the span when \"Posted after\" is a span shorter than two days; with `today`, until half of what is left of the UTC day; with `yesterday`, 12 to 24 hours, and both read again after midnight UTC), and one uncharged row says when. Pointing \"Skip posts in this dataset\" at a dataset reads every page once, then holds quiet pages the same way for runs pointed at that dataset. With it ON, posts you already have are not new, so a page that gave a run with it ON only those is held for your next runs with it ON. Turning it ON reads a page that a run with it OFF held. Posts older than 90 days in your account's memory count as new again either way.",
            "default": false
          },
          "resumeFromDatasetId": {
            "title": "Skip posts in this dataset",
            "type": "string",
            "description": "The dataset ID of a previous run of this actor. Posts already in it are treated as posts you already have and are skipped, so a follow-up run collects only what is new even from a different Apify account. Selecting it here is what grants this run permission to read it."
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}