Ashby Jobs API — Job Board Postings as Clean Rows
Pricing
from $0.50 / 1,000 results
Ashby Jobs API — Job Board Postings as Clean Rows
Read any company's Ashby job board — title, location, department, employment type, remote flag and URL. No key required.
Pricing
from $0.50 / 1,000 results
Rating
0.0
(0)
Developer
alaudin burki
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Security
Limited permissionsShare
Ashby hosts public job boards for the companies that recruit through it, and serves each board from a public JSON endpoint. This Actor reads one board by its organisation token and writes one row per posting — title, location, department, team, employment type, a remote flag, the advertised compensation summary and the application URL. No key, login or HTML parsing is involved.
The token is the last part of the board address: jobs.ashbyhq.com/openai belongs to the token openai. The Actor requests compensation with the board, so the pay summary is included whenever the employer publishes one.
How to use
- Open the company's Ashby board and copy the organisation name from its address.
- Paste it into Board token and set Max rows if 500 is more than you need.
- Run the Actor and export the dataset as JSON, CSV or Excel.
Inputs
| Field | Purpose | Default |
|---|---|---|
board | The organisation token from the Ashby board address, e.g. jobs.ashbyhq.com/openai → openai. It is used in the request path. | openai (prefilled) |
maxItems | Hard cap on rows written to the dataset. The run stops as soon as the cap is reached. | 500 |
maxPages | Request cap. An Ashby board arrives in a single response, so the run makes one request and this setting has no practical effect here. | 5 |
maxItems is clamped to 20,000 per run. If board is left blank the default token openai is used, so the Actor runs with no configuration at all.
Output dataset
| Field | Meaning |
|---|---|
title | The job title as the employer posted it. |
location | The posting's location as Ashby writes it, often a city and country, or Remote. |
department | The department the employer filed the role under, in the employer's own words. Free text, and not normalised across companies. |
team | The team the role sits in, as the employer names it. Optional at the source and often absent, in which case the field is left out of the row. |
employmentType | The employment type as posted, e.g. full-time or contract. |
isRemote | true when the posting is flagged as remote, false otherwise. A boolean, not a string. |
compensation | The pay range as the employer states it, taken from the board's compensation tier summary. A free-text string carrying its own currency and period, not a pair of normalised numbers, and frequently absent. |
url | The public application URL for the posting (jobUrl). |
publishedAt | When the posting was published, as an ISO 8601 timestamp. |
Every row also carries id (the Ashby posting id prefixed with the source, e.g. ashby:0f2c...), source (ashby-jobs), firstSeenAt and scrapedAt. Rows are de-duplicated on the posting id and sorted newest-published first, then by title, with the id as the final tie-break. A SUMMARY record in the run's key-value store reports rows, requests, duplicates, page problems and whether the dataset was truncated.
Example input
{"board": "openai","maxItems": 500,"maxPages": 5}
Why this is different
- Ashby Jobs API reads the board's public JSON endpoint and never scrapes the rendered career page.
- Ashby Jobs API needs no key, account, cookie or login before its first run.
- Ashby Jobs API requests compensation with the board, so the advertised pay summary appears in the row instead of being lost in a second call.
- Ashby Jobs API returns
isRemoteas a real boolean, so it can be filtered without string matching. - Ashby Jobs API de-duplicates on the posting id and orders rows deterministically, so repeat runs over an unchanged board agree.
- Ashby Jobs API stamps every row with
firstSeenAtandscrapedAt, so a stale row is visible rather than assumed fresh.
Limitations
- Only companies whose board is hosted by Ashby are covered, and the token must match the board exactly. A wrong or private token fails the run on the first request rather than returning an empty dataset.
departmentandteamare free text written by each employer. The same function is calledEngineering,EngorR&Dat different companies, and nothing here normalises that.compensationis the board's tier summary string, not structured minimum, maximum and currency. It is left out of the row when the employer hides pay, which many do.- No job description, office list or posting expiry date is returned by this endpoint.
- The board returns the postings the company currently lists. Withdrawn postings are not in the response, so the Actor cannot report them.
isRemotereflects the employer's own flag. A posting that says "remote" only in its description is not marked remote here.
FAQ
Do I need an Ashby API key?
No. The public posting endpoint is readable without authentication, and the Actor sends no key.
Where do I find the board token?
It is the organisation segment of the board address: jobs.ashbyhq.com/<token>. Companies that embed the board on their own site still use an Ashby token behind it.
Why is compensation sometimes missing?
Ashby only publishes a compensation summary when the employer fills one in. The Actor requests it and returns whatever comes back; it does not estimate a range from other fields.
Why does Max requests do nothing?
An Ashby board is returned in one response, so there is only one page to request. maxItems is the setting that limits the dataset.
Can I compare departments across companies?
Only loosely. Departments are the employers' own labels, so filter on the values you actually see rather than assuming a fixed vocabulary.
Pricing and limits
The price is shown on this Actor's Apify pricing panel, and charges follow the pricing model displayed there. The input caps describe how much data the Actor requests; they are not a price. One run reads one board in one request and writes at most maxItems rows. If the board holds more postings than you collected, raise maxItems and run again.