{
  "openapi": "3.0.1",
  "info": {
    "title": "💼 LinkedIn Jobs Scraper - FREE TO USE",
    "description": "Scrape LinkedIn job postings in bulk title, company, exact posting date, location, salary range, seniority, employment type, industry, applicant count, full description and the named recruiter who posted the job. Search by URL or by keywords and locations. No login or cookies needed.",
    "version": "0.1",
    "x-build-id": "4w5sMucWAsKLfZPzF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dz_omar~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dz_omar-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/dz_omar~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-dz_omar-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/dz_omar~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-dz_omar-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 job URLs",
            "type": "array",
            "description": "Paste LinkedIn job URLs straight from your browser — a search page (<code>/jobs/search?keywords=…&location=…</code>), or a single job link (<code>/jobs/view/4466429011</code>). Every filter already in the URL is kept. Leave empty and use the fields below instead, or combine both — all sources are merged and de-duplicated.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Job titles / keywords",
            "type": "array",
            "description": "Search terms, one per line. Each keyword is searched in each location below, so 3 keywords × 2 locations runs 6 searches.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "City, region or country in plain words — \"London\", \"New York\", \"Germany\". The Actor looks each one up on LinkedIn and uses the location ID it returns, so you never have to find a <code>geoId</code> yourself.",
            "items": {
              "type": "string"
            }
          },
          "distanceMiles": {
            "title": "Search radius",
            "enum": [
              "0",
              "5",
              "10",
              "25",
              "50"
            ],
            "type": "string",
            "description": "How far around the location to search. \"Exact location\" matches the location itself only.",
            "default": "25"
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "anyTime",
              "past24Hours",
              "pastWeek",
              "pastMonth"
            ],
            "type": "string",
            "description": "How recently the job was posted.",
            "default": "pastMonth"
          },
          "postedWithinHours": {
            "title": "…or an exact number of hours",
            "minimum": 1,
            "maximum": 8760,
            "type": "integer",
            "description": "A custom freshness window in hours, overriding the dropdown above. LinkedIn's own filter only offers 24 hours / 1 week / 1 month — this accepts any window, so you can poll for jobs posted in the last hour (<code>1</code>) or the last 3 days (<code>72</code>)."
          },
          "companyNames": {
            "title": "Only these companies (by name)",
            "type": "array",
            "description": "Company names in plain words — \"Stripe\", \"Google\". Each is looked up on LinkedIn and matched by ID, so spelling variants still hit the right company. Leave empty for all companies.",
            "items": {
              "type": "string"
            }
          },
          "companyIds": {
            "title": "…or by LinkedIn company ID",
            "type": "array",
            "description": "Numeric LinkedIn company IDs, if you already have them (e.g. <code>1441</code> for Google). Merged with any names resolved above.",
            "items": {
              "type": "string"
            }
          },
          "easyApply": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only jobs you can apply to without leaving LinkedIn.",
            "default": false
          },
          "under10Applicants": {
            "title": "Under 10 applicants only",
            "type": "boolean",
            "description": "Only jobs with fewer than 10 applicants so far — far less competition.",
            "default": false
          },
          "jobTypes": {
            "title": "Employment type",
            "type": "array",
            "description": "Keep only these employment types. LinkedIn's public search ignores this filter server-side, so the Actor applies it to each job's own <code>employment_type</code> after reading it — which needs \"Scrape full job details\" switched on.",
            "items": {
              "type": "string",
              "enum": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            }
          },
          "experienceLevels": {
            "title": "Experience level",
            "type": "array",
            "description": "Keep only these seniority levels, matched against each job's own <code>seniority_level</code>.",
            "items": {
              "type": "string",
              "enum": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive",
                "Not Applicable"
              ]
            }
          },
          "workplaceTypes": {
            "title": "Remote / hybrid / on-site",
            "type": "array",
            "description": "Keep only these work arrangements. LinkedIn does not label this on public postings, so it is read from what the employer wrote in the title, location and description. Jobs that never state an arrangement are excluded rather than guessed at.",
            "items": {
              "type": "string",
              "enum": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "titleIncludes": {
            "title": "Job title must contain",
            "type": "array",
            "description": "Keep a job only if its title contains at least one of these words. Case-insensitive.",
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Job title must NOT contain",
            "type": "array",
            "description": "Drop jobs whose title contains any of these — e.g. <code>Senior</code>, <code>Principal</code>, <code>Manager</code>.",
            "items": {
              "type": "string"
            }
          },
          "companyExcludes": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Drop jobs from these companies — useful for filtering out staffing agencies and job boards.",
            "items": {
              "type": "string"
            }
          },
          "locationExcludes": {
            "title": "Exclude locations",
            "type": "array",
            "description": "Drop jobs whose location contains any of these — e.g. a suburb you will not commute to.",
            "items": {
              "type": "string"
            }
          },
          "descriptionIncludes": {
            "title": "Description must contain",
            "type": "array",
            "description": "Keep a job only if its description mentions at least one of these — e.g. <code>Python</code>, <code>visa sponsorship</code>. Needs \"Scrape full job details\".",
            "items": {
              "type": "string"
            }
          },
          "descriptionExcludes": {
            "title": "Description must NOT contain",
            "type": "array",
            "description": "Drop jobs whose description mentions any of these — e.g. <code>security clearance</code>. Needs \"Scrape full job details\".",
            "items": {
              "type": "string"
            }
          },
          "requireSalary": {
            "title": "Only jobs with a published salary",
            "type": "boolean",
            "description": "Keep only jobs where the employer published a pay range. A minority of postings do.",
            "default": false
          },
          "requirePoster": {
            "title": "Only jobs with a named recruiter",
            "type": "boolean",
            "description": "Keep only jobs that name the person who posted them, so every row has a human to contact.",
            "default": false
          },
          "postedAfter": {
            "title": "Posted on or after",
            "type": "string",
            "description": "Drop anything posted before this date. Uses each job's exact posting date, not a rounded \"3 weeks ago\"."
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop after this many jobs in total, across every search. Counts jobs that were delivered, not jobs that were looked at.",
            "default": 100
          },
          "maxItemsPerSearch": {
            "title": "Maximum jobs per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap each individual search, so one broad keyword cannot consume the whole run. LinkedIn's public search will not return more than 1,000 jobs for any single query however deep it is paged — to go past that, split the run into narrower searches (shorter freshness window, tighter location)."
          },
          "scrapeJobDetails": {
            "title": "Scrape full job details",
            "type": "boolean",
            "description": "On: one extra request per job adds the full description, salary, seniority, employment type, industry, applicant count, apply type and the named recruiter. Off: only the fields on the search card — roughly 10× faster and cheaper, useful for monitoring which jobs exist.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Include the description as HTML",
            "type": "boolean",
            "description": "Adds <code>description_html</code> alongside the plain-text version, preserving the employer's formatting. Off keeps the dataset noticeably smaller.",
            "default": true
          },
          "deduplicateJobs": {
            "title": "Remove duplicate jobs",
            "type": "boolean",
            "description": "A job matching several of your searches is delivered once, with every search that found it listed on the row.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "How many requests run at once. Higher is faster; too high increases the chance LinkedIn throttles the run.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy used for the run. The default works on every Apify plan, including the free one — there is no need to change it.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "BUYPROXIES94952"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}