{
  "openapi": "3.0.1",
  "info": {
    "title": "LinkedIn Company Jobs Monitor & Change Feed",
    "description": "LinkedIn company jobs monitor and change feed for ATS, RPO, and recruitment intelligence. Track new, changed, reopened, and safely confirmed closed roles from public company job pages. No LinkedIn login or cookies. Optional official apply URLs, live status, and ghost-job risk.",
    "version": "0.2",
    "x-build-id": "a7hwqM4pB2CpzYZqK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kamerozkan~linkedin-hiring-signals/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kamerozkan-linkedin-hiring-signals",
        "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-hiring-signals/runs": {
      "post": {
        "operationId": "runs-sync-kamerozkan-linkedin-hiring-signals",
        "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-hiring-signals/run-sync": {
      "post": {
        "operationId": "run-sync-kamerozkan-linkedin-hiring-signals",
        "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": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies",
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "description": "LinkedIn company URLs, company jobs URLs, or numeric LinkedIn company IDs.",
            "items": {
              "type": "string",
              "minLength": 1
            }
          },
          "maxJobsPerCompany": {
            "title": "Maximum jobs per company",
            "minimum": 25,
            "maximum": 5000,
            "type": "integer",
            "description": "Safety limit. A scan that reaches this limit before completeness can be proven is treated as incomplete and will never close missing jobs. Raise it only for unusually large inventories; up to 5,000 jobs are supported.",
            "default": 1000
          },
          "closureConfirmationScans": {
            "title": "Closure confirmation scans",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Number of complete consecutive scans in which a job must be absent before it is marked closed.",
            "default": 2
          },
          "emitInitialSnapshot": {
            "title": "Emit first-seen jobs",
            "type": "boolean",
            "description": "Emit existing jobs as new when a company is monitored for the first time.",
            "default": true
          },
          "emitCurrentSnapshot": {
            "title": "Include current open jobs",
            "type": "boolean",
            "description": "Also emit unchanged open jobs as current. Leave off for a changes-only feed; enable for full snapshots and health checks.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name",
            "pattern": "^[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?$",
            "minLength": 1,
            "maxLength": 63,
            "type": "string",
            "description": "Named key-value store used to preserve job history between runs.",
            "default": "linkedin-hiring-signals-state"
          },
          "stateNamespace": {
            "title": "Watchlist namespace",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]*$",
            "minLength": 1,
            "maxLength": 120,
            "type": "string",
            "description": "Separates independent watchlists. \"auto\" isolates each saved Task automatically; API callers should set a stable unique value per watchlist.",
            "default": "auto"
          },
          "closedJobRetentionDays": {
            "title": "Closed-job retention",
            "minimum": 7,
            "maximum": 730,
            "type": "integer",
            "description": "How long closed jobs remain in state so reopenings can be detected.",
            "default": 90
          },
          "maxConcurrency": {
            "title": "Maximum concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Number of companies scanned in parallel.",
            "default": 3
          },
          "strictClosureQualityGate": {
            "title": "Require 95% closure-safe coverage",
            "type": "boolean",
            "description": "Fail the run when fewer than 95% of company inventories are fully complete. Partial output remains available, but incomplete scans never advance closure state.",
            "default": false
          },
          "verifyApplyLinks": {
            "title": "Verify official apply links",
            "type": "boolean",
            "description": "Enrich new, changed, and reopened jobs with official apply URLs, status, confidence, and ghost-job risk. Results are merged into this Actor's main dataset.",
            "default": false
          },
          "strictVerificationQualityGate": {
            "title": "Require 95% verification coverage",
            "type": "boolean",
            "description": "When verification is enabled, fail safely if fewer than 95% of submitted jobs receive a verifier result. Failed verification never commits state, webhooks, or company-scan billing, so a retry can recover the same events.",
            "default": true
          },
          "verifierActorId": {
            "title": "Apply Link Verifier Actor",
            "type": "string",
            "description": "Actor ID or username/name used when premium verification is enabled.",
            "default": "kamerozkan/linkedin-job-apply-link-verifier"
          },
          "maxJobsToVerify": {
            "title": "Maximum jobs to verify",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Cost guardrail for official apply-link verification in one run.",
            "default": 500
          },
          "verificationMaxTotalChargeUsd": {
            "title": "Verification cost limit",
            "minimum": 0.004,
            "maximum": 100,
            "type": "number",
            "description": "Maximum pay-per-event charge allowed for the child verification run. The default covers up to 500 results at the current $0.004 per verified job price.",
            "default": 2
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Optional HTTPS endpoint that receives the enriched event rows after each run. Empty runs do not send a webhook."
          },
          "webhookSecret": {
            "title": "Webhook signing secret",
            "type": "string",
            "description": "Optional secret used to sign the exact request body with HMAC-SHA256 in the x-hiring-signals-signature header."
          },
          "webhookBatchSize": {
            "title": "Webhook batch size",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum event rows sent in each webhook request.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy. Each company scan keeps one stable proxy session and cookie jar for reliable pagination.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}