Greenhouse, Lever & Ashby Jobs Scraper & API avatar

Greenhouse, Lever & Ashby Jobs Scraper & API

Pricing

from $1.12 / 1,000 jobs

Go to Apify Store
Greenhouse, Lever & Ashby Jobs Scraper & API

Greenhouse, Lever & Ashby Jobs Scraper & API

Get every open job from any company's Greenhouse, Lever or Ashby careers page in one clean, identical format. Filter by keyword, location, remote and date, or return only jobs that are new since your last run. Official public APIs only.

Pricing

from $1.12 / 1,000 jobs

Rating

0.0

(0)

Developer

agentready

agentready

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

3

Monthly active users

a day ago

Last modified

Categories

Share

Get every open job from any company that hires through Greenhouse, Lever or Ashby, in one identical, clean format. Type a company name or website and the Actor finds the job board for you. Filter by keyword, location, remote or date, and turn on "only new jobs" for a daily feed.

Price$1.40 per 1,000 jobs, no monthly fee. Boards with no matches cost nothing.
InputCompany names (Notion), websites (notion.com), or job-board URLs. Up to 500 per run.
OutputTitle, department, locations, remote/hybrid/onsite, salary range, posted date, apply link, description
Speed277 jobs from three boards in 5 seconds in our test run (official public APIs, no browser)

What you get

CompanyTitleDepartmentLocationWorkplaceSalaryPosted
GitLabAI EngineerEnterprise ApplicationsRemote, Bangaloreremote–2026-05-22
AshbyEngineering Manager - EUEngineeringRemote - European Union, Spain, Germanyremote€110K - €185K2024-03-04

Two real records from the public job boards (shortened). Every record has the same fields; see Output.

Try it in one click

It reads only the official public job-board APIs these systems provide for publishing jobs. No logins, no blocked pages, so runs are fast, cheap and rarely break.

What you can do with it

  • Track hiring at target accounts. New roles in a team are a strong buying signal for sales.
  • Feed a job board or newsletter with fresh postings from hundreds of companies.
  • Give an AI agent live answers to "who is hiring senior Rust engineers in Berlin?" or "what does Notion pay product designers?"
  • Monitor competitors' hiring, including department, location and published pay ranges.

Quick start

Mix company names, websites and job-board URLs in one list:

{
"companies": [
"GitLab",
"about.gitlab.com/jobs",
"https://jobs.lever.co/leverdemo",
"ashby:ashby"
],
"keywords": ["engineer", "AI"],
"remoteOnly": true
}

How a company is found

  • Company name (Scale AI, Notion Labs, Inc.): the Actor tries the board names companies usually use (scaleai, scale-ai; for Notion Labs also notion) on Greenhouse, then Lever, then Ashby.
  • Website (acme.com, https://www.acme.com/careers): the Actor reads the careers page, /careers, /jobs and the home page, only where the site's robots.txt allows, and follows the first Greenhouse, Lever or Ashby link it finds. If there is none, it tries the name in the domain (acme).
  • Job-board URL or ats:board: read directly, no lookup.

RUN_SUMMARY shows, for every entry, which board was read (ats, slug) and how it was found (matchedBy: company_name, website_link, website_domain, board_name, board_url or ats_and_board). A name lookup can occasionally land on a different company with the same board name; each job's companyName lets you check. For an exact match, use the job-board URL.

Daily "new jobs only" feed

Schedule this to run every morning. The first run returns everything that matches; after that, each run returns only jobs you haven't received yet, and you only pay for those new jobs.

{
"companies": ["ashby:openai", "greenhouse:anthropic", "lever:spotify"],
"keywords": ["machine learning", "research"],
"onlyNewJobs": true,
"monitoringList": "ml-roles"
}

Use a different monitoringList for each separate search you schedule.

Step-by-step tutorial

Track who's hiring at your target accounts: a list of companies into one spreadsheet, then only new jobs each morning (with a real example record).

Input

FieldWhat it does
companies (required)Company names, company websites, job-board URLs, or greenhouse:x, lever:x, ashby:x. Up to 500.
keywordsKeep jobs whose title contains any of these, matched as whole words (AI does not match "maintain").
excludeKeywordsDrop jobs whose title contains any of these.
searchInDescriptionAlso match keywords in the job description.
locationsKeep jobs whose location or country contains any of these (London, Germany, Remote).
remoteOnlyKeep remote jobs only.
departmentsKeep jobs whose department or team contains any of these.
postedWithinDaysKeep jobs published in the last N days.
onlyNewJobs / monitoringListOutput only jobs not returned in earlier runs under the same list name.
descriptionFormattext (default), html, both, or none.
maxJobsPerCompany, maxResultsCaps. 0 means no limit.

Output

Every job has the same fields, whatever system it came from. Missing values are null, never guessed.

{
"id": "ashby:ashby:7458d4e9-da2e-47bd-98cb-adfda43d42b2",
"ats": "ashby",
"companySlug": "ashby",
"companyName": "Ashby",
"jobId": "7458d4e9-da2e-47bd-98cb-adfda43d42b2",
"title": "Engineering Manager - EU",
"department": "Engineering",
"team": "EMEA Engineering",
"locations": ["Remote - European Union", "Spain", "Germany"],
"country": "European Union",
"workplaceType": "remote",
"isRemote": true,
"employmentType": "FullTime",
"salary": { "min": 110000, "max": 185000, "currency": "EUR", "interval": "year", "summary": "€110K - €185K" },
"seniority": null,
"yearsExperienceMin": null,
"skills": [],
"salaryYearlyMin": 110000,
"salaryYearlyMax": 185000,
"postedAt": "2024-03-04T14:29:08Z",
"updatedAt": null,
"url": "https://jobs.ashbyhq.com/ashby/7458d4e9-da2e-47bd-98cb-adfda43d42b2",
"applyUrl": "https://jobs.ashbyhq.com/ashby/7458d4e9-da2e-47bd-98cb-adfda43d42b2/application",
"description": "Hi, I am the Director of Engineering, Europe. ...",
"descriptionHtml": null,
"scrapedAt": "2026-09-28T12:00:00Z"
}
  • id is stable across runs. Use it to de-duplicate.
  • salary appears when the company publishes pay (common on Lever and Ashby; Greenhouse's public API doesn't include it).
  • seniority, yearsExperienceMin and skills come only from what the posting says: the level word in the title ("Senior", "Staff", "Director", "Intern", ...), a stated "N+ years of experience", and tools named from a fixed list (Python, SQL, AWS, Salesforce, Excel and about 50 more). Otherwise null or an empty list.
  • salaryYearlyMin / salaryYearlyMax restate the pay range per year (hourly x 2,080, monthly x 12, ...), only when the posting gives the pay interval.
  • workplaceType is remote, hybrid, onsite or null. Greenhouse has no remote field, so it is read from the location text there.
  • Dates are ISO 8601 in UTC.

Each run also saves a RUN_SUMMARY record in the key-value store. It lists every company you asked for with its status (ok, not_found, error, not_read), the board that was read and how it was found (matchedBy), jobs on the board, jobs matched and jobs output. A misspelled company never fails the whole run.

If a run gets close to its timeout, it stops about a minute early, keeps every job already found, saves the "only new jobs" list and marks the boards it didn't reach as not_read (stoppedAtTimeLimit is true). To read them, raise the run's timeout or split your list across runs.

Using it from an AI agent (MCP)

This Actor works as a tool in Claude, Cursor and other MCP clients through Apify's MCP server. The input and output are described field by field, so an agent can call it directly, for example: "Use ATS Jobs to list remote data engineering roles posted this week at gitlab, notion and openai."

For agents, descriptionFormat: "text" returns clean plain text, and maxResults keeps responses small.

Pricing

You pay per job returned, with no monthly fee. Boards that are not found or return no matches cost nothing. Set a maximum charge on any run and the Actor stops cleanly when it is reached.

Finding a company's board name

Usually you don't need to: enter the company's name or website. If the lookup misses, open the company's careers page and look at the job links:

  • boards.greenhouse.io/<name> or job-boards.greenhouse.io/<name> → Greenhouse
  • jobs.lever.co/<name> → Lever
  • jobs.ashbyhq.com/<name> → Ashby

If a careers site is hosted on the company's own domain, open any job's Apply link; it usually lands on one of these.

Limits and good to know

  • Only companies that use Greenhouse, Lever or Ashby are covered. Workday, iCIMS and others are not.
  • Only jobs the company has made public are returned. Unlisted and internal postings are not.
  • EU-hosted Lever boards (jobs.eu.lever.co) are supported automatically.
  • Job sites and social networks (LinkedIn, Indeed, Glassdoor, ...) are not read. Enter the company's own website instead.
  • If the input has a mistake or none of the companies' boards are found, the run ends normally with 0 jobs, nothing charged, and a status message saying what to fix.

This Actor reads the public job-board APIs that Greenhouse, Lever and Ashby provide so that job postings can be displayed publicly. It returns job postings only, not personal data about candidates or employees. You are responsible for how you use the data; follow each company's terms and applicable law.

Frequently asked questions

How do I find a company's Greenhouse, Lever or Ashby board?

Usually you don't need to: enter the company's name (Scale AI) or website (acme.com) and the Actor finds the board. If that fails, open any job on the company's careers page; the link shows the system and board name (see Finding a company's board name above).

How much does it cost to scrape jobs?

$1.40 per 1,000 jobs returned, with no monthly fee. Boards that aren't found or have no matching jobs cost nothing, and you can set a maximum charge per run. Apify's paid plans get a discount.

Can I get only new job postings every day?

Yes. Turn on onlyNewJobs, give the search a monitoringList name and schedule the Actor daily. Each run returns, and charges for, only jobs you haven't received before.

Does it include salaries?

When the company publishes a pay range, yes: salary plus salaryYearlyMin / salaryYearlyMax. Lever and Ashby boards often include pay; Greenhouse's public job-board API does not.

Is it allowed to collect these jobs?

The Actor reads the public job-board APIs that Greenhouse, Lever and Ashby provide for publishing jobs, with no login and no blocked pages. As with any data, check that your own use fits the job boards' terms; this isn't legal advice.

Can an AI agent use it?

Yes. It works as a tool in Claude, ChatGPT, Cursor and other MCP clients through Apify's MCP server, and every record has the same documented fields.

Support

Found a problem or want a field added? Open an issue on the Actor's Issues tab.