{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Scraper: Profiles, Companies, Posts & Jobs",
    "description": "Scrape public LinkedIn profiles, company pages, posts and jobs from their URLs. No account, no cookies, no browser. Get names, experience, company size, industry, post text, reactions, comments, and job listings with descriptions and salaries. Export to JSON, CSV or Excel, or use the real-time API.",
    "version": "0.0",
    "x-build-id": "SLlUNlpRO4ktaKyJY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/data_forge_org~linkedin-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-data_forge_org-linkedin-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/data_forge_org~linkedin-scraper/runs": {
      "post": {
        "operationId": "runs-sync-data_forge_org-linkedin-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/data_forge_org~linkedin-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-data_forge_org-linkedin-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": {
          "profileUrls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "Add LinkedIn profile URLs (<code>https://www.linkedin.com/in/&lt;id&gt;</code>) or bare public identifiers such as <code>williamhgates</code>. Country subdomains and tracking parameters are cleaned up automatically. Each profile produces one <code>person</code> item. A value that can't be read produces an <code>INVALID_INPUT</code> error item and the rest of the run continues.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "companyUrls": {
            "title": "Company URLs",
            "type": "array",
            "description": "Add LinkedIn company page URLs (<code>https://www.linkedin.com/company/&lt;name&gt;</code>) or bare universal names such as <code>apify</code>. Each page produces one <code>company</code> item. Numeric company IDs can't be resolved without a login.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "postUrls": {
            "title": "Post URLs",
            "type": "array",
            "description": "Add LinkedIn post URLs in any form: <code>/posts/…-activity-&lt;id&gt;-…</code>, <code>/feed/update/urn:li:activity:&lt;id&gt;</code>, <code>/embed/feed/update/…</code> or <code>/pulse/&lt;article&gt;</code>. Each URL produces one <code>post</code> item. To also get comments, turn on <i>Include comments</i>.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "includeProfilePosts": {
            "title": "Include recent posts from profiles",
            "type": "boolean",
            "description": "Also output the recent activity shown on each profile page as <code>post</code> items (operation <code>people.posts</code>). No extra page download is needed. Only the few posts that LinkedIn shows to logged-out visitors are available.",
            "default": false
          },
          "includeCompanyPosts": {
            "title": "Include recent posts from company pages",
            "type": "boolean",
            "description": "Also output the recent updates shown on each company page (usually about 10) as <code>post</code> items (operation <code>companies.posts</code>). No extra page download is needed.",
            "default": false
          },
          "includeComments": {
            "title": "Include comments on posts",
            "type": "boolean",
            "description": "When this is on, the full post page is downloaded and the first comments that LinkedIn shows publicly (usually about 10) are output as <code>comment</code> items. When it is off, the light embed page is used instead. It is about 7× smaller, so it is faster and cheaper, but it has no comments.",
            "default": false
          },
          "jobUrls": {
            "title": "Job URLs",
            "type": "array",
            "description": "Add LinkedIn job URLs (<code>https://www.linkedin.com/jobs/view/&lt;id&gt;</code>, with or without the title in the URL, or any LinkedIn jobs URL with <code>currentJobId=&lt;id&gt;</code>) or bare job IDs such as <code>4446500774</code>. Each job produces one <code>job</code> item with its details: description, employment type, seniority, industry, salary (when shown), applicants, Easy Apply and whether it is still open. It takes 1 small request per job and is charged as event <code>job</code>. An expired job is still returned, with <code>closed: true</code>; a job ID that doesn't exist produces a <code>NOT_FOUND</code> error item.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "jobSearchUrls": {
            "title": "Jobs search URLs",
            "type": "array",
            "description": "Paste LinkedIn jobs search URLs. To get one, search on <a href=\"https://www.linkedin.com/jobs/search\" target=\"_blank\">linkedin.com/jobs</a>, set the keywords, location and filters you want (for example date posted, company or Easy Apply), then copy the URL from the address bar. Every filter in the URL (keywords, location, <code>f_…</code> filters, distance, sort) is passed on to LinkedIn as it is; tracking and sign-in parameters are dropped. Job listing pages such as <code>https://www.linkedin.com/jobs/data-engineer-jobs</code> and the <i>See jobs</i> link of a company page work too. Each URL returns up to <i>Max jobs per search or company</i> jobs, in LinkedIn's order; LinkedIn shows at most 1,000 results per search. A <code>/jobs/search</code> URL without a location covers the whole world. A job listing page is searched in the location LinkedIn picks for it (for example the United States): to search another location, add <code>location=…</code> to it or use a <code>/jobs/search</code> URL. Each job is a <code>job</code> item: rows cost 1 request per 10 jobs (event <code>job_card</code>); with <i>Include job details</i>, each job takes 1 more small request and is charged as event <code>job</code> instead.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "includeCompanyJobs": {
            "title": "Include open jobs of companies",
            "type": "boolean",
            "description": "Also output the open jobs of each company in <i>Company URLs</i> as <code>job</code> items (operation <code>companies.jobs</code>), up to <i>Max jobs per search or company</i>. They come from the <i>See jobs</i> button of the company page, which also covers the pages LinkedIn groups under the company. A company with no open jobs has no such button, so it returns no jobs and no extra request is made. Rows cost 1 request per 10 jobs (event <code>job_card</code>); with <i>Include job details</i>, each job takes 1 more small request and is charged as event <code>job</code> instead.",
            "default": false
          },
          "includeJobDetails": {
            "title": "Include job details",
            "type": "boolean",
            "description": "For jobs found through search URLs and company pages, also download each job's page to get the same details as a job URL: description, employment type, seniority, industry, salary (when shown), applicants, Easy Apply, whether it is still open, and the name and profile of the person who posted it (when shown). Each job takes 1 more small request (about 25–80 KB) and is charged as event <code>job</code> instead of <code>job_card</code>. Job URLs always come with details.",
            "default": false
          },
          "maxJobs": {
            "title": "Max jobs per search or company",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Set the maximum number of jobs returned for each jobs search URL and for each company. Jobs are listed 10 per request, so 25 jobs take 3 requests (plus 1 per job with <i>Include job details</i>). LinkedIn shows at most 1,000 results per search. Job URLs are not limited.",
            "default": 25
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Select the proxies used for LinkedIn pages. LinkedIn blocks datacenter IPs almost immediately, so keep <b>Residential</b> proxies.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Set the maximum number of pages downloaded in parallel. Each page in flight takes a few MB (plain HTTP, no browser), so 10 fits in the default 512 MB. Higher values finish large runs faster but need more memory.",
            "default": 10
          },
          "maxRequestRetries": {
            "title": "Max retries per page",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Set how many times a blocked or failed page is retried on a fresh residential IP. When all retries fail, a <code>BLOCKED</code> error item is written. Blocked responses are tiny (about 1.5 KB), so retries cost little.",
            "default": 6
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}