Job Board Harvester — Multi-Platform
Pricing
from $0.80 / 1,000 results
Job Board Harvester — Multi-Platform
Collect jobs from company career pages (Greenhouse, Lever, Ashby, Workday, SmartRecruiters, Recruitee, Personio, Teamtailor), AI talent marketplaces (Mercor, micro1, Turing, Himalayas) and LinkedIn into one clean, filterable dataset — or get only new jobs on a schedule. From $1 per 1,000 jobs.
Pricing
from $0.80 / 1,000 results
Rating
0.0
(0)
Developer
Tapaswai Ashok Choudhary
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 hours ago
Last modified
Categories
Share
Job Board Harvester — Every Job Board, One Clean Dataset
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
Three ways to source jobs, mixed freely in one run:
- Company boards — name a company, get all its open roles.
- AI & remote talent marketplaces — Mercor, micro1, Turing and Himalayas: expert, AI-training and remote roles, often with hourly rates.
- 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. No browser is started; the Actor reads each board's own data directly and fetches sources in parallel.
- Costs almost nothing to run. It's a small native program that runs in 256 MB of memory, so 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.
- 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).
Supported sources
Works out of the box — just add the source:
| Source | You provide |
|---|---|
| Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee, Personio, Teamtailor | Company name as it appears in its jobs-page address |
| Workday | The company's careers page URL |
| Mercor, micro1, Turing, Himalayas | Nothing — optionally a search query |
| Search query (+ optional location, date, remote) |
Unlock with your own access (see Unlock more boards):
Naukri, Monster, Dice, and deeper LinkedIn results sit behind logins and anti-bot protection. Bring your own session or access key and this Actor will collect them for you.
Input
Quickest start: paste career-page links into careerPageUrls — the board is detected for you:
{ "careerPageUrls": ["https://boards.greenhouse.io/stripe", "https://jobs.lever.co/spotify", "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"] }
For searches, marketplaces, and per-source options, provide a sources array — each entry names a platform and its parameters:
| Platform | Type | Parameters |
|---|---|---|
greenhouse, lever, ashby, smartrecruiters, recruitee, personio, teamtailor | Company | company (e.g. stripe for boards.greenhouse.io/stripe, acme for acme.jobs.personio.de) |
workday | Company | boardUrl (careers page, e.g. https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite), optional query |
mercor, micro1, turing, himalayas | Marketplace | optional query, maxPages |
linkedin | Search | query, plus optional location, datePosted (day/week/month), remote, maxPages |
naukri, monster, dice | Search (your access) | query, optional location, experience, plus sessionCookies / headers |
| Field | Type | Default | Description |
|---|---|---|---|
careerPageUrls | array | — | Career-page links (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Workday, Personio, Teamtailor); board auto-detected. |
sources | array | — | Boards, marketplaces and searches with their options. Give this and/or careerPageUrls. |
maxItems | integer | 200 | Maximum total postings across all sources. |
maxItemsPerSource | integer | — | Optional cap per source, so every source gets its share. |
enrich | boolean | true | Add work-mode, seniority, and parsed salary. |
dedupe | boolean | true | Drop duplicate postings. |
includeDetails | boolean | false | Open 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. |
titleIncludes | array | — | Keep jobs whose title contains any of these words. |
titleExcludes | array | — | Drop jobs whose title contains any of these words. |
locationIncludes | array | — | Keep jobs whose location contains any of these (e.g. Berlin, Remote). |
postedWithinDays | integer | — | Keep jobs posted in the last N days (undated jobs are kept). |
remoteOnly | boolean | false | Keep only remote jobs. |
workModes | array | — | Keep only remote, hybrid and/or onsite jobs. |
employmentTypes | array | — | Keep only full_time, part_time, contract, internship, temporary, freelance. |
seniorities | array | — | Keep only intern, junior, mid, senior, lead, principal, director, executive. |
jobFunctions | array | — | Keep only functions like engineering, data, product, sales, marketing. |
descriptionIncludes | array | — | Keep jobs whose title, description or skills mention any of these (e.g. Kubernetes). |
companyExcludes | array | — | Drop companies whose name contains any of these. |
minAnnualSalary | integer | — | Minimum yearly pay (posting's currency); unpublished pay is kept unless onlyWithSalary. |
onlyWithSalary | boolean | false | Keep only jobs that publish pay. |
visaSponsorshipOnly | boolean | false | Keep only jobs offering visa sponsorship. |
onlyNew | boolean | false | Emit only jobs no earlier run has delivered — for scheduled monitoring. |
monitorName | string | auto | Name of the onlyNew history (defaults to one per set of sources). |
includeReferralLinks | boolean | true | Add a referralUrl where available (see below). |
proxyConfiguration | object | off | Optional; 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:
{"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.
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:
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.
Output
Every job comes back in the same shape, whichever board it came from. Board-specific labels are normalized (e.g. FullTime, fulltime_permanent and Full-time all become full_time) and the original is kept in a …Raw field.
| Field | Description |
|---|---|
title | Job title |
company / companySlug | Company name, and its board handle for career-page sources |
companyLogo | Company logo (when available) |
location / locations | Location as listed, and all listed locations |
city / region / country / countryCode | Structured location (ISO country code) |
workMode / remote | remote, hybrid or onsite — only when the posting says so |
employmentType | full_time, part_time, contract, internship, temporary, freelance |
seniority | intern, junior, mid, senior, lead, principal, director, executive |
yearsExperienceMin / yearsExperienceMax | Required experience, when stated |
jobFunction | Engineering, data, AI training, product, design, sales, marketing, … |
skills | Skills listed by the board plus those named in the posting |
salary | {min, max, currency, period, annualMin, annualMax} — annualized for easy comparison |
salaryText | Pay as the board shows it |
educationLevel | Highest degree asked for (bachelor, master, doctorate, …) |
visaSponsorship | true / false when the posting says so |
department / team / industry | Organization details (when available) |
summary / description | Short summary and full description |
qualifications | Requirements section (some boards, with includeDetails) |
jobId / requisitionId | The posting's identifiers |
url / applyUrl | Posting and apply links |
postedAt / postedAtIso / postedDaysAgo | Posting date as listed, normalized, and its age in days |
hoursPerWeek / applicants | Hours and applicant count (when available) |
referralReward / referralUrl | Referral details (see below) |
source / scrapedAt | Board and collection time |
The run's summary (OUTPUT) also reports field coverage — the share of results carrying each field — so you can see data completeness at a glance.
About referral links
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.
Unlock more boards with your own access
Some boards — Naukri, Monster, Dice, and LinkedIn beyond public search — guard their listings behind a login or anti-bot protection. You can unlock them by letting the Actor use your own access. Add either of these to any source:
Your session — sign in to the board in your browser, copy your session cookie, and pass it as sessionCookies. The Actor collects jobs through your authenticated session, exactly as you'd see them.
{ "platform": "naukri", "query": "rust developer", "location": "bangalore","sessionCookies": "paste-your-cookie-header-here" }
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.
{ "platform": "dice", "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
maxItemsto 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.
Support & requests
- Report a problem — use the Issues tab on this Actor's page. Include the source you ran and what you expected, and it's much quicker to fix.
- Request a job board or platform — open an issue with a link to the board you want supported. New platforms are prioritised by how often they're asked for, so requests genuinely decide what gets added next.
- Request a field or filter — if a posting has data you need that isn't in the output yet, say which board and which field and it can usually be mapped.
Feedback is actively monitored — if something's broken or missing, please say so.