{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper With Salary Range Filters",
    "description": "Scrape LinkedIn job listings with titles, companies, locations, salaries, seniority, and descriptions. Ideal for recruiters, analysts, and job-market insights with clean structured output.",
    "version": "0.1",
    "x-build-id": "lOcNL1FYYv62f5OT8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scraper-engine~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scraper-engine-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/scraper-engine~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scraper-engine-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/scraper-engine~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scraper-engine-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": {
          "payFloorYearly": {
            "title": "💵 Minimum yearly pay",
            "minimum": 0,
            "type": "integer",
            "description": "Drop jobs whose stated pay tops out below this yearly figure. Applied after hourly/monthly/weekly rates are normalized to a yearly number.\n\nExample: 150000 keeps a job advertising '$80/hour' (≈ $166,400/yr) and drops one advertising '$120,000 – $140,000'.\n\nLeave empty for no pay floor. Jobs that state no pay are kept unless you also switch on 'Only jobs that state pay'."
          },
          "onlyJobsStatingPay": {
            "title": "🎯 Only jobs that state pay",
            "type": "boolean",
            "description": "Keep only listings where a pay figure was actually found in the description. Everything with hasSalary = false is skipped — not saved and not charged.\n\nTurn this on for pay benchmarking. Leave it off to get full market coverage including the many jobs that stay silent on pay.",
            "default": false
          },
          "payCurrency": {
            "title": "💱 Pay currency",
            "enum": [
              "",
              "USD",
              "GBP",
              "EUR",
              "INR",
              "AUD",
              "CAD",
              "SGD",
              "CHF",
              "NZD"
            ],
            "type": "string",
            "description": "Keep only jobs whose parsed pay is in this currency. Useful when a multi-country search mixes USD, GBP and EUR figures together.\n\nLeave as Any currency to skip this filter.",
            "default": ""
          },
          "useLinkedInSalaryBucket": {
            "title": "🏦 LinkedIn salary floor (applied at the source)",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6",
              "7",
              "8",
              "9"
            ],
            "type": "string",
            "description": "Sends LinkedIn's OWN salary-bucket filter with the search, so LinkedIn narrows the results before they are returned — different from the pay floor above, which screens results after parsing.\n\n🔬 Verified working while logged out and genuinely ordered: for 'Data Analyst' in the United States over 20 result slots, the $40,000+ and $200,000+ buckets shared only 1 of 20 jobs, while $40,000+ and $80,000+ shared 19 of 20.\n\nBanding is LinkedIn's own and USD-based. Combine with the pay floor for the tightest screen.",
            "default": ""
          },
          "parsePayFields": {
            "title": "🧮 Parse pay into structured fields",
            "type": "boolean",
            "description": "Fill salaryMin, salaryMax, salaryCurrency, salaryPeriod, salaryYearlyMin and salaryYearlyMax by parsing the description.\n\nKeep this on — the pay filters above need it. Switch it off only if you want the raw description text and nothing else; the pay columns then come back empty.",
            "default": true
          },
          "roleSearchTerms": {
            "title": "🔎 Role or job title",
            "type": "string",
            "description": "The role to search for. Examples: Software Engineer, Data Analyst, Product Manager, Registered Nurse.\n\nLeave empty to cast a wider net. (The base field 'keywords' is still accepted and takes precedence when set.)"
          },
          "searchLocation": {
            "title": "🌍 Where",
            "type": "string",
            "description": "City, region or country as LinkedIn understands it. Examples: United States, London, Berlin, Remote.\n\n(The base field 'location' is still accepted and takes precedence when set.)"
          },
          "keywords": {
            "title": "🔤 Job keywords (base field)",
            "type": "string",
            "description": "Original base input, kept so existing runs and saved input JSON keep working. When this is filled it overrides 'Role or job title' above.",
            "default": ""
          },
          "location": {
            "title": "📍 Location (base field)",
            "type": "string",
            "description": "Original base input, kept so existing runs and saved input JSON keep working. When this is filled it overrides 'Where' above.",
            "default": ""
          },
          "companyInput": {
            "title": "🏢 Employers to scrape",
            "type": "array",
            "description": "Restrict the search to specific employers. Accepts a name (Google), a company URL (https://www.linkedin.com/company/google/) or a numeric company ID (1441).\n\nLeave empty to search all of LinkedIn.",
            "items": {
              "type": "string"
            }
          },
          "maxJobs": {
            "title": "🎯 Maximum jobs to save",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many MATCHING jobs to save. When a pay filter is active the actor scans a larger pool of candidates to find this many matches, and stops as soon as it has them.\n\n⚠️ LinkedIn's public search tops out near 1,000 results per query, so values above that cannot be reached. Start small (20) to preview, then scale.",
            "default": 20
          },
          "publishedAt": {
            "title": "🕐 Date posted",
            "enum": [
              "",
              "r86400",
              "r604800",
              "r2592000"
            ],
            "type": "string",
            "description": "Only return jobs posted within this window. Choose Any time to disable.",
            "default": ""
          },
          "workType": {
            "title": "🏠 On-site / Remote",
            "enum": [
              "",
              "1",
              "2",
              "3"
            ],
            "type": "string",
            "description": "Restrict by work arrangement. Choose Any to skip this filter.",
            "default": ""
          },
          "contractType": {
            "title": "📋 Employment type",
            "enum": [
              "",
              "F",
              "P",
              "C",
              "T",
              "I",
              "V"
            ],
            "type": "string",
            "description": "Restrict by employment type. Choose Any to skip this filter.\n\n💡 Contract and Temporary roles are the ones most likely to quote an hourly rate rather than a yearly salary.",
            "default": ""
          },
          "experienceLevel": {
            "title": "📈 Seniority",
            "enum": [
              "",
              "1",
              "2",
              "3",
              "4",
              "5",
              "6"
            ],
            "type": "string",
            "description": "Restrict by required seniority. Choose Any to skip this filter.",
            "default": ""
          },
          "geoId": {
            "title": "🌐 LinkedIn region ID (geoId)",
            "type": "string",
            "description": "Optional numeric LinkedIn location ID, sent alongside the location text for consistent regional results.\n\n🏙️ For a city or any other region, run the search on LinkedIn and copy the geoId number from the URL bar. Custom values are supported.",
            "default": ""
          },
          "sortOrder": {
            "title": "📊 Sort order (not honored by LinkedIn)",
            "enum": [
              "",
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Kept so existing input JSON keeps working. LinkedIn's public job endpoint IGNORES sorting — measured: the returned job ID lists are byte-identical with no sort, with Most recent and with Most relevant. The actor therefore sends no sort parameter and logs that the value had no effect, rather than pretending it worked.",
            "default": ""
          },
          "proxyConfiguration": {
            "title": "🛡️ Apify Proxy",
            "type": "object",
            "description": "Enable Apify Proxy and pick groups if LinkedIn throttles your region."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}