{
  "openapi": "3.0.1",
  "info": {
    "title": "🔥 LinkedIn Jobs Scraper ⚡",
    "description": "Scrape LinkedIn jobs by keyword, location, remote or hybrid, experience level and more. Choose how fresh you want them, down to the last few minutes, so a scheduled run brings back only what is genuinely new. Full description, applicant count and company details included.",
    "version": "0.1",
    "x-build-id": "HSmdutfxJ8h9XFau7"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/digital_user~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-digital_user-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/digital_user~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-digital_user-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/digital_user~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-digital_user-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, e.g. \"backend developer\". Add several and each is searched separately, then crossed with every location below.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Where to search, e.g. \"Berlin\", \"New York\", \"United States\". Every keyword is crossed with every location, so 3 titles and 2 cities is 6 searches in one run.",
            "items": {
              "type": "string"
            }
          },
          "geoId": {
            "title": "Geo ID (optional)",
            "type": "string",
            "description": "LinkedIn's own id for a place. To find one: open LinkedIn Jobs, type the location into the location box and pick it from the suggestions, then look at the address bar - it now reads geoId=102571732. Copy that number. Use it when a typed location keeps matching the wrong place, or paste the whole URL into Search URLs below and skip this."
          },
          "distance": {
            "title": "Distance in miles (optional)",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How far around the Geo ID to search. Needs a Geo ID - LinkedIn ignores a radius around a typed location."
          },
          "newerThanMinutes": {
            "title": "Only jobs newer than (minutes)",
            "minimum": 1,
            "maximum": 43200,
            "type": "integer",
            "description": "The reason this Actor exists. LinkedIn's own filter stops at 24 hours; this one takes minutes, so 15 returns only what went up in the last quarter of an hour. Leave empty for jobs of any age. Set it to match how often you run this and every run brings only what is new."
          },
          "workplaceTypes": {
            "title": "Remote, hybrid or on-site (optional)",
            "type": "array",
            "description": "Keep only jobs with these working arrangements. Pick more than one to get them together. Works on its own or alongside a keyword, and returns up to 60 jobs per search rather than the full limit below.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "on-site"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "maxApplicants": {
            "title": "Maximum applicants (optional)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Keep only jobs with at most this many applicants - the single most useful filter if you are applying rather than analysing. LinkedIn reports these in buckets rather than exact counts (\"Be among the first 25\", \"Over 200\"), so 25 is the natural threshold, and asking for 25 or fewer also narrows the search at LinkedIn before anything is downloaded. Read from each posting, so it turns job details on."
          },
          "experienceLevels": {
            "title": "Experience level (optional)",
            "type": "array",
            "description": "Remove jobs whose stated level does not match. LinkedIn leaves this field to the employer and most leave it blank, which shows as \"Not Applicable\" — those postings are kept, because a blank field is not a mismatch. Only postings that state a different level are removed. Needs job details.",
            "items": {
              "type": "string",
              "enum": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive"
              ]
            }
          },
          "contractTypes": {
            "title": "Employment type (optional)",
            "type": "array",
            "description": "Remove jobs whose stated employment type does not match. Postings that do not state one are kept, the same way as the experience level above. Needs job details.",
            "items": {
              "type": "string",
              "enum": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            }
          },
          "easyApplyOnly": {
            "title": "Easy Apply only (optional)",
            "type": "boolean",
            "description": "Only jobs you can apply to without leaving LinkedIn.",
            "default": false
          },
          "companyIds": {
            "title": "Company IDs (optional)",
            "type": "array",
            "description": "Restrict the search to specific companies by their numeric LinkedIn id. The id is in the company page's source, or in any job URL from that company.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "LinkedIn search URLs (optional)",
            "type": "array",
            "description": "Run the search you want on LinkedIn, copy the address bar, and paste it here. Each URL is its own search and keeps the filters and date range it carries. Anything a URL does not state is taken from the fields above.",
            "items": {
              "type": "string"
            }
          },
          "getJobDetails": {
            "title": "Get job details (optional)",
            "type": "boolean",
            "description": "Adds the full description, applicant count, seniority, employment type and apply type. Costs one extra request per job. Turned on automatically when a filter above needs it. Leave it off and those columns come back empty.",
            "default": true
          },
          "getCompanyDetails": {
            "title": "Get company details (optional)",
            "type": "boolean",
            "description": "Adds industry, size, headquarters, website, follower count and the rest of the company columns. Fetched once per company, not once per job. Leave it off and every company column except the name and the link comes back empty.",
            "default": false
          },
          "maxItemsPerSearch": {
            "title": "Maximum results per search (optional)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Upper bound on how many jobs each keyword-and-location pair returns. With 6 searches and 50 here, a run returns at most 300 jobs - which is also what bounds the bill, since you pay per job. LinkedIn caps a single search at 1,000.",
            "default": 100
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "newest",
              "oldest",
              "fewestApplicants",
              "mostApplicants"
            ],
            "type": "string",
            "description": "How the results are ordered in your dataset. LinkedIn's own order is relevance, not date, so this decides what you see first. Sorting by applicants turns job details on.",
            "default": "newest"
          },
          "collapseDuplicates": {
            "title": "Collapse duplicate postings (optional)",
            "type": "boolean",
            "description": "Employers often post the same opening in several cities. Turn this on to keep one row per company and job title, with duplicateCount saying how many listings it stood for. Worth it when splitting by city.",
            "default": false
          },
          "splitByCity": {
            "title": "Split the search by city (optional)",
            "type": "boolean",
            "description": "LinkedIn returns at most 1,000 jobs for any one search. Turn this on to run one search per major city instead, which multiplies how much you can collect. It replaces the locations above, and it takes minutes rather than seconds.",
            "default": false
          },
          "splitCountry": {
            "title": "Country to split by",
            "enum": [
              "us",
              "ca",
              "mx",
              "gb",
              "de",
              "fr"
            ],
            "type": "string",
            "description": "Whose cities to search. Only used when splitting by city is on."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}