{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper $0.9/1K | Salaries, Locations & Employers",
    "description": "Collect accessible public LinkedIn job search and detail fields; source availability and coverage vary. Bulk export: JSON, CSV, Excel and API. PPE: $0.9/1K job results; start fee, usage extra.",
    "version": "1.9",
    "x-build-id": "n353jbDcXcm64JZBy"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/apivault_labs~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-apivault_labs-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/apivault_labs~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-apivault_labs-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/apivault_labs~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-apivault_labs-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": {
          "workflow": {
            "title": "Workflow",
            "enum": [
              "auto",
              "keywordSearch",
              "searchUrls"
            ],
            "type": "string",
            "description": "Choose how jobs are discovered. Auto-detect preserves existing integrations: pasted LinkedIn search URLs take precedence, otherwise keywords are used.",
            "default": "auto"
          },
          "keywords": {
            "title": "Job Keywords",
            "type": "string",
            "description": "Job title or keywords. Examples: 'software engineer', 'marketing manager'. Used only when 'urls' is empty.",
            "default": "software engineer"
          },
          "urls": {
            "title": "LinkedIn jobs search URLs",
            "type": "string",
            "description": "Public linkedin.com/jobs/search URLs, one per line (legacy API lists accepted). URLs replace keyword search. Duplicate searches collapse. Unsupported/private URLs are rejected; invalid entries alongside valid ones are reported in ERRORS."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, state, country, or 'Remote'. Examples: 'New York', 'United States', 'Remote'.",
            "default": "United States"
          },
          "maxPages": {
            "title": "Pages to scrape",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Maximum fetched guest pages across searches this run. Offsets advance by 10; overlapping job IDs deduplicate. Searches are visited in input order; later searches are visited after earlier searches return an empty page. Source may cap searches. SUMMARY reports coverage and continuation.",
            "default": 5
          },
          "maxResults": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop after this many delivered jobs. This is the main cost and output-size guard for MCP and automation runs.",
            "default": 5
          },
          "remote": {
            "title": "Remote-only (merged into query)",
            "type": "boolean",
            "description": "Prefer remote jobs.  Selection is appended as search keywords, a preference rather than a guaranteed structured filter.",
            "default": false
          },
          "experienceLevel": {
            "title": "Experience Level (merged into query)",
            "enum": [
              "any",
              "internship",
              "entry",
              "associate",
              "mid_senior",
              "director",
              "executive"
            ],
            "type": "string",
            "description": "Filter by required experience.  Selection is appended as search keywords, a preference rather than a guaranteed structured filter.",
            "default": "any"
          },
          "jobType": {
            "title": "Job Type (merged into query)",
            "enum": [
              "any",
              "full_time",
              "part_time",
              "contract",
              "temporary",
              "volunteer",
              "internship"
            ],
            "type": "string",
            "description": "Filter by employment type.  Selection is appended as search keywords, a preference rather than a guaranteed structured filter.",
            "default": "any"
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "any",
              "day",
              "week",
              "month"
            ],
            "type": "string",
            "description": "Filter by when the job was posted",
            "default": "any"
          },
          "easyApply": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only jobs with LinkedIn's Easy Apply flow (f_AL=true). Works with both keyword mode and pasted search URLs.",
            "default": false
          },
          "under10Applicants": {
            "title": "Under 10 applicants",
            "type": "boolean",
            "description": "Only jobs with fewer than 10 applicants (f_EA=true). Works with both keyword mode and pasted search URLs.",
            "default": false
          },
          "extractTitle": {
            "title": "Job Title",
            "type": "boolean",
            "description": "Extract job position title",
            "default": true
          },
          "extractCompany": {
            "title": "Company Name",
            "type": "boolean",
            "description": "Extract hiring company name",
            "default": true
          },
          "extractLocation": {
            "title": "Job Location",
            "type": "boolean",
            "description": "Extract job location",
            "default": true
          },
          "extractJobType": {
            "title": "Job Type",
            "type": "boolean",
            "description": "Full-time / Contract / etc.",
            "default": true
          },
          "extractDescription": {
            "title": "Description Snippet",
            "type": "boolean",
            "description": "Extract job description preview",
            "default": true
          },
          "extractDate": {
            "title": "Posted Date",
            "type": "boolean",
            "description": "When the job was posted",
            "default": true
          },
          "extractCompanyLogo": {
            "title": "Company Logo",
            "type": "boolean",
            "description": "Include company logo URL",
            "default": true
          },
          "extractSalary": {
            "title": "Salary (raw)",
            "type": "boolean",
            "description": "Extract salary as shown on LinkedIn (free text). The parser turns this into salaryMinUsd / salaryMaxUsd / salaryMedianUsd.",
            "default": true
          },
          "extractSalaryParse": {
            "title": "Salary parser → USD",
            "type": "boolean",
            "description": "Parse salary text into salaryMinUsd, salaryMaxUsd, salaryMedianUsd, salaryPeriod, salaryCurrency. Annualizes hourly/daily/weekly/monthly to year. Supports USD/EUR/GBP/CAD/AUD/INR/JPY.",
            "default": true
          },
          "extractFreshness": {
            "title": "Job freshness",
            "type": "boolean",
            "description": "Convert 'Posted X days ago' into daysSincePosted + freshness_tier (today / this_week / this_month / older).",
            "default": true
          },
          "extractWorkMode": {
            "title": "Work mode classifier",
            "type": "boolean",
            "description": "Classify as remote / hybrid / onsite based on title + location + description signals.",
            "default": true
          },
          "extractSkills": {
            "title": "Skills extraction",
            "type": "boolean",
            "description": "Extract skillsRequired[] (200+ tech terms), softSkills[], certifications[] from job title + description.",
            "default": true
          },
          "extractBenefits": {
            "title": "Benefits parser",
            "type": "boolean",
            "description": "14 benefit boolean flags: mentions_401k, mentions_health_insurance, mentions_equity, mentions_remote_work, mentions_visa_sponsorship, mentions_relocation, mentions_unlimited_pto, mentions_parental_leave, mentions_signing_bonus, mentions_4_day_week, mentions_stipend, mentions_meals, mentions_gym, mentions_commuter_benefits.",
            "default": true
          },
          "extractSeniority": {
            "title": "Seniority normalizer",
            "type": "boolean",
            "description": "Normalize the title into one of: intern / junior / mid / senior / lead / staff / principal / director / vp / c-level / unspecified.",
            "default": true
          },
          "extractCategory": {
            "title": "Job category auto-detect",
            "type": "boolean",
            "description": "Auto-classify as engineering, data_science, product, design, sales, marketing, finance, hr, operations, legal, customer_support, healthcare, education, construction_trades, or other.",
            "default": true
          },
          "extractRecruiterScore": {
            "title": "recruiterScore (B2B prospecting)",
            "type": "boolean",
            "description": "Add a 0-100 company hiring-market research signal with a tier and high-level reasons. This is not a candidate score and must not be used for automated employment decisions.",
            "default": true
          },
          "extractOutreachAssets": {
            "title": "Outreach assets",
            "type": "boolean",
            "description": "Add company and role research links plus draft outreach ideas. Review every destination and message before use, respect opt-outs, and follow applicable privacy and anti-spam rules.",
            "default": true
          },
          "extractDeiSignals": {
            "title": "DEI keyword indicators",
            "type": "boolean",
            "description": "Identify selected DEI-related phrases mentioned in listing text. These keyword indicators do not establish a company's actual policies, culture, or legal compliance.",
            "default": true
          },
          "extractPayTransparencyLaw": {
            "title": "Pay-transparency indicators (not legal advice)",
            "type": "boolean",
            "description": "Compatibility switch: always not_assessed, null state/compliance. This actor does not assess legal compliance.",
            "default": true
          },
          "extractLocationParts": {
            "title": "Parse location into city/state/country",
            "type": "boolean",
            "description": "Heuristically parse city, state and country from source location. Not geocoding or a legal assessment.",
            "default": true
          },
          "deepFetchTopN": {
            "title": "Detail fetch for first N distinct companies",
            "minimum": 0,
            "maximum": 25,
            "type": "integer",
            "description": "Fetch one representative job from each of the first N distinct observed companies; 0 disables it. This is an input-order sample, not a company ranking.",
            "default": 0
          },
          "deepFetchAll": {
            "title": "Deep-fetch every job (description + salary + apply method)",
            "type": "boolean",
            "description": "Fetch public detail pages for every candidate. Full descriptions/salaries/company details depend on source availability. Access denials yield partial results and detailFailures, not invented fields.",
            "default": false
          },
          "includeCompanyDetails": {
            "title": "Include company details",
            "type": "boolean",
            "description": "Also fetch job details to find a real LinkedIn company URL, then the company public page. Up to 25 unique companies per run. Fields are availability dependent; employee range lower bounds are labeled.",
            "default": false
          },
          "deduplicateCompanies": {
            "title": "Keep only one job per company",
            "type": "boolean",
            "description": "If enabled, only the first job from each unique company is kept.",
            "default": false
          },
          "minRecruiterScore": {
            "title": "Min recruiterScore filter",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Drop jobs whose recruiterScore is below this value (0-100). Useful for high-intent prospect lists. 0 = no filter.",
            "default": 0
          },
          "onlyWithSalary": {
            "title": "Only jobs with disclosed salary",
            "type": "boolean",
            "description": "Drop jobs where salary couldn't be parsed (no comp transparency).",
            "default": false
          },
          "onlyRemote": {
            "title": "Only fully-remote jobs",
            "type": "boolean",
            "description": "Drop hybrid / onsite / unknown work-mode jobs.",
            "default": false
          },
          "exportFormat": {
            "title": "Export format",
            "enum": [
              "default",
              "csv"
            ],
            "type": "string",
            "description": "default uses the selected JSON preset; csv uses a flattened record. Field and analysis switches apply to both.",
            "default": "default"
          },
          "outputPreset": {
            "title": "Output detail",
            "enum": [
              "compact",
              "recruiting",
              "full"
            ],
            "type": "string",
            "description": "Compact returns core facts; Recruiting adds common analysis and detail fields; Full retains every available field. Recruiting is the API/UI default.",
            "default": "recruiting"
          },
          "writeSummary": {
            "title": "Write SUMMARY + TOP_HIRING_COMPANIES + TOP_JOBS to KV store",
            "type": "boolean",
            "description": "SUMMARY and ERRORS are always saved for diagnostics and continuation. This switch controls aggregate statistics and TOP_HIRING_COMPANIES / TOP_JOBS only.",
            "default": true
          },
          "topCompaniesN": {
            "title": "TOP_HIRING_COMPANIES size",
            "minimum": 5,
            "maximum": 100,
            "type": "integer",
            "description": "How many top companies to include in the TOP_HIRING_COMPANIES KV record.",
            "default": 20
          },
          "topJobsN": {
            "title": "TOP_JOBS size",
            "minimum": 5,
            "maximum": 100,
            "type": "integer",
            "description": "How many top jobs (sorted by recruiterScore) to include in the TOP_JOBS KV record.",
            "default": 20
          },
          "maxRetries": {
            "title": "Retries on transient failure",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Retry network failures only, within the request deadline. No retries for access denials, rate limits or successful empty pages.",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum allowed network concurrency (1–10). Current source scheduler is sequential to reduce source throttling; this is an upper bound.",
            "default": 5
          },
          "timeout": {
            "title": "Run collection time budget (seconds)",
            "minimum": 30,
            "maximum": 300,
            "type": "integer",
            "description": "Shared wall-clock collection budget; each HTTP request is capped by remaining time. SUMMARY contains a resumable cursor.",
            "default": 120
          },
          "continuation": {
            "title": "Continuation from SUMMARY.nextInput",
            "type": "object",
            "description": "Use the complete nextInput object from SUMMARY. Live search ordering may change, so continuation deduplicates IDs but cannot guarantee gap-free coverage."
          },
          "monitorKey": {
            "title": "Monitor key (optional)",
            "type": "string",
            "description": "Enable persistent company monitoring with a stable key (1–40 lowercase letters, digits, _ or -). State is stored in your Apify account. Each run starts searches at page zero and returns only jobs not yet delivered for this key. Empty preserves ordinary search.",
            "default": ""
          },
          "companyIds": {
            "title": "Company IDs to monitor",
            "maxItems": 20,
            "type": "array",
            "description": "Numeric LinkedIn company IDs, up to20. Required with monitorKey. maxPages must cover at least one page per company. URLs and continuation cannot be combined with monitoring. Keep filters unchanged or choose a different monitorKey; results are a bounded guest sample.",
            "items": {
              "type": "string",
              "pattern": "^[1-9][0-9]{0,19}$"
            },
            "default": []
          },
          "recoveryDatasetId": {
            "title": "Previous Dataset for interrupted delivery (optional)",
            "type": "string",
            "description": "Leave empty for normal monitoring. After MONITOR_RECOVERY_ACCESS_REQUIRED, use SUMMARY.monitorRecovery.retryInput to grant READ access only to the previous Dataset for recovery. Keep that Dataset until recovery completes, then remove this field."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}