# Career Site Job Search: Jobs From Company Career Pages (`sourcewise/career-site-job-search`) Actor

Search open jobs by keyword and location across thousands of company career sites (Workday, Greenhouse, Lever, Ashby, Personio, Teamtailor, SmartRecruiters, Recruitee, Workable). First-party postings, refreshed daily, no reposts.

- **URL**: https://apify.com/sourcewise/career-site-job-search.md
- **Developed by:** [Sourcewise](https://apify.com/sourcewise) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 37.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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.

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 Job Search: jobs straight from company career pages

Search **open jobs by keyword and location across thousands of company career sites**: Workday, Greenhouse, Lever, Ashby, Personio, Teamtailor, SmartRecruiters, Recruitee and Workable. Every result is a **first-party posting** from the employer's own career site. No reposts, no aggregator spam, no expired listings copied from job boards.

### Why use it?

- 🏢 **Direct from employers.** Jobs come from companies' own applicant tracking systems, so they're the original postings, with the real apply link.
- 🔎 **Search like a job board.** Filter by title keywords, location, remote, date posted, company and platform.
- 🔄 **Fresh.** Career sites are re-checked daily. Closed jobs disappear from results.
- 🔔 **Monitoring mode.** Schedule a daily run with "Only new jobs" and pay only for jobs you haven't seen yet. Perfect for job alerts.
- 💰 **Salary, remote and hybrid** where the employer publishes them.
- 🧹 **One clean schema** across all platforms, ready for spreadsheets, databases, job boards and AI agents.

### Use cases

- **Job boards and aggregators:** fill niche boards (e.g. "remote data jobs in Europe") with fresh first-party postings.
- **Recruiters and agencies:** find companies actively hiring for the roles you place.
- **Job seekers and career coaches:** daily alerts for matching roles straight from employers.
- **Market and talent intelligence:** track hiring demand by role, location and company.

### Input

| Field | Description |
|---|---|
| `titleKeywords` | Jobs whose title contains any of these words or phrases (whole words) |
| `excludeTitleKeywords` | Drop jobs whose title contains any of these |
| `locations` | City, region or country as whole words, e.g. `Berlin`, `United States`; `Remote` matches remote jobs |
| `remoteOnly` | Only remote jobs |
| `postedWithinDays` | Only jobs published in the last N days |
| `keywords` | Broader match in title, company or department |
| `companies` | Limit to specific companies |
| `platforms` | Limit to specific ATS platforms |
| `onlyNewJobs` / `stateKey` | Monitoring mode: only jobs not returned before |
| `includeDescription` | Include full description (HTML and text) |
| `maxJobs` | Maximum jobs to return (newest first) |

Example:

```json
{
  "titleKeywords": ["data engineer", "analytics engineer"],
  "excludeTitleKeywords": ["intern"],
  "locations": ["Berlin", "Munich", "Remote"],
  "postedWithinDays": 7,
  "onlyNewJobs": true
}
```

### Output

Each job is one dataset item with the same fields as our [Career Site Jobs Scraper](https://apify.com/sourcewise/career-site-jobs): `title`, `company_name`, `url`, `apply_url`, `location`, `locations`, `country`, `city`, `workplace_type`, `is_remote`, `employment_type`, `department`, `published_at`, `salary`, `description_html`, `description_text`, plus `first_seen`, `last_seen` and the source platform (`ats`).

### Coverage

Coverage grows continuously: new company career sites are discovered every week from public web data. Need specific companies right now? Use the [Career Site Jobs Scraper](https://apify.com/sourcewise/career-site-jobs), which fetches any company's career site live.

### Pricing

Pay per job returned. Filters run before you're charged. In monitoring mode you pay only for new jobs. Every run respects your maximum cost per run.

### FAQ

**Where does the data come from?** From the public job boards and published feeds that employers' ATS platforms provide for distributing job postings, refreshed daily. We respect robots.txt and don't collect personal data.

**Why is a company missing?** It may use an ATS we don't support yet, or we haven't discovered its board. Open an issue and we'll add it.

# Actor input Schema

## `titleKeywords` (type: `array`):

Jobs whose title contains any of these words or phrases (whole words, case-insensitive), e.g. 'data engineer', 'product manager'.

## `excludeTitleKeywords` (type: `array`):

Drop jobs whose title contains any of these, e.g. 'senior', 'intern'.

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

City, region or country names/codes as whole words, e.g. 'Berlin', 'United States', 'London'. 'Remote' matches remote jobs. Empty = anywhere.

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

Keep only jobs the employer marks as remote.

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

Only jobs published in the last N days.

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

Broader match: any of these words in the job title, company name or department.

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

Limit to these companies (name or board slug, exact match, e.g. 'Stripe').

## `platforms` (type: `array`):

Limit to these ATS platforms.

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

Return only jobs not returned by a previous run with the same filters. Schedule daily to get alerts and pay only for new jobs.

## `stateKey` (type: `string`):

Optional name for the 'seen jobs' memory. Defaults to one derived from the filters.

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

Include the full job description as HTML and plain text.

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

Newest jobs first. Also capped by your maximum cost per run.

## Actor input object example

```json
{
  "titleKeywords": [
    "data engineer"
  ],
  "locations": [
    "Berlin",
    "Remote"
  ],
  "remoteOnly": false,
  "onlyNewJobs": false,
  "includeDescription": true,
  "maxJobs": 1000
}
```

# Actor output Schema

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

Matching job postings, newest first.

## `summary` (type: `string`):

Total matching jobs, jobs returned, already-seen jobs skipped.

# 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 = {
    "titleKeywords": [
        "data engineer"
    ],
    "locations": [
        "Berlin",
        "Remote"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourcewise/career-site-job-search").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 = {
    "titleKeywords": ["data engineer"],
    "locations": [
        "Berlin",
        "Remote",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("sourcewise/career-site-job-search").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 '{
  "titleKeywords": [
    "data engineer"
  ],
  "locations": [
    "Berlin",
    "Remote"
  ]
}' |
apify call sourcewise/career-site-job-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sourcewise/career-site-job-search"
        }
    }
}
```

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/LyisGiaYYvBE3AN96/builds/rbeB2RG29Mb2lzFug/openapi.json
