Job Boards Scraper & API - Greenhouse, Lever, Ashby, Workday avatar

Job Boards Scraper & API - Greenhouse, Lever, Ashby, Workday

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Job Boards Scraper & API - Greenhouse, Lever, Ashby, Workday

Job Boards Scraper & API - Greenhouse, Lever, Ashby, Workday

Every open job at any company from its ATS: Greenhouse, Lever, Ashby, SmartRecruiters, Workday, Workable, Recruitee, Personio, Teamtailor, BambooHR. Input: board URLs, careers pages or company sites. One result = one job: title, company, location, remote, department, salary, date, description. $1/1k

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Giovanni Rich

Giovanni Rich

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Categories

Share

Job Boards Scraper & API - Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters and more

Job Boards Scraper is a company job postings scraper and unofficial jobs API for the applicant tracking systems most companies hire through: Greenhouse, Lever, Ashby, SmartRecruiters, Workday, Workable, Recruitee, Personio, Teamtailor and BambooHR. Give it a board URL, a careers page, a company website or just a company name, and get every open job as clean JSON, CSV or Excel: title, company, location, remote flag, department, employment type, salary range, posting date, full description and the apply link.

It reads each platform's official public job feed over plain HTTP: no browser, no login, no scraping of rendered pages, so a board with 700 jobs takes a couple of seconds and almost never fails. Use it for hiring-signal lead generation (which companies are hiring for what, right now), job aggregators, recruiting tools, labour-market research and competitor watching.

How to use

  1. Paste one or more entries in Job boards, careers pages or company websites. Any of these work:
    • an ATS board: https://boards.greenhouse.io/stripe, https://jobs.lever.co/palantir, https://jobs.ashbyhq.com/notion, https://apply.workable.com/workmotion, https://jobs.smartrecruiters.com/Ubisoft2, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite, https://bunq.recruitee.com, https://acme.jobs.personio.de, https://polestar.teamtailor.com, https://acme.bamboohr.com/careers
    • a company careers page such as https://www.notion.com/careers: the embedded board is detected from the page
    • a company website such as https://stripe.com, or a bare name such as stripe: the name is tried on every platform and the board that has jobs wins
  2. Optionally filter: Title must contain (e.g. engineer, sales), Title must NOT contain, Location must contain (e.g. remote, london), Remote jobs only, Posted after, and Max jobs per board.
  3. Click Start. Download the results as JSON, CSV, Excel or HTML from the Output tab, or pull them through the Apify API, Make, Zapier, n8n or an MCP client.

What you get

One dataset item per job posting:

  • Identity: id (the platform's job id), title, company, ats (which platform), url (the job page), applyUrl, requisitionId where the platform publishes one, boardUrl.
  • Where: location (as the company wrote it), locations (all locations of the posting), city, region, country, workplaceType (remote / hybrid / onsite) and isRemote.
  • What: department, team, employmentType (full-time, part-time, contract, internship...), seniority where the platform has it.
  • Pay: salaryMin, salaryMax, salaryCurrency, salaryPeriod and the raw salaryText, from the platform's structured salary field when it exists (Lever, Ashby, Recruitee, Teamtailor) or parsed from the description otherwise (US pay-transparency ranges such as "$213,000 - $320,000").
  • When: publishedAt and, where available, updatedAt (ISO 8601).
  • Description: the full job description as plain text (description), optionally also as HTML (descriptionHtml).
  • scrapedAt timestamp.

Use cases

  • Lead generation from hiring signals: companies hiring SDRs need sales tools, companies hiring data engineers need data vendors. Run your target-account list daily and route new matching jobs to your CRM.
  • Job boards and aggregators: pull hundreds of company boards into one normalised feed, with stable job ids for deduplication.
  • Recruiting and talent intelligence: track open roles, departments and locations across competitors over time.
  • Market research: salary ranges, remote share and hiring volume by company, team or country.
  • AI agents: an agent can ask "what is Notion hiring for in engineering?" and get structured rows back through MCP.

Input example

FieldDefaultDescription
boardsStripe's Greenhouse boardBoard URLs, careers pages, company websites or bare slugs, one per line
titleKeywords-Keep titles containing any of these (case-insensitive)
excludeTitleKeywords-Drop titles containing any of these
locationKeywords-Keep jobs whose location, city, country or workplace type contains any of these
remoteOnlyfalseKeep only jobs marked remote
postedAfter-YYYY-MM-DD; jobs without a date are kept
maxJobsPerBoard0 (all)Cap per board after filtering
includeDescriptiontruePlain-text description. On SmartRecruiters, Workday, Workable and BambooHR this costs one extra request per job
includeDescriptionHtmlfalseAlso keep the description HTML
proxyConfigurationApify datacenterNo residential proxies needed

Example: remote engineering jobs at three companies, posted this month:

{
"boards": ["https://boards.greenhouse.io/stripe", "https://jobs.ashbyhq.com/notion", "https://jobs.lever.co/palantir"],
"titleKeywords": ["engineer", "developer"],
"locationKeywords": ["remote"],
"postedAfter": "2026-10-01"
}

Example: every open job at a list of companies you only know by website:

{
"boards": ["https://stripe.com", "https://www.notion.com/careers", "blueground", "bunq.com"],
"maxJobsPerBoard": 200,
"includeDescription": false
}

Output example

From a real run (Notion's Ashby board, description shortened):

{
"id": "1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"title": "Software Engineer, Developer Platform",
"company": "Notion",
"ats": "ashby",
"url": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a",
"applyUrl": "https://jobs.ashbyhq.com/notion/1fc309c8-da20-4ff2-84c7-8b863ece2b0a/application",
"location": "San Francisco, California",
"locations": ["San Francisco, California", "New York, New York"],
"city": "San Francisco",
"region": "California",
"country": "United States",
"workplaceType": "hybrid",
"isRemote": true,
"department": "Engineering",
"team": "Engineering",
"employmentType": "full-time",
"seniority": null,
"salaryMin": 213000,
"salaryMax": 320000,
"salaryCurrency": "USD",
"salaryPeriod": null,
"salaryText": "$213,000 - $320,000",
"publishedAt": "2026-08-24T14:44:49.699Z",
"updatedAt": null,
"description": "WHO WE ARE\n\nNotion is the collaborative AI workspace where teams and agents think together ...",
"boardUrl": "https://jobs.ashbyhq.com/notion",
"scrapedAt": "2026-10-08T17:45:45.963Z"
}

Fill rates on a 210-job test across all ten platforms: id, title, company, url, location, publishedAt and description 100%; country 85%; applyUrl 75%; employmentType 73%; workplaceType 61%; department 58%; city 52%; salary 21% (only postings that state a range). Fields a platform does not publish are null, never guessed.

Pricing

Pay per result: $1.00 per 1,000 jobs (one result = one job posting saved to the dataset).

  • A company board with 300 open jobs = $0.30
  • 500 company boards, 50,000 jobs = $50

Failed requests, boards that could not be found and duplicates are never charged. If you set a maximum cost per run, the scraper stops cleanly when it reaches it. Apify's free plan includes $5 of monthly platform credit, enough for thousands of jobs.

Integrations

  • Make, Zapier and n8n: start runs and push new jobs to your CRM, Slack, Sheets or Airtable.
  • Google Sheets: export the dataset straight into a spreadsheet, or refresh it on a schedule.
  • Apify API: run the actor and fetch results over REST, or with the official JavaScript and Python clients.
  • Webhooks: get notified when a run finishes and process the data right away.
  • Schedules: run your company list daily and diff by id to catch new postings.
  • MCP for AI agents: through the Apify MCP server (https://mcp.apify.com), Claude, ChatGPT, Cursor and other agents can call this jobs API directly and read the results.

Supported platforms

PlatformWhat the input looks likeDescription includedNotes
Greenhouseboards.greenhouse.io/{company}, job-boards.greenhouse.io/{company}yesone request per board
Leverjobs.lever.co/{company}yesstructured salary when published
Ashbyjobs.ashbyhq.com/{company}yesstructured salary when published
SmartRecruitersjobs.smartrecruiters.com/{Company}yes (1 extra request per job)paged, 100 per page
Workday{tenant}.wd{n}.myworkdayjobs.com/{site}yes (1 extra request per job)paged, 20 per page; relative dates ("Posted 3 Days Ago") converted, "30+ days" left null
Workableapply.workable.com/{company}yes (1 extra request per job)one row per job, all locations merged
Recruitee{company}.recruitee.comyesstructured salary when published
Personio{company}.jobs.personio.de or .comyesXML feed
Teamtailor{company}.teamtailor.comyespaged; custom-domain career sites are detected from the page
BambooHR{company}.bamboohr.com/careersyes (1 extra request per job)

Careers pages on company domains are supported when they embed or link to one of these boards (most do). When a page has no detectable board, the company name from the domain is tried on every platform.

Limits (read before large runs)

  • Only these ten platforms. Companies using iCIMS, Taleo, SuccessFactors, Jobvite or a fully custom careers site are reported as unresolved in the run summary, not scraped.
  • One board per input line. A company name that exists on several platforms (for instance an old, empty Lever board and a live Greenhouse one) resolves to the board that has open jobs.
  • Workday boards can be large (thousands of jobs, 20 per page, plus one request per description). Use maxJobsPerBoard, title filters, or includeDescription: false for a quick count.
  • Company names come from the platform when it publishes them (Greenhouse, SmartRecruiters, Workable, Recruitee, Personio, Teamtailor); otherwise they are derived from the board slug (notion -> "Notion").
  • No applicant or personal data. Only public job postings.

FAQ

Is it legal to scrape job boards? This actor reads public job postings from the platforms' own public APIs and feeds, the same data shown on the companies' careers pages, and no personal data. You're responsible for using it in line with the platforms' terms and applicable law. This is not legal advice.

Why is it so reliable? No HTML parsing of rendered pages and no bot protection to fight: Greenhouse, Lever, Ashby, SmartRecruiters, Workday, Workable, Recruitee, Personio, Teamtailor and BambooHR all expose their boards as JSON or XML for exactly this purpose. Transient errors are retried with backoff on a fresh session.

How do I find a company's board URL? Open the company's careers page and look at the apply links, or just paste the careers page or the company website and let the actor detect it.

Can I get only new jobs? Run on a schedule and compare id (stable per platform) with your previous dataset, or use postedAfter.

Does it need a browser, cookies or a login? No. Plain HTTPS requests to public endpoints only, which is why it's fast and cheap.

How it works (for developers)

Each input line is classified by URL shape into one of the ten platforms (or marked for sniffing). Careers pages are fetched once and scanned for embedded board links or scripts; company websites and bare names are probed on every platform in parallel, and the first board that lists jobs wins. Boards are then read through their public endpoints: Greenhouse boards-api, Lever api.lever.co/v0/postings, Ashby posting-api/job-board, SmartRecruiters api.smartrecruiters.com/v1/companies/{id}/postings, Workday wday/cxs/{tenant}/{site}/jobs, Workable's widget API, Recruitee api/offers, Personio's XML feed, Teamtailor's JSON Feed and BambooHR's careers list. Every platform's fields are mapped to one schema; HTML descriptions are converted to clean text; salary ranges come from structured fields or a conservative regex that ignores year ranges.

Run it locally:

npm install
npm test # parser tests on saved fixtures
APIFY_LOCAL_STORAGE_DIR=./storage node src/main.js # input in storage/key_value_stores/default/INPUT.json