One API for Greenhouse, Lever, Ashby & Workday Jobs: Hiring Signals in Python
Job postings are among the most honest public data a company produces. A company hiring three data engineers is building a data platform. A company hiring a "Head of Demand Gen" is about to buy marketing tools. A competitor posting Kubernetes roles in Berlin is expanding to Europe. Most of these jobs live on applicant tracking systems (ATS) such as Greenhouse, Lever, Ashby, Workable,…
Job postings serve as one of the most transparent data sources companies share. A company hiring data engineers indicates they are developing a data infrastructure. Head of Demand Generation roles suggest imminent investment in marketing solutions. A rival company's postings for Kubernetes roles in Berlin point to a European expansion.
Most of these vacancies are listed on applicant tracking systems (ATS) like Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio and Workday. Each ATS has unique URL structure, JSON format, pagination and other peculiarities. Workday is particularly challenging to scrape. LinkedIn and Indeed counterparts are delayed, poorly deduplicated and harder to extract.
This guide accesses job data directly from the source with a single API call and standardized schema. The Career Site Jobs Scraper tool on Apify handles company domain input (e.g., stripe.com), ATS board URLs (boards.greenhouse.io/stripe), or Workday links. It automatically identifies the ATS and outputs one normalized job record per row, containing title, department, team, locations, remote status, workplace type, employment type, seniority, salary range, publish date, posting time, apply URL and an optional cleaned description.
Filtering options include keyword matches (include/exclude), specific locations, remote-only jobs, and posting date within N days. Pricing is $6 per 1,000 jobs, with filtered jobs available for free. Using Python, the provided code demonstrates how to retrieve job data for a list of companies (including stripe.com, huggingface.co, notion.so, ramp.com and Lever jobs for Palantir) with relevant keywords (data, machine learning, analytics), exclusion of intern roles, posts within the last 30 days and a maximum result limit of 500.
The resulting job list is then grouped by company and printed. Three suggested applications built in an afternoon include: creating a sales trigger list by running weekly keyword-based searches and pushing new results to Slack or CRM; building a niche job board/newsletter for a specific industry (e.g., climate tech, Rust, AI safety) by scheduling daily runs; and conducting market research for LLMs by enabling description output and processing it with an AI agent to extract tech stacks, seniority levels and salary bands.
The scraper tool handles unknown ATS platforms without incurring charges, but does not provide salary information unless explicitly disclosed by the employer. When salary data is available, it is only for US states with pay transparency laws. Jobs without a posting date are retained even if they fall outside the specified date range.
The guide includes full Python and Node.js examples in the Apify Scrapers Pack repository, along with scrapers for LinkedIn Jobs, StepStone, Dice and a remote-jobs aggregator. These tools are available as pay-per-result Actors on Apify, allowing for flexible, on-demand job data collection without a subscription.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.