{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper — From $0.25/1k · No Cookies, No Login",
    "description": "LinkedIn Jobs scraper — no login or cookies. Search by keyword, URL, or job IDs with expiry monitoring. Free title/employer filters, 1K-cap bypass, recruiter contacts, optional company enrichment. Salary, description, apply URL per job. From $0.25/1k. JSON or CSV.",
    "version": "0.0",
    "x-build-id": "Zzuir7genI9fRqjdb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Paste any mix of LinkedIn Jobs URLs. Examples: search URL <code>https://www.linkedin.com/jobs/search?keywords=…</code>, single-job URL <code>https://www.linkedin.com/jobs/view/4410745146/</code>, or slug-with-id form <code>https://www.linkedin.com/jobs/view/mobile-engineer-at-jll-4410745146</code>. Search URLs extract filters (keywords, location, geoId, f_PP, workplace type, experience, contract type) from the URL itself. View URLs go straight to the detail page — no search step.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "jobIds": {
            "title": "Job IDs or job URLs (exact listings)",
            "type": "array",
            "description": "Scrape (or re-verify) exact LinkedIn job listings — one entry per line. Accepts raw job IDs (<code>4410745146</code>), view URLs (<code>https://www.linkedin.com/jobs/view/4410745146/</code>), or any LinkedIn URL carrying <code>currentJobId=…</code>. Each entry goes straight to the job detail page — no search phase. Re-run the same list on a schedule to monitor listings: every row includes <code>isExpired</code>, <code>verifiedAt</code>, and <code>verificationStatus</code> (<code>active</code> / <code>closed</code> / <code>removed</code>), so dead listings are flagged instead of silently missing.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords or job titles",
            "type": "array",
            "description": "Keywords or job titles to search for in the job listings.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Broad location",
            "type": "string",
            "description": "Broad LinkedIn search location, such as a country or region. Example: `United States`. For city-level filtering, also use `placeIds` or paste a full LinkedIn search URL above.",
            "default": "United States"
          },
          "locations": {
            "title": "Locations (multiple)",
            "type": "array",
            "description": "Search several locations in one run. Each location is combined with every keyword above. Example: <code>United States</code>, <code>Germany</code>, <code>Remote</code>. When set, this takes precedence over the single Broad location field. Ignored when Start URLs are provided.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "geoId": {
            "title": "Geo ID",
            "type": "string",
            "description": "Optional LinkedIn geoId for the broad location. Example: `103644278` for United States. This usually works together with the broad location field above."
          },
          "placeIds": {
            "title": "Place filter IDs",
            "type": "array",
            "description": "Optional LinkedIn place filter IDs (`f_PP`) for city-level or sub-location filtering. Example: `104555257` for Santiago. Use one or more IDs copied from a LinkedIn Jobs URL.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "timeRange": {
            "title": "Time range",
            "enum": [
              "any time",
              "r86400",
              "r604800",
              "r2592000"
            ],
            "type": "string",
            "description": "Time range to search for in the job listings.",
            "default": "any time"
          },
          "jobTypes": {
            "title": "Job Types",
            "type": "array",
            "description": "Select the types of work arrangements to include in the search.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3"
              ],
              "enumTitles": [
                "On-site",
                "Remote",
                "Hybrid"
              ]
            },
            "default": []
          },
          "remote": {
            "title": "Remote / workplace",
            "type": "array",
            "description": "Select the workplace type filters to include in the search.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3"
              ],
              "enumTitles": [
                "On-site",
                "Remote",
                "Hybrid"
              ]
            },
            "default": []
          },
          "experienceLevels": {
            "title": "Experience Levels",
            "type": "array",
            "description": "Select the experience levels to include in the search.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Executive",
                "Director"
              ]
            },
            "default": []
          },
          "experienceLevel": {
            "title": "Experience level",
            "type": "array",
            "description": "Alias for Experience Levels; select one or more experience codes to include.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Executive",
                "Director"
              ]
            },
            "default": []
          },
          "contractType": {
            "title": "Contract type",
            "type": "array",
            "description": "Select contract types to include in the search.",
            "items": {
              "type": "string",
              "enum": [
                "F",
                "P",
                "C",
                "T",
                "I",
                "V",
                "O"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            },
            "default": []
          },
          "companyNames": {
            "title": "Company names",
            "type": "array",
            "description": "Company names to search for in the job listings.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleMustInclude": {
            "title": "Title must include",
            "type": "array",
            "description": "Keep only jobs whose title contains at least ONE of these terms (case-insensitive). Example: <code>senior</code>, <code>staff</code> keeps \"Senior Backend Engineer\" and \"Staff Engineer\" but drops \"Junior Developer\". Leave empty to keep all titles.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleExclude": {
            "title": "Skip titles containing",
            "type": "array",
            "description": "Drop jobs whose title contains ANY of these terms (case-insensitive). Example: <code>intern</code>, <code>junior</code>, <code>unpaid</code>. Applied after 'Title must include'.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Skip employers",
            "type": "array",
            "description": "Drop jobs from these companies (case-insensitive name match, so <code>Microsoft</code> also skips \"Microsoft Corporation\"). Useful for filtering out staffing agencies or your own company's postings.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "scrapeCompanyDetails": {
            "title": "Scrape company details (billed add-on)",
            "type": "boolean",
            "description": "Enrich each row with company website, industry, size, headquarters, logo, description, and follower count (best-effort, from the public company page) — surfaced as flat <code>company*</code> fields plus a full <code>companyDetails</code> object. Adds one request per <strong>unique</strong> company (cached within a run) and is <strong>billed as a separate per-company event</strong> on top of the per-result price. Off by default — enable only when you need firmographics.",
            "default": false
          },
          "onlyNewJobs": {
            "title": "Only new jobs (skip previously seen)",
            "type": "boolean",
            "description": "Remember job IDs across runs and skip any job already returned in a previous run. Ideal for scheduled daily monitoring — each run only emits jobs posted since last time. Stored in the actor's key-value store.",
            "default": false
          },
          "autoSplit": {
            "title": "Bypass 1000-result cap (split by experience)",
            "type": "boolean",
            "description": "LinkedIn's guest search caps each query at ~1000 results. When enabled (and no experience level is pinned), the search is split across all six experience levels and the deduplicated results are merged, returning well beyond 1000 jobs per search. This and 'Split by city' are alternative cap-busting strategies — if both are on, 'Split by city' takes precedence (it yields more unique jobs per request).",
            "default": false
          },
          "splitByLocation": {
            "title": "Bypass 1000-result cap (split by city)",
            "type": "boolean",
            "description": "LinkedIn caps each search at ~1000 results. When enabled, the search fans out across the major cities of the chosen Split country and merges the deduplicated results — typically returning many times more jobs than a single country query. Raise Max items to capture them, since each city is a separate search. Takes precedence over 'Split by experience' when both are on. Ignored when Start URLs are provided.",
            "default": false
          },
          "splitCountry": {
            "title": "Split country (for split by city)",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "IE",
              "IN",
              "DE",
              "FR",
              "NL",
              "ES",
              "IT",
              "PT",
              "BE",
              "CH",
              "AT",
              "SE",
              "NO",
              "DK",
              "FI",
              "PL",
              "CZ",
              "RO",
              "BR",
              "MX",
              "AR",
              "SG",
              "AE",
              "SA",
              "ZA",
              "NG",
              "JP",
              "KR",
              "NZ",
              "HK",
              "MY",
              "PH",
              "ID",
              "TR",
              "IL"
            ],
            "type": "string",
            "description": "Country whose major cities are fanned out when 'Split by city' is enabled. Pick the country your search targets. Has no effect unless 'Split by city' is on.",
            "default": "US"
          },
          "maxItems": {
            "title": "Max number items OR limit of results per crawl",
            "type": "integer",
            "description": "Maximum number of items that will be scraped.",
            "default": 1000
          },
          "minDelay": {
            "title": "Min delay for wait",
            "type": "integer",
            "description": "Minimum delay to wait before firing another request. This is useful to avoid getting blocked by Linkedin. The delay is in seconds.",
            "default": 5
          },
          "maxDelay": {
            "title": "Max delay for wait",
            "type": "integer",
            "description": "Maximum delay to wait before firing another request. This is useful to avoid getting blocked by Linkedin. The delay is in seconds.",
            "default": 10
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 2
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 8
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}