Products

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

200GET /v1/jobs/board?provider=ashby&board=Ramp&limit=3
{
  "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.

FieldMeaning
job_id, provider, boardThe 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, departmentAs the employer publishes them, not re-worded
location, locations[], remoteThe primary location as written on the posting, every location the posting lists, and whether the employer marks the role remote
employment_typeFull time, part time, contract, internship and so on, where the board records it
compensationmin, 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
descriptionThe 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_urlWhere a candidate applies, and the public posting page a person would read
posted_at, updated_at, fetched_atWhen 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.

See pricing

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.