Career-Site Jobs — Paste a Domain
Pricing
from $0.80 / 1,000 jobs
Career-Site Jobs — Paste a Domain
Never pay for a domain we couldn't resolve. Paste a company domain — we find its Greenhouse, Lever, Ashby or Workday board and return every live opening. Nine ATS platforms, one box — no board tokens needed.
Pricing
from $0.80 / 1,000 jobs
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
29 minutes ago
Last modified
Categories
Share
Never pay for a domain we couldn't resolve. Paste a company domain — we find its Greenhouse, Lever, Ashby or Workday board and return every live opening. Nine ATS platforms, one box — no board tokens needed.
From $0.80/1,000 jobs — all-inclusive pay per event, no start fee, charged only on delivery. Issues answered in about 3 hours.
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 real row
{"source": "greenhouse","sourceJobId": "6136160004","jobUrl": "https://job-boards.greenhouse.io/vercel/jobs/6136160004","applyUrl": "https://job-boards.greenhouse.io/vercel/jobs/6136160004","title": "Account Executive, Commercial","company": "Vercel","companyDomain": "vercel.com","location": { "raw": "Hybrid - London", "city": "Hybrid - London", "region": null, "country": null },"isRemote": null,"employmentType": null,"department": "Account Executive","salary": null,"postedAt": "2026-08-06T16:50:10.000Z","updatedAt": "2026-08-18T22:06:19.000Z","scrapedAt": "2026-08-27T10:00:00.000Z","descriptionText": "About Vercel:\n\n Vercel is the agentic infrastructure company. We free people and agents to ship what's next…","descriptionHtml": "<div class=\"content-intro\"><h2>About Vercel:</h2>…","atsPlatform": "greenhouse","atsBoardToken": "vercel","resolvedVia": "careers-link","dedupeKey": "greenhouse:vercel:6136160004","charged": true,"missReason": null}
Plus one company row per domain — domain, companyName, atsPlatform, boardUrl,
openRoleCount, sharedRoleCount (openings already delivered — and charged once — under
another company in the same run), totalOpenRoles, resolved, resolvedVia — and one summary row
with delivered, stoppedBy, resumeCursor and chargedEvents.
See a whole run's output before you spend anything:
real dataset from a verified run
— six live openings from vercel.com and linear.app, their two company rows, and the run
summary, exactly as this actor returned them.
| field | notes |
|---|---|
title · company · companyDomain | company is filled when the board publishes it |
location{raw,city,region,country} · isRemote | as the board states it — never inferred |
employmentType · department | |
salary{min,max,currency,period,isEstimate} | null unless the company published a range |
postedAt · updatedAt · scrapedAt | ISO 8601; null when the board only gives relative text |
descriptionText · descriptionHtml | full description where the board's API includes it |
jobUrl · applyUrl | the company's own posting, not a re-hosted copy |
atsPlatform · atsBoardToken · resolvedVia | how we found the board |
charged · missReason · dedupeKey | the reconciliation trio |
Agent / API paste-block
Actor: steadyfetch/company-jobs-by-domainRequired: domains (array of company domains, careers URLs, board URLs or names)Optional: atsFilter (array: greenhouse | lever | ashby | workday | workable |smartrecruiters | rippling | personio | teamtailor)remoteOnly (boolean, default false — keep only openings the boardmarks remote; filtered openings are never charged)postedWithinDays (integer 1-30 — keep only openings posted that recently;filtered openings are never charged)maxItems (integer, default 1000 — hard cap for the whole run)maxItemsPerCompany (integer, default 200)maxRunSeconds (integer, default 900 — clean stop, never a timeout kill)Charges: job once per delivered openingcompany-checked once per company with a definitive answer (including averified zero-openings result)Build spec: https://apify.com/steadyfetch/company-jobs-by-domain/apiToken: https://console.apify.com/settings/integrations
curl -X POST "https://api.apify.com/v2/acts/steadyfetch~company-jobs-by-domain/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H 'Content-Type: application/json' \-d '{"domains":["stripe.com","linear.app"],"maxItemsPerCompany":50}'
Hiring platforms
Greenhouse · Lever · Ashby · Workday · Workable · SmartRecruiters · Rippling · Personio · Teamtailor. Each is read from that platform's own public job-board API, so the data is whatever the company published, unchanged.
How a domain becomes a board (resolvedVia tells you which one happened):
resolvedVia | what it means |
|---|---|
board-url | you pasted the board URL — no lookup needed |
careers-link | the company's own careers page links its board |
token-pattern | the domain name matched a board token and that board returned live openings |
name-probe | same, from a company name instead of a domain |
A board found by guessing the token only counts when real openings come back. An empty board reached by guesswork is not a match, so it is never charged.
What you are never charged for
| situation | missReason | run status |
|---|---|---|
| No hiring board found for the domain | UNRESOLVED_DOMAIN | SUCCEEDED — the row lists every platform checked |
| The board rate-limited or dropped us | THROTTLED | SUCCEEDED — re-runnable, and the row says so |
| The board answered with an access challenge | CHALLENGED | SUCCEEDED — re-runnable |
| The board was unavailable this run | SOURCE_UNAVAILABLE | SUCCEEDED — re-runnable |
| The board answered and listed nothing | CLEAN_EMPTY | SUCCEEDED |
| A domain, URL or name we could not read | USER_INPUT | SUCCEEDED — the row names the fix |
Your own maxItems / maxRunSeconds / cost cap | STOPPED_AT_LIMIT | SUCCEEDED — summary row + resumeCursor |
The one exception: COMPANY_NO_OPENINGS charges the company-checked event and no
job rows. Confirming a company is not hiring is a real answer, and it is the answer
that costs you the least.
We never guess. A rate limit is reported as a rate limit, not as "this company has no board" — a temporary problem is never dressed up as a permanent verdict.
This actor may fail when a hiring platform changes things. The two you are most likely
to see are UNRESOLVED_DOMAIN (we checked every platform and found no board) and
THROTTLED (a board rate-limited us). Both ship as a row with charged: false, the
run still SUCCEEDS, and the row says whether re-running can help.
Filters you can set, and what they cost you
remoteOnly and postedWithinDays narrow what is delivered, and an opening they
leave out is never charged. They lean on what each board actually publishes: Greenhouse
and Workday publish no remote flag at all, and a few boards publish no posting date. An
opening we cannot check against your filter is left out too — and the company's own row
says how many, so a filter can never read as "this company has no openings". A board
emptied by your filters keeps missReason: null for exactly that reason.
Limits are hard limits
maxItems, maxItemsPerCompany and maxRunSeconds stop the run exactly where you set
them. The run still finishes successfully, the summary row names which limit bound,
and resumeCursor lists the companies that were not reached — so you continue from there
instead of paying to re-walk what you already have.
And they hold across a restart. If the platform moves your run to another server mid-way — or you resurrect it yourself — the run reads back what it already delivered and picks up from there: no duplicate rows, no second charge for an opening you already have, and your row cap still means what it says. Resurrecting a run that already finished costs nothing and returns the same dataset.
FAQ
The company isn't on any ATS — what now?
The company row lists every platform that was checked. If you know the board URL, paste it
directly (https://jobs.lever.co/acme) and we skip the lookup entirely.
Can I search jobs across boards instead of by company? Not with this actor — it answers "is this company hiring, and for what". A job board URL (LinkedIn, Indeed, Glassdoor) is rejected with a guidance row rather than treated as an employer.
How do I chain this after a company-list scraper?
Feed the domains array from any actor that outputs company domains. Same-company
duplicates across input shapes are delivered once and charged once — the later
company's row reports them in sharedRoleCount instead of claiming them again.
Why is company sometimes empty?
Several board APIs do not publish the employer name in their listing payload. We leave the
field null rather than invent one; companyDomain and the company row always identify it.
Does {} cost anything?
No. With no domains it returns uncharged sample rows so you can see the exact output shape
before spending anything.
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) | this actor |
| Glassdoor, with the employer rating | Glassdoor Jobs + Employer Rating |
| Several boards at once, de-duplicated | Multi-Board Jobs — No Duplicates |
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.