# Career Site Jobs Scraper (Greenhouse, Lever, Ashby, Workday +3) (`datapulse-labs/career-site-jobs-scraper`) Actor

Paste any company website or careers page: the Actor finds its job board (Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee) and returns every open job with location, remote flag, salary and full description. Monitor mode returns only new jobs.

- **URL**: https://apify.com/datapulse-labs/career-site-jobs-scraper.md
- **Developed by:** [DataPulse Labs](https://apify.com/datapulse-labs) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 job scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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: Greenhouse, Lever, Ashby, Workday, Workable, SmartRecruiters, Recruitee

**Paste a company website and get every open job.** The Actor finds which applicant tracking system (ATS) the company uses and pulls jobs straight from its official public job board API, so data is complete, fresh and reliable (no proxies, no blocked runs).

| You paste | The Actor does |
|---|---|
| `stripe.com` | finds Stripe's Greenhouse board → 700+ jobs |
| `notion.so` | finds Notion's Ashby board → 130+ jobs |
| `https://jobs.lever.co/palantir` | reads the Lever board directly |
| `https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite` | reads the Workday site |
| `ashby:openai` / `greenhouse:airbnb` | uses the ATS and slug you give |

Supported job boards: **Greenhouse** (US and EU), **Lever** (US and EU), **Ashby** (with salary ranges), **Workday**, **Workable**, **SmartRecruiters** and **Recruitee**.

### Use cases

- **Hiring signals for sales.** Companies hiring "Head of Data" or "Salesforce admin" are buying. Feed new jobs to your CRM every day.
- **Job boards and newsletters.** Aggregate jobs from hundreds of companies in one normalized format.
- **Recruiting and market research.** Track competitors' hiring by team, location and salary.
- **AI agents.** Clean JSON with full descriptions as plain text, ready for LLMs and RAG.

### Input

| Field | What it does |
|---|---|
| **Companies** | Websites, careers page URLs or `ats:slug`, one per line. |
| **Job title keywords** | Comma-separated, matches title, department or team, e.g. `engineer, data`. |
| **Location** | Comma-separated, e.g. `London, Berlin, remote`. |
| **Remote jobs only** | Keep only remote jobs. |
| **Posted within (days)** | Only recent jobs. |
| **Include full job description** | Adds the description as clean text. |
| **Max jobs per company / in total** | Limits. |
| **Monitor mode** | Only jobs not seen in previous runs with the same input. Schedule it daily for hiring alerts. |

### Output

One item per job (example values):

```json
{
    "company": "openai",
    "ats": "ashby",
    "jobId": "8fb1615c-34bf-47c4-a1d1-b7b2f836bbd3",
    "title": "Research Engineer",
    "department": "Research",
    "team": "Post-Training",
    "location": "San Francisco",
    "isRemote": false,
    "workplaceType": "OnSite",
    "employmentType": "FullTime",
    "salaryMin": 250000,
    "salaryMax": 445000,
    "salaryCurrency": "USD",
    "salaryPeriod": "YEAR",
    "postedAt": "2026-09-30T00:03:20.653Z",
    "url": "https://jobs.ashbyhq.com/openai/8fb1615c-...",
    "applyUrl": "https://jobs.ashbyhq.com/openai/8fb1615c-.../application",
    "description": "About the team...",
    "input": "openai",
    "scrapedAt": "2026-10-07T21:00:00.000Z"
}
```

Salary is filled when the company publishes it (common on Ashby, Lever and Recruitee). Export to JSON, CSV or Excel, or connect via API, webhooks, Zapier, Make or n8n.

### Pricing

Pay per job returned, with no monthly fee. Companies with no matching jobs cost nothing. Set a maximum cost per run and the Actor stops on its own when it gets there.

### Use it from AI agents (MCP)

Works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the [Apify MCP server](https://mcp.apify.com). Try: *"list remote data engineering jobs at Stripe, Notion and Databricks posted this week"*.

### FAQ

**A company is not found?** Paste its careers page URL instead of the homepage, or use `ats:slug`. Companies on other systems (e.g. iCIMS, Taleo) are not supported yet. Open an issue and tell us which one you need.

**Is it legal?** It only reads public job boards that companies publish for candidates and job aggregators. No login, no personal data.

# Actor input Schema

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

One per line. Any of: company website (stripe.com), careers page URL (https://jobs.lever.co/palantir, https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite), or ATS:slug (greenhouse:airbnb, ashby:openai). The Actor detects the job board automatically.

## `keyword` (type: `string`):

Optional. Comma-separated, matches title, department or team (e.g. "engineer, data, product").

## `location` (type: `string`):

Optional. Comma-separated (e.g. "London, Berlin, remote").

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

Keep only jobs marked as remote.

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

Optional. Only jobs published in the last N days.

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

Adds the full description as clean text (ready for LLMs). Slower for Workday and SmartRecruiters.

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

0 = no limit.

## `maxJobs` (type: `integer`):

Stop after this many jobs in total.

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

Return only jobs not seen in previous runs with the same input. Schedule it daily to get hiring alerts.

## Actor input object example

```json
{
  "companies": [
    "stripe.com",
    "https://jobs.ashbyhq.com/openai",
    "https://jobs.lever.co/palantir"
  ],
  "remoteOnly": false,
  "includeDescription": false,
  "maxJobsPerCompany": 0,
  "maxJobs": 1000,
  "onlyNewJobs": false
}
```

# Actor output Schema

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

No description

# 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 = {
    "companies": [
        "stripe.com",
        "https://jobs.ashbyhq.com/openai",
        "https://jobs.lever.co/palantir"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datapulse-labs/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 = { "companies": [
        "stripe.com",
        "https://jobs.ashbyhq.com/openai",
        "https://jobs.lever.co/palantir",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("datapulse-labs/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 '{
  "companies": [
    "stripe.com",
    "https://jobs.ashbyhq.com/openai",
    "https://jobs.lever.co/palantir"
  ]
}' |
apify call datapulse-labs/career-site-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datapulse-labs/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/zS2gkIDmINeDJ4qPB/builds/QIOB8XcCqrWDlczdc/openapi.json
