# Career Site Jobs Scraper – Workday, Greenhouse, Lever, Ashby (`rt-solutions/career-site-jobs-scraper`) Actor

Scrape job openings from any company career page: Workday, Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Personio, Breezy and BambooHR — auto-detected, one unified format, filters and new-jobs monitoring.

- **URL**: https://apify.com/rt-solutions/career-site-jobs-scraper.md
- **Developed by:** [RT SOLUTIONS](https://apify.com/rt-solutions) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Career Site Jobs Scraper – Workday, Greenhouse, Lever, Ashby & more

Scrape job openings from **any company career page**, whatever recruiting platform it uses. Paste the career page URL — or just the company name — and get every open job in **one unified format**: title, department, location, remote / hybrid, employment type, salary when published, posting date, links and full description.

**10 platforms, auto-detected:** Workday · Greenhouse · Lever · Ashby · SmartRecruiters · Workable · Recruitee · Personio · Breezy · BambooHR. Company-hosted pages (e.g. `figma.com/careers`) are inspected to find the platform behind them.

### Why this one

| | This Actor | Single-platform scrapers |
|---|---|---|
| Platforms | 10, auto-detected from any link | 1 to 3 |
| Input | career page URL, company website careers page, or company name | platform-specific IDs |
| Output | one schema for every platform | different fields per platform |
| Monitoring | **Only new jobs since the last run** | ❌ |
| Salary | when the company publishes it (Ashby, Greenhouse pay transparency, Lever, Recruitee) | varies |
| Price | **$2 per 1,000 jobs** | $0.10–3 per 1,000 |

### Input examples

Career pages:

```json
{ "urls": ["https://jobs.lever.co/palantir", "https://boards.greenhouse.io/airbnb", "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"] }
```

Company names (Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee):

```json
{ "companies": ["stripe", "notion", "openai"], "keywords": ["engineer"], "remoteOnly": true }
```

Daily monitoring — schedule this run every morning to receive only the new openings:

```json
{ "urls": ["https://boards.greenhouse.io/stripe", "https://jobs.ashbyhq.com/ramp"], "onlyNewJobs": true, "postedWithinDays": 7 }
```

### Output example

```json
{
  "company": "ramp",
  "ats": "ashby",
  "title": "Security Engineer, Cloud",
  "department": "Engineering",
  "team": "Backend",
  "location": "New York, NY (HQ)",
  "locations": ["New York, NY (HQ)", "Remote (Canada)"],
  "remote": true,
  "workplaceType": "Hybrid",
  "employmentType": "FullTime",
  "salary": "$211.4K – $290.6K • Offers Equity",
  "salaryMin": 211400,
  "salaryMax": 290600,
  "salaryCurrency": "USD",
  "postedAt": "2026-04-07T17:12:35.753Z",
  "jobUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245",
  "applyUrl": "https://jobs.ashbyhq.com/ramp/34413f8d-26bf-4bbc-8ade-eb309a0e2245/application",
  "description": "…"
}
```

### Filters

- **Keywords** in the job title or department (`engineer`, `sales`, `python`)
- **Locations** (`London`, `Germany`, `Remote`)
- **Remote only**
- **Posted within N days**
- **Max jobs per company**

### Use cases

- **Sales prospecting & hiring signals**: which companies are hiring for roles that need your product.
- **Job boards & aggregators**: fresh jobs from hundreds of companies in one schema.
- **Recruiters & talent intelligence**: monitor competitors' openings every day.
- **Market research**: hiring trends by department, location and salary.

### Pricing

**$2 per 1,000 jobs.** Jobs filtered out are not charged. Cheaper on paid Apify plans.

### Good to know

- Only public job postings are collected, through the endpoints each platform provides to display jobs on career sites. No login, no personal data (recruiter names are not returned).
- Workday returns at most 2,000 jobs per search: for very large companies, add a keyword.
- `postedAt` on Workday comes from the job page when the description is included; otherwise it is estimated from "Posted X days ago".
- "Only new jobs" remembers the job IDs in your own Apify storage (key-value store `career-jobs-seen`).

### Related scrapers

- [NaukriGulf Scraper (Gulf jobs)](https://apify.com/rt-solutions/naukrigulf-scraper)
- [SEEK Jobs Scraper (Australia & NZ)](https://apify.com/rt-solutions/seek-jobs-scraper)
- [JobStreet & JobsDB Scraper (Asia)](https://apify.com/rt-solutions/jobstreet-jobsdb-scraper)

# Actor input Schema

## `urls` (type: `array`):

Any career page: Workday (\*.myworkdayjobs.com), Greenhouse, Lever, Ashby, SmartRecruiters, Workable, Recruitee, Personio, Breezy, BambooHR — or the company's own careers page (e.g. https://www.stripe.com/jobs); the platform is detected automatically.

## `companies` (type: `array`):

Optional: company names or slugs (e.g. airbnb, ramp, notion). The scraper looks for their board on Greenhouse, Lever, Ashby, SmartRecruiters, Workable and Recruitee.

## `keywords` (type: `array`):

Keep jobs whose title or department contains one of these words, e.g. engineer, sales, python.

## `locations` (type: `array`):

Keep jobs whose location contains one of these, e.g. London, Germany, Remote, New York.

## `remoteOnly` (type: `boolean`):

Keep only remote jobs.

## `postedWithinDays` (type: `integer`):

0 = any date. E.g. 7 for jobs published in the last week.

## `includeDescription` (type: `boolean`):

Full description text (one extra request per job on Workday and SmartRecruiters).

## `onlyNewJobs` (type: `boolean`):

Monitoring mode: returns only jobs not seen in your previous runs (remembered in your own Apify storage). Schedule the run daily to get each day's new openings.

## `maxJobsPerCompany` (type: `integer`):

After filters.

## `proxyConfiguration` (type: `object`):

Default Apify Proxy.

## Actor input object example

```json
{
  "urls": [
    "https://jobs.lever.co/palantir",
    "https://boards.greenhouse.io/airbnb",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "remoteOnly": false,
  "postedWithinDays": 0,
  "includeDescription": true,
  "onlyNewJobs": false,
  "maxJobsPerCompany": 500,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `jobs` (type: `string`):

All jobs.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://jobs.lever.co/palantir",
        "https://boards.greenhouse.io/airbnb",
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rt-solutions/career-site-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": [
        "https://jobs.lever.co/palantir",
        "https://boards.greenhouse.io/airbnb",
        "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rt-solutions/career-site-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://jobs.lever.co/palantir",
    "https://boards.greenhouse.io/airbnb",
    "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rt-solutions/career-site-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rt-solutions/career-site-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/IdMSQnApbKAGIWeGU/builds/HaxiZlQDhf13UDFov/openapi.json
