{
  "openapi": "3.0.1",
  "info": {
    "title": "Linkedin Jobs Scraper",
    "description": "Scrape LinkedIn job listings without API keys, login, or browser. Extract titles, companies, locations, salaries, descriptions, and more from public job search pages. Fast HTTP-based scraping with rich filters.",
    "version": "0.0",
    "x-build-id": "9J8wIJp8G1VfJa9bb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/labrat011~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-labrat011-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/labrat011~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-labrat011-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/labrat011~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-labrat011-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": "🔍 Keywords",
            "type": "string",
            "description": "Job search keywords (e.g. 'python developer', 'data engineer', 'sales manager'). For a single search. Use Keywords List below for batch mode."
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "Location to search (e.g. 'United States', 'London, UK', 'Remote'). For a single search. Use Locations List below for batch mode."
          },
          "keywordsList": {
            "title": "📋 Keywords List (Batch Mode)",
            "type": "array",
            "description": "Run multiple keyword searches in one go. Each keyword is combined with every location in Locations List — e.g. ['python developer', 'data engineer'] x ['New York', 'Remote'] = 4 searches. Overrides the single Keywords field when provided.",
            "items": {
              "type": "string"
            }
          },
          "locationsList": {
            "title": "🗺️ Locations List (Batch Mode)",
            "type": "array",
            "description": "List of locations to search across in batch mode. Combined with every entry in Keywords List. Overrides the single Location field when provided.",
            "items": {
              "type": "string"
            }
          },
          "geoId": {
            "title": "🌐 Geo ID (optional)",
            "type": "string",
            "description": "LinkedIn geographic ID for precise location targeting (e.g. 103644278 for United States). Overrides text location when provided."
          },
          "companyFilter": {
            "title": "🏢 Company Filter",
            "type": "array",
            "description": "Only return jobs from specific companies. Enter company names or LinkedIn URL slugs (e.g. 'google', 'stripe', 'openai'). Leave empty to return jobs from all companies.",
            "items": {
              "type": "string"
            }
          },
          "datePosted": {
            "title": "📅 Date Posted",
            "enum": [
              "",
              "past_24_hours",
              "past_week",
              "past_month"
            ],
            "type": "string",
            "description": "Filter jobs by how recently they were posted.",
            "default": ""
          },
          "jobType": {
            "title": "💼 Job Type",
            "enum": [
              "",
              "F",
              "P",
              "C",
              "T",
              "V",
              "I",
              "O"
            ],
            "type": "string",
            "description": "Filter by employment type. Verified against each job's published \"Employment type\" on its detail page — LinkedIn's search endpoint accepts this filter and then ignores it, so the actor enforces it itself. Turns on Fetch Full Job Details automatically (one extra request per job), and may return fewer rows than Max Results: that number is a ceiling, not a target.",
            "default": ""
          },
          "experienceLevel": {
            "title": "🎓 Experience Level",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6"
            ],
            "type": "string",
            "description": "Filter by seniority level. Verified against each job's published \"Seniority level\" on its detail page — LinkedIn's search endpoint accepts this filter and then ignores it, so the actor enforces it itself. LinkedIn omits seniority on roughly half of all postings; those rows are dropped rather than guessed at, and the run summary reports how many. Turns on Fetch Full Job Details automatically (one extra request per job).",
            "default": ""
          },
          "fetchJobDetails": {
            "title": "📄 Fetch Full Job Details",
            "type": "boolean",
            "description": "Loads each job's detail page to extract: full description (text + HTML), seniority level, employment type, job function, industry, applicant count, and salary when LinkedIn shows it. Adds one request per job — higher cost and runtime, so enable only when you need these fields.",
            "default": false
          },
          "fetchCompanyDetails": {
            "title": "🏢 Fetch Company Details (Employee Count)",
            "type": "boolean",
            "description": "Also opens each company's LinkedIn page to extract the registered employee count (companyEmployeeCount). Requires Fetch Full Job Details. Results are cached per company within the run to minimize extra requests. Note: company website, description, and leadership/founders are not available to guests and are not returned.",
            "default": false
          },
          "titleOnly": {
            "title": "🔤 Match Keywords in Title Only",
            "type": "boolean",
            "description": "When enabled, only returns jobs where the search keyword appears in the job title. By default, LinkedIn searches the full posting (title + description + other fields), which can return jobs where your keyword only appears in the description. Enable this to get results strictly matching your keyword in the title.",
            "default": false
          },
          "maxResults": {
            "title": "📊 Max Results",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Cap on the TOTAL number of jobs the whole run returns, across every search. In batch mode set this to (number of keyword x location combinations) x Max Results Per Search, or the run stops once the total is reached and the remaining combinations never execute. Example: 30 combinations x 50 per search = 1500. Free users are limited to 25 per run.",
            "default": 100
          },
          "maxResultsPerSearch": {
            "title": "🔢 Max Results Per Search (Batch Mode)",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on results from EACH keyword x location combination. This is where LinkedIn's own limit applies: it returns at most 1,000 results per query. Raising this does not raise the run total — Max Results caps that separately, and the lower of the two wins. Example: 3 keywords x 2 locations x 50 per search = up to 300 results, so Max Results must be at least 300.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "🔒 Proxy Configuration",
            "type": "object",
            "description": "Proxy settings. Residential proxies give the best success rate. Without proxies, LinkedIn may block requests."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}