Company Career Site Jobs — Greenhouse, Lever, Ashby, Workday avatar

Company Career Site Jobs — Greenhouse, Lever, Ashby, Workday

Pricing

$1.00 / 1,000 job postings

Go to Apify Store
Company Career Site Jobs — Greenhouse, Lever, Ashby, Workday

Company Career Site Jobs — Greenhouse, Lever, Ashby, Workday

Collect job postings straight from company career sites through the public APIs of four applicant tracking systems, normalized into one schema.

Pricing

$1.00 / 1,000 job postings

Rating

0.0

(0)

Developer

MJ KIM

MJ KIM

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

25 days ago

Last modified

Categories

Share

Collect job postings straight from company career sites. This Actor talks to the public APIs of four applicant tracking systems and returns every posting in one shape, so a list of companies on different systems still comes back as a single clean dataset.

What it does

  • Four systems, one schema. Greenhouse, Lever, Ashby and Workday postings arrive with the same field names, so nothing downstream has to branch.
  • Paste a careers URL. The system is detected from the link. You can also write it out as greenhouse:airbnb, lever:gopuff or ashby:openai.
  • Descriptions included. Full text and original HTML for every posting, with HTML entities already decoded.
  • Every run is checked. A quality report is written to the key-value store under RUN_SUMMARY: how many postings each company returned, how often each field was actually filled, duplicates, detail requests that were refused, and which companies failed and why. Gaps are reported rather than hidden — if a source stops returning descriptions partway through, the run says so instead of quietly handing you empty columns.
  • One bad company does not sink the run. Failures are recorded per company and the rest still finish.
  • An empty result is an answer, not an error. A company with no current openings, or filters that match nothing, finish successfully with a warning in RUN_SUMMARY. The run is only marked failed when every company failed or the output itself is malformed.

Input

FieldTypeNotes
companiesarray of stringsOne per line. A careers URL, or system:company. Workday needs workday:tenant/dataCenter/site, which a Workday careers URL already contains.
includeDescriptionbooleanDefault true. Turning it off makes Workday runs much faster, since that system needs one extra request per posting, and drops the description fields from every source.
maxJobsPerCompanyinteger0 means no limit.
titleKeywordsarray of stringsKeep only postings whose title contains one of these.
locationKeywordsarray of stringsKeep only postings matching a location.
remoteOnlybooleanKeep only postings marked remote.

Example

{
"companies": [
"greenhouse:airbnb",
"lever:gopuff",
"ashby:openai",
"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
],
"includeDescription": true,
"titleKeywords": ["engineer", "data"]
}

Output

Every record has these fields. A value that the source does not provide is null — never an empty string, so a gap is always visible.

FieldDescription
sourcegreenhouse, lever, ashby or workday
companyId, companyNameBoard identifier and company name
jobIdIdentifier within that system
titleJob title
locationRaw, locationsLocation as written, and the split list
remotetrue, false, or null when the source says nothing
employmentTypeFull time, part time, contract, as the source words it
department, teamWhere the source separates them
compensationWhere the source publishes it
postedAt, updatedAtISO 8601
url, applyUrlPosting page and application page
descriptionText, descriptionHtmlFull description
scrapedAtISO 8601

Sample record

{
"source": "ashby",
"companyId": "linear",
"companyName": "linear",
"jobId": "d3bc1ced-3ce4-4086-a050-555055dbb1ff",
"title": "Senior / Staff Fullstack Engineer",
"locationRaw": "Europe",
"locations": ["Europe"],
"remote": true,
"employmentType": "FullTime",
"department": "Product",
"team": "Engineering",
"compensation": null,
"postedAt": "2021-04-27T20:13:45.158Z",
"updatedAt": null,
"url": "https://jobs.ashbyhq.com/linear/d3bc1ced-3ce4-4086-a050-555055dbb1ff",
"applyUrl": "https://jobs.ashbyhq.com/linear/d3bc1ced-3ce4-4086-a050-555055dbb1ff/application",
"descriptionText": "At Linear, we're building the product development system...",
"descriptionHtml": "<p>At Linear, we're building...</p>",
"scrapedAt": "2026-09-22T09:14:02.511Z"
}

Finding a company

  • Greenhouse — boards.greenhouse.io/<company> or job-boards.greenhouse.io/<company>
  • Lever — jobs.lever.co/<company>
  • Ashby — jobs.ashbyhq.com/<company>
  • Workday — <tenant>.wd<n>.myworkdayjobs.com/<site>

Paste any of those links and the Actor works out the rest. A company whose careers page is not one of these four systems is reported in RUN_SUMMARY rather than failing the run.

Reading the quality report

RUN_SUMMARY in the key-value store holds the numbers behind the run:

FieldMeaning
jobsCollected / rawCollectedRows returned, and rows found before filters
bySourceHow many rows each system contributed
fillRate / fillRateBySourceHow often each field was actually filled, overall and per system
detailFailuresDetail requests a system refused, counted rather than guessed
detailStoppedSet when a system refused so persistently that the Actor stopped asking
warningsEmpty results, description gaps, refused detail requests
errorsCompanies that failed, with the reason
verdictok: false only when every company failed or the output is malformed

Workday publishes descriptions through a separate request per posting and rate-limits them. The Actor retries and slows down, and if the system keeps refusing it stops asking rather than billing you for empty columns — that shows up in detailStopped.

Notes

  • Only postings a company publishes on its own careers page are collected. Ashby postings marked unlisted are skipped.
  • No personal data is collected: these are job advertisements written by employers.
  • These are public endpoints and normally need no proxy.