Company Jobs API: Greenhouse, Lever, Ashby & more avatar

Company Jobs API: Greenhouse, Lever, Ashby & more

Pricing

from $2.00 / 1,000 job results

Go to Apify Store
Company Jobs API: Greenhouse, Lever, Ashby & more

Company Jobs API: Greenhouse, Lever, Ashby & more

Pull every open job from company career boards on Greenhouse, Lever, Ashby, SmartRecruiters, Workable and Workday in one normalized schema (salary, remote, location parts). Auto-detects the ATS from a careers URL or domain. Delta mode flags new and closed jobs. By Steadyline Data.

Pricing

from $2.00 / 1,000 job results

Rating

0.0

(0)

Developer

Steadyline Data

Steadyline Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Company Jobs API: Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Workday — one schema, delta mode

Get every open job from any company's career site as clean, normalized JSON — one schema across six applicant tracking systems, with a delta mode that tells you exactly what is new, changed, or closed since your last run.

Give it a list of companies (board URLs, careers-page URLs, domains or just slugs). The Actor detects which ATS each company uses, reads the employer's official public job-board API, and returns one consistent record per job: title, department, location split into city/region/country, remote flag, employment type, salary range, description, apply URL and dates. No browser, no login, no proxies needed — so runs are fast and cheap.

Built and maintained by Steadyline Data.

Why use it

  • One schema for six ATSs. Stop writing six parsers. Greenhouse, Lever, Ashby, SmartRecruiters, Workable and Workday all come out in the same shape.
  • Delta mode for scheduled runs. Run it daily; get only new and updated jobs plus closure notices. Unchanged jobs are billed at a quarter of the price and not repeated in your dataset.
  • Salary where it exists. Structured pay ranges from Greenhouse pay transparency, Ashby compensation and Lever salary ranges; optional extraction from description text for the rest (salarySource tells you which).
  • Auto-detection. Paste figma.com or https://www.notion.so/careers and the Actor finds the board for you.
  • Up to ~6× cheaper than per-job alternatives at $0.012/job: here it is $0.002 per job, $0.0005 per unchanged job.

Supported ATSs

ATSInput examplesSource endpoint (public)Tested with
Greenhousehttps://boards.greenhouse.io/figma, greenhouse:discordJob Board API (boards-api.greenhouse.io)Figma, Discord, Stripe, Airbnb
Leverhttps://jobs.lever.co/spotify, lever:palantirPostings API (api.lever.co, EU fallback)Spotify, Palantir
Ashbyhttps://jobs.ashbyhq.com/ramp, ashby:notionPosting API (api.ashbyhq.com)Ramp, Notion
SmartRecruitershttps://jobs.smartrecruiters.com/Canva, smartrecruiters:BoschGroupPosting API (api.smartrecruiters.com)Canva, Bosch
Workablehttps://apply.workable.com/huggingface, workable:skroutzPublic widget API (apply.workable.com)Hugging Face, Skroutz
Workdayhttps://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSiteCareer-site JSON (/wday/cxs/…)NVIDIA, Salesforce, Workday

Each entry can be a board URL, a single job URL, a company careers page, a bare domain, ats:slug, or a plain slug (probed across the slug-based ATSs). Prefix a label with | to set the company name: Acme Inc | lever:acme. Workday short form: workday:tenant.wdN/SiteName.

Input example

{
"companies": [
"https://boards.greenhouse.io/figma",
"lever:spotify",
"ramp.com",
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
],
"keywords": ["engineer", "data scientist"],
"locations": ["US", "Remote"],
"postedWithinDays": 30,
"maxJobs": 1000,
"deltaMode": true
}

Filters: keywords (title/department/team, whole word, plurals allowed), excludeKeywords, locations (text or 2-letter country code, or Remote), remoteOnly, postedWithinDays, employmentTypes. Limits: maxJobs (whole run) and maxJobsPerCompany. Output toggles: includeDescriptionText, includeDescriptionHtml, extractSalaryFromText, fetchDetails.

Output sample

A real record from a test run (description shortened):

{
"id": "ashby:ramp:34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"ats": "ashby",
"company": "Ramp",
"companySlug": "ramp",
"sourceJobId": "34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"title": "Security Engineer, Cloud",
"department": "Engineering",
"team": "Backend",
"location": "New York, NY (HQ)",
"locationCity": "New York City",
"locationRegion": "NY",
"locationCountry": "US",
"allLocations": ["New York, NY (HQ)", "Remote (Canada)", "Remote (US)", "Miami, FL"],
"isRemote": false,
"workplaceType": "hybrid",
"employmentType": "full-time",
"salaryMin": 211400,
"salaryMax": 290600,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salarySource": "structured",
"descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams, embedded in the transaction flow of every dollar a business spends. We automate how over $275B in annualized spend flows in and out of 85,000+ companies: authorizing p…",
"descriptionHtml": null,
"applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
"jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
"postedAt": "2026-04-07T17:12:35.753Z",
"postedAtApproximate": false,
"updatedAt": null,
"changeType": null,
"isNew": null,
"closed": false,
"firstSeenAt": null,
"scrapedAt": "2026-10-29T22:29:27.674Z"
}

changeType, isNew and firstSeenAt are filled when delta mode is on. postedAtApproximate is true when the ATS only says something like "Posted 3 Days Ago". A per-run RUN_SUMMARY (per-company status, counts and any errors) is saved in the run's key-value store.

Pricing — cost per 1,000 jobs

Pay per event, no subscription:

EventPricePer 1,000
Job result (new/updated job, or every job with delta off)$0.002$2.00
Unchanged job (delta mode)$0.0005$0.50
Actor start (Apify standard)$0.00005 per run—

Example: tracking 50 companies with 5,000 open roles daily. The first run costs about $10. After that, a typical day with 250 new or changed jobs and 4,750 unchanged costs about $0.50 + $2.38 = ~$2.88. Closed-job notices are free. Failed requests are never charged, and the Actor stops cleanly when your maximum cost per run is reached.

How delta mode works

With deltaMode: true the Actor keeps a small state file in a named key-value store (steadyline-ats-jobs-delta), keyed by your company list and filters (or by your own deltaStateKey). Each job gets a fingerprint of its content (title, team, locations, pay, apply URL, description). On the next run:

  • new — not seen before → emitted, isNew: true
  • updated — content changed → emitted, isNew: false
  • unchanged — not emitted (or emitted with deltaOutput: "all"), billed at the unchanged rate
  • closed — gone from the board → emitted once with closed: true (free; turn off with emitClosed: false)

Closures are only reported for companies that were read completely, so a timeout or a maxJobs cap never produces false "closed" jobs. For Workday and SmartRecruiters the Actor compares the cheap listing data first and skips detail requests for unchanged jobs, so delta runs are faster too.

FAQ

Do I need proxies or an account with the ATS? No. Every source is the employer's public job-board endpoint, the same data the careers page shows anonymously. Proxy settings are available but optional.

My company was not detected. Paste the job board URL itself (open any job on their site and copy the link) or use ats:slug. Custom career sites that don't use one of the six ATSs are not supported.

Why is a salary missing? Many employers don't publish pay. Structured fields are used first; with extractSalaryFromText (on by default) the Actor also reads pay ranges written in the description.

Can I get the HTML description? Yes, set includeDescriptionHtml: true.

How do I run it on a schedule? Create an Apify Schedule with delta mode on and connect a webhook or integration (Slack, Google Sheets, Make, Zapier) to the dataset.

This Actor collects only publicly posted job advertisements from employers' official public job-board endpoints — information companies publish so that candidates can find and apply to their jobs. It does not log in, bypass access controls, or collect personal data: recruiter or hiring-manager names and contact details are never extracted, and e-mail addresses found in job descriptions are redacted. You are responsible for using the data in line with applicable laws and the terms of the respective sites. Job content remains the property of the posting employer.