{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper + Recruiter & Hiring Signals",
    "description": "Scrape public LinkedIn job listings by keyword, location, or URL into clean, CSV-ready rows with hiring-signal fields and visible recruiter indicators - no login, cookies, or Apify residential proxy.",
    "version": "1.1",
    "x-build-id": "06p8FKWW6jJxBt8eq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/coregent~linkedin-advanced-jobs-recruiter-details-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-coregent-linkedin-advanced-jobs-recruiter-details-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/coregent~linkedin-advanced-jobs-recruiter-details-scraper/runs": {
      "post": {
        "operationId": "runs-sync-coregent-linkedin-advanced-jobs-recruiter-details-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/coregent~linkedin-advanced-jobs-recruiter-details-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-coregent-linkedin-advanced-jobs-recruiter-details-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 URLs",
            "type": "array",
            "description": "Paste LinkedIn URLs: job search result URLs (https://www.linkedin.com/jobs/search/...; their filters are kept), single job URLs (https://www.linkedin.com/jobs/view/{id}), or company pages (https://www.linkedin.com/company/{name}) to get every open job at that company. Other URLs are skipped.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Job keywords to search, for example \"software engineer\", \"data analyst\". Each keyword is combined with every location below to build public LinkedIn job search URLs. Max 50 entries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Search locations, for example \"Australia\", \"Sydney, New South Wales, Australia\", \"United States\". Each keyword is paired with each location. Leave empty to search without a location filter. Max 50 entries.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyUrls": {
            "title": "Companies",
            "type": "array",
            "description": "Only return jobs from these employers. Paste LinkedIn company page URLs, e.g. https://www.linkedin.com/company/microsoft. Combined with your keywords and locations (without keywords: every job at these companies). Each company adds one search per keyword x location.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of unique jobs SAVED for the whole run (after filters). Range 1-5000. With strict filters the actor keeps searching until this many matching jobs are saved, the searches run out, or its detail-page budget (15 job pages per requested result) is used up.",
            "default": 100
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "past_24h",
              "past_week",
              "past_month"
            ],
            "type": "string",
            "description": "Filter jobs by posting recency. Applied at the LinkedIn source where possible, otherwise as a text filter on the visible posted date.",
            "default": "any"
          },
          "workplaceTypes": {
            "title": "Work arrangement",
            "type": "array",
            "description": "Keep jobs whose visible work arrangement matches any selected value (e.g. Remote OR Hybrid). LinkedIn does not apply this filter to public searches, so it is checked on each job page (workplace wording in the title, location and description). Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            },
            "default": []
          },
          "employmentTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Keep jobs whose LinkedIn \"Employment type\" matches any selected value. Checked on each job page (LinkedIn does not apply it to public searches). Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "temporary",
                "internship",
                "volunteer",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            },
            "default": []
          },
          "experienceLevels": {
            "title": "Experience level",
            "type": "array",
            "description": "Keep jobs whose LinkedIn \"Seniority level\" matches any selected value. When LinkedIn shows \"Not Applicable\" (common), the level inferred from the job title is used. Checked on each job page. Leave empty for any.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entry",
                "associate",
                "mid_senior",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive"
              ]
            },
            "default": []
          },
          "easyApplyOnly": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Keep only jobs you can apply to with LinkedIn Easy Apply. Applied by LinkedIn at search time and re-checked on each job page.",
            "default": false
          },
          "maxApplicants": {
            "title": "Max applicants",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Keep only jobs with at most this many applicants (e.g. 25 for low-competition roles). \"Be among the first 25 applicants\" counts as fewer than 25. Jobs that show no applicant count are dropped. 0 = no limit.",
            "default": 0
          },
          "includeRecruiterVisibleOnly": {
            "title": "Only jobs with visible recruiter info",
            "type": "boolean",
            "description": "Keep only jobs where LinkedIn shows the job poster / hiring team publicly (name, title, profile link). Only about 5-10% of jobs show one, so the actor checks many job pages per saved result; runs stop after 15 job pages per requested result.",
            "default": false
          },
          "requireSalaryVisible": {
            "title": "Only jobs with visible salary",
            "type": "boolean",
            "description": "Keep only jobs that show explicit salary/pay text (LinkedIn pay block or a pay range in the description).",
            "default": false
          },
          "includeDescription": {
            "title": "Visit job detail pages",
            "type": "boolean",
            "description": "Visit each job's public detail page to get the full description plus employment type, seniority, job function, industries, applicant count, salary, apply URL / Easy Apply, and the recruiter (name, title, profile link) when LinkedIn shows one. Turn off for a faster, cards-only run with fewer fields (title, company, location, posted date).",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Include description HTML",
            "type": "boolean",
            "description": "Also return the job description as sanitized HTML in description_html (formatting kept, scripts and attributes removed). Off by default to keep CSV rows lean. Uses the same detail page, no extra requests.",
            "default": false
          },
          "includeCompanyDetails": {
            "title": "Include company details",
            "type": "boolean",
            "description": "Add the hiring company's public LinkedIn profile to every job: numeric ID, website, size, employee count, industry, headquarters, type, founding year, description and followers. One extra request per unique company (cached for the run), same price per result.",
            "default": true
          },
          "includeHiringSignals": {
            "title": "Include hiring-signal fields",
            "type": "boolean",
            "description": "Add the derived non-AI hiring-signal fields: hiring_signal_score (0-100), hiring_signal_label, and reason_tags. When off, those three fields are null.",
            "default": true
          },
          "deduplicate": {
            "title": "Remove duplicates",
            "type": "boolean",
            "description": "Deduplicate jobs by job ID and canonical job URL across overlapping inputs so you are not charged for duplicates.",
            "default": true
          },
          "skipJobIds": {
            "title": "Skip job IDs",
            "type": "array",
            "description": "LinkedIn job IDs (or job URLs) to skip, e.g. the IDs saved by your previous scheduled run. Skipped jobs are never fetched in detail, saved or charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteMode": {
            "title": "Work arrangement (legacy)",
            "type": "string",
            "description": "Deprecated single-value version of \"Work arrangement\" (workplaceTypes): any, remote, hybrid or onsite. Kept so existing tasks keep working; used only when workplaceTypes is empty.",
            "default": "any"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy (Datacenter) is used by default and works for typical runs. Apify Residential is NOT supported and fails the run at startup; if you need residential routing, add your own provider under Custom proxy URLs.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}