How to Pull Job Postings Straight From Company Career Sites (Greenhouse, Lever, Ashby, Workday) as JSON
If you want job postings from specific companies (for a niche job board, a hiring-signal dashboard, salary research, or just an alert for your dream employer), you usually don't need to scrape HTML at all. Most company careers pages are powered by an applicant tracking system (ATS) like Greenhouse, Lever, Ashby or Workday. These systems publish the job board through public endpoints, because the…
Job postings can be retrieved directly from company career sites by accessing the public endpoints provided by their applicant tracking systems (ATS). Companies like Greenhouse, Lever, Ashby, and Workday typically expose their job boards via JSON calls, simplifying the process of gathering job data without the need for scraping HTML.
To extract these postings, you first need to identify the ATS and the corresponding slug from the company's careers page URL. This slug is usually part of the URL of any individual job listing. For instance, in the URL for Greenhouse, it appears as "stripe/jobs/...", in Lever as "spotify/...", for Ashby as "ramp/...", and in Workday as "NVIDIAExternalCareerSite/..." with additional parameters like "tenant" and "data center."
Once you have the ATS and slug, you can write a short Python script to call the appropriate endpoint. The example code provided demonstrates how to do this for each of the four major ATS providers. For Greenhouse, the endpoint is `https://boards-api.greenhouse.io/v1/boards/{slug}/jobs`, where `{slug}` is replaced with the specific company's slug.
Using the `requests` library in Python, you make a GET request with the `content=true` parameter to retrieve the full job details, including the job ID, title, location, URL, and posting date.
The response from the Greenhouse API includes a list of jobs under the "jobs" key, which you can iterate over to extract the desired information. The script yields a dictionary for each job containing the ID, title, location, URL, and posted date. Similarly, the Lever API endpoint is structured similarly, with the URL `https://api.lever.co/v0/postings/{slug}` and the ability to retrieve data in JSON format directly.
Lever also supports pagination through parameters like `skip` and `limit`, and timestamps are returned in milliseconds.
Ashby's API endpoint follows a similar pattern, with `https://api.ashbyhq.com/posting-api/job-board/{slug}` used to fetch job data. This API allows for the inclusion of compensation information when specified. The response is a list of job objects under the "jobs" key, each containing the job ID, title, location, and potentially compensation details.
Workday's ATS endpoint, on the other hand, is accessed at a URL like `nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/...` with additional parameters to identify the specific company and job board. Workday's API responses are similarly structured, with job data available under a "jobs" key in the JSON payload. Each job entry includes an ID, title, location, and URL to the job posting.
The example Python code provided shows how to implement these requests, handle the JSON responses, and iterate over the job listings to yield a dictionary with the relevant job details for each provider. This method of directly accessing the ATS endpoints allows for efficient retrieval of job postings without the complexities of HTML parsing.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.