{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper - Salaries, Applicants & Companies",
    "description": "Scrape LinkedIn jobs by keyword, location, company or search URL: salary, applicants, seniority, job type, remote/hybrid, full description and company profile. Filters LinkedIn ignores are checked on every job and never charged. No login. From $0.60 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "mFlmGSWqsgJd7Efke"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/eiv~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-eiv-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/eiv~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-eiv-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/eiv~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-eiv-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": {
          "keywords": {
            "title": "Job titles or keywords",
            "type": "array",
            "description": "What to search for, one search per line: a job title, skill or company name (e.g. \"Data Analyst\", \"React developer\"). Each line is searched separately in every location below. Leave empty to list all jobs in the locations, or all jobs at the companies.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Where to search, one per line: a country, region or city as you would type it on LinkedIn (\"United States\", \"London, United Kingdom\", \"Berlin\"), \"Worldwide\", or a numeric LinkedIn geoId. Every keyword is searched in every location. Leave empty for worldwide.",
            "items": {
              "type": "string"
            }
          },
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Only jobs at these companies: names (\"Google\"), LinkedIn company URLs (linkedin.com/company/openai) or numeric company ids, one per line. With keywords, every search is limited to these companies; without keywords, you get every open job at each company.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "LinkedIn URLs",
            "type": "array",
            "description": "Paste LinkedIn URLs: a job search (linkedin.com/jobs/search?... with your filters applied), a single job (linkedin.com/jobs/view/...) or a company page (all its jobs). Also takes the URL list another Actor outputs.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "postedWithin": {
            "title": "Date posted",
            "enum": [
              "any",
              "hour",
              "day",
              "week",
              "month"
            ],
            "type": "string",
            "description": "Only jobs posted within this window. Applied by LinkedIn itself, so it costs nothing extra.",
            "default": "any"
          },
          "postedWithinHours": {
            "title": "Posted within (hours)",
            "minimum": 1,
            "maximum": 8760,
            "type": "integer",
            "description": "A custom window in hours, e.g. 6 for jobs from the last 6 hours or 72 for the last 3 days. Overrides \"Date posted\" when set. Ideal for scheduled monitoring runs."
          },
          "easyApplyOnly": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only jobs you can apply to on LinkedIn with Easy Apply.",
            "default": false
          },
          "under10Applicants": {
            "title": "Fewer than 10 applicants",
            "type": "boolean",
            "description": "Only jobs that fewer than 10 people have applied to so far.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "recent"
            ],
            "type": "string",
            "description": "Result order. LinkedIn applies it only when it serves its classic search; its AI search, which most public visitors get, keeps its own relevance order."
          },
          "distanceMiles": {
            "title": "Distance (miles)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Search radius around the location. Passed to LinkedIn, which applies it only on its classic search."
          },
          "jobTypes": {
            "title": "Job type",
            "type": "array",
            "description": "Keep only these employment types, checked against each job's own posting (LinkedIn's public search ignores this filter). Jobs that do not match are not charged.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship",
                "volunteer",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            }
          },
          "experienceLevels": {
            "title": "Experience level",
            "type": "array",
            "description": "Keep only these seniority levels as LinkedIn lists them on the posting. Many postings say \"Not applicable\"; select it too to keep those.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entry-level",
                "associate",
                "mid-senior",
                "director",
                "executive",
                "not-applicable"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive",
                "Not applicable"
              ]
            }
          },
          "workplaceTypes": {
            "title": "Remote / hybrid / on-site",
            "type": "array",
            "description": "Keep only jobs whose title, location or description says they are remote, hybrid or on-site. Postings that do not say are dropped when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "on-site"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "industries": {
            "title": "Industries",
            "type": "array",
            "description": "Keep only jobs in these industries, as LinkedIn writes them on the posting (\"Software Development\", \"Hospitals and Health Care\", \"Financial Services\"). Partial words match.",
            "items": {
              "type": "string"
            }
          },
          "excludeStaffingAgencies": {
            "title": "Exclude staffing agencies",
            "type": "boolean",
            "description": "Drop jobs whose posting lists the \"Staffing and Recruiting\" industry, i.e. jobs posted by recruiters for a client.",
            "default": false
          },
          "salaryOnly": {
            "title": "Only jobs with a salary",
            "type": "boolean",
            "description": "Keep only jobs that state pay, either in LinkedIn's salary box or in the description.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum salary (per year)",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only jobs whose top of the stated range, converted to a yearly amount (hourly x 2,080, monthly x 12), reaches this, in the posting's currency. Jobs without a stated salary are dropped."
          },
          "maxApplicants": {
            "title": "Max applicants",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs with at most this many applicants so far, e.g. 50 for less competitive roles."
          },
          "titleIncludes": {
            "title": "Title must include",
            "type": "array",
            "description": "Keep only jobs whose title contains all the words of at least one of these phrases, in any order (\"senior python\" keeps \"Senior Backend Engineer (Python)\"). Checked before any posting is fetched.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Title must not include",
            "type": "array",
            "description": "Drop jobs whose title contains all the words of any of these phrases. Whole words: \"senior\" drops \"Senior Engineer\" but not \"Seniority Analyst\".",
            "items": {
              "type": "string"
            }
          },
          "companyExcludes": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Drop jobs from companies whose name contains any of these, as whole words (\"Amazon\" also drops \"Amazon Web Services\").",
            "items": {
              "type": "string"
            }
          },
          "locationExcludes": {
            "title": "Exclude locations",
            "type": "array",
            "description": "Drop jobs whose location contains any of these, e.g. a city you do not want (\"Laval\").",
            "items": {
              "type": "string"
            }
          },
          "skipJobIds": {
            "title": "Skip job ids",
            "type": "array",
            "description": "Job ids or job URLs to leave out, e.g. jobs you already have.",
            "items": {
              "type": "string"
            }
          },
          "companyEmployeesMin": {
            "title": "Company size, at least",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only jobs at companies with at least this many employees on LinkedIn. Turns on company details (one extra request per company). Companies that show no size are kept."
          },
          "companyEmployeesMax": {
            "title": "Company size, at most",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only jobs at companies with at most this many employees on LinkedIn, e.g. 200 for startups. Turns on company details."
          },
          "companyFollowersMin": {
            "title": "Company followers, at least",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only jobs at companies with at least this many LinkedIn followers. Turns on company details."
          },
          "companyFollowersMax": {
            "title": "Company followers, at most",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only jobs at companies with at most this many LinkedIn followers. Turns on company details."
          },
          "companyTypes": {
            "title": "Company type",
            "type": "array",
            "description": "Keep only jobs at these kinds of organisation, as LinkedIn labels them. Turns on company details.",
            "items": {
              "type": "string",
              "enum": [
                "Public Company",
                "Privately Held",
                "Nonprofit",
                "Government Agency",
                "Educational",
                "Partnership",
                "Self-Owned",
                "Self-Employed"
              ],
              "enumTitles": [
                "Public company",
                "Privately held",
                "Nonprofit",
                "Government agency",
                "Educational",
                "Partnership",
                "Self-owned",
                "Self-employed"
              ]
            }
          },
          "companyFoundedAfter": {
            "title": "Company founded in or after",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Keep only jobs at companies founded in or after this year, e.g. 2018 for young companies. Turns on company details."
          },
          "companyFoundedBefore": {
            "title": "Company founded in or before",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Keep only jobs at companies founded in or before this year. Turns on company details."
          },
          "includeDetails": {
            "title": "Include job details",
            "type": "boolean",
            "description": "Fetch each job's full posting: description, employment type, experience level, industry, applicants, salary, apply type and benefits. Turn off for a fast list (title, company, location, date) at about one request per 10 jobs.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Include description HTML",
            "type": "boolean",
            "description": "Also return the description as HTML (bullets, bold, links), next to the plain-text description. Roughly doubles the size of each row.",
            "default": false
          },
          "includeCompanyDetails": {
            "title": "Include company details",
            "type": "boolean",
            "description": "Add the hiring company's profile to each job: website, industry, size, employee and follower counts, headquarters address, type, founding year, specialties, description and recent posts. One extra request per company, reused for all its jobs.",
            "default": false
          },
          "matchSkills": {
            "title": "Match my skills",
            "type": "array",
            "description": "Your skills, one per line, with optional aliases after commas (\"JavaScript, JS\"). Each job then lists the skills its title and description mention, the ones it does not, and a match score from 0 to 100.",
            "items": {
              "type": "string"
            }
          },
          "onlyNewJobs": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Skip jobs that earlier runs with the same history name already returned, so a scheduled run returns, and charges for, new postings only. The job ids are kept in a key-value store on your account.",
            "default": false
          },
          "historyKey": {
            "title": "History name",
            "type": "string",
            "description": "Keeps separate \"Only new jobs\" histories for different monitors, e.g. \"data-jobs-berlin\". Letters, digits and dashes.",
            "default": "default"
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Stop after this many jobs in total. You pay per job, so this is also your cost cap for the run.",
            "default": 100
          },
          "maxItemsPerSearch": {
            "title": "Max results per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stop after this many jobs from any single search (one keyword in one location). LinkedIn shows at most about 1,000 per search; use \"Split by city\" for more.",
            "default": 1000
          },
          "splitByCity": {
            "title": "Split by city",
            "type": "boolean",
            "description": "Get past LinkedIn's limit of about 1,000 jobs per search: a country-wide search also runs in the country's main cities (US, UK, Canada, Germany, France, India, Australia and 10 more). Duplicates are dropped and not charged.",
            "default": false
          },
          "addFiltersToKeywords": {
            "title": "Add filters to keywords",
            "type": "boolean",
            "description": "LinkedIn's AI search ignores the job type, experience and remote filters but understands words, so \"Internship\" or \"Remote\" is added to the keywords to get more matching jobs per page. Results are still checked on every posting.",
            "default": true
          },
          "extraSearchParams": {
            "title": "Extra search parameters",
            "type": "array",
            "description": "Advanced: more query parameters for LinkedIn's job search, as key/value pairs (e.g. f_JIYN = true). Sent as they are.",
            "items": {
              "type": "object",
              "required": [
                "key",
                "value"
              ],
              "properties": {
                "key": {
                  "type": "string",
                  "title": "Key"
                },
                "value": {
                  "type": "string",
                  "title": "Value"
                }
              }
            }
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify datacenter proxy by default. If LinkedIn blocks or rate-limits a run, switch to the RESIDENTIAL group.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many requests to LinkedIn run at the same time (and how many searches run in parallel). Lower it if you see rate-limit warnings.",
            "default": 8
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "How long to wait for one response before giving up on it.",
            "default": 30
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Retries for blocked, rate-limited or failed requests, each from a new IP. Timeouts are not retried.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}