Ashby Job Board API
Read Ashby job postings from any jobs.ashbyhq.com board as structured JSON. Ashby is the ATS behind the careers pages of many of the fastest-growing companies, including OpenAI, Ramp, Notion, Linear and Cerebras, and its boards publish something rare: structured compensation. Every job row carries the employer's own salary range as flat numeric columns next to an equity flag, so pay analysis needs no parsing and no model guessing. Give it company names rather than slugs and it resolves them to the boards those companies actually run, returns clear not-found rows with did-you-mean suggestions for the misses, and can sweep a bundled directory of 2,700 plus verified boards to map who hires through Ashby at all.
Input parameters
| PARAMETER | TYPE | REQ | DEFAULT | DESCRIPTION |
|---|---|---|---|---|
| companies | string[] | no | — | Company names, board slugs, or jobs.ashbyhq.com URLs, mixed freely. Plain names are matched to their board automatically, so 'Black Semiconductor' finds blacksemiconductor, and a miss returns a not-found row with did-you-mean suggestions. Empty sweeps the bundled directory instead. |
| outputMode | enum | no | jobs | jobs · urlsOnly · companiesOnly. Full records, the cheap link index, or the company discovery directory. |
| titleKeywords | string[] | no | — | Keep only jobs whose title contains any of these. All filters run before billing, so a filtered job costs nothing. |
| employmentTypes | string[] | no | — | FullTime, PartTime, Intern, Contract or Temporary. Uses the board's own employment type field. |
| remoteOnly | boolean | no | false | Keep only jobs the employer marks remote, using the board's own flag rather than text guessing. |
| publishedAfter | string | no | — | A window like 24h or 7d, or an ISO date. Only postings published on or after the cutoff come back, which turns a daily schedule into a new-roles feed with no state to manage. |
| includeDescriptionMarkdown | boolean | no | true | The posting converted to clean Markdown, the format AI pipelines ingest without cleanup. HTML and plain-text variants are separate toggles. |
| includeCompanyData | boolean | no | false | Enrich each row from its public job page with the hiring company's real name, website and logo, the countries remote applicants may live in, the application deadline when set, and the direct-apply flag. One extra page request per job. — drives your bill |
| maxJobs | integer | no | 100 | Hard ceiling on rows across the whole run, the main cost control. 0 means unlimited. — drives your bill |
| maxCompanies | integer | no | 25 | Cap on companies processed in discovery sweeps. — drives your bill |
Worked examples
{
"companies": ["cerebras", "ramp"],
"titleKeywords": ["engineer"],
"maxJobs": 25
}
{
"companies": ["ramp", "openai", "deel"],
"maxJobs": 100
}
{
"outputMode": "companiesOnly",
"maxCompanies": 100
}
{
"companies": ["Black Semiconductor", "Morse Micro", "Ramp"],
"outputMode": "companiesOnly"
}
{
"companies": ["openai", "notion", "linear"],
"publishedAfter": "25h",
"maxJobs": 200
}
Tasks
Saved runs with the inputs already filled in — each one a standalone page and a working configuration example.
Code
curl
curl -X POST "https://api.apify.com/v2/acts/johnvc~ashby-job-board-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies":["cerebras","ramp"],"titleKeywords":["engineer"],"maxJobs":25}'
Python
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("johnvc/ashby-job-board-scraper").call(
run_input={
"companies": ["ramp", "openai"],
"maxJobs": 50,
}
)
for job in client.dataset(run.default_dataset_id).iterate_items():
print(job.get("title"), "-", job.get("compensationSummary"), job.get("applyUrl"))
What people use it for
- A live jobs feed from the startup-heavy Ashby install base
- Salary benchmarking from employer-published ranges, no inference
- Mapping companies that use Ashby as a growth-stage lead list
- Checking a prospect list for Ashby boards with did-you-mean recovery
- Markdown job descriptions for AI recruiting agents over MCP
- A daily new-postings monitor with zero state between runs