{
  "openapi": "3.0.1",
  "info": {
    "title": "Ashby Salary Scraper - Startup Job Pay Ranges",
    "description": "Ashby job postings with normalized annual salary ranges, equity flags and new-since-last-run detection.",
    "version": "0.5",
    "x-build-id": "d3FP37yKyh6i7rRLk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/datagrit~ashby-salary-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-datagrit-ashby-salary-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/datagrit~ashby-salary-scraper/runs": {
      "post": {
        "operationId": "runs-sync-datagrit-ashby-salary-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/datagrit~ashby-salary-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-datagrit-ashby-salary-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": [
          "companies"
        ],
        "properties": {
          "companies": {
            "title": "Companies (Ashby boards)",
            "type": "array",
            "description": "Ashby job board names or URLs, one per company. The name is the last part of the careers URL: jobs.ashbyhq.com/ramp means the name is ramp; names with spaces work too (jobs.ashbyhq.com/the%20browser%20company or the browser company). Boards that do not exist and entries that are not a board name or an Ashby link are skipped and listed in the run status; if none of the boards can be read, the run fails.",
            "default": [
              "ramp"
            ],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Job title keywords",
            "type": "array",
            "description": "Optional. Keep a posting when its job title contains any of these words (case-insensitive), for example engineer or designer. Leave empty for all roles.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "departments": {
            "title": "Departments",
            "type": "array",
            "description": "Optional. Keep only postings whose department contains one of these words (case-insensitive), for example Engineering or Sales. Companies name departments differently (OpenAI files sales roles under Go To Market), so check the department column of a first run.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "teams": {
            "title": "Teams",
            "type": "array",
            "description": "Optional. Keep only postings whose team, the level below the department, contains one of these words (case-insensitive), for example Backend or Sales. Combined with departments, both must match.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Optional. Keep only postings whose primary or secondary locations, country, region or city contain one of these as a whole word or phrase, for example London, Germany or US (US matches Remote (US) but not Australia). Countries appear as the employer writes them, for example USA or United States.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote roles only",
            "type": "boolean",
            "description": "Keep only fully remote postings: workplace type Remote. Hybrid and on-site roles are excluded even though Ashby flags Hybrid roles as isRemote. When the employer did not set a workplace type, the isRemote flag decides, and without it the word remote in the primary location.",
            "default": false
          },
          "onlyWithSalary": {
            "title": "Only postings with a published salary",
            "type": "boolean",
            "description": "Skip postings that do not show a salary range. Employers in some regions must publish pay, so this is a quick way to build a pay dataset.",
            "default": false
          },
          "minAnnualSalary": {
            "title": "Minimum annual salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only postings whose top salary, converted to a yearly amount, reaches this value in the currency of the headline range (salaryCurrency). 0 disables the filter. Monthly, weekly, daily and hourly pay is annualised (12, 52, 260 and 2080 periods). Currencies are not converted, so combine it with the currency filter.",
            "default": 0
          },
          "salaryCurrencies": {
            "title": "Salary currencies",
            "type": "array",
            "description": "Optional. Keep only postings whose headline salary range (salaryMin/salaryMax, output field salaryCurrency) is in one of these currencies, as three-letter codes such as USD, GBP or EUR. A posting with a USD headline and an extra Canadian pay tier counts as USD; all tier currencies are listed in payTierCurrencies.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "publishedWithinDays": {
            "title": "Published within days",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only postings published at most N x 24 hours before the run. 0 disables the filter.",
            "default": 0
          },
          "onlyNewSinceLastRun": {
            "title": "Only postings new since my last run",
            "type": "boolean",
            "description": "Return only postings this Actor has not already delivered to you for the same company and the same filters. The memory is kept in a storage on your account, separately for every company and every combination of filters (and state key), and only postings actually returned in a run are remembered, so postings cut off by the result limit or excluded by other filters come back later. The first run returns everything that matches.",
            "default": false
          },
          "stateKey": {
            "title": "State key for only-new mode",
            "type": "string",
            "description": "Optional name for the only-new memory. Two schedules with the same filters share one memory; give each a different state key (for example team-a and team-b) when each of them must receive every new posting.",
            "default": ""
          },
          "includeDescription": {
            "title": "Include description text",
            "type": "boolean",
            "description": "Adds the plain-text job description, cut to 8000 characters. Off by default to keep the dataset small.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Stop after this many postings in total across all companies.",
            "default": 50
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy. Leave disabled: the Ashby job board API is public and needs none.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}