Job Board Harvester: Multi-Platform icon

Job Board Harvester: Multi-Platform

Jobs from 13 career-site systems (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Personio..), AI talent marketplaces and LinkedIn in one clean dataset. Paste a careers page, type a company name or scan 500+ verified boards. Only-new monitoring.

$1.60 per 1,000 job1 public runs in 30 daysupdated 2026-11-06
Try it

Build the input, get the call

Change any field; the code on the right follows. Copy it, or run the same input on Apify.

The quickest way to start: paste careers pages - the company's own (`https://www.figma.com/careers`) or its job board (`https://jobs.lever.co/palantir`, a Workday careers page). The job board behind the page is found automatically. Works...

Just type company names (`Datadog`, `Ramp`). Each is looked up on every supported job board system; the board with the most open jobs is used, and other matches are listed in the run's warnings. A careers URL is more precise when a name is...

Also scan our directory of verified company job boards on these systems, biggest boards first - no company list needed. Combine with the title, location and country filters below.

How many directory boards to scan in one run (boards alternate between the selected systems).

Skip directory companies with fewer open jobs than this (as of the last directory refresh).

Maximum total job postings to emit across all sources.

Optional cap per board/search, so one large company or marketplace can't use up the whole "Max items".

Normalize every job into one schema: structured location + country code, work mode, employment type, seniority, years of experience, job function, skills, annualized salary, education and visa signals.

Drop duplicate postings (by url + title + company).

Open each job's own page for extra fields where the list is thin (e.g. LinkedIn: full description, seniority, employment type, applicant count). Slower - one extra request per job - and only done for jobs that pass your filters.

Filters

Keep a job only if its title contains any of these words (case-insensitive), e.g. `engineer`, `developer`.

Drop a job whose title contains any of these words (case-insensitive), e.g. `intern`, `manager`.

Keep a job only if its location contains any of these (case-insensitive), e.g. `Berlin`, `Remote`.

Keep only jobs in these countries: 2-letter codes (`US`, `GB`, `DE`, `IN`) or names. The country comes from the board when it gives one, otherwise from the location text.

Keep only jobs posted in the last N days. Jobs whose board doesn't publish a date are kept.

Keep only remote jobs (uses the normalized `workMode`; requires Enrich).

Keep only these work arrangements. Jobs whose posting doesn't state it are dropped when this is set.

Keep only these employment types.

Keep only these seniority levels.

Keep only these job functions (engineering, data, sales, ...).

Keep a job only if its title, description or skills mention any of these, e.g. `Kubernetes`, `Python`, `SQL`.

Drop jobs from companies whose name contains any of these, e.g. staffing agencies.

Keep jobs paying at least this per year (hourly and monthly pay are converted), in the posting's currency. Jobs that don't publish pay are kept unless "Only jobs with salary" is on.

Keep only jobs that publish their pay.

Keep only jobs whose posting says visa sponsorship is available.

Monitoring

Emit only jobs that no earlier run with the same sources (or the same state key) has already delivered. Ideal for scheduled runs - you pay only for new results.

Return only jobs that are new, changed or closed since the last run with the same input (or monitor name): changed jobs carry `changeType: "changed"` and `changes` with the old and new salary, location, title or work mode; jobs taken down...

Some marketplaces pay referral bonuses. When available, jobs get an extra `referralUrl` that may credit the Actor's maintainer. Job links and `applyUrl` are never changed. Turn off to omit the field.

Output

What you get back

The fields every row has.

FieldWhat it holds
titleJob title
company / companySlugCompany name, and its board handle for career-page sources
companyLogoCompany logo (when available)
location / locationsLocation as listed, and all listed locations
city / region / country / countryCodeStructured location (ISO country code)
workMode / remoteremote, hybrid or onsite - only when the posting says so
employmentTypefull_time, part_time, contract, internship, temporary, freelance
seniorityintern, junior, mid, senior, lead, principal, director, executive
yearsExperienceMin / yearsExperienceMaxRequired experience, when stated
jobFunctionEngineering, data, AI training, product, design, sales, marketing, ...
skillsSkills listed by the board plus those named in the posting
salary{min, max, currency, period, annualMin, annualMax} - annualized for easy comparison
salaryTextPay as the board shows it
educationLevelHighest degree asked for (bachelor, master, doctorate, ...)
visaSponsorshiptrue / false when the posting says so
department / team / industryOrganization details (when available)
summary / descriptionShort summary and full description
qualificationsRequirements section (some boards, with includeDetails)
jobId / requisitionIdThe posting's identifiers
url / applyUrlPosting and apply links
postedAt / postedAtIso / postedDaysAgoPosting date as listed, normalized, and its age in days
hoursPerWeek / applicantsHours and applicant count (when available)
referralReward / referralUrlReferral details (see below)
source / scrapedAtBoard and collection time

Download as JSON, CSV, Excel or XML from the run, or have it sent to Google Sheets, Slack or a webhook.

Guide

How Job Board Harvester works

Inputs, options and tips, from the tool's own documentation.

Pull job postings from company career pages, AI talent marketplaces, and the big job search boards into a single, normalized, deduplicated dataset - ready to export to JSON, CSV, or Excel, push to your database, or feed into another Actor.

Track hiring at the companies you care about, build a jobs feed, power a recruiting tool, or run market research - without wiring up a dozen different sites yourself.

What it does

Ways to source jobs, mixed freely in one run:

  • Company boards - paste a company's careers page (https://www.figma.com/careers) or just its name (Datadog): the job board behind it is found automatically and every open role comes back.
  • The company directory - scan our directory of 500+ verified company boards (about 195,000 open jobs at the last refresh) on the systems you pick, biggest first, and filter by title, location and country. No company list needed.
  • AI & remote talent marketplaces - Mercor, micro1, Turing and Himalayas: expert, AI-training and remote roles, often with hourly rates.
  • Tech and startup job search - Dice, Built In and Wellfound (salary and equity), no login needed.
  • Open job feeds - Remote OK, Jobicy and Working Nomads (remote jobs), Arbeitnow (Germany and Europe) and Y Combinator's startup job board (with salary, equity and YC batch). Every job links back to its original page.
  • Search boards - search by keyword, location, and filters across thousands of companies.

Every posting comes back in the same shape no matter where it came from, enriched with a work-mode (remote / hybrid / on-site), a seniority level, and a parsed salary - so results from Greenhouse, LinkedIn, and Workday all line up in one table.

Why this harvester

  • Fast. A company's whole board typically comes back in about a second - 200 jobs in under 2 seconds on the platform.
  • Costs almost nothing to run. Platform usage for a typical run is a fraction of a cent. You pay for results, not machine time.
  • Starts instantly. A tiny container means runs begin in seconds, and the always-on API mode answers with no start-up wait at all.
  • Handles rate limits for you. When a board says "slow down" (HTTP 429) the Actor waits exactly as long as asked and carries on; server errors, timeouts and dropped downloads are retried automatically, and request speed adapts per site.
  • Never loses or double-bills work. Results are saved as each source finishes. If the platform moves your run to another server it resumes where it stopped without charging twice, and it stops cleanly at your maximum charge, keeping everything collected so far.
  • One clean format for every board. Structured location with ISO country code, remote/hybrid/on-site (only when the posting says so), employment type, seniority, experience, job function, skills and salary annualized for comparison - identical columns whether a job came from Greenhouse, Workday or LinkedIn.
  • 13 job-board systems. Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Workable, Rippling, BambooHR, Pinpoint, Breezy, Recruitee, Personio and Teamtailor - more than any other career-site scraper on the Store.
  • Simple setup. Paste career-page links or company names and press Start. No API keys or logins for any of the "works out of the box" boards.

Only need one board? There's a focused, simpler Actor for each: Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Personio, Teamtailor, LinkedIn, Himalayas and AI training jobs (Mercor, micro1, Turing).

Input

Quickest start: paste careers pages into careerPageUrls (a company's own site works too) or names into companyNames - the job board is found for you:

json
{ "careerPageUrls": ["https://www.figma.com/careers", "https://jobs.lever.co/spotify"], "companyNames": ["Datadog", "Ramp"] }

No company list? Scan the company directory and filter:

json
{ "directoryAts": ["greenhouse", "ashby", "workday"], "directoryMaxBoards": 300, "titleIncludes": ["data engineer"], "countries": ["US", "CA"] }

For searches, marketplaces, and per-source options, provide a sources array - each entry names a platform and its parameters:

PlatformTypeParameters
greenhouse, lever, ashby, smartrecruiters, workable, rippling, bamboohr, pinpoint, breezy, recruitee, personio, teamtailorCompanycompany (e.g. stripe for boards.greenhouse.io/stripe, acme for acme.bamboohr.com)
workdayCompanyboardUrl (careers page, e.g. https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite), optional query
mercor, micro1, turing, himalayasMarketplaceoptional query, maxPages
remoteok, jobicy, workingnomads, arbeitnow, ycombinatorOpen feedoptional query
linkedinSearchquery, plus optional location, datePosted (day/week/month), remote, maxPages
dice, builtin, wellfoundSearchquery, optional location (Wellfound: a city), remote
naukri, monsterSearch (your access)query, optional location, experience, plus sessionCookies / headers
FieldTypeDefaultDescription
careerPageUrlsarray-Career-page links (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Workday, Personio, Teamtailor); board auto-detected.
sourcesarray-Boards, marketplaces and searches with their options. Give this and/or careerPageUrls.
maxItemsinteger200Maximum total postings across all sources.
maxItemsPerSourceinteger-Optional cap per source, so every source gets its share.
enrichbooleantrueAdd work-mode, seniority, and parsed salary.
dedupebooleantrueDrop duplicate postings.
includeDetailsbooleanfalseOpen each job's own page for extra fields where lists are thin (LinkedIn: full description, level, employment type, applicants). Only for jobs that pass your filters.
titleIncludesarray-Keep jobs whose title contains any of these words.
titleExcludesarray-Drop jobs whose title contains any of these words.
locationIncludesarray-Keep jobs whose location contains any of these (e.g. Berlin, Remote).
countriesarray-Keep jobs in these countries: ISO codes (US, GB) or names.
companyNamesarray-Company names, looked up on every supported job-board system.
directoryAtsarray-Scan the company directory on these systems.
directoryMaxBoardsinteger200Directory boards scanned per run.
directoryMinJobsinteger1Skip directory boards with fewer open jobs.
postedWithinDaysinteger-Keep jobs posted in the last N days (undated jobs are kept).
remoteOnlybooleanfalseKeep only remote jobs.
workModesarray-Keep only remote, hybrid and/or onsite jobs.
employmentTypesarray-Keep only full_time, part_time, contract, internship, temporary, freelance.
senioritiesarray-Keep only intern, junior, mid, senior, lead, principal, director, executive.
jobFunctionsarray-Keep only functions like engineering, data, product, sales, marketing.
descriptionIncludesarray-Keep jobs whose title, description or skills mention any of these (e.g. Kubernetes).
companyExcludesarray-Drop companies whose name contains any of these.
minAnnualSalaryinteger-Minimum yearly pay (posting's currency); unpublished pay is kept unless onlyWithSalary.
onlyWithSalarybooleanfalseKeep only jobs that publish pay.
visaSponsorshipOnlybooleanfalseKeep only jobs offering visa sponsorship.
onlyNewbooleanfalseEmit only jobs no earlier run has delivered - for scheduled monitoring.
monitorNamestringautoName of the onlyNew history (defaults to one per set of sources).
includeReferralLinksbooleantrueAdd a referralUrl where available (see below).
proxyConfigurationobjectoffOptional; Apify Proxy or your own proxy URLs (rotated). Recommended for the search boards.

Filters apply the same way to every board, after normalization - so "senior remote engineering roles from the last week" means the same thing on Greenhouse, Workday, and LinkedIn.

Example input:

json
{
  "sources": [
    { "platform": "greenhouse", "company": "stripe" },
    { "platform": "lever", "company": "spotify" },
    { "platform": "workday", "boardUrl": "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite", "query": "engineer" },
    { "platform": "linkedin", "query": "backend engineer", "location": "remote", "datePosted": "week" }
  ],
  "maxItems": 500,
  "titleIncludes": ["engineer", "developer"],
  "titleExcludes": ["intern"],
  "postedWithinDays": 14
}

Monitor new jobs on a schedule

Turn on onlyNew and schedule the Actor (e.g. daily). Each run delivers only postings that earlier runs haven't - you're charged only for new jobs. Use a different monitorName per monitor if you run several. Pair it with an Apify integration (Slack, email, Google Sheets, webhooks) to get new jobs delivered automatically.

Changes only goes one step further: each run returns new jobs, jobs whose salary, location, title or work mode changed (with the old and new values), and jobs that were taken down (changeType: "removed"), a ready signal of what a company stopped hiring for. Unchanged jobs are free.

Use it as an instant API

The Actor also runs in Standby mode: an always-ready web endpoint that returns jobs directly in the response - ideal for apps, spreadsheets, and AI agents. Find the endpoint URL on the Actor's Standby tab and call it with your Apify API token:

bash
curl "https://<standby-url>/?platform=greenhouse&company=stripe&titleIncludes=engineer&maxItems=20" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>"

Pass any input field as a query parameter (a single source can be given flat, as above), or POST the full input as JSON. The response looks like {"success": true, "count": 20, "items": [ ... ]}. Pricing is the same per job.

Several talent marketplaces reward members who refer candidates. Where the Actor's maintainer has a referral link for a board, jobs from that board carry an extra referralUrl field - applying through it may credit the maintainer, at no cost to the candidate. The posting itself, url, and applyUrl are never changed, and you can leave the field out entirely with includeReferralLinks: false.

More boards with your own access

Some boards - Naukri, Monster, and LinkedIn beyond public search - guard their listings behind a login or anti-bot protection. You can open them by letting the Actor use your own access. Add either of these to any source:

Using your own sign-in - for boards that only show jobs to signed-in users, pass your own session as sessionCookies. The Actor collects jobs through your authenticated session, exactly as you'd see them.

json
{ "platform": "naukri", "query": "rust developer", "location": "bangalore",
  "sessionCookies": "<what you copied, see below>" }

How to copy it (Chrome, Edge or Firefox):

  1. Sign in to the board in your browser.
  2. Press F12 (Mac: Cmd+Option+I) and open the Network tab.
  3. Reload the page (F5) and click the first request in the list.
  4. Right-click it and choose Copy > Copy as cURL (bash) (Firefox: Copy Value > Copy as cURL).
  5. Paste the whole text as the value of sessionCookies (for one board: {"naukri": "<paste>"} in the secret field, or sessionCookies on a source).

The plain Cookie header (name=value; name2=value2), the JSON export of a cookie extension and a cookies.txt file work too. Cookies for other websites are ignored.

It is a password: use your own account, ideally a separate one. It is stored encrypted, never appears in your results or logs, and signing out in your browser ends that session. We never ask for your password or sign in for you. If what you pasted is a web address, empty, or expired, the run stops at the start and says which, at no cost. The board's terms apply to your account.

Your access key - if you have an API key for the board, or a key from a web-unlock provider, pass it under headers and it's applied to every request for that source.

json
{ "platform": "monster", "query": "data engineer",
  "headers": { "x-api-key": "your-key" } }

Your credentials are used only for your own run to fetch data you already have access to.

Pricing

Pay per result: you're charged per job posting delivered - nothing for filtered-out, duplicate, or (with onlyNew) already-seen jobs. See the Pricing tab for the current rate. Set a maximum charge on the run to cap spend.

On Apify's free plan each run returns up to 500 jobs - plenty to try everything. Any paid Apify plan removes the limit.

Tips

  • Start with a small maxItems to preview results, then scale up.
  • Set a maximum charge on the run to cap spend - the Actor stops cleanly at your limit and keeps everything collected so far.
  • Results are saved as each source finishes, so a long run that times out still keeps its data.
  • For the search boards, enabling a proxy improves reliability.
  • Company sources need the company name exactly as it appears in its jobs-page address.
  • If a run is interrupted by the platform, it picks up where it left off without charging twice.
Questions

Questions about Job Board Harvester

How much does Job Board Harvester cost?

$1.60 per 1,000, charged only for jobs returned; a run that finds nothing costs nothing. It runs on Apify, whose free plan includes monthly credit, so you can try it without paying.

Do I need to write code?

No. Fill in the form on Apify and press Start, schedule it, or send the results to Google Sheets, Slack or a webhook. For code, the input builder on this page writes the API call in curl, Python or JavaScript.

What does Job Board Harvester return?

Every row has the same fields, including title, company / companySlug, companyLogo, location / locations, city / region / country / countryCode, workMode / remote, employmentType, seniority. Download as JSON, CSV, Excel or XML.

Can an AI agent use it?

Yes. The webdata-tools-mcp server exposes it to Claude, Cursor and other MCP clients as get_company_jobs.

Can it run on a schedule and return only new results?

Yes. Schedule it on Apify (hourly, daily, weekly) and turn on the only-new option: each run then returns only what appeared since the last run with the same input.

Use cases

What people use Job Board Harvester for

  • Build a job board or niche job feed
  • Track hiring at a list of target companies
  • Feed job postings into a recruiting CRM or ATS
  • Labor market and hiring trend research
  • Alert on new jobs that match your keywords

Also searched as

job board scraper career page scraper ATS job scraper job postings API job aggregator API jobs data feed Greenhouse Lever Workday scraper multi-board job scraper job listings to CSV applicant tracking system jobs export

Categories

Jobs and hiring Jobs Lead generation