{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper | $0.9/1K | No Login (Real-Time)",
    "description": "Collect public LinkedIn job listings and organize available salary, work-mode, seniority, skills, benefits, freshness, application, and company hiring signals. Filter by role, location, experience, type, age, or remote preference. JSON and CSV export. $0.9/1K successful jobs.",
    "version": "1.7",
    "x-build-id": "8yXVP7dRuZVeiMgwP"
  },
  "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."
          },
          "urls": {
            "title": "LinkedIn jobs search URLs",
            "type": "string",
            "description": "Optional. One or more LinkedIn jobs search URLs (copy from the address bar after applying filters on linkedin.com/jobs/search). When provided, they replace the keyword search above; filters from the URL itself are used. Results from multiple URLs are merged and deduplicated."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, state, country, or 'Remote'. Examples: 'New York', 'United States', 'Remote'."
          },
          "maxPages": {
            "title": "Pages to scrape",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Maximum number of result pages to process. The number of jobs returned per page varies by query, filters, location, and current availability.",
            "default": 5
          },
          "maxResults": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Stop after this many delivered jobs. This is the main cost and output-size guard for MCP and automation runs.",
            "default": 25
          },
          "remote": {
            "title": "Remote-only (merged into query)",
            "type": "boolean",
            "description": "Prefer remote jobs. Since LinkedIn's 2026 AI search removed the old remote URL filter, this is merged into the search keywords as 'remote'.",
            "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. Since LinkedIn's 2026 AI search removed the old experience URL filter, the selection is appended to the search keywords (e.g. 'mid-senior level').",
            "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. Since LinkedIn's 2026 AI search removed the old job-type URL filter, the selection is appended to the search keywords (e.g. 'contract').",
            "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": "Add location-based pay-transparency research indicators and note whether salary text is present. These heuristic fields do not determine legal coverage or compliance; verify the listing and consult qualified counsel.",
            "default": true
          },
          "extractLocationParts": {
            "title": "Parse location into city/state/country",
            "type": "boolean",
            "description": "Parse `San Francisco, CA` → `city`, `state`, `country: US`, `isUsListing`, `isRemoteListing`. Used by pay-transparency detection and CRM filtering.",
            "default": true
          },
          "deepFetchTopN": {
            "title": "Deep-fetch top N companies (slow, premium)",
            "minimum": 0,
            "maximum": 25,
            "type": "integer",
            "description": "Request additional available details for jobs from the top N observed companies. Set to 0 to disable. This option increases processing time and fields remain availability-dependent.",
            "default": 0
          },
          "deepFetchAll": {
            "title": "Deep-fetch every job (description + salary + apply method)",
            "type": "boolean",
            "description": "Request additional available details for every collected job, including fuller descriptions, salary, seniority, application method, applicant count, and industries. Disable for a lighter discovery run.",
            "default": false
          },
          "includeCompanyDetails": {
            "title": "Include company details",
            "type": "boolean",
            "description": "Fetch each unique company's LinkedIn page (up to 25 companies per run) and add companyWebsite, companyEmployeesCount, companyDescription, and companyIndustry when available. Skipped automatically when the run's time budget is nearly exhausted.",
            "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 = full JSON (all 30+ fields). csv = flattened sales-ready 25-column shape for HubSpot / Pipedrive / Salesforce import.",
            "default": "default"
          },
          "outputPreset": {
            "title": "Output detail",
            "enum": [
              "compact",
              "recruiting",
              "full"
            ],
            "type": "string",
            "description": "Compact returns core job facts and links. Recruiting adds salary, skills, application and hiring signals. Full keeps every available field. Existing API calls that omit this field keep the legacy full output.",
            "default": "recruiting"
          },
          "writeSummary": {
            "title": "Write SUMMARY + TOP_HIRING_COMPANIES + TOP_JOBS to KV store",
            "type": "boolean",
            "description": "On runs with multiple jobs, write three free aggregate records to the run's KV store: SUMMARY (avg salary, top skills, recruiter-tier distribution), TOP_HIRING_COMPANIES (top 20 companies sorted by job count with 3 outreach pitch variants), TOP_JOBS (top 20 jobs sorted by recruiterScore — sales-ops job-level digest).",
            "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 attempts when a page is temporarily unavailable or returns no usable rows.",
            "default": 1
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum number of pages processed in parallel. The default is recommended for most runs.",
            "default": 5
          },
          "timeout": {
            "title": "Timeout per page (seconds)",
            "minimum": 30,
            "maximum": 300,
            "type": "integer",
            "description": "Max wait per LinkedIn page",
            "default": 120
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}