{
  "openapi": "3.0.1",
  "info": {
    "title": "ATS Jobs by Company Domain",
    "description": "Resolve which applicant tracking system a company uses from its domain (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee) through the vendors' own public JSON endpoints, then return every live opening as one flat record with a stable id, location, remote flag and apply URL.",
    "version": "0.1",
    "x-build-id": "0E83esI2RPrNnmiQ1"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/omargnagy~ats-jobs-by-domain/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-omargnagy-ats-jobs-by-domain",
        "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/omargnagy~ats-jobs-by-domain/runs": {
      "post": {
        "operationId": "runs-sync-omargnagy-ats-jobs-by-domain",
        "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/omargnagy~ats-jobs-by-domain/run-sync": {
      "post": {
        "operationId": "run-sync-omargnagy-ats-jobs-by-domain",
        "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": [
          "mode",
          "companies"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "jobs",
              "resolve"
            ],
            "type": "string",
            "description": "jobs = resolve the ATS and return every live opening. resolve = only report which ATS each company uses and how many jobs it has, without fetching the jobs. Any other value is rejected.",
            "default": "jobs"
          },
          "companies": {
            "title": "Company domains or names",
            "type": "array",
            "description": "Required in both modes. One entry per company: a domain such as stripe.com, a full URL such as https://www.spotify.com/careers, or a plain name such as PostHog. Up to 500 entries per run, processed in internal batches of 20. The default cap is the first 100; raise maxCompanies to 500 for the whole list. Entries past the cap are reported as skipped records, never dropped silently. If the board slug does not match the domain, force it with the prefix form ats:slug, for example smartrecruiters:Ubisoft2, greenhouse:stripe, lever:spotify, ashby:posthog, workable:exotec or recruitee:bunq.",
            "items": {
              "type": "string"
            }
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Upper bound on job records returned for each company. Ignored when mode is resolve, because that mode returns no job records.",
            "default": 200
          },
          "includeDescription": {
            "title": "Include job description",
            "type": "boolean",
            "description": "Add a plain text description to every job record. Turning this off makes runs faster and payloads smaller, and for SmartRecruiters it also removes one extra request per job.",
            "default": true
          },
          "descriptionMaxChars": {
            "title": "Description length limit",
            "minimum": 0,
            "maximum": 20000,
            "type": "integer",
            "description": "Maximum characters kept in each description, longer text is truncated with a trailing ellipsis. Only used when Include job description is on. Set 0 to keep the full text.",
            "default": 1200
          },
          "includeResolutionRecords": {
            "title": "Include one resolution record per company",
            "type": "boolean",
            "description": "Write a type=resolution record for every input entry, carrying the ATS it resolved to, the slug used, how many jobs were found and a reason field for anything unresolved. Turn it off to get a dataset of job records only. Always on in resolve mode, which returns nothing else.",
            "default": true
          },
          "maxCompanies": {
            "title": "Max companies per run",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Safety cap on how many entries from the list are processed. The default is 100 and the ceiling is 500. This is a cost guard on a pay-per-event Actor: a large pasted list gets a bounded first run instead of a surprise bill. Raise it to 500 when you want the whole list. Entries past the cap are written as skipped records with the reason.",
            "default": 100
          },
          "employmentTypeFilter": {
            "title": "Employment types to keep",
            "type": "array",
            "description": "Optional. Keep only jobs whose employment type is one of these, for example Contract, Freelance, Part-time, Internship, Temporary, Full-time. Empty means no filter. Applied before the per-company limit, so the limit counts matching jobs. Greenhouse's public board endpoint publishes no employment type, so when you also set a title pattern a job is kept if it matches EITHER filter.",
            "items": {
              "type": "string"
            }
          },
          "titleRegex": {
            "title": "Job title pattern",
            "type": "string",
            "description": "Optional. Case-insensitive regular expression the job title must match, for example (contract|fractional|freelance|part[- ]time|interim). Empty means no filter. Applied before the per-company limit. Maximum 200 characters; an invalid pattern is reported as an input error instead of being ignored."
          },
          "resolveViaCareersPage": {
            "title": "Read the careers page when slug guessing fails",
            "type": "boolean",
            "description": "When no board is found from the domain name, read the company's own /careers page and homepage and follow the job board link found there. This is what resolves companies whose board slug is not their domain. It only runs after guessing has failed, so it costs nothing for a company that resolves normally. Turn it off for the lowest possible latency.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}