{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper — Job Postings API, No Login | $0.50/1k",
    "description": "Scrape LinkedIn job postings without an account: title, company, location, date posted, salary, seniority, employment type, industries, applicants and the full description. Keyword, location, company and date filters.",
    "version": "0.1",
    "x-build-id": "grTZ3NBodOQsJ99Sx"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/glasswing~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-glasswing-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/glasswing~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-glasswing-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/glasswing~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-glasswing-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": {
          "keywords": {
            "title": "Job titles or keywords",
            "type": "array",
            "description": "What you would type into LinkedIn's job search, one per line (e.g. `software engineer`, `registered nurse`, `sales manager`). Each keyword is a separate search in every location below; a job found by several searches is returned once. Leave empty to list every job in the locations.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Where to search, one per line, the way you would type it on LinkedIn: a country (`United States`, `Germany`), a region (`California, United States`) or a city (`London, England, United Kingdom`, `Berlin`). Each location is searched separately. Empty = worldwide.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "LinkedIn job-search URLs",
            "uniqueItems": true,
            "type": "array",
            "description": "Search result pages copied from your browser (https://www.linkedin.com/jobs/search/?keywords=...&location=...), from any country site; every filter in the URL is kept. Job pages (https://www.linkedin.com/jobs/view/...) and bare job ids work too. The example is skipped automatically as soon as you fill in keywords, locations or companies.",
            "default": [
              "https://www.linkedin.com/jobs/search/?keywords=software%20engineer&location=United%20States"
            ],
            "items": {
              "type": "string"
            }
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "any",
              "1h",
              "24h",
              "week",
              "month"
            ],
            "type": "string",
            "description": "Only jobs posted within this time. Applies to every search, pasted URLs included.",
            "default": "any"
          },
          "experienceLevel": {
            "title": "Experience level",
            "uniqueItems": true,
            "type": "array",
            "description": "LinkedIn's experience levels (the job page's \"Seniority level\"). Pick one or more; empty = all. LinkedIn's logged-out search does not apply this filter itself, so every job's page is checked and only matching jobs are saved (jobs that do not match are free). Needs the job details, which are then fetched even with the details switch off. With exactly one level chosen, its words (e.g. `entry level`) are added to the keyword search so LinkedIn ranks matching jobs first.",
            "items": {
              "type": "string",
              "enum": [
                "internship",
                "entry",
                "associate",
                "mid-senior",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive"
              ]
            }
          },
          "jobType": {
            "title": "Job type",
            "uniqueItems": true,
            "type": "array",
            "description": "Employment types (the job page's \"Employment type\"). Pick one or more; empty = all. Checked on every job's page like Experience level: only matching jobs are saved and billed. With exactly one type chosen, its word (e.g. `part-time`) is added to the keyword search.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship",
                "volunteer",
                "other"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            }
          },
          "companyNames": {
            "title": "Companies (names)",
            "type": "array",
            "description": "Only jobs at these companies, one name per line (e.g. `Google`, `Microsoft`). Each name is matched to its LinkedIn company page (an exact name match first, else LinkedIn's top suggestion) and searched separately with your keywords and locations. A name LinkedIn does not know returns one free `not_found` row.",
            "items": {
              "type": "string"
            }
          },
          "companyIds": {
            "title": "Companies (LinkedIn company ids)",
            "type": "array",
            "description": "Numeric LinkedIn company ids (the `f_C` value in a LinkedIn search URL, e.g. `1441` for Google). Each id is searched separately with your keywords and locations.",
            "items": {
              "type": "string"
            }
          },
          "geoId": {
            "title": "LinkedIn geoId (optional)",
            "type": "string",
            "description": "LinkedIn's numeric place id (the `geoId` value in a LinkedIn search URL, e.g. `103644278` = United States). Use it when a location name is ambiguous; it applies to every keyword search."
          },
          "fetchDescription": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "On (default): one extra request per job adds the full description, seniority, employment type, job function, industries, applicant count, salary range (when LinkedIn shows it), Easy Apply and closed flags. Off: search-card data only (title, company, location, date, logo), about 10x fewer requests and faster.",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Also keep the description as HTML",
            "type": "boolean",
            "description": "Adds `descriptionHtml` (LinkedIn's formatted description) next to the plain-text `descriptionText`. Only with full job details on.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many jobs have been saved, across all searches. Each saved job with status `ok` is one billable result. LinkedIn serves at most 1,000 jobs per search, so split big pulls by location, keyword or date posted.",
            "default": 20
          },
          "maxItemsPerSearch": {
            "title": "Maximum results per search",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Optional cap for each single search (one keyword in one location, or one pasted URL), so one broad search cannot use up Maximum results. Empty = no per-search cap (LinkedIn's own limit is 1,000)."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy (datacenter) spreads the requests over many IPs so LinkedIn does not throttle the run. Residential proxies are not needed.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}