{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper – Recruiters & Companies · No Login",
    "description": "$1.00 per 1,000 jobs. Scrape LinkedIn jobs by keyword, location or search URL: full descriptions, salaries, applicant counts and recruiter/job-poster data, with optional company details. No LinkedIn login or cookies.",
    "version": "1.0",
    "x-build-id": "s8bTEkNMibpCUXxTt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/coregent~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-coregent-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/coregent~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-coregent-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/coregent~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-coregent-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": {
          "searchKeywords": {
            "title": "Search Keywords",
            "type": "array",
            "description": "Job titles, keywords, skills, or natural-language job searches. Each keyword is combined with each location, so 3 keywords x 2 locations = 6 searches.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, regions, or countries to search in. Use \"Remote\" for remote-only searches. Leave empty to search everywhere.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Maximum Jobs",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of unique jobs to save across the whole run. You are charged only for jobs actually saved.",
            "default": 100
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Paste LinkedIn job search URLs, or individual job URLs (linkedin.com/jobs/view/...). Filters already in the URL (posted within, workplace, employment type, experience level, Easy Apply) are preserved AND re-checked on every scraped job, so each URL is its own search — use several URLs to run different locations or work types together in one deduplicated job. Non-LinkedIn URLs are skipped with a warning.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "postedWithin": {
            "title": "Posted Within",
            "enum": [
              "anytime",
              "past24Hours",
              "pastWeek",
              "pastMonth"
            ],
            "type": "string",
            "description": "Only return jobs posted within this window.",
            "default": "anytime"
          },
          "sortBy": {
            "title": "Sort By",
            "enum": [
              "relevance",
              "recent"
            ],
            "type": "string",
            "description": "Result ordering requested from LinkedIn.",
            "default": "relevance"
          },
          "workplaceTypes": {
            "title": "Workplace",
            "type": "array",
            "description": "Remote, hybrid, or on-site. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "hybrid",
                "onsite"
              ],
              "enumTitles": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            },
            "default": []
          },
          "keepUnconfirmedWorkplace": {
            "title": "Keep Jobs That Don't State Their Workplace",
            "type": "boolean",
            "description": "Applies only when a Workplace filter is set (here or inside a search URL). LinkedIn publishes workplace type to logged-in users only, so the only evidence is what the posting itself says — and about half say nothing. Leave OFF (recommended) and those jobs are dropped, so every result is a confirmed match and you are not charged for jobs that may not match. Turn ON to keep them: many more results, but some will not match your filter. Measured on a live remote search: of 20 jobs returned, 4 were remote, 6 hybrid, 2 on-site and 8 said nothing.",
            "default": false
          },
          "employmentTypes": {
            "title": "Employment Type",
            "type": "array",
            "description": "Full-time, part-time, contract, and so on. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "fullTime",
                "partTime",
                "contract",
                "temporary",
                "internship",
                "volunteer",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            },
            "default": []
          },
          "experienceLevels": {
            "title": "Experience Level",
            "type": "array",
            "description": "Seniority levels to include. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entryLevel",
                "associate",
                "midSenior",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive"
              ]
            },
            "default": []
          },
          "easyApplyOnly": {
            "title": "Easy Apply Only",
            "type": "boolean",
            "description": "Only return jobs that can be applied to directly on LinkedIn.",
            "default": false
          },
          "underTenApplicantsOnly": {
            "title": "Under 10 Applicants",
            "type": "boolean",
            "description": "Only return jobs with fewer than 10 applicants. Best-effort: LinkedIn often shows a bucket such as \"Over 200 applicants\" instead of an exact number, and jobs with no stated count are kept.",
            "default": false
          },
          "includeCompanies": {
            "title": "Include Companies",
            "type": "array",
            "description": "Only keep jobs from these companies. Accepts company names, LinkedIn company URLs, or company slugs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeCompanies": {
            "title": "Exclude Companies",
            "type": "array",
            "description": "Drop jobs from these companies. Exclusion always wins over inclusion.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeJobTitleKeywords": {
            "title": "Exclude Job Title Keywords",
            "type": "array",
            "description": "Drop jobs whose title contains any of these words (case-insensitive). Applied before the job page is fetched, so excluded jobs are never charged.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeLocations": {
            "title": "Exclude Locations",
            "type": "array",
            "description": "Drop jobs whose location contains any of these terms. Useful when LinkedIn broadens results beyond the location you asked for.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "jobFunctions": {
            "title": "Job Functions",
            "type": "array",
            "description": "Job functions to keep, for example Engineering or Marketing. Jobs with no stated function are kept.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "industries": {
            "title": "Industries",
            "type": "array",
            "description": "Industries to keep, for example Software Development. Jobs with no stated industry are kept.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeRecruitmentAgencies": {
            "title": "Exclude Recruitment Agencies",
            "type": "boolean",
            "description": "Drop staffing and recruiting agencies so you see direct employers. Uses company-name patterns, plus the company's LinkedIn industry when company enrichment is enabled. Off by default — agencies are never removed silently.",
            "default": false
          },
          "minimumCompanyEmployees": {
            "title": "Min Company Employees",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep jobs at companies with at least this many employees. Requires company data, so setting this automatically enables Include Company Details and its per-company charge. Jobs whose company size could not be determined are kept. With Include Company Details off, company pages LinkedIn blocks are not looked up from the backup source, so more jobs may end up with an unknown size."
          },
          "maximumCompanyEmployees": {
            "title": "Max Company Employees",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep jobs at companies with at most this many employees. Requires company data, so setting this automatically enables Include Company Details and its per-company charge. Jobs whose company size could not be determined are kept. With Include Company Details off, company pages LinkedIn blocks are not looked up from the backup source, so more jobs may end up with an unknown size."
          },
          "minimumApplicants": {
            "title": "Min Applicants",
            "minimum": 0,
            "type": "integer",
            "description": "Best-effort — jobs with no exact applicant count are kept."
          },
          "maximumApplicants": {
            "title": "Max Applicants",
            "minimum": 0,
            "type": "integer",
            "description": "Best-effort — jobs with no exact applicant count are kept."
          },
          "minimumSalary": {
            "title": "Min Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep jobs whose stated salary range reaches this figure. Jobs without a published salary are kept unless you enable Exclude Jobs Without Salary."
          },
          "maximumSalary": {
            "title": "Max Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep jobs whose stated salary range starts at or below this figure."
          },
          "salaryCurrency": {
            "title": "Salary Currency",
            "enum": [
              "",
              "USD",
              "AUD",
              "EUR",
              "GBP",
              "CAD",
              "SGD",
              "INR"
            ],
            "type": "string",
            "description": "Restrict salary filtering to one currency. Leave empty to accept any.",
            "default": ""
          },
          "excludeJobsWithoutSalary": {
            "title": "Exclude Jobs Without Salary",
            "type": "boolean",
            "description": "Drop jobs that do not publish a salary. Most LinkedIn jobs do not, so this reduces results sharply.",
            "default": false
          },
          "removeDuplicates": {
            "title": "Remove Duplicate Jobs",
            "type": "boolean",
            "description": "Remove the same job when it appears under several keywords or locations. Matched by job ID, then job URL, then title + company + location.",
            "default": true
          },
          "skipJobIds": {
            "title": "Skip Job IDs",
            "type": "array",
            "description": "Job IDs already collected in a previous run. Matching jobs are skipped before their page is fetched, so they cost nothing.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "skipUrls": {
            "title": "Skip URLs",
            "type": "array",
            "description": "Previously scraped job URLs. Same effect as Skip Job IDs, for when you stored URLs rather than IDs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "skipKnownJobsForDays": {
            "title": "Skip Jobs Already Delivered (Days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "The actor remembers the jobs it delivered and skips them in later runs for this many days, so there's no skip list to maintain. Skipped jobs are not fetched and not charged. 0 turns it off. History is kept per saved task unless you set a History Name."
          },
          "historyName": {
            "title": "History Name",
            "type": "string",
            "description": "Which runs share the delivered-jobs and delivered-companies history used by the two 'Already Delivered' options. Leave empty to give each saved task its own history (one task per spreadsheet or workbook). Use the same name in several tasks if they feed one shared table, so a job or company delivered by any of them is skipped by all."
          },
          "includeCompanyDetails": {
            "title": "Include Company Details",
            "type": "boolean",
            "description": "Add company website, domain, industry, size, employee count, headquarters, and description. Charged once per unique company, not once per job — a company appearing in 50 jobs is charged once. Failed lookups are not charged.",
            "default": false
          },
          "skipCompanyDetailsFor": {
            "title": "Skip Company Details For",
            "type": "array",
            "description": "Companies you already hold details for, as LinkedIn company URLs (e.g. https://www.linkedin.com/company/acme) or the part after /company/ (acme). Their jobs are still returned, with company name and LinkedIn URL, but company details are not fetched and not charged. The company-size and agency-industry checks cannot run for these companies, so their jobs are kept; list companies you never want in Exclude Companies instead.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "skipKnownCompaniesForDays": {
            "title": "Skip Company Details Already Delivered (Days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "The actor remembers which companies' details it delivered. For this many days afterwards, their jobs are returned with company name and LinkedIn URL but without company details, and the company is not charged. companyDetailsSkipped is true on those rows. The company-size and agency filters still apply. After the period, details are fetched and charged once again, which keeps your copy fresh. 0 turns it off. History is kept per saved task unless you set a History Name."
          },
          "includeRecruiterDetails": {
            "title": "Include Recruiter Details",
            "type": "boolean",
            "description": "Add the job poster / hiring team member when LinkedIn shows one publicly: name, headline, profile URL, and photo. No extra charge — it is read from the job page already being fetched. Most public job posts do not name a recruiter, so this field is often empty.",
            "default": true
          },
          "extractPublicEmails": {
            "title": "Extract Public Emails",
            "type": "boolean",
            "description": "Collect email addresses that appear publicly in the job description (and the company profile, if company details are enabled). No external email-lookup service is used and nothing extra is charged. Expect most jobs to return an empty list — most employers route applications through LinkedIn rather than publishing an address. Recruitment-agency listings are the most likely to include one.",
            "default": false
          },
          "expandLargeSearches": {
            "title": "Expand Large Searches",
            "type": "boolean",
            "description": "For broad searches that hit LinkedIn's result ceiling, split the search into smaller location-based sub-searches and merge the results. Your Maximum Jobs limit still applies to the whole run.",
            "default": false
          },
          "dataSource": {
            "title": "Data Source",
            "enum": [
              "auto",
              "linkedinPublic",
              "tikhub"
            ],
            "type": "string",
            "description": "Where job data comes from. \"Automatic\" uses LinkedIn's public pages and falls back to a backup provider only for jobs LinkedIn blocks. On the Apify Free plan the backup provider has a smaller budget; everything else is unaffected and you are never charged for it.",
            "default": "auto"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy settings. Datacenter or no proxy both work well here. Apify Residential is NOT supported — a run that selects it uses Apify Datacenter instead, with a warning — if you need residential routing, supply your own provider under Custom proxy URLs.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}