{
  "title": "Ashby Jobs Scraper",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "companies": {
      "title": "Ashby boards (slugs or URLs)",
      "type": "array",
      "description": "One entry per company. Paste the board slug or any Ashby URL - both work. The slug is the path segment in https://jobs.ashbyhq.com/<slug> (for example 'openai' or 'ramp'); posting URLs like https://jobs.ashbyhq.com/openai/<job-id> and API URLs are parsed too. Slugs are case-insensitive. A slug with no Ashby board returns HTTP 404 and is reported for that board only; the rest of the run continues. Boards listed here are scraped IN ADDITION to the ones in 'preset' - set preset to 'none' to scrape only your list.",
      "editor": "stringList",
      "prefill": [],
      "sectionCaption": "1 · Choose Ashby boards",
      "sectionDescription": "Your board list and preset are combined. Select none when you want only your own list."
    },
    "preset": {
      "title": "Preset board list",
      "type": "string",
      "description": "A ready-made list of boards, added to whatever you put in 'companies'. 'starter' = Ramp, Plaid, Notion, Linear (about 440 postings, a couple of seconds). 'ai-labs' = OpenAI, Harvey, ElevenLabs, Sierra, Perplexity, Cohere, Cognition (about 1,900 postings; raise the caps to get them all). 'ai-labs-lite' = Perplexity, Cohere, Cognition. 'dev-tools' = Linear, Replit, Supabase, Modal, Lovable. Every slug was verified live on 2026-09-25. If you leave both this and 'companies' empty, the run uses 'starter' so you always get a sample.",
      "editor": "select",
      "enum": [
        "none",
        "starter",
        "ai-labs",
        "ai-labs-lite",
        "dev-tools"
      ],
      "enumTitles": [
        "none - only the boards in 'companies'",
        "starter - Ramp, Plaid, Notion, Linear",
        "ai-labs - OpenAI, Harvey, ElevenLabs, Sierra, Perplexity, Cohere, Cognition",
        "ai-labs-lite - Perplexity, Cohere, Cognition",
        "dev-tools - Linear, Replit, Supabase, Modal, Lovable"
      ],
      "prefill": "starter"
    },
    "includeCompensation": {
      "title": "Include salary ranges",
      "type": "boolean",
      "description": "Ask Ashby for the compensation block and parse it into salaryMin, salaryMax, salaryCurrency, salaryInterval, salaryTiers, offersEquity and compensationSummary. Only employers that publish pay on their postings have values here - on 2026-09-25 that was 149 of 156 Ramp postings and 0 of 129 Notion postings. Turning this off leaves those columns empty and makes the response a little smaller.",
      "editor": "checkbox",
      "default": true,
      "sectionCaption": "2 · Choose posting details",
      "sectionDescription": "Optional fields and filters; employer coverage varies."
    },
    "includeDescription": {
      "title": "Include job description",
      "type": "boolean",
      "description": "Add descriptionText: the employer's description as plain text, capped at 5,000 characters (Ashby descriptions run up to about 12,000). Off by default because it multiplies the dataset size - OpenAI's board alone is over 800 postings.",
      "editor": "checkbox",
      "default": false
    },
    "titleContains": {
      "title": "Job title contains",
      "type": "string",
      "description": "Keep only postings whose title contains this text. Case-insensitive, partial match - 'engineer' matches 'Software Engineer, Backend'. Leave empty for every title.",
      "editor": "textfield"
    },
    "remoteOnly": {
      "title": "Remote only",
      "type": "boolean",
      "description": "Keep only postings that can be worked fully remotely: the workplace type Ashby publishes is Remote, or one of the posting's listed locations names a remote option (for example 'Remote (US)'). Hybrid and on-site roles are dropped on purpose - Ashby's own isRemote flag is also set on hybrid roles, so it is not used.",
      "editor": "checkbox",
      "default": false
    },
    "maxResultsPerCompany": {
      "title": "Max postings per company",
      "type": "integer",
      "description": "Upper bound on rows saved for each board. Postings are sorted newest-published first, so a low cap keeps the freshest roles. Ashby returns a whole board in one request, so raising this costs almost nothing in time.",
      "editor": "number",
      "default": 200,
      "minimum": 1,
      "sectionCaption": "3 · Limit this run",
      "sectionDescription": "Per-board and overall caps bound saved output."
    },
    "maxResults": {
      "title": "Maximum postings across all boards",
      "type": "integer",
      "description": "Hard cap on rows for the whole run, across all boards. Boards are processed in order (your 'companies' first, then the preset), so a cap below the combined total cuts off the boards at the end of the list - raise it, or split the run, when scraping many large boards.",
      "editor": "number",
      "default": 500,
      "minimum": 1
    },
    "maxRunSeconds": {
      "title": "Run time budget (seconds)",
      "type": "integer",
      "description": "Wall-clock budget for the crawl. When it is reached the Actor stops cleanly, keeps everything already saved, and logs which boards it did not reach - instead of being killed with a failed run. Raise it when you pass a long list of boards.",
      "editor": "number",
      "default": 240,
      "minimum": 30
    },
    "onlyNewSinceLastRun": {
      "title": "Only postings new since the last run",
      "type": "boolean",
      "description": "Save only matching postings not successfully saved by a previous monitor run. IDs are retained in the named ashby-jobs-scraper-state store. The first run returns matching postings within your limits; capped or filtered-out jobs remain eligible later. A run with no new matching jobs succeeds with an empty dataset. Avoid concurrent monitor runs for the same board.",
      "editor": "checkbox",
      "default": false,
      "sectionCaption": "4 · Optional new-posting history",
      "sectionDescription": "The first enabled run establishes saved history. Use one writer per board."
    }
  },
  "description": "Choose Ashby board slugs or URLs, review any preset boards, then set posting filters and caps. Salary and workplace details retain the employer’s published meaning."
}
