{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper By Multiple Keywords & Locations",
    "description": "Collect job listings from LinkedIn with full metadata. Great for tracking industry demand, monitoring hiring trends, and building recruitment intelligence tools.",
    "version": "0.1",
    "x-build-id": "gnL9Unj3Q1jjVX4hg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-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/api-empire~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-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/api-empire~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-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": {
          "jobTitles": {
            "title": "💼 Job titles to search",
            "type": "array",
            "description": "One job title per line — each is searched against every location below.\n\nExamples:\n• Software Engineer\n• Data Analyst\n• Product Manager\n\n📋 Bulk paste supported. Duplicates and blank lines are ignored.",
            "items": {
              "type": "string"
            }
          },
          "searchLocations": {
            "title": "🗺️ Locations to search",
            "type": "array",
            "description": "One location per line — each is paired with every job title above.\n\nExamples:\n• Austin, Texas, United States\n• Chicago, Illinois, United States\n• London, England, United Kingdom\n\n🎯 City-level values work best with the search radius below; country-level values ignore it in practice.",
            "items": {
              "type": "string"
            }
          },
          "searchRadiusMiles": {
            "title": "📏 Search radius (miles)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How far around each location to look, 1–100 miles. LinkedIn genuinely honours this — verified: the same query at 10 miles and at 100 miles returned result sets that shared 0 of 20 jobs, while repeating the identical query twice shared 10 of 11.\n\nLeave at 0 to let LinkedIn choose its own default radius.",
            "default": 0
          },
          "maxJobsPerSearch": {
            "title": "🎯 Jobs per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Budget for EACH title × location pair, not for the whole run. With 3 titles × 2 cities and a budget of 50, the run collects up to 300 jobs before cross-search duplicates are removed.\n\n⚠️ LinkedIn's public endpoint stops paginating near 1,000 results per individual search, so 1,000 is the real per-search ceiling.",
            "default": 20
          },
          "titleIncludes": {
            "title": "✅ Title must contain (any of)",
            "type": "array",
            "description": "Keep only jobs whose title contains at least one of these words.\n\nExample: `engineer`, `developer` keeps \"Software Engineer\" and \"Backend Developer\" but drops \"Marketing Lead\".\n\nLeave empty to keep every title.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "🚫 Title must not contain (any of)",
            "type": "array",
            "description": "Drop any job whose title contains one of these words. Exclusions win over the include list above.\n\nExample: `senior`, `principal`, `manager` strips seniority you are not hiring for.\n\nLeave empty to exclude nothing.",
            "items": {
              "type": "string"
            }
          },
          "companyInput": {
            "title": "🏢 Companies to scrape",
            "type": "array",
            "description": "Which employers do you want jobs from? Mix and match:\n• Name — e.g. Google\n• URL — e.g. https://www.linkedin.com/company/google/\n• ID — e.g. 1441\n\n📋 Bulk list supported. Leave empty to run the title × location matrix instead.",
            "items": {
              "type": "string"
            }
          },
          "publishedAt": {
            "title": "🕐 Date posted",
            "enum": [
              "",
              "r86400",
              "r604800",
              "r2592000"
            ],
            "type": "string",
            "description": "Only return jobs posted within this time window. This filter IS honored by LinkedIn. Choose Any time to disable it.",
            "default": ""
          },
          "workType": {
            "title": "🏠 On-site / Remote",
            "enum": [
              "",
              "1",
              "2",
              "3"
            ],
            "type": "string",
            "description": "Restrict by work arrangement. Choose Any to skip this filter.",
            "default": ""
          },
          "contractType": {
            "title": "📋 Job type",
            "enum": [
              "",
              "F",
              "P",
              "C",
              "T",
              "I",
              "V"
            ],
            "type": "string",
            "description": "Restrict by employment type. Choose Any to skip this filter.",
            "default": ""
          },
          "experienceLevel": {
            "title": "📈 Experience level",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6"
            ],
            "type": "string",
            "description": "Restrict by required seniority. Choose Any to skip this filter.",
            "default": ""
          },
          "geoId": {
            "title": "🌐 Geographic region (geoId)",
            "type": "string",
            "description": "Optional LinkedIn location geoId sent with every search (numeric ID).\n\n⚠️ A geoId applies to ALL locations in the matrix, so it is usually best left empty when you are searching several cities — the location text alone is more precise per pair.\n\n🏙️ To get a custom geoId, run the search on LinkedIn and copy the number from the URL bar. Custom values are supported.",
            "default": ""
          },
          "keywords": {
            "title": "🔎 Job keywords (single)",
            "type": "string",
            "description": "One keyword string. Used only when the Job titles list above is empty.",
            "default": "Software Engineer"
          },
          "location": {
            "title": "📍 Location (single)",
            "type": "string",
            "description": "One location string. Used only when the Locations list above is empty.",
            "default": "United States"
          },
          "maxJobs": {
            "title": "🔢 Maximum jobs (legacy single search)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Total cap for the legacy single search and for company runs (1–1,000). When the title × location matrix is active, the per-search budget above governs instead and this value is not used as a global cap.",
            "default": 20
          },
          "sortOrder": {
            "title": "📊 Sort order (not honored by LinkedIn)",
            "enum": [
              "",
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "⚠️ Kept for backward compatibility only. LinkedIn's public job endpoint IGNORES sorting — verified: the result sets for Default, Most relevant and Most recent are identical. Any value is accepted and the run logs a notice; results come back in LinkedIn's own order. Use the Date posted filter to restrict to recent jobs instead.",
            "default": ""
          },
          "proxyConfiguration": {
            "title": "🛡️🔌 Apify Proxy controls",
            "type": "object",
            "description": "Enable Apify Proxy and pick proxy groups if LinkedIn blocks or throttles you. Leave off to run direct."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}