Career Page Jobs Scraper for Greenhouse, Lever and Ashby avatar

Career Page Jobs Scraper for Greenhouse, Lever and Ashby

Pricing

from $0.80 / 1,000 jobs

Go to Apify Store
Career Page Jobs Scraper for Greenhouse, Lever and Ashby

Career Page Jobs Scraper for Greenhouse, Lever and Ashby

Open jobs straight from company career pages on Greenhouse, Lever, Ashby, Workable, Recruitee, Personio and Teamtailor. Paste careers links, websites or company names. Salary, remote or hybrid, locations, and new or closed jobs since your last run. $1 per 1,000 jobs.

Pricing

from $0.80 / 1,000 jobs

Rating

0.0

(0)

Developer

CleanScrape

CleanScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Get every open job straight from companies' own career pages, as a clean table you can export to CSV, Excel or JSON. Paste careers links, company websites or company names. The Actor finds each company's job board on Greenhouse, Lever, Ashby, Workable, Recruitee, Personio or Teamtailor, reads it, and returns one row per job:

  • title, department and team;
  • locations with city, country and country code;
  • remote, hybrid or on-site;
  • salary range with currency and pay period, when the company publishes it;
  • employment type, posted date, job link and apply link;
  • the full description.

Run it on a schedule with a watch name and every job says whether it is new since the last run, while jobs that are no longer listed go to a separate Closed jobs table.

Jobs come from the company's own job board, so there are no reposts, aggregator duplicates or expired listings. No account, cookies or API key is needed. This is an independent tool, maintained by CleanScrape.

Start with a small run

The form opens with three companies, given three different ways: a website (figma.com), a job board link (jobs.lever.co/spotify) and a company name (Ramp). It saves up to 50 jobs per company. Start it as it is, then paste your own companies.

  1. In Companies, add one company per line.
  2. Optional: narrow down with Job titles containing, Locations, Workplace or Posted within.
  3. Start the run. Open the Jobs table, and the Companies table to see how each line was matched.

What you can paste

You pasteWhat happens
A job board link: boards.greenhouse.io/figma, jobs.lever.co/spotify, jobs.ashbyhq.com/ramp, apply.workable.com/huggingface, bunq.recruitee.com, tado.jobs.personio.de, a Teamtailor career siteThat board is read directly. A link to a single job works too.
A company website: figma.com, www.podimo.comThe site's pages are checked for a link to its job board, as far as the site's robots.txt allows. If none is linked, the website's name is tried as below.
A company name: Ramp, Hugging FaceLikely board names are tried on every system, and a board is used only if its own company name matches what you typed.

No guessing. If a board exists under that name but belongs to a different company name, it is not read: the Companies table lists it as not confirmed, with its link, so you can paste it if it is the right one. If several boards carry the same name (for example a "RAMP" board with one job next to Ramp's real board with 171), the one with the most open jobs is used and the others are listed. A board with no open jobs is never used for a name, since empty accounts under famous names are common. On Workable, Recruitee, Personio and Teamtailor, where anyone can open a board under any name, a name match also needs at least 3 open jobs, or for a website, jobs that mention that website. Every company row says how its board was found: your link, a link on the company's page, or the board's name.

Inputs that can't be read are explained, not silently dropped: SmartRecruiters (its robots.txt asks crawlers not to use its job API), Workday, iCIMS, Taleo, LinkedIn and job boards like Indeed are not supported.

Filters

All filters are optional, and jobs filtered out are not charged.

  • Job titles containing: each line is a set of words that must all appear in the title, in any order. data engineer matches "Senior Engineer, Data Platform".
  • Leave out titles containing: for example intern, director.
  • Locations: cities, regions, countries or two-letter country codes (London, Germany, US, Remote). A country also matches jobs whose location shows it without naming it, such as a US state (Austin, TX) or Remote - US.
  • Workplace: remote, hybrid or on-site. Jobs whose board does not say are left out when this is set.
  • Departments or teams.
  • Posted within (days). Jobs without a posting date are kept.
  • Jobs per company: the newest first.

Monitor companies for new and closed jobs

Give the run a Watch name (for example engineering-jobs) and schedule it with the same list, daily or weekly.

  • The first run saves every job as the starting point (changeStatus: first-check).
  • Later runs mark each job new or seen. Turn on Only new jobs to save just the new ones.
  • Jobs that disappeared from a board go to the Closed jobs table, with when they were first and last seen.

A job is reported as no longer listed only after a complete read of its board. If a board could not be read in full, nothing is marked closed, and the Companies table says so. A job that is no longer listed may have been filled, paused or moved; the board does not say which.

The watch is kept in your own Apify account (a named key-value store), and two runs of the same watch never overlap.

What each job contains

ColumnMeaning
Title, Company, Department, TeamAs published on the job board. Company is empty when the board shows no company name (some companies use Lever only behind their own careers page)
Location, City, Country, Country code, LocationsThe first location, and every location of the job
Workplaceremote, hybrid or onsite, from the board's own field. Empty when the board doesn't say. Greenhouse has no such field, so a Greenhouse job is remote only when its location says Remote
Employment typefull-time, part-time, contract, temporary or internship, plus the board's own wording
Salary from, Salary to, Currency, Pay period, Salary (as published)The published pay range
Salary sourcestructured (the board's pay field: Lever, Ashby, Recruitee, Greenhouse with the salary option) or description (a currency range written in the job text). Empty means no pay was published, never zero
Posted, UpdatedDates from the board (UTC)
Job link, Apply linkThe job page and where to apply
DescriptionFull text; the original HTML too if you ask for it
More detailsBoard-specific extras: Greenhouse offices and requisition ID, Workable function and experience, Personio seniority and years of experience, Recruitee hours per week
System, Board, Board linkWhich job board the job came from
Change, First seenWith a watch name: new, seen or first-check, and when the watch first saw the job

The Companies table has one row per line you entered: the board found and how, jobs on the board, jobs matching your filters, jobs saved, new and closed jobs, whether the board was read completely, and a note when something could not be read. The Run report shows the same in a readable page.

Coverage by system

SystemSalaryWorkplacePosted dateNotes
GreenhouseFrom the description; structured ranges with the salary optionFrom the location text onlyYesBoards hosted in the EU have no public API and are reported as unsupported
LeverStructured, when publishedYesYes
AshbyStructured, when publishedYesYes
WorkableFrom the descriptionYesYes
RecruiteeStructured, when publishedYesYes
PersonioFrom the description–YesSeniority, schedule and years of experience
TeamtailorFrom the descriptionYes (for the newest 100)YesThe job feed shows the newest 100 jobs; larger career sites are completed from their job list, one page per remaining job

Pricing

You pay for each job board that is read and for each job saved:

What is chargedPrice
Job saved (after your filters)$1.00 per 1,000 jobs
Job board read$0.002 per board

Examples from real runs:

RunCost
Figma, Spotify and Ramp, 50 newest jobs each (3 boards, 150 jobs)$0.156
12 companies, only engineering jobs in the US or remote (12 boards, 169 jobs)$0.193
Stripe's whole board (1 board, 723 jobs)$0.725
79 career sites in full (79 boards, 6,854 jobs)about $7.01
Daily check of 20 companies with "Only new jobs", a typical day with 15 new jobs$0.055 per day

A board is charged when it is read, also if no job matches your filters or none is new; the run message says so. Nothing is charged for a company whose job board could not be found or read, for a board that lists no open jobs, for duplicate lines, or for the Companies and Closed jobs tables. Apify plan discounts apply to both prices: 10% on Bronze, 15% on Silver and 20% on Gold and higher.

Set a spending limit under Run options for large runs. The run stops cleanly before it reaches the limit and keeps everything saved so far.

Ready-to-run examples

Each example opens with its input filled in. Change the companies and run it.

ExampleWhat it does
Engineering jobs at OpenAI, Anthropic and other AI companiesEngineering jobs from seven AI companies' career pages, with locations, remote or hybrid and salary ranges where published.
Remote jobs from 10 tech companies' career pagesOnly remote jobs from GitLab, Supabase, Zapier, Vercel and others.
Daily new jobs at your competitorsA watch over five fintech companies: scheduled daily, each run saves only new jobs and lists closed ones.
Engineering salaries from Stripe, Coinbase and DatadogUS engineering jobs with their published pay ranges, to compare offers.
Jobs at European startups on Personio and RecruiteeOpen jobs from startups on Personio, Recruitee, Teamtailor and Workable, with city and country.

Use it from the API or an AI agent

Run it from your code with the Apify API or a client library. Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("cleanscrape/career-site-jobs-scraper").call(run_input={
"companies": ["figma.com", "https://jobs.lever.co/spotify", "Ramp"],
"titleKeywords": ["engineer"],
"locations": ["Remote", "United States"],
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["company"], job["title"], job["location"], job["salaryMin"], job["salaryMax"])

The Companies and Closed jobs tables are separate datasets: their IDs are in the run's storageIds.datasets (companies, closedJobs).

It also works as a tool in Claude, Cursor and other AI assistants that support MCP, through Apify's MCP server:

https://mcp.apify.com?tools=cleanscrape/career-site-jobs-scraper

Then ask, for example: "Which engineering jobs did Notion, Linear and Ramp post this week, and what do they pay?"

Common questions

Where do the jobs come from?

From each company's own job board on Greenhouse, Lever, Ashby, Workable, Recruitee, Personio or Teamtailor. These systems publish companies' open jobs so they can be shown on careers pages; Lever's documentation notes that published postings may be read by third parties, and Greenhouse states that job board data is publicly available. No login, cookies or bot checks are involved.

Which companies are covered?

Any company whose careers page runs on one of the seven systems. There is no fixed list: paste the companies you care about. The Companies table tells you when a company uses a system that isn't supported.

How fresh are the jobs?

They are read live from the job board when the run starts, not from an index updated once a day.

Can I find a company's job board without knowing its system?

Yes. Paste the website or the company name; the Companies table shows which board was found and how.

Can I export to Excel or Google Sheets?

Yes. Export the Jobs table as Excel or CSV from the Output tab, or connect Google Sheets through an Apify integration. Schedule the run with a watch name to keep a sheet of new jobs.

The Actor reads job postings that companies publish publicly on their job boards, at a gentle pace, and it follows each company website's robots.txt. Check the rules that apply to how you store and use the data. This is not legal advice.

Good to know

  • Times are UTC.
  • A company can show the same job in several locations; that is one row with several locations, also when the job board lists it once per location.
  • If a job board changes its format, the run says which board could not be read instead of saving wrong rows.

More tools from CleanScrape

Support

Questions, a board that is read wrongly or a system you need: open an issue on the Actor's Issues tab or write to contact.cleanscrape@gmail.com with the run ID.

If the Actor was useful, an honest review on its Store page helps other people find it.

This Actor is an independent tool. It is not affiliated with Greenhouse, Lever, Ashby, Workable, Recruitee, Personio, Teamtailor or the companies whose jobs it reads.

If the Actor was useful, an honest review on its Store page helps other people find it.