{
  "openapi": "3.0.1",
  "info": {
    "title": "Greenhouse, Lever, Ashby & Workable Jobs: ATS Job Scraper",
    "description": "Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee jobs in one table: $1 per 1,000 jobs. Title, location, remote, salary, posted date, apply link, description. Paste job board links, careers pages or names. No duplicates, new-jobs monitoring.",
    "version": "0.2",
    "x-build-id": "MvK5ox9XI2lzfqbsk"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rowsmithhq~career-board-job-feed/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rowsmithhq-career-board-job-feed",
        "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/rowsmithhq~career-board-job-feed/runs": {
      "post": {
        "operationId": "runs-sync-rowsmithhq-career-board-job-feed",
        "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/rowsmithhq~career-board-job-feed/run-sync": {
      "post": {
        "operationId": "run-sync-rowsmithhq-career-board-job-feed",
        "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",
            "type": "array",
            "description": "One per line. A job board link (boards.greenhouse.io/stripe, jobs.lever.co/spotify, jobs.ashbyhq.com/openai, apply.workable.com/huggingface, jobs.smartrecruiters.com/Canva, bunq.recruitee.com), a company's own careers page (the board on it is found for you), or just the board name, like stripe (looked up on all six systems). To skip the look-up, put the system first: lever:spotify.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Job title keywords",
            "type": "array",
            "description": "Keep jobs whose title contains any of these, e.g. engineer, data, product manager. A keyword also finds longer words ('engineer' finds 'Engineering'); keywords of 3 letters or fewer (AI, iOS, C++) match whole words only.",
            "items": {
              "type": "string"
            }
          },
          "searchDescriptions": {
            "title": "Also search the job descriptions",
            "type": "boolean",
            "description": "Also keep jobs whose description, not only the title, contains a keyword (e.g. 'Python' or 'visa sponsorship').",
            "default": false
          },
          "excludeKeywords": {
            "title": "Leave out titles with these words",
            "type": "array",
            "description": "Drop jobs whose title contains any of these, e.g. intern, senior, sales.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Keep jobs in any of these places: a city, state or country, e.g. London, Berlin, United States. Country names and codes both work, and US or Canadian state codes count for their country ('US' finds 'Austin, TX'). World regions work too: Europe, EU, EMEA, North America, LATAM, APAC. 'Remote' keeps remote jobs.",
            "items": {
              "type": "string"
            }
          },
          "workplace": {
            "title": "Remote or on-site",
            "enum": [
              "any",
              "remote",
              "remoteOrHybrid",
              "onsite"
            ],
            "type": "string",
            "description": "Remote means the board, the title or the location says remote. Hybrid jobs count as hybrid only where the board says so.",
            "default": "any"
          },
          "postedSince": {
            "title": "Posted since",
            "type": "string",
            "description": "Only jobs first published on or after this date (e.g. 2026-10-01) or within this period (e.g. 7 days). When set, jobs whose board shows no date are left out."
          },
          "maxJobs": {
            "title": "Maximum jobs in total",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "The run stops after this many jobs. Companies are read in the order you listed them, each company's newest jobs first.",
            "default": 1000
          },
          "maxJobsPerCompany": {
            "title": "Maximum jobs per company",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "0 means no limit. For example, 20 gives each company's 20 newest matching jobs.",
            "default": 0
          },
          "includeDescription": {
            "title": "Include the job description",
            "type": "boolean",
            "description": "The full description as plain text and as clean HTML (formatting only, safe to show on a website). Turn off for a lighter table.",
            "default": true
          },
          "mergeRepeatedPostings": {
            "title": "Merge repeated postings",
            "type": "boolean",
            "description": "On: when a company lists the same job more than once (same title, place and description), you get it once: the newest posting. Off: every posting is its own row (useful for counting openings). Jobs with the same ID or link are always delivered once.",
            "default": true
          },
          "onlyNewJobs": {
            "title": "Only jobs not delivered before",
            "type": "boolean",
            "description": "Return only jobs this monitor has not delivered in an earlier run, so you pay only for new jobs (plus $0.001 per company checked). The first run returns all matching jobs; with job alerts' 'Start from now', the first run only saves the starting point. Job IDs are remembered for 180 days in a key-value store named career-board-job-feed-memory in your account.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Separate memories for separate searches, e.g. design-jobs and sales-jobs. Give each saved task or schedule its own name: tasks with the same name share one memory. (With job alerts, a saved task left on 'default' keeps its own.)",
            "default": "default"
          },
          "alertWebhookUrl": {
            "title": "Send new jobs to (your webhook)",
            "type": "string",
            "description": "Paste a Make, Zapier or n8n webhook, or any https address that accepts JSON (Slack and Discord incoming webhooks get their own format, not yet tested with real accounts; Microsoft Teams is not supported yet). After each run you get one message with the new jobs, and nothing when nothing is new. This turns on 'Only jobs not delivered before'. No extra charge."
          },
          "alertMaxJobs": {
            "title": "Jobs listed in one message",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Any more are counted, with a link to the full table. A message lists up to 50 jobs (the rest are counted).",
            "default": 20
          },
          "alertStartFromNow": {
            "title": "Start from now",
            "type": "boolean",
            "description": "The first run saves today's open jobs as already seen and sends a short 'watching' message. Only the company checks are charged. The same happens on the first run after you change the filters, so old jobs are never announced as new. When off, the first run delivers and charges every open job, like a normal run.",
            "default": true
          },
          "alertWhenNothingNew": {
            "title": "Also tell me when there is nothing new",
            "type": "boolean",
            "description": "A short note after runs with no new jobs (proof that it ran).",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}