Career Site Jobs Aggregator - ATS Salary Data
Pricing
Pay per event
Career Site Jobs Aggregator - ATS Salary Data
Open jobs from Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee and Personio in one schema with normalized salaries.
Pricing
Pay per event
Rating
0.0
(0)
Developer
datagrit
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
What does Career Site Jobs Aggregator do?
Give it a list of companies and it returns their open jobs straight from each company's own applicant tracking system (ATS): Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Personio and Workday, all in one schema. Every posting comes with a structured salary (min, max, currency, period and yearly equivalents) whenever the employer publishes one, either in the ATS pay fields or as a pay range in the job description. It is built for recruiters, job boards, sales teams tracking hiring signals and anyone who monitors a fixed list of employers.
Who is it for?
- Job boards and newsletters that aggregate roles from a curated list of companies and want only the new ones each day.
- Recruiters and sourcers who follow target companies and filter by title, location, remote and minimum yearly pay.
- Sales and market research teams that use hiring activity and salary bands as signals.
- Compensation analysts who need published pay ranges across many employers as numbers in one currency and period.
Example output
| company | ats | title | workplaceType | salaryMin | salaryMax | salaryCurrency | salaryPeriod | salarySource |
|---|---|---|---|---|---|---|---|---|
| Robinhood | greenhouse | Engineering Manager, Credit Cards & Banking | null | 180000 | 270000 | USD | year | ats |
| ramp | ashby | Security Engineer, Cloud | hybrid | 211400 | 290600 | USD | year | ats |
| nvidia | workday | Growth Engineer, Developer Platform | remote | 200000 | 322000 | USD | year | description |
| Great Minds | recruitee | Project Manager | remote | 70000 | 80000 | USD | year | description |
{"company": "nvidia","companySlug": "nvidia/NVIDIAExternalCareerSite","ats": "workday","jobId": "JR2026245-1","requisitionId": "JR2026245","title": "Growth Engineer, Developer Platform","locations": ["US, CA, Santa Clara", "US, Remote"],"workplaceType": "remote","employmentType": "full_time","postedAt": "2026-09-30T00:00:00.000Z","url": "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/Growth-Engineer--Developer-Platform_JR2026245-1","hasSalary": true,"salaryMin": 200000,"salaryMax": 322000,"salaryCurrency": "USD","salaryPeriod": "year","salaryAnnualMin": 200000,"salaryAnnualMax": 322000,"salaryCurrencies": ["USD"],"salarySource": "description","salaryText": "200,000 USD - 322,000 USD","equityMentioned": true,"bonusMentioned": false,"found": true}
What data do you get?
Company, ATS, board URL, job id, requisition id, title, department, team, main location and all locations, workplace type (remote, hybrid, onsite), normalized employment type, posted and updated dates, posting and apply links, the salary fields above, equity and bonus flags, and optionally the plain-text description.
Salary normalization
Salaries come from the ATS pay fields when they exist (Greenhouse pay ranges by zone, Lever salary range, Ashby compensation tiers, Recruitee salary). Otherwise the Actor looks for an explicit pay range in the job description, such as 184,000 USD - 287,500 USD or $28.50 - $34.00 per hour. A range is used only when it has a currency and either a period word or pay wording next to it (salary, pay, base, compensation, OTE); deal sizes, grants, stipends, funding and single amounts are ignored. Hourly, daily, weekly and monthly pay is converted to yearly amounts (2080 hours, 260 days, 52 weeks, 12 months). salarySource says where each salary came from, and Read salary from description turns the text reading off. SmartRecruiters postings have no salary: the list the Actor reads has no pay field and no description.
Several ranges and currencies
When a posting lists several ranges (pay zones, levels), the band covers all of them in one currency. With Salary currencies set, a US posting that also has a Canadian zone matches CAD and its salary fields are given in CAD, so Minimum annual salary is compared in that currency.
How much does it cost?
You pay per posting returned. Pricing depends on your Apify plan: a small fee when a run starts, then a price per result that is lower on paid plans. The Apify free plan includes monthly credit you can use to try it. Status rows (for example when nothing matched) are never charged, and with only-new mode a scheduled run pays only for new postings. A run with no company in the input reads a small example (Ramp on Ashby, up to 10 postings) that is not charged per result. You can set a maximum spend on the run and the Actor stops when it is reached. It reads public JSON and XML feeds over plain HTTP without a browser.
Input
- Paste companies into Companies, one per line, in any form: a careers page URL (
https://ramp.com/careers), a job board URL (https://jobs.lever.co/epoch-ai), a bare slug (robinhood), orats:slug(lever:palantir). Workday needs the career site URL, for examplehttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite. - Optionally set filters: Job title keywords and Exclude title keywords (words of the title that start with the term, so engineer matches Engineering), Departments or teams, Locations, Remote roles only, Employment types, Only postings with a salary, Minimum annual salary, Salary currencies, Posted within days.
- Turn on Only postings new since my last run and schedule the Actor for a daily feed of new roles.
- Use Maximum results per company and Maximum results to bound the run, and Include description text when you need the full text.
- Export the dataset as JSON, CSV or Excel, or call the Actor through the API, n8n, Make or MCP.
Is it legal to scrape this data?
The Actor reads only the public job board feeds that these ATS vendors offer to employers for publishing open roles. It does not log in, bypass access controls or collect candidate data. Job descriptions can contain personal data such as a recruiter name, so if you request them you are responsible for handling them in line with applicable data protection law. This description is not legal advice.
FAQ
How does it find the ATS? A board URL is read directly. A careers page is fetched once and the job board it links to most often is read. A bare slug is tried on Greenhouse, Lever, Ashby, Workable, Recruitee, Personio (the .de host) and SmartRecruiters in that order, and the first board with open postings wins. The run status lists which board each slug and careers page was matched to, and says when an earlier ATS had a board with that slug but no open postings. Use ats:slug or the board URL to pick the board yourself.
What if a company is not found? The run status lists companies not found, pages without a supported ATS link, boards with no open postings and boards that could not be read. If none of the companies is found, the run fails so a typo never looks like an empty result. SmartRecruiters returns an empty list both for a company without open roles and for an id that does not exist, so such entries are listed separately; if no other company is found the run fails.
Are there limits? Workday lists at most 2,000 postings per career site; very large Lever and SmartRecruiters boards are read up to 5,000 and 10,000 postings. Any such cut is reported in the run status. Workday needs one extra request per posting for its details, so Workday boards are slower than the others.
How often should I run it? Daily with only-new mode is typical; each filter combination keeps its own memory of delivered postings.
Something looks wrong. Open an issue with the input you used; changes at the source are fixed quickly.
Related Actors
Greenhouse Salary Scraper and Ashby Salary Scraper from the same publisher go deeper into one ATS each. Other public-data Actors are listed on the Store profile.