{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper",
    "description": "Reliable LinkedIn jobs data API for production applications. Typed, structured postings -- descriptions, salaries, applicant counts and the job poster -- by search or by URL. No login, no cookies, no account of yours involved.",
    "version": "0.1",
    "x-build-id": "UYfk3aFOklvcBMzik"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zyra~linkedin-jobs-actor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zyra-linkedin-jobs-actor",
        "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/zyra~linkedin-jobs-actor/runs": {
      "post": {
        "operationId": "runs-sync-zyra-linkedin-jobs-actor",
        "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/zyra~linkedin-jobs-actor/run-sync": {
      "post": {
        "operationId": "run-sync-zyra-linkedin-jobs-actor",
        "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": {
          "searchUrl": {
            "title": "LinkedIn search URL",
            "type": "string",
            "description": "Paste a LinkedIn jobs search URL and its filters are read back out of it. Any field you also set below wins over what the URL carried."
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Free text, exactly as you would type it into LinkedIn's search box."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "A place name, e.g. 'Berlin' or 'United Kingdom'. Resolved to LinkedIn's own geo id where the name is unambiguous; the run summary reports which place was chosen."
          },
          "geoId": {
            "title": "Geo id",
            "type": "string",
            "description": "LinkedIn's numeric id for a place. More precise than the name, and it skips the lookup: set it when you already know exactly which 'London' you mean."
          },
          "distance": {
            "title": "Radius (miles)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How far around the location to search. LinkedIn ignores it for a remote search."
          },
          "experienceLevels": {
            "title": "Experience level",
            "type": "array",
            "description": "Any number of levels. Leaving it empty means every level.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entry_level",
                "associate",
                "mid_senior",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive"
              ]
            }
          },
          "jobTypes": {
            "title": "Job type",
            "type": "array",
            "description": "Any number of types. Leaving it empty means every type.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "temporary",
                "volunteer",
                "internship",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Volunteer",
                "Internship",
                "Other"
              ]
            }
          },
          "workplaceTypes": {
            "title": "Workplace type",
            "type": "array",
            "description": "On-site, remote or hybrid. Leaving it empty means all three.",
            "items": {
              "type": "string",
              "enum": [
                "on_site",
                "remote",
                "hybrid"
              ],
              "enumTitles": [
                "On-site",
                "Remote",
                "Hybrid"
              ]
            }
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any_time",
              "past_month",
              "past_week",
              "past_24_hours"
            ],
            "type": "string",
            "description": "How recent a posting must be."
          },
          "salary": {
            "title": "Minimum salary",
            "enum": [
              "40k",
              "60k",
              "80k",
              "100k",
              "120k",
              "140k",
              "160k",
              "180k",
              "200k"
            ],
            "type": "string",
            "description": "USD floor. LinkedIn only applies this to US searches; elsewhere it narrows nothing."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Relevance is LinkedIn's default. Sort by date when you are polling for what is new."
          },
          "easyApply": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only postings that are applied to on LinkedIn itself.",
            "default": false
          },
          "companyIds": {
            "title": "Company ids",
            "type": "array",
            "description": "Numeric LinkedIn company ids, one per line. Restricts the search to those employers.",
            "items": {
              "type": "string"
            }
          },
          "jobUrls": {
            "title": "Job URLs or ids",
            "type": "array",
            "description": "Fetch these exact postings instead of searching. A posting URL, a share link, or the bare numeric id -- all three work. When this is set, every search field above is ignored.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many postings to return. A thousand is the ceiling, because that is roughly where LinkedIn's guest search stops producing new results, whatever is asked for.",
            "default": 100
          },
          "fetchDetails": {
            "title": "Fetch full postings",
            "type": "boolean",
            "description": "Open each posting's page for its description, seniority, employment type, job function, industries and applicant count. One extra request per posting -- slower, and the reason most people run this at all.",
            "default": true
          },
          "withRecruiter": {
            "title": "Include who posted the job",
            "type": "boolean",
            "description": "Also return the name, profile URL and headline of the person the posting invites you to message. Needs 'Fetch full postings'. Roughly half of postings name nobody, and those come back empty rather than guessed. Slower: it reads each posting's own page instead of the lighter summary.",
            "default": false
          },
          "includeDescriptionHtml": {
            "title": "Keep the description's HTML",
            "type": "boolean",
            "description": "Also store the description's original markup alongside the plain text. It is the largest field on a row; leave it off unless you need the formatting.",
            "default": false
          },
          "skipJobIds": {
            "title": "Skip these job ids",
            "type": "array",
            "description": "Postings you already have, one id or URL per line. They are dropped before anything is fetched for them, which is what makes a repeated run cheap.",
            "items": {
              "type": "string"
            }
          },
          "titleInclude": {
            "title": "Title must contain",
            "type": "array",
            "description": "Keep only postings whose title contains at least one of these, case insensitive. Leave empty to keep every title.",
            "items": {
              "type": "string"
            }
          },
          "titleExclude": {
            "title": "Title must not contain",
            "type": "array",
            "description": "Drop postings whose title contains any of these, case insensitive. Applied after the include list.",
            "items": {
              "type": "string"
            }
          },
          "concurrency": {
            "title": "Parallel detail requests",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many postings to fetch at once. Raise it for speed, lower it if postings start coming back without their descriptions.",
            "default": 5
          },
          "maxRetries": {
            "title": "Retries per request",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "How many times to try again when a request comes back blocked or rate limited.",
            "default": 2
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 10,
            "maximum": 600,
            "type": "integer",
            "description": "A search scrapes LinkedIn live before it answers, so this needs to be generous. Two minutes by default.",
            "default": 120
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}