{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper",
    "description": "Scrape LinkedIn job search results without logging in - keywords, location, date and remote filters. Clean output with company, location, seniority and skills; optional full descriptions. Fast and low-cost. From $0.40 per 1,000 jobs.",
    "version": "0.1",
    "x-build-id": "dwcOKFCSfYnCVD7UI"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tacps126~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tacps126-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/tacps126~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tacps126-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/tacps126~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tacps126-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": {
          "searchUrls": {
            "title": "LinkedIn search links (optional)",
            "type": "array",
            "description": "Paste job search links instead of typing keywords: open linkedin.com/jobs/search in a private window, set the filters, copy the address. Each link runs with its own filters; keywords, location and the fields below fill in what a link leaves out. Filters LinkedIn dropped (job type, experience level, workplace) are turned into search words.",
            "items": {
              "type": "string"
            }
          },
          "query": {
            "title": "Search keywords",
            "type": "string",
            "description": "What to search for, e.g. `backend engineer`, `data analyst`, `nurse`. Words like `contract`, `entry level` or `hybrid` work here too: LinkedIn's AI job search reads them from the keywords."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, region or country, e.g. `Berlin`, `United States`, `Remote`."
          },
          "datePosted": {
            "title": "Posted in the last",
            "enum": [
              "",
              "day",
              "week",
              "month"
            ],
            "type": "string",
            "description": "Only jobs posted within this window.",
            "default": ""
          },
          "companyIds": {
            "title": "Company IDs",
            "type": "array",
            "description": "Only jobs at these companies: LinkedIn's numeric company ids, e.g. `1441` for Google (the `f_C=` value in a search link filtered by company). Works without keywords.",
            "items": {
              "type": "string"
            }
          },
          "geoId": {
            "title": "LinkedIn location ID",
            "type": "string",
            "description": "Optional exact place id (the `geoId=` value in a search link). Overrides the location text."
          },
          "distance": {
            "title": "Distance (miles)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Optional search radius around the location."
          },
          "easyApply": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only jobs you can apply to on LinkedIn itself.",
            "default": false
          },
          "under10Applicants": {
            "title": "Fewer than 10 applicants",
            "type": "boolean",
            "description": "Only jobs few people have applied to yet.",
            "default": false
          },
          "remote": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Remote jobs only. Adds \"remote\" to the search, which is how LinkedIn's AI job search takes it.",
            "default": false
          },
          "maxPages": {
            "title": "Max result pages",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Optional cap on search pages to read (about 10 jobs each). Leave empty to read until \"Max jobs\"."
          },
          "splitByCity": {
            "title": "Get past the 1,000 limit (split by city)",
            "type": "boolean",
            "description": "LinkedIn shows at most about 1,000 jobs per search. With a country as the location (`Germany`, `United States`), this runs the search once per large city of that country instead, largest first, and removes duplicates.",
            "default": false
          },
          "splitMaxCities": {
            "title": "Cities to cover",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many of the country's largest cities a split search covers.",
            "default": 25
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of jobs to return.",
            "default": 200
          },
          "includeDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Open each job's own page for more fields (full description, seniority, employment type, industries, applicant count, salary, apply type (Easy Apply or company site) and the job poster (name, title, profile link, when LinkedIn shows one)). Slower - one extra request per job - and only for jobs that pass your filters.",
            "default": false
          },
          "titleIncludes": {
            "title": "Title must include",
            "type": "array",
            "description": "Keep a job only if its title contains any of these words (case-insensitive), e.g. `engineer`, `developer`.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Title must not include",
            "type": "array",
            "description": "Drop a job whose title contains any of these words (case-insensitive), e.g. `intern`, `manager`.",
            "items": {
              "type": "string"
            }
          },
          "locationIncludes": {
            "title": "Location must include",
            "type": "array",
            "description": "Keep a job only if its location contains any of these (case-insensitive), e.g. `Berlin`, `Remote`.",
            "items": {
              "type": "string"
            }
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only jobs posted in the last N days. Jobs whose board doesn't publish a date are kept."
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only jobs the posting itself marks as remote.",
            "default": false
          },
          "workModes": {
            "title": "Work mode",
            "type": "array",
            "description": "Keep only these work arrangements. Jobs whose posting doesn't state it are dropped when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "employmentTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Keep only these employment types.",
            "items": {
              "type": "string",
              "enum": [
                "full_time",
                "part_time",
                "contract",
                "internship",
                "temporary",
                "freelance"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Internship",
                "Temporary",
                "Freelance"
              ]
            }
          },
          "seniorities": {
            "title": "Seniority",
            "type": "array",
            "description": "Keep only these seniority levels.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "lead",
                "principal",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior",
                "Mid",
                "Senior",
                "Lead",
                "Principal / Staff",
                "Director",
                "Executive"
              ]
            }
          },
          "jobFunctions": {
            "title": "Job function",
            "type": "array",
            "description": "Keep only these job functions (engineering, data, sales, ...).",
            "items": {
              "type": "string",
              "enum": [
                "engineering",
                "data",
                "ai_training",
                "security",
                "research",
                "product",
                "design",
                "marketing",
                "sales",
                "customer_success",
                "finance",
                "people",
                "legal",
                "operations",
                "healthcare",
                "education"
              ],
              "enumTitles": [
                "Engineering",
                "Data",
                "AI Training",
                "Security",
                "Research",
                "Product",
                "Design",
                "Marketing",
                "Sales",
                "Customer Success",
                "Finance",
                "People",
                "Legal",
                "Operations",
                "Healthcare",
                "Education"
              ]
            }
          },
          "descriptionIncludes": {
            "title": "Description or skills mention",
            "type": "array",
            "description": "Keep a job only if its title, description or skills mention any of these, e.g. `Kubernetes`, `Python`, `SQL`.",
            "items": {
              "type": "string"
            }
          },
          "companyExcludes": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Drop jobs from companies whose name contains any of these, e.g. staffing agencies.",
            "items": {
              "type": "string"
            }
          },
          "minAnnualSalary": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep jobs paying at least this per year (hourly and monthly pay are converted), in the posting's currency. Jobs that don't publish pay are kept unless \"Only jobs with salary\" is on."
          },
          "onlyWithSalary": {
            "title": "Only jobs with salary",
            "type": "boolean",
            "description": "Keep only jobs that publish their pay.",
            "default": false
          },
          "visaSponsorshipOnly": {
            "title": "Visa sponsorship only",
            "type": "boolean",
            "description": "Keep only jobs whose posting says visa sponsorship is available.",
            "default": false
          },
          "onlyNew": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Return only jobs that no earlier run with the same input has delivered. Schedule the Actor and you pay only for new jobs.",
            "default": false
          },
          "changesOnly": {
            "title": "Changes only",
            "type": "boolean",
            "description": "Return only jobs that are new or changed since the last run with the same input (or monitor name): changed jobs carry `changeType: \"changed\"` and `changes` with the old and new salary, location or title. Search results are partial, so jobs that drop out aren't reported as closed. The first run returns everything as new.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Optional name for the \"only new\" history, so several monitors can run side by side. Leave empty to derive it from the input."
          },
          "delivery": {
            "title": "Send results to Slack, Discord, a webhook or Google Sheets",
            "type": "object",
            "description": "Webhook: {\"webhookUrl\": \"https://...\", \"format\": \"json\" | \"slack\" | \"discord\", \"onlyWhenResults\": true, \"includeItems\": 10}. Google Sheets: {\"spreadsheetId\": \"<id from the sheet URL>\", \"sheetName\": \"Sheet1\"} plus the service account key below; share the sheet with the service account's e-mail first. Leave empty to only save results in the dataset."
          },
          "googleServiceAccountJson": {
            "title": "Google service account key (for Sheets)",
            "type": "string",
            "description": "Only for Google Sheets delivery: paste the service account's JSON key. Stored encrypted; the account sees only sheets you share with it."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Recommended for large runs - LinkedIn limits how fast one address can page through results.",
            "default": {
              "useApifyProxy": false
            }
          },
          "enrich": {
            "title": "Normalize & enrich",
            "type": "boolean",
            "description": "Normalize every job into one schema: structured location + country code, work mode, employment type, seniority, years of experience, job function, skills, annualized salary, education and visa signals.",
            "default": true
          },
          "dedupe": {
            "title": "Deduplicate",
            "type": "boolean",
            "description": "Drop duplicate postings (by url + title + company).",
            "default": true
          },
          "tenantId": {
            "title": "Tenant ID",
            "type": "string",
            "description": "Optional label used to keep separate histories for different clients or teams."
          },
          "debug": {
            "title": "Debug",
            "type": "boolean",
            "description": "Save extra diagnostics with the run (for support requests).",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}