{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper: Salary, Recruiter Contact",
    "description": "Scrape public LinkedIn jobs: salary as text and as numbers, full description, applicant count, seniority, employment type, industries, benefits, the recruiter who posted the role, and the hiring company profile. Filters that actually filter. Paste a LinkedIn search URL. From $0.42 per 1,000 results.",
    "version": "0.0",
    "x-build-id": "PtaRe2nJtfJzoI9Zf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sourabhbgp~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sourabhbgp-linkedin-jobs-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/sourabhbgp~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sourabhbgp-linkedin-jobs-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/sourabhbgp~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sourabhbgp-linkedin-jobs-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": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Search LinkedIn by keywords and location, or fetch full details for job URLs you already have.",
            "default": "search"
          },
          "startUrls": {
            "title": "LinkedIn search URLs",
            "type": "array",
            "description": "Paste one or more LinkedIn job search URLs. Build the search on linkedin.com, copy the address bar, drop it here. Keywords, location, radius, date posted, company, Easy Apply and under-10-applicants are all read from the URL. Each URL is searched separately and the results are deduplicated across the run.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Job search keywords. Supports boolean operators: AND, OR, NOT and \"quoted phrases\". Example: engineer AND \"machine learning\" NOT intern. Search mode only."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Where to search. Example: United States, London, San Francisco. A plain name can be ambiguous (Boston matches 7 places worldwide): set Location ID below to be exact. Search mode only."
          },
          "searchTerms": {
            "title": "Extra keyword sets",
            "type": "array",
            "description": "Run several keyword searches in one run instead of one run each. Combined with Extra locations below, every keyword is searched in every location. Results are deduplicated across the whole run, so an overlapping job is only ever charged once.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Extra locations",
            "type": "array",
            "description": "Search several locations in one run. Each is paired with every entry in Extra keyword sets. Also the way past LinkedIn's 1,000 results per search cap: split one broad search into several narrower ones.",
            "items": {
              "type": "string"
            }
          },
          "geoId": {
            "title": "Location ID (geoId)",
            "type": "string",
            "description": "LinkedIn's numeric location id. Overrides Location when set, and removes all ambiguity. Example: 102380872 is Boston, Massachusetts. Find it in the geoId parameter of any LinkedIn job search URL."
          },
          "distance": {
            "title": "Search radius",
            "enum": [
              "any",
              "0",
              "5",
              "10",
              "25"
            ],
            "type": "string",
            "description": "How far from the location to search.",
            "default": "any"
          },
          "urls": {
            "title": "Job URLs or IDs",
            "type": "array",
            "description": "LinkedIn job URLs or bare numeric job IDs. Used when Mode is set to job details. Duplicates are removed before anything is fetched, so you are never charged twice for the same job.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of jobs to return. LinkedIn caps any single search at 1,000 results, so use narrower keywords, a tighter location or the date filter to reach more than that. Set 0 for as many as LinkedIn will give.",
            "default": 50
          },
          "enrichDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Open each job posting to add description, salary, seniority, employment type, industries and the job poster. Costs no extra per result, but the run takes longer. Turned on automatically when a filter below needs it.",
            "default": false
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "past24h",
              "pastWeek",
              "pastMonth"
            ],
            "type": "string",
            "description": "Filter by when the job was posted. Applied by LinkedIn.",
            "default": "any"
          },
          "jobType": {
            "title": "Job type",
            "enum": [
              "any",
              "full-time",
              "part-time",
              "contract",
              "temporary",
              "volunteer",
              "internship"
            ],
            "type": "string",
            "description": "Filter by employment type. LinkedIn stopped applying this filter for logged-out searches in August 2026, so this actor applies it itself: a job is kept when its own Employment type matches, or when its title clearly says so. LinkedIn leaves that field blank on many postings, which is why the title counts too. Turns on full job details. Your keywords also get the filter word added to them, so LinkedIn ranks matching jobs higher.",
            "default": "any"
          },
          "experienceLevel": {
            "title": "Experience level",
            "enum": [
              "any",
              "internship",
              "entry",
              "associate",
              "mid-senior",
              "director",
              "executive"
            ],
            "type": "string",
            "description": "Filter by seniority. LinkedIn stopped applying this filter for logged-out searches in August 2026, so this actor applies it itself: a job is kept when its own Seniority level matches, or when its title clearly says so. LinkedIn leaves that field blank on about three quarters of postings, including ones titled Director, which is why the title counts too. Turns on full job details. Your keywords also get the filter word added to them, so LinkedIn ranks matching jobs higher.",
            "default": "any"
          },
          "workplaceType": {
            "title": "Workplace type",
            "enum": [
              "any",
              "on-site",
              "remote",
              "hybrid"
            ],
            "type": "string",
            "description": "On-site, remote or hybrid. LinkedIn stopped applying this filter for logged-out searches, so this actor applies it itself: remote uses LinkedIn's own remote flag, hybrid is read from the posting's wording. Selecting remote or hybrid opens a second page per job and makes the run slower.",
            "default": "any"
          },
          "minSalary": {
            "title": "Minimum salary",
            "enum": [
              "any",
              "40k",
              "60k",
              "80k",
              "100k",
              "120k"
            ],
            "type": "string",
            "description": "Keep only jobs with a published salary at or above this figure, annualised. About 1 job in 5 publishes a salary, and jobs without one are excluded, so expect far fewer results. Turns on full job details.",
            "default": "any"
          },
          "easyApplyOnly": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only jobs you can apply to without leaving LinkedIn. Applied by LinkedIn.",
            "default": false
          },
          "underTenApplicants": {
            "title": "Under 10 applicants",
            "type": "boolean",
            "description": "Only jobs with fewer than 10 applicants so far. Applied by LinkedIn.",
            "default": false
          },
          "companyId": {
            "title": "Company ID",
            "type": "string",
            "description": "LinkedIn numeric company id. Accepts several, comma separated, to pull jobs from a set of companies at once. Example: 1586 is Amazon. Applied by LinkedIn."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevant",
              "recent"
            ],
            "type": "string",
            "description": "Most relevant, or newest first. LinkedIn ignores sort order on logged-out searches, so newest first is applied by this actor using each job's posted date. Choosing it makes the run slower because the whole result set has to be collected before it can be ordered.",
            "default": "relevant"
          },
          "includeFailedRows": {
            "title": "Include a row for jobs that could not be read",
            "type": "boolean",
            "description": "Adds a diagnostic row for every job that failed to load, so you can see what was skipped. These rows are never charged. Off by default so the dataset shape stays unchanged.",
            "default": false
          },
          "fetchStructuredData": {
            "title": "Add expiry date and structured location",
            "type": "boolean",
            "description": "Opens a second LinkedIn page per job to add the job's expiry date, its exact posting timestamp, a split city/region/country, the employer's own job reference, required years of experience and education level. Roughly doubles the run time and costs nothing extra per result. Always on in job details mode, where it is the only source of a posting date.",
            "default": false
          },
          "enrichCompany": {
            "title": "Add company profile details",
            "type": "boolean",
            "description": "Opens each hiring company's LinkedIn page to add its description, website, industry, size, employee count, follower count, headquarters, specialties, founding year and type. Fetched once per company, so a search filtered to one company costs a single extra request. On a broad keyword search most jobs have a different employer, so expect the run to take noticeably longer.",
            "default": false
          },
          "detailConcurrency": {
            "title": "Job detail concurrency",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "How many job postings to open at once. Higher is faster but more likely to be rate limited by LinkedIn.",
            "default": 8
          },
          "searchConcurrency": {
            "title": "Search page concurrency",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "How many search result pages to request at once.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}