{
  "openapi": "3.0.1",
  "info": {
    "title": "Job Board Scraper — Greenhouse, Lever & Ashby",
    "description": "Collect and normalize public jobs from Greenhouse, Lever, and Ashby. Filter by keyword, location, remote status, or date and track changes across runs. No browser, login, API key, or residential proxy. Just $0.001 per job ($1 per 1,000).",
    "version": "1.0",
    "x-build-id": "HkCbCbMzMUmtnWPpf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/funny_ground~public-job-board-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-funny_ground-public-job-board-aggregator",
        "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/funny_ground~public-job-board-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-funny_ground-public-job-board-aggregator",
        "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/funny_ground~public-job-board-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-funny_ground-public-job-board-aggregator",
        "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": [
          "jobBoards"
        ],
        "properties": {
          "jobBoards": {
            "title": "Job boards",
            "minItems": 1,
            "maxItems": 100,
            "type": "array",
            "description": "Public company job board URLs. Supported examples: boards.greenhouse.io/company, jobs.lever.co/company, jobs.eu.lever.co/company, jobs.ashbyhq.com/company.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "Job board URL",
                  "description": "HTTPS URL of a public Greenhouse, Lever, or Ashby job board.",
                  "type": "string",
                  "editor": "textfield",
                  "pattern": "^https://.+"
                },
                "company": {
                  "title": "Company name (optional)",
                  "description": "Overrides the company name inferred from the board.",
                  "type": "string",
                  "editor": "textfield"
                }
              },
              "required": [
                "url"
              ],
              "additionalProperties": false
            },
            "default": [
              {
                "url": "https://boards.greenhouse.io/stripe",
                "company": "Stripe"
              },
              {
                "url": "https://jobs.eu.lever.co/lever",
                "company": "Lever"
              },
              {
                "url": "https://jobs.ashbyhq.com/ashby",
                "company": "Ashby"
              }
            ]
          },
          "includeDescriptions": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Return both cleaned plain text and source HTML descriptions.",
            "default": true
          },
          "includeCompensation": {
            "title": "Include compensation",
            "type": "boolean",
            "description": "Return structured compensation when the source publishes it, otherwise try to recognize a salary range from the description.",
            "default": true
          },
          "maxJobsPerBoard": {
            "title": "Maximum jobs per board",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "0 means no limit. The limit is applied after filtering.",
            "default": 0
          },
          "includeKeywords": {
            "title": "Include keywords",
            "type": "array",
            "description": "Keep a job when at least one keyword appears in its title, description, department, or team. Leave empty to include all jobs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Remove a job when any keyword appears in its title, description, department, or team.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep jobs whose location contains at least one supplied value. Matching is case-insensitive.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Keep only jobs explicitly marked remote by the source or location text.",
            "default": false
          },
          "publishedAfter": {
            "title": "Published or updated after",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Optional ISO date such as 2026-01-01. Jobs with no published/updated date are retained."
          },
          "changeMode": {
            "title": "Incremental output mode",
            "enum": [
              "all",
              "new-and-updated",
              "all-changes"
            ],
            "type": "string",
            "description": "All jobs returns the current snapshot. New and updated suppresses unchanged jobs. All changes also emits removed jobs from successful boards.",
            "default": "all"
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "Runs with the same board list and state key compare against the same saved snapshot.",
            "default": "default"
          },
          "maxConcurrency": {
            "title": "Maximum concurrent boards",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Each board normally needs one or two lightweight API requests.",
            "default": 15
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 5,
            "maximum": 120,
            "type": "integer",
            "description": "Abort an individual public API request after this many seconds.",
            "default": 30
          },
          "maxRetries": {
            "title": "Maximum retries",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Retries temporary timeouts, rate limits, and server errors with exponential backoff.",
            "default": 3
          },
          "failOnBoardError": {
            "title": "Fail the run if any board fails",
            "type": "boolean",
            "description": "Disabled by default so healthy boards still return results. Failures are always included in the run summary.",
            "default": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}