{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Jobs Scraper - Keyword & Location Search (No Login)",
    "description": "Scrape LinkedIn jobs by keyword, location, date, company or search URL without a login. Full job details: description, seniority, employment type, function, industries, applicants. $1 per 1,000 jobs, new-jobs-only mode for daily runs, optional official apply-link and ghost-job checks.",
    "version": "0.1",
    "x-build-id": "RzjjqIwh9AgtsgBkT"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kamerozkan~linkedin-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kamerozkan-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/kamerozkan~linkedin-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-kamerozkan-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/kamerozkan~linkedin-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-kamerozkan-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",
            "maxItems": 20,
            "type": "array",
            "description": "One search per keyword, for example \"software engineer\" or \"registered nurse\". LinkedIn boolean syntax such as \"data (analyst OR scientist)\" works. Leave empty when you only use search URLs or company IDs.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          "locations": {
            "title": "Locations",
            "maxItems": 20,
            "type": "array",
            "description": "City, region, or country as you would type it on LinkedIn, for example \"Berlin, Germany\", \"United States\", or \"London Area, United Kingdom\". Every keyword is searched in every location. Leave empty for a worldwide search.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            }
          },
          "searchUrls": {
            "title": "LinkedIn jobs search URLs (optional)",
            "maxItems": 20,
            "type": "array",
            "description": "Open https://www.linkedin.com/jobs/search/ in a private browser window, apply filters, and paste the address bar URL. Keywords, location, geoId, date posted, company, Easy Apply, under-10-applicants, and sort order are read from the URL.",
            "items": {
              "type": "string",
              "pattern": "^https?://([a-z0-9-]+\\.)*linkedin\\.com/jobs\\S*$"
            }
          },
          "datePosted": {
            "title": "Date posted",
            "enum": [
              "anyTime",
              "past24Hours",
              "pastWeek",
              "pastMonth"
            ],
            "type": "string",
            "description": "Only return jobs posted within this window. Use \"Past 24 hours\" for daily schedules.",
            "default": "anyTime"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Most relevant follows LinkedIn ranking; most recent orders by posting date and is the better choice for schedules and new-jobs-only mode.",
            "default": "relevance"
          },
          "companyIds": {
            "title": "Company IDs (optional)",
            "maxItems": 50,
            "type": "array",
            "description": "Numeric LinkedIn company IDs, for example 1441 for Google. Found as f_C in a LinkedIn jobs search URL. Restricts every search to these companies.",
            "items": {
              "type": "string",
              "pattern": "^[0-9]+$"
            }
          },
          "geoId": {
            "title": "Geo ID (optional)",
            "pattern": "^[0-9]*$",
            "type": "string",
            "description": "LinkedIn numeric geoId for exact location targeting, found as geoId in a LinkedIn jobs search URL. Overrides the free-text locations."
          },
          "easyApplyOnly": {
            "title": "Easy Apply only",
            "type": "boolean",
            "description": "Only return jobs that can be applied to with LinkedIn Easy Apply.",
            "default": false
          },
          "under10Applicants": {
            "title": "Under 10 applicants only",
            "type": "boolean",
            "description": "Only return jobs that LinkedIn marks as having fewer than 10 applicants.",
            "default": false
          },
          "workplaceType": {
            "title": "Workplace type",
            "uniqueItems": true,
            "type": "array",
            "description": "Remote, hybrid, or on-site. LinkedIn stopped applying this as a public search filter in August 2026, so the selection is added to the search text instead; treat it as a strong hint, not a guarantee.",
            "items": {
              "type": "string",
              "enum": [
                "Remote",
                "Hybrid",
                "On-site"
              ]
            }
          },
          "jobType": {
            "title": "Job type",
            "uniqueItems": true,
            "type": "array",
            "description": "Added to the search text for the same reason as workplace type.",
            "items": {
              "type": "string",
              "enum": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Volunteer",
                "Other"
              ]
            }
          },
          "experienceLevel": {
            "title": "Experience level",
            "uniqueItems": true,
            "type": "array",
            "description": "Added to the search text for the same reason as workplace type.",
            "items": {
              "type": "string",
              "enum": [
                "Internship",
                "Entry level",
                "Associate",
                "Mid-Senior level",
                "Director",
                "Executive"
              ]
            }
          },
          "maxJobsPerSearch": {
            "title": "Maximum jobs per search",
            "minimum": 10,
            "maximum": 1000,
            "type": "integer",
            "description": "Cost and time cap for each keyword and location combination. LinkedIn's public search never returns more than 1,000 jobs per search; split by city or narrow the date window for more.",
            "default": 100
          },
          "includeJobDetails": {
            "title": "Include job details",
            "type": "boolean",
            "description": "Fetch every job's public detail page: description, seniority level, employment type, job function, industries, applicants, and company logo. Turn off for a fast list of titles, companies, locations, and dates only.",
            "default": true
          },
          "newJobsOnly": {
            "title": "New jobs only (skip jobs seen in earlier runs)",
            "type": "boolean",
            "description": "Remembers every job ID per watchlist namespace and returns only jobs that were not seen before. Ideal for daily schedules: you pay only for new postings. The first run returns everything.",
            "default": false
          },
          "stateNamespace": {
            "title": "Watchlist namespace",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$",
            "minLength": 1,
            "maxLength": 120,
            "type": "string",
            "description": "Separates independent new-jobs-only histories. \"auto\" isolates each saved Task automatically; API callers should set a stable unique value per watchlist.",
            "default": "auto"
          },
          "verifyApplyLinks": {
            "title": "Verify official apply links and ghost-job risk",
            "type": "boolean",
            "description": "Optional premium step. Sends the scraped jobs to the LinkedIn Job Apply Link Verifier Actor, which returns the official employer application URL, live status, confidence, and ghost-job risk into the same rows. Billed separately by that Actor.",
            "default": false
          },
          "maxJobsToVerify": {
            "title": "Maximum jobs to verify",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Cost guardrail for the optional apply-link verification in one run.",
            "default": 100
          },
          "verificationMaxTotalChargeUsd": {
            "title": "Verification cost limit",
            "minimum": 0.005,
            "maximum": 100,
            "type": "number",
            "description": "Maximum pay-per-event charge allowed for the verifier run.",
            "default": 1
          },
          "verifierActorId": {
            "title": "Verifier Actor",
            "type": "string",
            "description": "Actor used for optional apply-link verification.",
            "default": "kamerozkan/linkedin-job-apply-link-verifier"
          },
          "maxConcurrency": {
            "title": "Maximum concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Parallel job detail requests. Higher values are faster but raise the chance of LinkedIn rate limits; the Actor retries with fresh proxy sessions.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy is used by default and included in the price. Each search and each job detail request uses its own proxy session.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}