# Ashby Jobs Scraper — Jobs, Salaries & Descriptions (ATS) (`haketa/ashby-jobs-scraper`) Actor

Scrape job postings from any Ashby (ashbyhq.com) career page — no API key. Export title, company, department, location, salary, equity, apply URL & full description to JSON/CSV/Excel. Search jobs by keyword across 50+ Ashby companies, or target your own. Great for ATS aggregation & recruiting.

- **URL**: https://apify.com/haketa/ashby-jobs-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.30 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Ashby Jobs Scraper 💼 — Jobs, Salaries & Full Descriptions

> Extract job postings from any **Ashby** (`jobs.ashbyhq.com`) careers page — with **salary**, **equity**, structured location and the **full job description**. Search by keyword across **50+ popular Ashby companies at once**, or target your own. **No API key. No login.**

[![No API key](https://img.shields.io/badge/API%20key-not%20required-brightgreen)](#)
[![Salary data](https://img.shields.io/badge/salary%20%26%20equity-included-blueviolet)](#)
[![Multi-company](https://img.shields.io/badge/search-50%2B%20companies-orange)](#)
[![Output](https://img.shields.io/badge/export-JSON%20%7C%20CSV%20%7C%20Excel-blue)](#)
[![Speed](https://img.shields.io/badge/fast-pure%20HTTP-success)](#)

**Ashby** is the modern applicant-tracking system (ATS) behind the careers pages of many of the fastest-growing tech, AI and startup companies — OpenAI, Ramp, Notion, Perplexity, Cursor, Snowflake, and hundreds more. This actor turns those postings into clean, structured **JSON / CSV / Excel**: title, company, department, location, **salary range**, equity, apply link and the full description.

Type a keyword. Press **Start**. Get every matching job across dozens of companies — no slugs to hunt down.

---

### 📑 Table of contents

- [Why this scraper](#-why-this-scraper)
- [What you can scrape](#-what-you-can-scrape)
- [Quick start](#-quick-start)
- [Input examples](#-input-examples)
- [Output example](#-output-example)
- [Field reference & fill rates](#-field-reference--fill-rates)
- [Who uses this & why](#-who-uses-this--why)
- [Use cases](#-use-cases)
- [FAQ](#-faq)
- [Legal & responsible use](#-legal--responsible-use)

---

### ✨ Why this scraper

| | |
|---|---|
| 🔑 **No API key, no login** | Nothing to register. Paste companies or keywords and go. |
| 🔎 **Search 50+ companies at once** | Don't know the company slugs? Just search a keyword — it scans a built-in list of popular Ashby companies for you. |
| 💰 **Salary & equity included** | Structured `salaryMin` / `salaryMax` / currency + an `offersEquity` flag, pulled straight from the posting. |
| 📝 **Full job descriptions** | The complete plain-text (and optional HTML) description of every role — not just the title. |
| 🎛️ **Powerful filters** | Filter by keyword, location, department, employment type, remote, **minimum salary**, and posting date. |
| ⚡ **Fast & cheap** | Lightweight and pure-HTTP — dozens of companies in seconds. You only pay for the jobs you keep. |
| 📤 **Clean exports** | Tidy, flat records ready for **Excel, Google Sheets, a database, or an AI pipeline**. |

> 💡 **The multi-company advantage.** Most Ashby scrapers make you paste one company slug at a time. This one ships with a curated list of **50+ popular Ashby companies**, so a single keyword search returns matching jobs across all of them. Add your own companies anytime.

---

### 📦 What you can scrape

<table>
<tr><td>

**🧾 Job details**
- Title, department, team
- Employment type (FullTime, Intern…)
- Full description (plain + HTML)
- Publish date

</td><td>

**📍 Location**
- Primary location + workplace type
- Remote flag
- Country / region / city
- Secondary locations

</td></tr>
<tr><td>

**💰 Compensation**
- Salary min / max + currency
- Interval (yearly, hourly…)
- Human-readable summary
- Equity flag

</td><td>

**🔗 Company & links**
- Company (slug)
- Job posting URL
- Direct **apply URL**

</td></tr>
</table>

---

### 🚀 Quick start

1. Open the **Input** tab.
2. Do any of these (mix freely):
   - Type keywords under **🔎 Search keywords** (e.g. `engineer`, `product manager`).
   - Paste company boards under **🏢 Companies** (e.g. `https://jobs.ashbyhq.com/openai` or `ramp`).
   - Add filters — remote only, location, department, minimum salary, posting date.
3. Press **Start** ▶️

No input at all? The actor searches across the built-in list of popular Ashby companies so you instantly see the shape of the data.

---

### 🧾 Input examples

**Search remote ML jobs paying $150k+ across all built-in companies:**

```json
{
  "searchQueries": ["machine learning"],
  "remoteOnly": true,
  "minSalary": 150000
}
````

**Scrape every engineering job at specific companies:**

```json
{
  "companies": ["https://jobs.ashbyhq.com/openai", "ramp", "notion"],
  "departments": ["Engineering"]
}
```

**Fresh jobs from the last week, your companies plus the popular list:**

```json
{
  "companies": ["vanta", "clickhouse"],
  "scanDefaultCompanies": true,
  "postedWithinDays": 7
}
```

**Just give me everything from one company:**

```json
{ "companies": ["perplexity"] }
```

***

### 📤 Output example

```json
{
  "company": "vanta",
  "title": "Senior Software Engineer, AI Product",
  "department": "Engineering",
  "team": "AI",
  "employmentType": "FullTime",
  "location": "Remote U.S.",
  "isRemote": true,
  "workplaceType": "Remote",
  "locationCountry": "United States",
  "locationRegion": null,
  "locationCity": null,
  "secondaryLocations": ["New York", "San Francisco"],
  "salaryMin": 215000,
  "salaryMax": 260000,
  "salaryCurrency": "USD",
  "salaryInterval": "1 YEAR",
  "salarySummary": "$215K - $260K",
  "offersEquity": true,
  "publishedAt": "2026-06-30T12:00:00.000Z",
  "jobUrl": "https://jobs.ashbyhq.com/vanta/1fb75eb1-...",
  "applyUrl": "https://jobs.ashbyhq.com/vanta/1fb75eb1-.../application",
  "descriptionPlain": "About Vanta\nWe started in 2018...",
  "scrapedAt": "2026-07-26T10:00:00.000Z"
}
```

***

### 📊 Field reference & fill rates

Legend: 🟢 almost always present · 🟡 present when the company publishes it · ⚪ only when you enable the option

| Field | Fill | Description |
|---|:---:|---|
| `company` | 🟢 | Company slug |
| `title` | 🟢 | Job title |
| `department` | 🟢 | Department |
| `team` | 🟡 | Team within the department |
| `employmentType` | 🟢 | FullTime, PartTime, Intern, Contract, Temporary |
| `location` | 🟢 | Primary location text |
| `isRemote` | 🟢 | Remote flag |
| `workplaceType` | 🟢 | Remote / Hybrid / Onsite |
| `locationCountry` / `locationRegion` / `locationCity` | 🟡 | Structured address parts |
| `secondaryLocations` | 🟡 | Additional office/remote locations |
| `salaryMin` / `salaryMax` / `salaryCurrency` | 🟡 | Salary range, when published |
| `salarySummary` | 🟡 | Human-readable salary range |
| `offersEquity` | 🟢 | Whether equity is offered |
| `publishedAt` | 🟢 | Publish date (ISO 8601) |
| `jobUrl` / `applyUrl` | 🟢 | Posting and direct application links |
| `descriptionPlain` | ⚪ | Full description — on by default |
| `descriptionHtml` | ⚪ | Raw HTML description — optional |

> 💬 **About salary:** many — but not all — companies publish compensation on Ashby (often required by pay-transparency laws). When they do, you get structured numbers; when they don't, the salary fields are simply empty. Use **Minimum salary** to keep only jobs with published pay.

***

### 🎯 Who uses this & why

| Persona | What they pull | Why |
|---|---|---|
| 🧑‍💻 **Job seekers & job boards** | Keyword + salary + remote filters | Aggregate fresh, high-quality startup/tech jobs in one place |
| 📈 **Recruiters & sourcers** | Roles by company, department, location | Track who's hiring for what, and where |
| 🏢 **Sales & GTM teams** | Job counts and titles per company | Hiring is a buying signal — spot growing accounts early |
| 📊 **Market & talent analysts** | Salary ranges, departments, locations | Benchmark compensation and headcount trends |
| 🤖 **Data & AI teams** | Full descriptions in bulk | Build datasets for search, matching and LLM training |
| 🧭 **Founders & operators** | Competitor hiring | See what rivals are building next from their open roles |

***

### 💡 Use cases

- **Build a niche job board** — pull remote, engineering, or AI roles across dozens of top companies and publish them.
- **Compensation benchmarking** — collect published salary ranges by role, level and location.
- **Hiring-signal lead generation** — a spike in open roles signals growth and budget; feed it to your CRM.
- **Recruiting intelligence** — monitor target companies for new openings daily.
- **Talent-market research** — analyze departments, locations and remote trends across the startup ecosystem.
- **AI / RAG datasets** — export thousands of full job descriptions for search, matching or model training.

> ⏱️ **Automate it.** Add a **Schedule** to re-run your keyword or company watchlist every morning — new jobs land in your dataset automatically.

***

### ❓ FAQ

<details>
<summary><b>Do I need an API key or account?</b></summary>

No. The actor reads public careers pages — nothing to register, no login, no key.

</details>

<details>
<summary><b>How do I find a company's slug?</b></summary>

It's the last part of its Ashby URL: `https://jobs.ashbyhq.com/<b>ramp</b>`. You can paste either the full URL or just the slug. And if you don't know it, leave companies blank and search by keyword across the built-in list.

</details>

<details>
<summary><b>Which companies are in the built-in list?</b></summary>

A curated set of 50+ popular Ashby companies across AI, developer tools, fintech and SaaS — including OpenAI, Ramp, Notion, Perplexity, Cursor, Snowflake, ClickHouse, Vanta and many more. You can always add your own on top.

</details>

<details>
<summary><b>Why don't all jobs have a salary?</b></summary>

Salary is included only when the company publishes it on the posting (increasingly common due to pay-transparency laws). When it's shown, you get structured min/max/currency; otherwise those fields are empty.

</details>

<details>
<summary><b>Can I get the full job description?</b></summary>

Yes — the full plain-text description is included by default, and you can optionally add the raw HTML version too.

</details>

<details>
<summary><b>What export formats are supported?</b></summary>

JSON, CSV, Excel, HTML table and RSS — from the dataset or via the Apify API.

</details>

<details>
<summary><b>Can I run it on a schedule or via API?</b></summary>

Yes. Use Apify **Schedules** to run it automatically, or start it programmatically with the Apify API / SDK and webhooks.

</details>

***

### ⚖️ Legal & responsible use

This tool collects **publicly available** job-posting information — the same data any visitor can see on a company's public careers page. It does not access private data, log in, or bypass authentication.

You are responsible for how you use the data. Please:

- Respect the terms of service and robots policies of the sites involved.
- Comply with applicable laws, including data-protection rules (e.g. **GDPR**, **CCPA**) where relevant.
- Use the data for lawful purposes such as job aggregation, research, recruiting and analytics — not spam or harassment.

If you're unsure whether your use case is permitted, seek legal advice. This actor is provided for lawful data-collection purposes only.

***

#### 🔎 Also searched as

Ashby scraper · ashbyhq scraper · Ashby jobs API · Ashby job board scraper · ATS job scraper · jobs.ashbyhq.com scraper · startup jobs scraper · tech jobs scraper · salary scraper · job postings API · Greenhouse / Lever alternative · hiring signals · recruiting data

***

*Made for job boards, recruiters, analysts and data teams who need clean Ashby job data fast. Want another field or company added? Open an issue on the actor's **Issues** tab.*

# Actor input Schema

## `searchQueries` (type: `array`):

Keep only jobs whose title, team or description matches any of these keywords (e.g. "engineer", "product manager", "remote"). Leave empty to keep all jobs.

## `companies` (type: `array`):

Company job boards to scrape. Paste Ashby URLs (https://jobs.ashbyhq.com/ramp) or bare slugs (ramp, openai). Leave empty to search across a built-in list of popular Ashby companies.

## `scanDefaultCompanies` (type: `boolean`):

When companies are listed above, also include the built-in list of popular Ashby companies (OpenAI, Ramp, Notion, Perplexity, and 50+ more).

## `remoteOnly` (type: `boolean`):

Keep only jobs marked remote.

## `location` (type: `string`):

Keep only jobs whose location matches this text (e.g. "United States", "London", "Europe").

## `departments` (type: `array`):

Keep only jobs in these departments (e.g. Engineering, Sales, Design). Matches partial names.

## `employmentTypes` (type: `array`):

Keep only these employment types. Common values: FullTime, PartTime, Intern, Contract, Temporary.

## `minSalary` (type: `integer`):

Keep only jobs whose listed salary reaches at least this amount (in the job's currency). Jobs without a published salary are excluded when set. 0 = no filter.

## `postedWithinDays` (type: `integer`):

Keep only jobs published in the last N days. 0 = no filter.

## `includeDescription` (type: `boolean`):

Add the full plain-text job description to each record.

## `includeHtmlDescription` (type: `boolean`):

Also add the raw HTML version of the description.

## `maxJobsPerCompany` (type: `integer`):

Cap the number of jobs kept per company. 0 = no limit.

## `maxJobs` (type: `integer`):

Overall cap on the number of jobs saved.

## `maxConcurrency` (type: `integer`):

How many company boards to fetch in parallel. Recommended: 8–15.

## `proxyConfiguration` (type: `object`):

Proxy settings. The default (Apify Proxy) works out of the box.

## Actor input object example

```json
{
  "searchQueries": [
    "software engineer",
    "designer"
  ],
  "companies": [
    "https://jobs.ashbyhq.com/openai",
    "ramp"
  ],
  "scanDefaultCompanies": false,
  "remoteOnly": false,
  "location": "New York",
  "departments": [
    "Engineering",
    "Marketing"
  ],
  "employmentTypes": [
    "FullTime",
    "Intern"
  ],
  "minSalary": 0,
  "postedWithinDays": 0,
  "includeDescription": true,
  "includeHtmlDescription": false,
  "maxJobsPerCompany": 0,
  "maxJobs": 5000,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `datasetItems` (type: `string`):

Download every job (JSON, CSV, Excel).

## `runUrl` (type: `string`):

Open this run in the Apify Console.

## `company` (type: `string`):

Company slug

## `title` (type: `string`):

Job title

## `department` (type: `string`):

Department

## `team` (type: `string`):

Team

## `employmentType` (type: `string`):

FullTime, Intern, etc.

## `location` (type: `string`):

Primary location

## `isRemote` (type: `string`):

Whether remote

## `salaryMin` (type: `string`):

Minimum salary

## `salaryMax` (type: `string`):

Maximum salary

## `salaryCurrency` (type: `string`):

Salary currency

## `salarySummary` (type: `string`):

Salary range text

## `offersEquity` (type: `string`):

Offers equity

## `publishedAt` (type: `string`):

Publish date

## `applyUrl` (type: `string`):

Application link

## `jobUrl` (type: `string`):

Job posting link

## `descriptionPlain` (type: `string`):

Full job description

## `scrapedAt` (type: `string`):

ISO 8601 timestamp

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "machine learning"
    ],
    "companies": [],
    "departments": [],
    "employmentTypes": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/ashby-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["machine learning"],
    "companies": [],
    "departments": [],
    "employmentTypes": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/ashby-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "machine learning"
  ],
  "companies": [],
  "departments": [],
  "employmentTypes": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/ashby-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=haketa/ashby-jobs-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Ashby Jobs Scraper — Jobs, Salaries & Descriptions (ATS)",
        "description": "Scrape job postings from any Ashby (ashbyhq.com) career page — no API key. Export title, company, department, location, salary, equity, apply URL & full description to JSON/CSV/Excel. Search jobs by keyword across 50+ Ashby companies, or target your own. Great for ATS aggregation & recruiting.",
        "version": "0.1",
        "x-build-id": "Nzk1OGDSo14tbjHZ8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/haketa~ashby-jobs-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-haketa-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/haketa~ashby-jobs-scraper/runs": {
            "post": {
                "operationId": "runs-sync-haketa-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/haketa~ashby-jobs-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-haketa-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": {
                    "searchQueries": {
                        "title": "🔎 Search keywords",
                        "type": "array",
                        "description": "Keep only jobs whose title, team or description matches any of these keywords (e.g. \"engineer\", \"product manager\", \"remote\"). Leave empty to keep all jobs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "companies": {
                        "title": "🏢 Companies",
                        "type": "array",
                        "description": "Company job boards to scrape. Paste Ashby URLs (https://jobs.ashbyhq.com/ramp) or bare slugs (ramp, openai). Leave empty to search across a built-in list of popular Ashby companies.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "scanDefaultCompanies": {
                        "title": "➕ Also scan popular Ashby companies",
                        "type": "boolean",
                        "description": "When companies are listed above, also include the built-in list of popular Ashby companies (OpenAI, Ramp, Notion, Perplexity, and 50+ more).",
                        "default": false
                    },
                    "remoteOnly": {
                        "title": "🌍 Remote jobs only",
                        "type": "boolean",
                        "description": "Keep only jobs marked remote.",
                        "default": false
                    },
                    "location": {
                        "title": "📍 Location contains",
                        "type": "string",
                        "description": "Keep only jobs whose location matches this text (e.g. \"United States\", \"London\", \"Europe\")."
                    },
                    "departments": {
                        "title": "🏷️ Departments",
                        "type": "array",
                        "description": "Keep only jobs in these departments (e.g. Engineering, Sales, Design). Matches partial names.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "employmentTypes": {
                        "title": "📄 Employment types",
                        "type": "array",
                        "description": "Keep only these employment types. Common values: FullTime, PartTime, Intern, Contract, Temporary.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "minSalary": {
                        "title": "💰 Minimum salary",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only jobs whose listed salary reaches at least this amount (in the job's currency). Jobs without a published salary are excluded when set. 0 = no filter.",
                        "default": 0
                    },
                    "postedWithinDays": {
                        "title": "🗓️ Posted within (days)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only jobs published in the last N days. 0 = no filter.",
                        "default": 0
                    },
                    "includeDescription": {
                        "title": "📝 Include job description",
                        "type": "boolean",
                        "description": "Add the full plain-text job description to each record.",
                        "default": true
                    },
                    "includeHtmlDescription": {
                        "title": "Include HTML description",
                        "type": "boolean",
                        "description": "Also add the raw HTML version of the description.",
                        "default": false
                    },
                    "maxJobsPerCompany": {
                        "title": "Max jobs per company",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap the number of jobs kept per company. 0 = no limit.",
                        "default": 0
                    },
                    "maxJobs": {
                        "title": "Max jobs (total)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Overall cap on the number of jobs saved.",
                        "default": 5000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrent companies",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "How many company boards to fetch in parallel. Recommended: 8–15.",
                        "default": 8
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. The default (Apify Proxy) works out of the box.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
