{
  "openapi": "3.0.1",
  "info": {
    "title": "Ashby Jobs Scraper — Company Job Boards API",
    "description": "Scrape live jobs from any company's Ashby board (jobs.ashbyhq.com). Pass a slug OR just a company website — it auto-discovers the Ashby board for you. Clean JSON: title, location, remote, salary, apply URL, plus filters, delta mode & optional BYOK AI enrichment. Ashby powers OpenAI, Ramp & Linear.",
    "version": "0.1",
    "x-build-id": "cOhNdTGFq5VJm7ouU"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nomad-agent~ashby-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nomad-agent-ashby-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/nomad-agent~ashby-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nomad-agent-ashby-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/nomad-agent~ashby-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nomad-agent-ashby-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": {
          "companies": {
            "title": "Companies (Ashby slugs)",
            "type": "array",
            "description": "Company slugs as used on their Ashby board — the <code>&lt;slug&gt;</code> in <code>jobs.ashbyhq.com/&lt;slug&gt;</code> (full board URLs also accepted). Don't know the slug, or not sure the company even uses Ashby? Use <b>Company websites</b> below instead and let the Actor find the board for you. Provide either or both.",
            "items": {
              "type": "string"
            }
          },
          "companyDomains": {
            "title": "Company websites (auto-discover the Ashby board)",
            "type": "array",
            "description": "Plain company websites or domains (e.g. <code>ramp.com</code>, <code>https://linear.app</code>) — no need to know the Ashby slug, or even that the company runs on Ashby. The Actor probes each site + its careers page and resolves the <code>jobs.ashbyhq.com</code> board automatically, then scrapes it. A website with no Ashby board is reported as a warning row (see README), never an error — the run continues.",
            "items": {
              "type": "string"
            }
          },
          "keyword": {
            "title": "Keyword filter",
            "type": "string",
            "description": "Optional case-insensitive substring match on the job title (e.g. <code>engineer</code>)."
          },
          "titleExclude": {
            "title": "Exclude titles containing",
            "type": "array",
            "description": "Drop postings whose title contains any of these substrings (case-insensitive). Example: [<code>intern</code>, <code>staffing</code>].",
            "items": {
              "type": "string"
            }
          },
          "locationFilter": {
            "title": "Location filter",
            "type": "string",
            "description": "Optional case-insensitive substring match on the location (e.g. <code>remote</code>, <code>london</code>)."
          },
          "descriptionSearch": {
            "title": "Description contains",
            "type": "string",
            "description": "Keep only postings whose description text contains this substring (case-insensitive, e.g. <code>kubernetes</code>). The description is fetched for filtering even when <b>Include description</b> is off."
          },
          "descriptionExclude": {
            "title": "Exclude descriptions containing",
            "type": "array",
            "description": "Drop postings whose description text contains any of these substrings (case-insensitive). Example: [<code>clearance</code>, <code>on-call</code>].",
            "items": {
              "type": "string"
            }
          },
          "companySearch": {
            "title": "Company name contains",
            "type": "string",
            "description": "Keep only postings whose resolved company display name contains this substring (case-insensitive). Handy when a domain resolves to a parent org with several brands."
          },
          "postedWithin": {
            "title": "Posted within",
            "pattern": "^(any|[0-9]+[hdwm])$",
            "type": "string",
            "description": "Keep only jobs published inside this window. Use <code>any</code> for no date filter, or a duration — <code>1h</code>, <code>24h</code>, <code>3d</code>, <code>2w</code>, <code>6m</code>. Jobs the source gave no date for are dropped rather than guessed at. Replaces <code>postedSince</code>, still accepted for existing integrations.",
            "default": "any"
          },
          "postedAfter": {
            "title": "Posted on or after (date)",
            "type": "string",
            "description": "Absolute lower date bound, <code>YYYY-MM-DD</code>. Keep only postings first published on or after this date. Postings with no posting date are dropped (never guessed). Combine with <b>Posted on or before</b> for a fixed window."
          },
          "postedBefore": {
            "title": "Posted on or before (date)",
            "type": "string",
            "description": "Absolute upper date bound, <code>YYYY-MM-DD</code>. Keep only postings first published on or before this date. Postings with no posting date are dropped (never guessed)."
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only postings Ashby flags isRemote=true. Postings where Ashby doesn't state isRemote at all are treated as not-remote and excluded too.",
            "default": false
          },
          "minSalary": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only postings whose stated pay range reaches at least this amount (compared against the top of each posting's range). Only a minority of Ashby companies disclose pay — when this is set, postings with no numeric salary are dropped (never guessed). Same currency units as the posting; no currency conversion is done."
          },
          "maxSalary": {
            "title": "Maximum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only postings whose stated pay range starts at or below this amount (compared against the bottom of each posting's range). When set, postings with no numeric salary are dropped (never guessed). Same currency units as the posting; no currency conversion is done."
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Include a plain-text description snippet per posting. Turn off for lighter, faster output.",
            "default": true
          },
          "outputProfile": {
            "title": "Output profile",
            "enum": [
              "full",
              "compact",
              "mini"
            ],
            "type": "string",
            "description": "Shape the output payload. <code>full</code> (default) returns every field. <code>compact</code> drops the heavy <code>snippet</code> description text. <code>mini</code> drops <code>snippet</code> and the structured salary breakdown (<code>salaryMin/Max/Currency/Period</code>), keeping just the core identity/link fields plus the <code>salary</code> display text — smallest rows for high-volume runs.",
            "default": "full"
          },
          "maxItemsPerCompany": {
            "title": "Max items per company",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap postings returned per company. Each posting returned is a billed result, so this keeps one large board from dominating the run's cost. 0 = no cap.",
            "default": 100
          },
          "maxItems": {
            "title": "Max items (total)",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "Hard cap on total postings returned across all companies. Each posting returned is billed as a paid result — raise this only as high as you actually need. 0 = no cap (not recommended for large company lists).",
            "default": 200
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 16,
            "type": "integer",
            "description": "How many companies to fetch at the same time. Higher is faster but hits the source API harder — the default is a safe, fast setting for almost every run.",
            "default": 8
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}