Career Site Jobs API: Greenhouse, Lever, Ashby & more
Pricing
from $2.00 / 1,000 jobs
Career Site Jobs API: Greenhouse, Lever, Ashby & more
Get every open job from company career sites on Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee and Workable. Paste names or URLs; the platform is detected. Salary, remote, filters, only-new mode. $2 per 1,000 jobs.
Pricing
from $2.00 / 1,000 jobs
Rating
0.0
(0)
Developer
North Eng
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
Share
Career Site Jobs API — Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee & Workable
Get every open job straight from company career sites in one clean, uniform format. Paste company names or career site URLs; the Actor finds which applicant-tracking system (ATS) each company uses and reads its official public job-board feed — the same data the company's own careers page shows. No browser or proxy is needed, so a typical run of a few companies finishes in seconds.
Supported platforms: Greenhouse · Lever (US and EU) · Ashby · SmartRecruiters · Recruitee · Workable
Price: $2 per 1,000 jobs, nothing for companies that cannot be found. Not supported: Workday, iCIMS, Taleo and other systems (see limits).
Quick start
- Paste company names or career site URLs into Companies (one per line).
- Optionally add filters (keywords, locations, remote only, posted within N days).
- Click Start. Jobs appear in the Output tab within seconds; export them as JSON, CSV, Excel or XML, or read them through the API.
What you can do with it
- Job boards and aggregators: pull fresh postings from hundreds of companies on a schedule.
- Recruiting and sales intelligence: see who is hiring, for which teams, where, and at what pay.
- Job alerts: turn on Only new jobs and schedule the Actor: each run returns only jobs you have not received yet, and you pay only for those.
- Market research: salary ranges, remote share, hiring by department or country, across many companies.
Input
| Field | What it does |
|---|---|
| Companies | One per line: a board name (stripe), platform:name (lever:spotify, ashby:ramp, smartrecruiters:Ubisoft2), a board URL (https://boards.greenhouse.io/figma, https://jobs.lever.co/spotify, https://jobs.ashbyhq.com/ramp, https://bunq.recruitee.com, https://apply.workable.com/huggingface) or a company careers page that links to its board. |
| Platform for bare names | Detect automatically (default) or force one platform for bare names. |
| Keywords / Exclude keywords | Whole-word title match (optionally also the description). java does not match JavaScript. |
| Locations, Remote only, Departments, Employment types, Posted within (days) | Narrow the results. Many boards do not state the employment type; such jobs are kept when Full-time is selected. |
| Only new jobs + Memory key | Deliver only jobs not delivered before with the same key. |
| Max jobs / Max jobs per company | Cost control. Per-company limits keep the newest jobs. |
| Include description text / HTML | Full description as plain text (default) and/or HTML. |
Example input:
{"companies": ["stripe", "https://jobs.lever.co/spotify", "ashby:ramp", "https://www.figma.com/careers/"],"keywords": ["engineer", "data scientist"],"locations": ["Remote", "New York", "London"],"postedWithinDays": 14,"maxJobs": 500}
Output
One row per job, with the same fields for every platform:
{"id": "ashby:ramp:a5c7c68a-33f9-4f78-929e-29b58f26d22a","jobId": "a5c7c68a-33f9-4f78-929e-29b58f26d22a","title": "People Business Partner, G&A","company": "Ramp","companySlug": "ramp","platform": "ashby","department": "People & Talent","team": "People Business","location": "New York, NY (HQ)","locations": ["New York, NY (HQ)"],"country": "USA","workplaceType": "hybrid","remote": false,"employmentType": "full-time","employmentTypeRaw": "FullTime","salaryMin": 134000,"salaryMax": 236000,"salaryCurrency": "USD","salaryPeriod": "year","salaryText": "$134K - $236K","salarySource": "platform","postedAt": "2026-10-28T22:02:17.374Z","updatedAt": null,"url": "https://jobs.ashbyhq.com/ramp/a5c7c68a-33f9-4f78-929e-29b58f26d22a","applyUrl": "https://jobs.ashbyhq.com/ramp/a5c7c68a-33f9-4f78-929e-29b58f26d22a/application","requisitionId": null,"descriptionText": "ABOUT RAMP\n\nRamp is building the smart infrastructure for finance teams…","scrapedAt": "2026-10-29T10:22:34.796Z"}
- Every job row has the same fields on every platform; a value the board does not publish is
null(never missing or guessed). idis stable across runs (platform:board:jobId): use it to deduplicate or join.workplaceTypeisremote,hybrid,onsiteornull(not stated);remoteistrueonly for fully remote jobs.employmentTypeis normalised tofull-time,part-time,contract,internshiportemporary; the platform's own label is inemploymentTypeRaw.- Salary:
salarySourceisplatformwhen the ATS publishes a structured range (Ashby, Lever, Recruitee, Greenhouse pay transparency), ordescriptionwhen a range with a currency was found in the job text. Otherwise the salary fields arenull— nothing is guessed. - Companies that cannot be found or loaded get one free error row (
input,errorCode,error):NOT_FOUND(no board with that name),PLATFORM_NOT_DETECTED(a careers page with no supported board on it),UNSUPPORTED_PLATFORM(Workday, iCIMS, Taleo and similar),FETCH_FAILED(the board did not answer),INVALID_INPUT,BLOCKED_URL(private or local addresses).
The run summary (key-value store record OUTPUT) lists, per company, the platform found, jobs on the board, jobs matching your filters, jobs delivered and — in only-new mode — new and closed jobs.
Only new jobs (scheduled runs)
With Only new jobs on, the Actor remembers the IDs it delivered under your Memory key (in your named key-value store career-site-jobs-api-state). The next run with the same key skips them, so a daily schedule returns just the new postings. The first run delivers every matching job. Jobs that disappeared from a board since the last run are listed under closedJobs in the run summary, free. Jobs not delivered because of a limit are not remembered, so they come in a later run. Use a different key for each separate search, and avoid running two runs with the same key at the same time.
Pricing
Pay per result: $0.002 per job ($2 per 1,000 jobs), plus Apify's standard Actor start fee ($0.00005 per run start). Error rows, duplicates, jobs skipped by your filters and jobs already delivered in only-new mode are not charged. Set a maximum cost per run in the run options: the Actor stops cleanly when it is reached, and you are never charged for a job that was not saved. Platform usage (compute) is included in the price.
What a run costs is simply the number of jobs delivered × $0.002 (+ $0.00005 per start):
| Example run | Jobs delivered | Cost |
|---|---|---|
| 3 companies, 20 newest jobs each | 60 | $0.12 |
| Any search with Max jobs = 500 | at most 500 | at most $1.00 |
| Full export of a board with 1,000 open jobs | 1,000 | $2.00 |
| Scheduled Only new jobs run | only jobs that appeared since the last run | $0.002 each; $0.00005 when nothing is new |
Use it from code, automations or an AI agent
- One API call, jobs back as JSON:
POST https://api.apify.com/v2/acts/<this Actor>/run-sync-get-dataset-items?token=<YOUR_TOKEN>with the input as the body (for runs that finish within 5 minutes; see the API tab for the JavaScript, Python and CLI clients). - A feed for your job board: save your input as a task, schedule it, and read
https://api.apify.com/v2/actor-tasks/<task id>/runs/last/dataset/items?status=SUCCEEDED&format=json(orformat=csv,xml,xlsx) to get the latest run's jobs. - AI agents (MCP): the Actor works with the Apify MCP server. The cost of a run is predictable: at most
maxJobs× $0.002, and companies that are not found are free. - Integrations: Make, Zapier, n8n, Slack, Google Drive and webhooks are available from the Integrations tab.
How it works and limits
- Data comes from each platform's official public job-board API (for example Greenhouse's job board API, Lever's postings API, Ashby's posting API). Only jobs the company publishes publicly are available.
- A bare name is checked on all six platforms; the board with the most jobs wins and other matches are noted in the summary (
alsoFoundOn). If two companies share a name, passplatform:nameor the board URL instead. - A careers page URL on the company's own domain works when the page links to its board (embedded Greenhouse, Lever, Ashby, SmartRecruiters, Recruitee or Workable links). Otherwise the Actor tries the domain name as the board name.
- SmartRecruiters lists carry no description: the Actor reads each delivered job's detail record (only for jobs you receive). Greenhouse pay ranges work the same way (switch off "Greenhouse pay ranges" for maximum speed).
- Not supported: Workday, iCIMS, Taleo, SuccessFactors, Personio and other systems (such URLs get a free error row); LinkedIn or Indeed listings.
- Runs are restart-safe: if Apify migrates the run to another server, delivered jobs are not delivered or charged again.
FAQ
Do I need proxies or an API key? No. All feeds are public and served by the platforms' APIs.
How fresh is the data? Live: every run reads the boards at that moment, so a job posted a minute ago is included and a closed job is not.
Can I search all companies at once, without a list? No. This Actor reads the boards of the companies you name, live and in full. If you need a search across every company, a job database product is the better fit; if you know your target companies, this is the cheaper and fresher way.
My run returned 0 jobs. Why? The run's status message says why: the boards had no open jobs, your filters removed them all (it lists which filter removed how many), or, in only-new mode, nothing was new since the last run.
How many companies per run? Up to 1,000. Bare names are checked on all six platforms, so URLs or platform:name entries are a little faster.
Why is a company not found? Its board name may differ from its brand (for example Ubisoft2 on SmartRecruiters). Open the company's careers page, click a job, and paste that URL or the board URL.