{
  "openapi": "3.0.1",
  "info": {
    "title": "Careers Page Jobs Scraper — Any Company Website, Any ATS",
    "description": "Give company websites, get every open role: finds the job board behind each careers page (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Recruitee, Personio, Breezy) and reports roles new and closed since your last run. Sites with no board found are listed with the reason. No login.",
    "version": "0.1",
    "x-build-id": "HQhunIjEjr5FS60cl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/northbell~careers-page-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-northbell-careers-page-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/northbell~careers-page-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-northbell-careers-page-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/northbell~careers-page-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-northbell-careers-page-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": [
          "websites"
        ],
        "properties": {
          "websites": {
            "title": "Company websites",
            "type": "array",
            "description": "One company per line: its website (stripe.com), its careers page, or a job board link (jobs.lever.co/acme). The Actor finds the job board behind the site. Up to 500 per run.",
            "items": {
              "type": "string"
            }
          },
          "output": {
            "title": "What to return",
            "enum": [
              "all",
              "changes"
            ],
            "type": "string",
            "description": "Schedule this Actor daily or weekly with the same companies and pick \"Only new\" to pay only for new roles. The first run returns everything (there is nothing to compare with yet). Closed roles and the per-company rows are always free.",
            "default": "all"
          },
          "titleKeywords": {
            "title": "Title contains (optional)",
            "type": "string",
            "description": "Comma-separated. Keep roles whose title contains any of these, e.g. \"engineer, data\"."
          },
          "locationKeywords": {
            "title": "Location contains (optional)",
            "type": "string",
            "description": "Comma-separated. Matched against every location of the role, e.g. \"london, remote\"."
          },
          "remoteOnly": {
            "title": "Remote roles only",
            "type": "boolean",
            "description": "Keep only roles the board marks as remote.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within the last N days (optional)",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only roles first published in the last N days. Roles with no publish date are left out when you set this, and counted in OUTPUT."
          },
          "experienceLevels": {
            "title": "Experience level (optional)",
            "type": "array",
            "description": "Keep only these levels, read from the job title (the same words on every northbell job scraper; each row also gets a seniority column). Product, account and other non-people \"managers\" count as mid level.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "entry",
                "mid",
                "senior",
                "lead",
                "manager",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Intern / apprentice",
                "Entry level / junior / new grad",
                "Mid level (no level word in the title)",
                "Senior",
                "Lead / staff / principal",
                "People manager",
                "Director / head of",
                "VP / C-level"
              ]
            }
          },
          "employmentTypes": {
            "title": "Employment type (optional)",
            "type": "array",
            "description": "From the board's own employment type where it states one, else from the title. Roles whose type is not stated are left out when you set this, and counted in OUTPUT.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "contract",
                "temporary",
                "internship"
              ],
              "enumTitles": [
                "Full time",
                "Part time",
                "Contract / freelance",
                "Temporary",
                "Internship"
              ]
            }
          },
          "withSalaryOnly": {
            "title": "Only roles with a published salary",
            "type": "boolean",
            "description": "Keep only roles where the company published a pay range.",
            "default": false
          },
          "includeDescription": {
            "title": "Include the full description",
            "type": "boolean",
            "description": "Off by default for a smaller, faster table. On Workday, Workable and SmartRecruiters the text is one more request per returned role.",
            "default": false
          },
          "trackChanges": {
            "title": "Report new and closed roles since the last run",
            "type": "boolean",
            "description": "The board returns every open role at once, so the difference from your previous run is exact — not a sample. First run marks everything as unknown (null).",
            "default": true
          },
          "guessFromName": {
            "title": "Also try the company name as the board name",
            "type": "boolean",
            "description": "When the site does not link to its job board (many careers pages are drawn by JavaScript), ask Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Personio and Breezy for a board with the company's name, and keep it only when the board names the company. Rows found this way say detectedBy \"name\". Turn off to use only links found on the site.",
            "default": true
          },
          "maxJobsPerCompany": {
            "title": "Max roles per company",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stops returning roles from one company after this many. The new/closed comparison still uses the whole board.",
            "default": 1000
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}