Career Page Jobs API: Greenhouse, Lever, Ashby & more
Pricing
$2.00 / 1,000 job results
Career Page Jobs API: Greenhouse, Lever, Ashby & more
Get open jobs straight from company career boards (Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee). Enter company names, domains or board URLs. Filter by title, location, remote and date. Salary included when clearly stated. $2 per 1,000 jobs, only for jobs you receive.
Pricing
$2.00 / 1,000 job results
Rating
0.0
(0)
Developer
REEBOO Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Features
Share
Career Page Jobs API
Open job listings straight from company career boards, as clean structured data. Give us company names, domains or career board links. We read the boards' own public JSON feeds and return one tidy row per open job: title, location, remote flag, department, salary when the board states it clearly, posting date, apply link and description.
No browser, no proxy, no login, no scraping of rendered pages. You pay only for jobs that end up in your dataset.
Supported job boards
Greenhouse, Lever, Ashby, SmartRecruiters, Workable and Recruitee. That is the full list for this version. Workday and other systems are not covered yet, and a company that runs its own custom career site will not be found.
Why use it
- Direct from the source. Data comes from the boards' own public feeds, not from a third-party copy.
- Pay only for what you keep. The price is per job delivered, after your filters and after de-duplication. Companies we cannot find cost nothing.
- Incremental mode. Turn on "Only jobs not delivered before" and a scheduled run delivers, and charges for, only the new postings since your last run.
- Names, domains or links. Type
gitlab,gitlab.comorhttps://boards.greenhouse.io/gitlab. For names and domains we look for the board on all six systems and keep every match that has open jobs. - Salary only when it is clear. Structured pay is used when the board provides it, unless it is a yearly-sized amount labelled monthly (20,000 or more in USD, EUR, GBP or CHF), which we do not deliver. Otherwise we read a pay range from the description text only when exactly one range is stated and its period is written in English right next to it (for example "per hour", "annual salary:", or a "Salary:" label in front of an amount of 20,000 or more, read as yearly). Both number styles are understood:
€3.000 - €4.000and$3,000 - $4,000mean thousands,€12,50and$12.50mean cents. These stay empty: several different ranges; bonus, stipend or equity ranges; company-size figures such as "$5-$10 billion"; working hours such as "40 hours per week"; numbers grouped with spaces; and amounts that do not fit their period (such as 3-4 per month, or more than 2,000,000 per year), which also means a very high amount in a low-value currency such as JPY or INR can stay empty. This is a rule on the text, so an unusual wording can still be misread.
Pricing
$0.002 per job delivered, which is $2 per 1,000 jobs. No start fee. Example: 250 jobs cost $0.50. You can also set a maximum cost per run in Apify; when it is reached the run stops and keeps everything delivered so far. In our test at the limit the run ended with the status Succeeded; Apify may also end such a run itself, and in that case the jobs already delivered stay in your dataset. With onlyNewJobs, each batch of up to 50 jobs is written to the memory just before it is delivered, so a later run does not deliver or charge those jobs again. The trade-off: if a run is killed in the instant between the two steps, up to 50 jobs of that batch can be missing from your dataset and will not be offered again until the memory expires after 120 days.
Input
| Field | What it does |
|---|---|
companies | Board URLs, company names or domains. One entry per company. |
titleKeywords / excludeTitleKeywords | Keep titles containing any of these / drop titles containing any of these. |
locationKeywords | Keep jobs whose location or country contains any of these texts. |
remoteOnly | Remote jobs only (board flag, else the word "Remote" in location or title). |
postedWithinDays | Only jobs first published in the last N days. Jobs without any date are dropped when set. |
includeDescription | Plain-text description (default on). includeHtml adds the job's HTML (Greenhouse sends its markup escaped; we convert it back to normal tags). |
onlyNewJobs + stateKey | Only jobs not delivered by earlier runs with the same state key. |
maxJobsPerCompany | Default 1000, counted after filters. |
maxJobsTotal | Stop after this many jobs in total. |
Example:
{"companies": ["gitlab", "https://jobs.ashbyhq.com/ramp", "zoox.com"],"titleKeywords": ["engineer"],"remoteOnly": true,"postedWithinDays": 30,"onlyNewJobs": true,"stateKey": "remote-engineering","maxJobsPerCompany": 50}
Output
One dataset item per job. This is a real item from a run of this Actor on Apify on 2026-11-05 (description shortened here):
{"source": "lever","company": "zoox","companySlug": "zoox","jobId": "e8a190f0-7a89-4c11-a6a0-452ff6234749","title": "Administrative Business Partner, Floater","department": "Executive Office","team": "Executive Office","location": "Foster City, CA","country": "US","isRemote": false,"employmentType": "Full-time","salaryMin": 123000,"salaryMax": 168000,"salaryCurrency": "USD","salaryPeriod": "year","postedAt": "2026-10-06T17:27:44.932Z","updatedAt": null,"applyUrl": "https://jobs.lever.co/zoox/e8a190f0-7a89-4c11-a6a0-452ff6234749/apply","jobUrl": "https://jobs.lever.co/zoox/e8a190f0-7a89-4c11-a6a0-452ff6234749","description": "Zoox is building the future of transportation. To do that, we’re also building an incredible crew—united by ou ...","scrapedAt": "2026-11-05T09:41:07.813Z"}
A second record named OUTPUT in the key-value store lists, per company, which board it was found on, how many jobs were found, how many were delivered, and which companies could not be found.
FAQ
A company was not found. Why? It may use a system we do not support, or a different board name. Paste its career board link instead of the name. Not-found companies are listed in OUTPUT and are never charged.
Can a name match the wrong company? Yes. Short names can exist on several boards, for example a different company with the same board name. Board links are exact; use them when precision matters.
What if a job's description cannot be loaded? On SmartRecruiters the description is a separate request per job. If that request fails (after retries), the job is not delivered and not charged, it is counted as detailFailed in OUTPUT, and with "only new jobs" it is offered again next time. That job still counts toward your per-company limit in that run.
Which fields differ between boards? Each board publishes different details. Missing values are null. SmartRecruiters publishes no links in its job list, so for those rows jobUrl and applyUrl are built from the company and job id (the board's detail data replaces them when included; the built links follow the board's public job-page format and the apply link carries the board's own ?oga=true suffix). country is given as the board gives it (a code on some boards, a name on others). employmentType is the board's own wording. Some boards have no remote field, so we also look at the location and title.
Where does salary come from? Lever, Ashby, Recruitee and SmartRecruiters provide structured pay on some postings. For other postings we read the description. A bare $ is not labelled USD because it can mean several currencies; the amounts and period are still filled when clear. On SmartRecruiters, pay needs "Include job description" on, because it sits on the detail page.
How does "only new jobs" work? We remember the jobs we delivered for your state key in a named storage of your account. A job we did not deliver (for example because you hit a limit) is still new next time. Jobs not seen for 120 days are forgotten, so a very old reappearing job may be delivered again.
How fast is it? It depends on the board and on where it runs. In one test on a local computer (not on Apify), 4,378 jobs from 13 boards on Greenhouse, Lever and Ashby took about 30 seconds. SmartRecruiters with descriptions needs one extra request per job, so it is slower. Treat both as rough guides, not a guarantee; we have not measured speed on the Apify platform.
Limits. Six board systems only. Public listings only. We are polite to the boards: at most 3 parallel requests per host, with retry and back-off (we honour a Retry-After wait; without one we wait 1 s, 2 s, 4 s ... and give up after 5 tries). You are responsible for how you use the data and for following the terms of the boards and the law that applies to you.
Something looks wrong. Open an issue from the Actor page with the company and what you expected.