Urgent.News

What's breaking now, across thousands of outlets.

Tech

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.

Read the original at dev.to →

More in Tech

Review Cost Per Section Decides Who Drafts It: A Stop Rule for Model-Assisted Docs

Cheaper drafting does not make documentation cheaper; it moves the bill from writing minutes to review minutes. The practical stop rule is therefore economic rather than stylistic: measure what…

  • Review costs stem from review minutes, not just writing time
  • Drafting rule assigns three outcomes: free, checkpoint, or reserved
  • Short sections with many blockers are most expensive to review

My First Post !!!

Hello, DEV Community! 👋 I'm Dhiraj Roy, an aspiring software developer passionate about technology and building things with code.

Day 72: A Parameter and a Boot Script

Day 72 of DevOps, Day 22 of Azure. Both tasks today were about a value crossing from outside into something that runs it, and what happens at the boundary.

  • Two build parameters added to Jenkins job 'parameterised-job'
  • Choice parameter 'env' with Development, Staging, Production options
  • Boot script configured new VM 'nautilus-vm' with nginx installation

More from Monday 26 October →