Multi-Board Jobs — No Duplicates
Pricing
from $1.80 / 1,000 job listings
Multi-Board Jobs — No Duplicates
The same role found on two boards is one row and one charge. Blocked boards, empty searches and merged duplicates are never charged. One keyword across Indeed and any company's own hiring board, merged and de-duplicated into one feed.
Pricing
from $1.80 / 1,000 job listings
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
Never pay for a job we didn't deliver. One keyword across Indeed and any company's own hiring board, merged and de-duplicated into one feed. The same role found on two boards is one row — and one charge.
From $1.80/1,000 job listings — all-inclusive pay per event, no start fee, charged only on delivery. One price for the whole feed: no per-source fee, no per-search fee.
Every row carries charged and missReason, so you can reconcile the invoice from the
dataset itself without opening the console. Only rows with charged: true were billed.
Output — a merged row
{"title": "Senior Backend Engineer","company": "Acme","location": { "raw": "Berlin, Germany", "city": "Berlin", "region": null, "country": "Germany" },"salary": { "min": 85000, "max": 115000, "currency": "EUR", "period": "year" },"descriptionText": "…full description from the company's own board…","source": "greenhouse","sources": [{ "board": "greenhouse", "jobUrl": "https://job-boards.greenhouse.io/acme/jobs/123", "applyUrl": "…", "postedAt": "2026-08-24T09:00:00.000Z", "salary": null },{ "board": "indeed", "jobUrl": "https://www.indeed.com/viewjob?jk=…", "applyUrl": null, "postedAt": null, "salary": { "min": 85000, "max": 115000, "currency": "EUR", "period": "year" } }],"merged": true,"duplicateCount": 1,"dedupeConfidence": "high","dedupeKey": "mb:…","charged": true,"missReason": null}
Plus one coverage row per source and per company board (source, board, status,
delivered, resolved, missReason) and one summary row with delivered, uniqueFound,
duplicatesMerged, stoppedBy and chargedEvents.
See a real run's full output →
— eight live jobs pulled from four different company boards in one run, plus the coverage row for
each board and the summary. Every charged row is marked charged: true; nothing else is.
Agent / API paste-block
Actor: steadyfetch/multi-job-board-scraperRequired: query (job title/keyword, or a full Indeed search URL)Optional: companies (array of company domains / careers URLs / board URLs / names)sources (array: ["indeed","ats"], default both)countries (array of ISO-2, default ["US"] — each is its own Indeed search)location (string, e.g. "Austin, TX")radiusKm (integer 1-160, needs a location — Indeed only)dedupe (boolean, default true — merge the same role across boards)postedWithinDays (integer, 1-30)sortBy (relevance | date, default relevance — Indeed only)remoteOnly (boolean, default false — filtered rows are never charged)maxItems (integer, default 100 — hard cap on UNIQUE jobs)maxItemsPerCompany (integer, default 200)maxRunSeconds (integer, default 1200 — clean stop, never a timeout kill)Charges: job-listing once per UNIQUE job after de-duplicationNote: omit a field to use its default — do NOT send null.Token: https://console.apify.com/settings/integrations
curl -X POST "https://api.apify.com/v2/acts/steadyfetch~multi-job-board-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"query":"backend engineer","companies":["stripe.com","https://jobs.lever.co/leverdemo"],"countries":["US"],"maxItems":50}'
What it does
You give one keyword and, optionally, the companies you care about. The actor:
- searches Indeed for your keyword (across the countries you pick), and
- pulls each company's own hiring board — Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Rippling, Personio or Teamtailor — filtered to roles that match your keyword, then
- merges the same role found on more than one board into a single row, keeping every source link, and charges you once.
Company boards are how you reach roles that never appear on a job aggregator. About half of companies resolve from a bare domain (mid-market best; large enterprises mostly run their own Workday/Oracle, so paste a board URL for those). You are never charged for a company we cannot resolve.
The de-duplication, in plain terms
A "duplicate" is the same role — same company, same title, in an overlapping location — found
on two different sources. When we find one, you get one row with a sources array listing
every board it was on, duplicateCount, and a dedupeConfidence of high (matched on a
shared city) or medium (matched on a country-wide or remote posting).
We tuned this on a corpus of real jobs to never delete a distinct job. When two roles at
one company genuinely can't be told apart from an aggregator's single row, we keep them
separate — tagged with a shared dedupeGroupId — rather than merge them and silently drop
one. A wrong merge is a job you never see, so we always err on the side of showing you more.
Turn dedupe off and each board's copy is its own row (the identical posting fetched twice is
still never charged twice).
Sources
- Indeed — needs a keyword. United States, United Kingdom and Germany are verified end to end; any listing that comes back outside the country you asked for is reported, never charged.
- Company boards (ATS) — need company domains. Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Rippling, Personio, Teamtailor — each the company's own documented public board.
Narrow with sources (for example ["ats"] to skip Indeed). Google Jobs is deliberately not a
source — its jobs tab returns only ~10 rows per query with no way to page deeper, so it would
add cost without adding coverage.
What you are never charged for
| situation | run status |
|---|---|
| A board answered with an access check or rate limit | SUCCEEDED — re-runnable, the coverage row says so |
| A company we could not resolve to a board | SUCCEEDED — uncharged, lists what was tried |
| A source ran and matched nothing | SUCCEEDED — a real answer |
| A duplicate merged into another row | SUCCEEDED — charged once, not per board |
| An input we could not read | SUCCEEDED — the row names the fix |
Your own maxItems / maxRunSeconds / cost cap | SUCCEEDED — summary row names the knob |
We never guess. An access check is reported as an access check, not as "no jobs found" — a temporary problem is never dressed up as a permanent verdict, and it is never charged.
This actor may fail when a board changes things. The two you are most likely to see are
a board answering with an access check or rate limit, and a company we could not resolve to
a hiring board. Both ship as a coverage row with charged: false, the run still
SUCCEEDS, and the row says whether re-running helps.
FAQ
Does {} charge anything? No. With no keyword and no companies the run returns uncharged
sample rows that show the exact output shape — including one merged row — and contacts no board.
Can I just scrape a company's whole board? Yes — pass the companies with sources: ["ats"].
For deep, unfiltered board pulls by domain, the sibling Career-Site Jobs — Paste a Domain
is purpose-built for exactly that.
Why did a company return nothing? Either it has no live openings matching your keyword, or its board could not be positively identified from the domain — the coverage row tells you which, and neither is charged. Paste the board URL directly if you know it.
Steadyfetch jobs suite
One actor per source, one job each, the same row shape — so a pipeline built on one source takes the next without a rewrite. All-inclusive pay per event, no start fee, charged only on delivery.
| Source | Actor |
|---|---|
| Indeed | Indeed Jobs — Stops at Your Limit |
| A company's own career site (paste a domain) | Career-Site Jobs — Paste a Domain |
| Glassdoor, with the employer rating | Glassdoor Jobs + Employer Rating |
| Several boards at once, de-duplicated | this actor |
The rest of the steadyfetch shelf — same contract everywhere: all-inclusive pay per event, no start fee, charged only on delivery.
| Family | Actors |
|---|---|
| Ad creative intelligence | Facebook · Google Ads video · TikTok · LinkedIn · Google Ads text & OCR |
| Trends & keywords | Google Trends · Trends Now · Breakout keywords · Autocomplete keywords · Keyword volume & CPC · Social trends |
| YouTube transcripts | YouTube videos · YouTube channels |
| Reel transcripts · Profile posts | |
| Jobs | Indeed · Career sites by domain · Glassdoor · Multi-board |
| Amazon | Products · Search · Bestsellers · Sellers |
| Any media file | Speech to Text · any link or file |
Unlinked names are publishing shortly on the same account — search steadyfetch on Apify Store.