{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Job Finder - Search & Export Jobs",
    "description": "Find LinkedIn jobs in bulk and export them to Excel, CSV or JSON. Search by job title, location, date posted, remote/hybrid, experience level and more. Get company, location, salary, applicant count, full description and a direct link to every posting.",
    "version": "0.1",
    "x-build-id": "SM4aHasVFHehCRr2L"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/extractkit~linkedin-job-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-extractkit-linkedin-job-finder",
        "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/extractkit~linkedin-job-finder/runs": {
      "post": {
        "operationId": "runs-sync-extractkit-linkedin-job-finder",
        "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/extractkit~linkedin-job-finder/run-sync": {
      "post": {
        "operationId": "run-sync-extractkit-linkedin-job-finder",
        "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": "What jobs are you looking for?",
            "type": "array",
            "description": "Job titles, skills or keywords — the same thing you'd type into LinkedIn's search box. Each one is searched separately, so \"product manager, product designer\" gives you both.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Where?",
            "type": "array",
            "description": "A city, state or country, written the way LinkedIn writes it: \"United States\", \"Berlin, Germany\", \"Greater London\". Add several and every job title is searched in every location.",
            "items": {
              "type": "string"
            }
          },
          "searchUrls": {
            "title": "Already built a search on LinkedIn? Paste the link",
            "type": "array",
            "description": "Search on linkedin.com/jobs, set your filters there, then copy the address bar and paste it here. Your filters come along with it. Runs in addition to anything above.",
            "items": {
              "type": "string"
            }
          },
          "datePosted": {
            "title": "How recent?",
            "enum": [
              "any",
              "past-24-hours",
              "past-week",
              "past-month"
            ],
            "type": "string",
            "description": "Fresh postings get far fewer applicants, so narrowing this is usually worth it.",
            "default": "any"
          },
          "jobTypes": {
            "title": "Full-time, contract, internship…",
            "type": "array",
            "description": "Leave empty for all. Checked on each job's own page, so a run that uses this reads every posting and takes longer — you are still only charged for the ones that match.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship",
                "volunteer",
                "other"
              ]
            }
          },
          "experienceLevels": {
            "title": "Experience level",
            "type": "array",
            "description": "Leave empty for all levels. Checked on each job's own page, like the job type above.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entry-level",
                "associate",
                "mid-senior",
                "director",
                "executive"
              ]
            }
          },
          "easyApplyOnly": {
            "title": "Easy Apply jobs only",
            "type": "boolean",
            "description": "Only jobs you can apply to without leaving LinkedIn. Cuts the result count sharply — useful when you're applying, less so when you're researching a market.",
            "default": false
          },
          "maxJobsTotal": {
            "title": "How many jobs do you want?",
            "minimum": 0,
            "type": "integer",
            "description": "The run stops here. Set 0 for everything the search can reach — pair that with a spend limit rather than leaving both open.",
            "default": 200
          },
          "scrapeDetails": {
            "title": "Include the full job description",
            "type": "boolean",
            "description": "Adds the description, seniority, job function, industry and applicant count. Turn it off if you only need a list of titles, companies and links — that runs faster.",
            "default": true
          },
          "titleIncludes": {
            "title": "Job title must include",
            "type": "array",
            "description": "Keep only jobs whose title contains one of these words. Useful when LinkedIn's search is too generous — searching \"engineer\" returns sales engineers too.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Job title must NOT include",
            "type": "array",
            "description": "Drop jobs whose title contains any of these.",
            "items": {
              "type": "string"
            }
          },
          "companyExcludes": {
            "title": "Skip these companies",
            "type": "array",
            "description": "Most people use this to filter out staffing and recruiting agencies that repost the same roles.",
            "items": {
              "type": "string"
            }
          },
          "locationExcludes": {
            "title": "Skip these locations",
            "type": "array",
            "description": "Drop jobs whose location mentions any of these — handy when a country-wide search keeps returning one city you can't relocate to.",
            "items": {
              "type": "string"
            }
          },
          "descriptionIncludes": {
            "title": "Description must mention",
            "type": "array",
            "description": "Keep only jobs whose description mentions one of these — a specific tool, framework or benefit. Needs the full description, so it turns that on automatically.",
            "items": {
              "type": "string"
            }
          },
          "descriptionExcludes": {
            "title": "Description must NOT mention",
            "type": "array",
            "description": "Drop jobs whose description mentions any of these. Common uses: \"security clearance\", \"unpaid\", a language you don't speak.",
            "items": {
              "type": "string"
            }
          },
          "maxApplicants": {
            "title": "At most this many applicants",
            "minimum": 1,
            "type": "integer",
            "description": "Only jobs that haven't been flooded yet. LinkedIn reports this in bands (\"first 25 applicants\", \"over 200\"), so this matches against the band. Jobs where LinkedIn shows no applicant count at all are left out."
          },
          "postedAfter": {
            "title": "Posted after this date",
            "type": "string",
            "description": "For when \"past week\" is too broad and \"past 24 hours\" is too narrow."
          },
          "requireSalary": {
            "title": "Only jobs that show a salary",
            "type": "boolean",
            "description": "LinkedIn has no salary field, so this reads the pay range out of the description text. It only works when the employer actually wrote one — many don't.",
            "default": false
          },
          "companyIds": {
            "title": "Only these companies",
            "type": "array",
            "description": "LinkedIn's numeric company IDs. Filter by company on linkedin.com/jobs and copy the number from the f_C part of the address. Company names won't work here — LinkedIn ignores them and would quietly return every company, so this Actor rejects them instead.",
            "items": {
              "type": "string"
            }
          },
          "geoId": {
            "title": "Location ID",
            "type": "string",
            "description": "LinkedIn's numeric location ID, from the geoId part of a search address. Use it when a place name is ambiguous — there are a lot of Springfields."
          },
          "maxJobsPerSearch": {
            "title": "Max jobs per search",
            "minimum": 0,
            "type": "integer",
            "description": "A cap for each job-title/location pair, so one broad term can't use up the whole run. 0 means no per-search cap.",
            "default": 0
          },
          "concurrency": {
            "title": "Speed",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many job pages to load at once. Leave at 2 — going faster gets requests refused, and a failed run costs more than a slow one.",
            "default": 2
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}