Career Site Jobs API: openings from the employer's own feed
Name a company's job board and the endpoint returns the roles that company is advertising right now, as clean JSON: title, department, every location it lists, whether the work is remote, the published salary range when there is one, and the link a candidate applies through. Greenhouse, Lever, Ashby, Workable, Recruitee and Personio all publish these feeds for anyone to read, with no account and no login.
GET/v1/jobs/board
{
"data": [
{
"job_id": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"title": "Security Engineer, Cloud",
"company": "Ramp",
"department": "Engineering",
"location": "New York, NY (HQ)",
"locations": [
"New York, NY (HQ)",
"Remote (US)",
"Remote (Canada)",
"Miami, FL"
],
"remote": true,
"employment_type": "Full-time",
"description": null,
"apply_url": "https://jobs.ashbyhq.com/Ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
"posted_at": "2026-04-07T17:12:35.753000+00:00",
"updated_at": null,
"compensation": {
"min": 211400,
"max": 290600,
"currency": "USD",
"interval": "year"
},
"provider": "ashby",
"board": "Ramp",
"source_url": "https://api.ashbyhq.com/posting-api/job-board/Ramp?includeCompensation=true",
"fetched_at": "2026-09-12T09:41:06Z"
},
"… 2 more jobs"
],
"pagination": {
"page": 1,
"limit": 3,
"returned": 3,
"total": 145,
"next_page": 2
},
"meta": {
"request_id": "req_41c0d2b8a9e7",
"credits_used": 3,
"source": "ats",
"provider": "ashby",
"board": "Ramp"
}
}
What you get
Every field in the response.
| Field | Meaning |
|---|---|
job_id, provider, board | The posting's own id on that board, which system it came from, and the board token you asked for. The id is stable while the posting is live, so you can diff one run against the next and see what opened and what closed |
title, company, department | As the employer publishes them, not re-worded |
location, locations[], remote | The primary location as written on the posting, every location the posting lists, and whether the employer marks the role remote |
employment_type | Full time, part time, contract, internship and so on, where the board records it |
compensation | min, max, currency and interval when the employer publishes a structured range. Null when it publishes none, which is most postings on some boards, rather than a number read out of the description text |
description | The whole posting, as the employer wrote it, in Markdown. Included by default; set descriptions=false for a far smaller answer at the same price, because it is many times the size of every other field put together |
apply_url, source_url | Where a candidate applies, and the public posting page a person would read |
posted_at, updated_at, fetched_at | When the employer published the role, when the board last changed it where the board records that, and the moment we read the feed |
How it works
What happens between your request and the response.
Name the provider and the board
The board token is the part of a careers URL that identifies the employer: jobs.ashbyhq.com/Ramp is provider ashby and board Ramp, boards.greenhouse.io/acme is provider greenhouse and board acme. One request returns one page of that employer's openings; raise page until next_page is null.
Or start from the careers page
If all you have is a link to a company's careers page, send it to /v1/jobs/detect and it reports which system that page runs on and the board token to use. A page with no feed behind it answers that plainly and costs nothing.
Read live, never from an index
Every call reads the employer's feed at the moment you ask. There is no warehouse of postings collected last month, so a role the company took down this morning is already absent from the answer rather than lingering for weeks the way it does on the aggregators.
Stop on any refusal
These feeds are published for the public and are fetched from a datacenter address at a conservative pace. If one answers with a rate limit or a challenge, the request ends and tells you so. Nothing is retried through a different address.
Pricing
One credit system for every endpoint.
One credit per job returned, so the free plan's 75 credits a month cover 75 jobs with no card. Finding a board from a careers URL costs one credit when a feed is found and nothing when there is none.
Run it on Apify.
For bigger runs, or without writing any code, the same engine runs on Apify as the listing below. Apify bills per result, so there is no subscription and nothing to pay us, and Apify's own free plan includes $5 of usage a month with no card.
Questions
Things people ask about the Career Site Jobs API.
Does this cover Indeed, LinkedIn or Glassdoor?
No, and it is not going to. Those sites refuse automated requests, and we do not route around a refusal: that is the line between reading a public page and defeating a protection measure, and staying on the right side of it is why this service is still answering next year. What you get instead is the opening as the employer published it, from the same feed those aggregators are themselves reading.
Which systems are covered?
Greenhouse, Lever, Ashby, Workable, Recruitee and Personio. Each publishes a job board feed that any visitor can read without an account, and Greenhouse documents its board API as needing no authentication. Between them they carry a large share of technology and startup hiring. A company on some other system is simply not covered, and the detect endpoint will tell you so rather than guess.
Is this an aggregator I can search across companies?
No. There is no pool of postings to search: you ask for one employer's board and you get that employer's openings, read at the moment you ask. If you want a market-wide view, choose the companies you care about, read their boards on a schedule and keep the history yourself.
How do I find a company's board token?
It is in the careers URL: boards.greenhouse.io/acme, jobs.lever.co/acme, jobs.ashbyhq.com/Acme, acme.workable.com, acme.recruitee.com and acme.jobs.personio.de all carry it. When a company links its careers page from its own domain instead, pass that URL to /v1/jobs/detect and it returns the provider and the token.
Do you return salaries?
When the employer publishes a structured range, yes: minimum, maximum, currency and interval, exactly as published. Many postings put the pay inside the description text instead, or state none at all. Those come back with compensation null rather than a figure we inferred from prose.