{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper — LinkedIn Job Postings, Salary, No Login",
    "description": "LinkedIn jobs by keyword and location, no login and no cookies. Every row: title, company, location, posted date, the public job link. From $1.50 per 1,000 job listings, never for a job we did not deliver. The full description, salary and seniority are opt-in, and charged as a second event per job.",
    "version": "1.0",
    "x-build-id": "c43RVtAK6ZFaoAjZj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-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/steadyfetch~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-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/steadyfetch~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-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",
        "required": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Search terms",
            "type": "array",
            "description": "Job titles or keywords (for example \"software engineer\"). You can also paste a full LinkedIn jobs search URL such as https://www.linkedin.com/jobs/search?keywords=data%20analyst&location=London — a pasted search keeps its own keywords, place and filters. No result fee for a removed or blocked posting, a filtered row, or a posting this account already has. Note that LinkedIn never answers a keyword with nothing: a term it cannot match is BROADENED and still returns jobs, so read the titles that come back before trusting a rare keyword. An Indeed search is steadyfetch/indeed-jobs-scraper; a company's own careers page is steadyfetch/company-jobs-by-domain. Called with no input at all (an empty {} from the API or an agent), the run is a 5-listing sample — \"software engineer\" across the United States — charged like any run, and setting only the filters below leaves that sample running under them.",
            "default": [
              "_demo"
            ],
            "items": {
              "type": "string"
            }
          },
          "jobUrls": {
            "title": "Job links",
            "type": "array",
            "description": "LinkedIn job links you already have, fetched as postings directly instead of being searched for — for example https://www.linkedin.com/jobs/view/data-analyst-at-acme-3912345678 or https://www.linkedin.com/jobs/search?currentJobId=3912345678. One row per link, and a link always brings the WHOLE posting back: description, salary block where the employer published one, seniority and employment type. Because a link is a request for the whole posting, it is billed exactly like a posting found through a search — one job listing plus one Full description — and \"Fetch the full description\" below does not change that either way. If LinkedIn serves the page without a description on it, you are charged for the listing only and the row says so. A link that is not a LinkedIn job posting is reported on its own row and never charged.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Where to look, exactly as you would type it on LinkedIn — a city (\"London\"), a country (\"United States\"), a region (\"Greater Dubai Area\"). LinkedIn resolves the place itself, so any wording it understands works. Leave empty to search everywhere."
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Only jobs posted in the last 1, 7 or 30 days — the three windows LinkedIn's public job search offers. Any other number, 90 included, is reported on an uncharged row and the search is not run, because rounding it to the nearest window would answer a different question. Leave empty for every posting date."
          },
          "jobType": {
            "title": "Job type",
            "type": "string",
            "description": "Keep only one employment type. The value or the name both work — \"full-time\", \"Full-time\" and \"F\" are the same filter. Leave empty for every job type."
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "Ask LinkedIn to order results by date instead of relevance. The value or the name of the order both work — date and \"Date posted\" are the same sort.",
            "default": "relevance"
          },
          "includeDescription": {
            "title": "Fetch the full description for every job",
            "type": "boolean",
            "description": "Off by default. When on, each delivered full description costs one extra Full description charge of $0.003 per job, on top of the per-listing price. It governs jobs found by SEARCH only — a link pasted into \"Job links\" already asks for the whole posting and is billed for it whatever this is set to. The extra charge is taken only when a description actually comes back; a description that cannot be fetched is reported on its row and never charged. If this option is not yet active on this listing, the run says so and charges nothing extra.",
            "default": false
          },
          "maxItems": {
            "title": "Max job listings for the whole run",
            "minimum": 1,
            "type": "integer",
            "description": "Hard cap on delivered job listings across every search in this run. This actor delivers up to 10,000 listings in one run; ask for more and the run continues at 10,000, with one uncharged row saying so.",
            "default": 50
          },
          "maxRunSeconds": {
            "title": "Max run seconds",
            "type": "integer",
            "description": "The run stops cleanly before this many seconds and reports what is left, instead of being killed by a timeout. A time limit ends the collecting, never the delivering: jobs already in hand are still handed back. A run is given between 30 and 3,600 seconds; ask for more or less and the run continues at whichever of the two is nearer, with one uncharged row saying so.",
            "default": 900
          },
          "includeSeen": {
            "title": "Include jobs you already have",
            "type": "boolean",
            "description": "OFF (default): a job already delivered to your account is skipped before it takes a row slot — not delivered again, not charged, not counted against your row cap. ON: those rows come back anyway from the search page, marked `repeat: true` with `firstSeenAt` and `firstSeenRunId` naming the run that first delivered them, and still not charged. A handed-back row carries no full description: that text was delivered with it in the earlier run and is not fetched (or charged) a second time, and the row says so.",
            "default": false
          },
          "resumeFromDatasetId": {
            "title": "Continue from an earlier run's dataset",
            "type": "string",
            "description": "The default dataset ID of an earlier run of this actor. Leave empty to start fresh. If the dataset cannot be read, the run stops before fetching anything and charges nothing, rather than risk billing you twice."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}