{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper - Jobs by Keyword and Location",
    "description": "Scrape public LinkedIn jobs by keyword, location, search link, job URL or ID. Each row has the title, company, location, posting date and job URL, plus the description, seniority and company details when you want them. Filter by date, company, title words or distance. $0.80 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "oRpFurIVdVJ839Lkd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dami_studio~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dami_studio-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/dami_studio~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dami_studio-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/dami_studio~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dami_studio-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": {
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Job titles or keywords. Every query is searched against every location. Leave empty when using direct job URLs or IDs.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, regions, or countries. Every location is combined with every query. Leave empty for an unrestricted location search.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Country filter",
            "type": "string",
            "description": "Optional country name appended to each search location, for example Canada or United States. It is also used alone when no location is supplied."
          },
          "jobUrls": {
            "title": "Direct LinkedIn job URLs",
            "type": "array",
            "description": "Public LinkedIn /jobs/view/ URLs to fetch directly. URLs and IDs are deduplicated with search results.",
            "items": {
              "type": "string"
            }
          },
          "jobIds": {
            "title": "Direct LinkedIn job IDs",
            "type": "array",
            "description": "Numeric LinkedIn job IDs to fetch directly.",
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "LinkedIn search links",
            "type": "array",
            "description": "Optional. Search on linkedin.com/jobs/search while signed out, set the filters there, and paste the address, one per line. Each link runs with its own keywords, place, date posted, companies, Easy Apply, under 10 applicants and distance; its job type and experience are checked on each job's page. A link with workplace type or newest first is refused, because a public search ignores them.",
            "items": {
              "type": "string"
            }
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "past24h",
              "pastWeek",
              "pastMonth"
            ],
            "type": "string",
            "description": "LinkedIn's server-side posting-age filter.",
            "default": "any"
          },
          "easyApply": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only jobs you can apply to on LinkedIn itself, without being sent to the company's own site.",
            "default": false
          },
          "under10Applicants": {
            "title": "Under 10 applicants",
            "type": "boolean",
            "description": "Only jobs few people have applied to yet. This is LinkedIn's own filter.",
            "default": false
          },
          "companyIds": {
            "title": "Companies",
            "maxItems": 50,
            "type": "array",
            "description": "Only jobs from these companies, one LinkedIn company id per line, such as 1441 for Google. To find an id, filter jobs by the company on LinkedIn and copy the number after f_C= in the address bar; pasting that whole address works too. A company name won't work.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Optional. Company names as LinkedIn writes them, such as Google or Goldman Sachs, one per line. Each is looked up on LinkedIn and turned into its company id before the search. A name that matches no company exactly stops the run with a free row, so it never turns into a search of every company.",
            "items": {
              "type": "string"
            }
          },
          "distance": {
            "title": "Distance from location",
            "enum": [
              "any",
              "5",
              "10",
              "25",
              "50",
              "100"
            ],
            "type": "string",
            "description": "How far from each location to look, in miles. Needs at least one location.",
            "default": "any"
          },
          "jobTypes": {
            "title": "Job types",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. Checked on each job's own page, because LinkedIn ignores this filter on a public search: only jobs whose page shows one of these are delivered and charged. Each check reads the job page, so a rare type makes a slower run.",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "partTime",
                "contract",
                "temporary",
                "internship",
                "volunteer",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            }
          },
          "experienceLevels": {
            "title": "Experience levels",
            "uniqueItems": true,
            "type": "array",
            "description": "Optional. Checked on each job's own page, like job types. Many postings print Not Applicable, which matches none of these.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entry",
                "associate",
                "midSenior",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive"
              ]
            }
          },
          "industries": {
            "title": "Industries",
            "type": "array",
            "description": "Optional. LinkedIn industry names, such as Software Development or Hospitals and Health Care, checked on each job's own page. A job matches when any of its industries is one of these.",
            "items": {
              "type": "string"
            }
          },
          "titleIncludes": {
            "title": "Title must contain",
            "type": "array",
            "description": "Optional. Keep a job only when its title holds every word of at least one of these phrases, in any order, ignoring case. \"software engineer\" keeps \"Engineer, Software\". Checked on the search results themselves, so it costs nothing extra; left-out jobs are not charged.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Title must not contain",
            "type": "array",
            "description": "Optional. Leave out a job whose title holds every word of any of these phrases, such as intern or senior manager. Left-out jobs are not charged.",
            "items": {
              "type": "string"
            }
          },
          "skipJobIds": {
            "title": "Job ids to skip",
            "type": "array",
            "description": "Optional. Job ids or job links you already have, one per line, for example from yesterday's run. They are left out and not charged, and the search carries on past them.",
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Fetch each job detail page for description, seniority, employment type, job function, industries, and applicant count. Direct URLs and IDs always fetch details. Turning this off makes searches faster and cheaper.",
            "default": false
          },
          "includeCompanyDetails": {
            "title": "Add company details",
            "type": "boolean",
            "description": "Off by default. Adds the company's id, industry, size, headquarters, type and website from its public LinkedIn page to each job. One page is read per company, however many of its jobs come up. Same price per job.",
            "default": false
          },
          "includeHiringContact": {
            "title": "Add the job poster",
            "type": "boolean",
            "description": "Off by default. When the public job page shows who posted the job, adds their name, headline, profile link and photo. Reads each job's page. Personal data: keep it only if you have a reason to, and mind the rules on contacting people.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum unique real job rows across all searches, URLs, and IDs.",
            "default": 100
          },
          "maxPagesPerSearch": {
            "title": "Maximum pages per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Safety limit for each query/location combination. LinkedIn currently returns about 10 jobs per page.",
            "default": 10
          },
          "splitByCity": {
            "title": "Split by city",
            "type": "boolean",
            "description": "Off by default. LinkedIn lists about 1,000 jobs for one search. With this on, a location that is a whole country (United States, Canada, United Kingdom, Germany, France, Netherlands, Spain, Italy, Australia, India, Ireland, Switzerland, Sweden, Mexico or Brazil) is searched city by city instead, its 8 to 50 largest cities, so a broad search reaches further. A job listed in two cities is delivered and charged once.",
            "default": false
          },
          "countryCode": {
            "title": "Proxy country",
            "pattern": "^[A-Za-z]{2}$",
            "type": "string",
            "description": "Optional two-letter country code, for example US, CA, GB or DE."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional. Leave this alone unless you need the run to go out through a particular network. Your own proxy servers are used exactly as given.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxProxyRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry one failed request before giving up on it.",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 60,
            "type": "integer",
            "description": "Timeout for each page request.",
            "default": 20
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}