ATS Job Boards Scraper — Greenhouse, Lever, Ashby, Workable +4 avatar

ATS Job Boards Scraper — Greenhouse, Lever, Ashby, Workable +4

Pricing

$1.00 / 1,000 job postings

Go to Apify Store
ATS Job Boards Scraper — Greenhouse, Lever, Ashby, Workable +4

ATS Job Boards Scraper — Greenhouse, Lever, Ashby, Workable +4

Pricing

$1.00 / 1,000 job postings

Rating

0.0

(0)

Developer

Arthur

Arthur

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

ATS Job Boards Scraper — Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio, Teamtailor

Pull every open job of any company that runs its careers page on one of eight applicant-tracking systems (ATS), straight from the ATS's official public job-board API — the same JSON/XML feed the company's own careers page uses. No login, no API key, no browser, no proxies, no HTML guessing. One run, many companies, one clean dataset.

Supported ATS and the endpoint used:

ATSexample inputwhat we read
Greenhousegreenhouse:discord, https://boards.greenhouse.io/gitlab, https://job-boards.greenhouse.io/discordboards-api.greenhouse.io/v1/boards/{slug}/jobs?content=true
Leverlever:palantir, https://jobs.lever.co/spotify (EU boards too)api.lever.co/v0/postings/{slug}?mode=json
Ashbyashby:openai, https://jobs.ashbyhq.com/rampapi.ashbyhq.com/posting-api/job-board/{slug} (with compensation)
Workableworkable:blueground, https://apply.workable.com/nuveiwidget list + job detail endpoints
SmartRecruiterssmartrecruiters:Ubisoft2, https://jobs.smartrecruiters.com/BoschGroupapi.smartrecruiters.com/v1/companies/{id}/postings (+ detail)
Recruiteerecruitee:deephealth, https://deephealth.recruitee.com{slug}.recruitee.com/api/offers/
Personiopersonio:demo, https://demo.jobs.personio.de{slug}.jobs.personio.de/xml (also .com)
Teamtailorteamtailor:career, https://career.teamtailor.com, any Teamtailor careers domain{host}/jobs.rss

You can also pass a plain company careers URL: the actor looks for an embedded ATS on that page and, failing that, probes the eight ATSs with the company's domain name (e.g. https://discord.com/careers → Greenhouse discord). This is best effort — when the careers page is a JavaScript app that hides its ATS, pass ats:slug explicitly (the slug is visible in the URL of any job on the careers site).

Typical uses: job-board aggregation, recruiting and sales lead lists (who is hiring for what), competitor hiring intelligence, salary research, alerting on new roles at target companies, feeding LLM pipelines. Schedule the actor and deduplicate on url to get only new postings.

What you get

One row per job posting (type: "job"), same fields for every ATS:

fielddescription
source, board, companyATS name, board slug, company name (Lever, Ashby and Recruitee APIs do not expose a display name → the slug is used)
id, title, url, apply_urlATS job id, title, public job page, direct apply link
location, locations, countryPrimary location string, all listed offices/locations, country when the ATS provides it
remote, workplace_typeremote is the ATS flag when it exists, otherwise inferred from location/title; workplace_type = remote / hybrid / onsite when known
department, team, employment_type, seniorityAs provided by the ATS (e.g. Full-Time, Mid-Senior Level)
posted_at, updated_atISO 8601 timestamps
salary_min, salary_max, salary_currency, salary_interval, salary_textStructured pay data when the ATS exposes it (Lever, Ashby, Recruitee, Personio); otherwise salary_text is a best-effort extraction of a pay range found in the description (e.g. $180,000 to $202,000)
language, tagsPosting language; ATS metadata such as function, industry, education, custom fields
descriptionFull job description as clean plain text (headings and - bullets kept) — optional description_html

Boards that cannot be read (unknown slug, private board, unsupported ATS) produce a type: "error" row with the reason — free — and the run continues.

Export as JSON, CSV or Excel, or push rows to Google Sheets, Make, Zapier, webhooks or your code via the Apify API.

Input

fielddefaultmeaning
boardsats:slug entries and/or URLs (see table above)
keywordskeep jobs whose title/description/department/team contains one of these
excludeKeywordsdrop jobs whose title/description contains one of these
locationskeep jobs whose location/offices/country contains one of these strings
departmentskeep jobs whose department/team contains one of these strings
remoteOnlyfalsekeep only remote jobs
postedSincekeep jobs published on/after YYYY-MM-DD
includeDescriptiontruestore the plain-text description
includeHtmlfalsealso store description_html
maxItemsPerBoard500cap per board (after filters)
maxItems5000cap for the whole run

Example — remote engineering roles at four companies, posted this month:

{
"boards": ["greenhouse:discord", "lever:palantir", "ashby:openai", "https://jobs.smartrecruiters.com/Ubisoft2"],
"keywords": ["engineer", "developer"],
"remoteOnly": true,
"postedSince": "2026-08-01",
"maxItemsPerBoard": 200
}

Pricing

Pay per event: $0.001 per stored job ($1 per 1,000 jobs). Only rows actually written to the dataset are charged; error rows and filtered-out jobs are free. Apify platform usage (a few seconds of compute per board) is billed separately by Apify.

Limitations — please read

  • Only companies on the eight ATSs above; Workday, SuccessFactors, iCIMS, Taleo, BambooHR and custom career sites are not supported (they have no comparable public feed).
  • The ATS APIs return currently open postings only — no history, no closed jobs, no applicant data.
  • company is the slug for Lever, Ashby and Recruitee (their public APIs carry no company display name).
  • For Workable and SmartRecruiters descriptions require one extra request per job (≈2 requests/second, polite rate). Keyword filters for these two match title/department/location before descriptions are fetched.
  • Salary: structured only where the ATS provides it; salary_text extraction from free text is heuristic and may miss or mis-read ranges.
  • Careers-URL auto-detection cannot see inside JavaScript-only careers pages; use ats:slug there.
  • Greenhouse boards on the EU data centre and Lever EU boards are supported via their .eu URLs; SmartRecruiters returns "no public postings" for unknown identifiers (the API does not distinguish).

Not affiliated with any of the ATS vendors. Uses only their public, unauthenticated job-board endpoints intended for careers-page integrations.