A spreadsheet of company domains is a useful starting point for hiring research. It is not a spreadsheet of applicant-tracking-system identifiers. Guessing that a company uses the same slug on every recruiting platform creates a quiet attribution problem: a real board can belong to a different company, and an empty response can mean the guess was wrong.
The Careers Page Scraper starts with the domain. Its installed build 0.3.1 looks for an ATS link on the company's careers pages before trying a domain-derived guess. The supported platforms are Greenhouse, Lever, Ashby, Workable, Rippling, and Workday. The useful output includes both job observations and the state of the resolution attempt.
Start with one domain and retain the resolution state
This is an illustrative input, not a report of a new execution. The public board can change between observations:
{
"domains": ["apify.com"],
"maxConcurrency": 1,
"maxJobsPerCompany": 100
}
The public input allows up to 100 domains. Bare domains and supported full URLs are normalized. Direct domains take priority over a source Dataset when the domains field is present; that remains true if the direct entries later prove invalid. Choose one input route deliberately so a stale direct list does not hide a new Dataset.
A source Dataset is useful when an upstream process already holds approved company domains. Select the resource through the Actor's Dataset input so the run receives the appropriate read scope. The presence of a Dataset identifier in a string does not itself demonstrate that a token can read the resource.
Separate attribution, absence, and depth
The first resolution method uses a link on the company's own careers page. The fallback tries a domain-derived board slug and requires actual nonzero postings before trusting the candidate. A successful HTTP response from a guessed board is insufficient: some services return a valid empty board for almost any slug.
Attribution matters even after jobs appear. Under the fallback method, a board's declared owner is checked against the submitted domain before its jobs become billable attributed results. A real job from an unverified candidate may still be delivered for review without a result charge. Keep that uncertainty in your staging table instead of silently attaching the job to the company.
Treat resolved-zero, unresolved, and source-error as different outcomes. Resolved-zero is a bounded observation of an identified board. Unresolved means the resolver could not establish the ATS. Source-error means collection failed. None of the last two establishes that the company has no vacancies.
Depth is separate again. Workday and Rippling are paginated, so maxJobsPerCompany limits those reads. The default is 500, with an accepted range from 1 to 5,000. The four non-paginated platforms return their board in one response and do not use that cap. A resolved-truncated notice tells you that a delivered list needs a coverage qualification.
Build the hiring table around evidence
Keep the company domain, the ATS attribution, the source job identifier or URL, the observation time, and any coverage notice together. Compare snapshots only after confirming that the board identity and collection depth are comparable. A smaller list following a truncated read is not evidence of a hiring decline.
For a practical acceptance exercise, use one known company, one domain with no resolvable board, and a paginated board with a deliberately small cap. Check whether unresolved input stays separate from zero jobs and whether the cap notice survives export. These are proposed checks, not newly observed results. The installed runtime also stops a list after fourteen consecutive unresolved domains before any company has resolved; retain that run notice so unattempted companies never become false negatives.
Use the result to prioritize research or maintain an observed hiring feed. A job posting does not establish a planned purchase, a filled position, or permission to contact a person.
Cost and source boundary
The live FREE-tier event prices checked on 20 October 2026 are $0.004 per result-found event and $0.01 per automatic Actor-start event. The start event is memory-scaled: one event per GB, with a minimum of one event. A free result outcome therefore does not make an entire run free. Other account tiers have their own rates; check the live pricing panel before execution. These prices describe the installed contract, not measured customer revenue or a new runtime test.
Inspect the Actor, input, and current pricing.
AI-assisted drafting; technical statements reviewed against the installed Actor source and current API metadata. Examples are illustrative unless explicitly identified as saved observations.
Top comments (0)