ATS Job Postings Aggregator: Greenhouse, Lever, Ashby & more avatar

ATS Job Postings Aggregator: Greenhouse, Lever, Ashby & more

Pricing

from $2.00 / 1,000 job postings

Go to Apify Store
ATS Job Postings Aggregator: Greenhouse, Lever, Ashby & more

ATS Job Postings Aggregator: Greenhouse, Lever, Ashby & more

Get job postings from Greenhouse, Lever, Ashby and Personio boards in one dataset. Filter by keyword, location and date. $2 per 1,000 jobs.

Pricing

from $2.00 / 1,000 job postings

Rating

0.0

(0)

Developer

Ottomath

Ottomath

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Categories

Share

Turn a list of companies into a clean job postings dataset. The Actor reads the public job boards that companies run on Greenhouse, Lever, Ashby and Personio, filters the postings and returns one normalised row per job. Plain HTTP requests only: no browser, no login, no proxies.

What it does

Give it company names, job-board addresses or career page addresses. For each company the Actor finds the job board, downloads the published postings from the vendor's public job-board API and converts them to one schema, so ATS jobs from different systems line up in a single table.

  • Greenhouse jobs scraper: reads the public Job Board API, with full descriptions and published pay ranges.
  • Lever jobs API: reads the public postings feed of global and EU accounts, with pay ranges and workplace type.
  • Ashby job board: reads the public posting API, including compensation when the company publishes it.
  • Personio: reads the public XML feed of open positions.
  • Career page scraper mode: pass a company's own careers page. It is fetched once and scanned for a link or embed of one of these systems.

Every job is normalised (department, team, locations, country code, remote flag, workplace type, employment type, seniority guess, pay range, dates, links, description), filtered by your rules and deduplicated by id. A company that cannot be fetched produces one free error row that says why. A per-company report is saved to the key-value store under SUMMARY.

The Actor identifies itself as OttomathActor/1.0 (+https://apify.com), reads robots.txt of every host, sends at most 2 requests per second to one host (all Personio company sites count as one) and retries with backoff on 429 and 5xx answers. It never outputs recruiter, hiring manager or other contact fields, and by default it removes e-mail addresses and phone numbers from descriptions.

Use cases

  • Recruiting and staffing agencies: schedule a daily run over your target accounts with postedWithinDays set to 1 and call the hiring teams about fresh roles before other agencies do.
  • Sales and market intelligence: treat hiring as a buying signal. Compare open roles per department across a list of accounts every week, for example data or security roles.
  • Job boards and newsletters: build a niche job postings dataset, such as remote engineering jobs in Europe, refresh it daily and link readers to applyUrl.
  • Analysts and researchers: follow locations, seniority, workplace type and published pay ranges across many employers and export to CSV, Excel or JSON.
  • Job seekers and career coaches: one table of open roles at a shortlist of employers, filtered by title, location and remote work.

Input

Only companies is required, one entry per line. Four forms are accepted and can be mixed:

FormExamplesWhat happens
System and namegreenhouse:airbnb, lever:palantir, ashby:notion, personio:knimeThe board is fetched directly.
Job-board addressboards.greenhouse.io/airbnb, jobs.lever.co/palantir, jobs.eu.lever.co/name, jobs.ashbyhq.com/notion, name.jobs.personio.deThe company name is read from the address.
Plain namerampTried on Greenhouse, Lever, Ashby and Personio in this order; the first board found is used.
Careers pageexample.com/careersFetched once and scanned for a supported job board.
FieldDefaultDescription
companiesrequiredUp to 2,000 entries. The same board is fetched once even when listed twice.
keywordsnoneKeep jobs whose title contains any of these words or phrases.
excludeKeywordsnoneDrop jobs whose title contains any of these words.
searchInDescriptionfalseApply both keyword lists to the description as well as the title.
locationsnoneKeep jobs with a location containing any of these texts: city, country name or code such as US.
remoteOnlyfalseKeep fully remote jobs only.
departmentsnoneKeep jobs in a department or team whose name contains one of these texts.
postedWithinDaysnoneKeep jobs published in the last N days. Jobs without a date are kept and flagged dateUnknown.
maxJobsPerCompany1000Newest jobs first. The form is prefilled with 10 so a first test stays cheap.
maxResultsnoneStop after this many jobs in total.
descriptionFormattexttext, markdown, html or none. Use none for a smaller dataset.
stripContactInfotrueReplace e-mail addresses and phone numbers in descriptions with a marker.
maxConcurrency5Companies in parallel (1 to 20).
{
"companies": ["greenhouse:airbnb", "lever:palantir", "ashby:notion", "ramp"],
"keywords": ["engineer", "data"],
"locations": ["Berlin", "Germany", "Remote"],
"postedWithinDays": 30,
"maxJobsPerCompany": 50,
"descriptionFormat": "markdown"
}

Output example

One dataset item per job. This is a real posting from a public Ashby board, recorded on 2026-10-10, with the description shortened here:

{
"type": "job",
"id": "ashby:notion:1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"ats": "ashby",
"company": "notion",
"companyName": null,
"jobId": "1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"title": "Software Engineer, Developer Platform",
"department": "Engineering",
"team": "Engineering",
"locations": ["San Francisco, California", "New York, New York"],
"country": "US",
"isRemote": false,
"workplaceType": "hybrid",
"employmentType": "full-time",
"seniority": null,
"salaryMin": 213000,
"salaryMax": 320000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"postedAt": "2026-08-24T14:44:49.699Z",
"updatedAt": null,
"dateUnknown": false,
"jobUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"applyUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a/application",
"description": "Who We Are\n\nNotion is the collaborative AI workspace where teams and agents think together. ...",
"descriptionLength": 6294,
"fetchedAt": "2026-10-10T01:00:00.000Z"
}

A company that fails gives a free row such as {"type": "error", "company": "acme", "ats": null, "error": "No public job board found for \"acme\" on Greenhouse, Lever, Ashby or Personio. ..."}.

id is system:company:jobId and stays stable between runs, so you can compare runs. companyName is filled when the board provides it. Pay fields are filled only when the board publishes a pay range or the description states one clearly; nothing is estimated. country is a two-letter code derived from the location text, and seniority is a guess from the job title. The Console table view lists the main columns.

Pricing

Pay per event. You pay for jobs written to the dataset, never for errors or duplicates.

EventPriceWhen it is charged
Actor start$0.005Once per run.
Job posting$0.002For each job item in the dataset ($2 per 1,000 jobs).

Examples: 100 jobs cost $0.205, 1,000 jobs $2.005 and 10,000 jobs $20.005. Error rows are free. The Actor never charges beyond the maximum total charge you set for the run: it stops cleanly and says so in the status message. Filters and maxJobsPerCompany are applied before charging, so you pay only for the jobs you keep.

FAQ

Is it allowed, and does it respect robots.txt? The Actor only reads public job-board endpoints that the vendors document for this purpose, checks robots.txt on every host, uses an honest user agent and stays at 2 requests per second per host. The postings belong to the companies that publish them, so you remain responsible for how you use the data.

Which systems are not supported? SmartRecruiters, Recruitee and Workable. Their public data endpoints are either disallowed for automated access, need a company-issued token or are not documented as public. An entry for one of them returns a free error row that explains this.

How do I find the name of a board? Open the company's careers page and look at the address of the job list: jobs.lever.co/NAME, boards.greenhouse.io/NAME or jobs.ashbyhq.com/NAME. You can also paste the careers page itself or just try the plain company name.

Can I get only new jobs? Schedule the Actor daily with postedWithinDays set to 1. Use id to remove jobs you already have.

Does it collect personal data? No recruiter, hiring manager, creator or contact fields are read. E-mail addresses and phone numbers in descriptions are replaced by default. A description can still contain a name written in free text, which the Actor cannot detect.

Is it affiliated with the job-board vendors? No. Greenhouse, Lever, Ashby and Personio are names of their owners. This Actor is not affiliated with, endorsed by or sponsored by them; the names only say which public job boards it can read.

Limitations

  • Only boards on Greenhouse, Lever, Ashby and Personio are supported. Companies with another system or a custom careers site return an error row.
  • Career page detection reads the HTML. A page that builds its job list with JavaScript, or hides the link, is not detected; use the system:name form instead.
  • Personio feeds have no country and no workplace type, and many descriptions are empty. Lever and Ashby feeds have no display name for the company.
  • Country, remote flag, employment type and seniority are heuristic readings of the text the board provides.
  • Pay is published only by some companies. It is read from structured fields where they exist and otherwise from a clear pay range in the description.
  • Only published postings are visible. Jobs closed by the company disappear from the board.
  • A very large board (thousands of jobs with long descriptions) needs more memory than the default 256 MB. If a company fails with a size message, start the run with more memory, for example 1024 MB.
  • Job-board vendors may change or restrict their public endpoints.

Changelog

  • 0.1 (October 2026): first release with Greenhouse, Lever, Ashby and Personio.