# Job Search API: 10,000+ Company Career Sites, Workday, Ashby (`swiftkit/job-search`) Actor

Search 300,000+ open jobs from 10,000+ company career sites (Greenhouse, Ashby, Lever, Workday and more), from their official job boards, refreshed daily. Filter by title, location, remote and date. Salaries when published. Only-new mode for job alerts.

- **URL**: https://apify.com/swiftkit/job-search.md
- **Developed by:** [SwiftKit](https://apify.com/swiftkit) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.00 / 1,000 job founds

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

## Job Search API: 10,000+ Company Career Sites, Workday, Ashby

Search open jobs across **10,000+ company career sites at once**, straight from the companies' own
job boards on **Greenhouse, Ashby, Lever, Workday, SmartRecruiters, Workable, Teamtailor, Personio,
Recruitee and Rippling**. Results come back in seconds.

- **Fresh, direct data:** every company's official public job board is read once a day, and
  Workday sites (and any boards you add) are searched live during your run. Each row says how fresh
  it is (`dataAsOf`).
- **Filters:** title keywords (and exclusions), location, remote only, posted within N days,
  job-board system.
- **Salaries** when the company publishes them (common on Ashby and Lever).
- **Add your own companies:** paste any supported job-board URL and it's searched too.
- **Only new jobs:** schedule it daily and get just the new postings, perfect for job alerts.
- **Fixed price per job found.**

### Who it's for

- **Job seekers and communities:** a daily feed of new roles at tech companies, e.g. remote
  "product designer" jobs.
- **Job boards and newsletters:** fresh, direct-from-company listings in one format.
- **Recruiters and sales teams:** see who's hiring for what, as a buying signal.
- **Researchers:** hiring trends across companies.

### Which companies?

The list holds about 10,000 company job boards that are live and hiring. It was built from public
sources: job-board links companies posted in Hacker News "Who is hiring?" threads, and the
Internet Archive's public web index. Every board was checked against its official API. It covers
startups and tech companies best, and plenty of others. Boards that stop answering drop out, and new
ones are added over time.

For a specific company that's missing, add its board URL, or use our
[Job Scraper](https://apify.com/swiftkit/company-jobs), which finds a company's board from its name
or website.

### Input

| Option | Default | What it does |
|---|---|---|
| Job title contains | – | Any of these words in the title |
| Job title must not contain | – | Drop titles with these words |
| Location contains | – | e.g. London, Germany, Remote |
| Remote only | off | Only jobs marked remote |
| Posted within (days) | 30 | 0 = any date |
| Job board systems | all | Workday, Greenhouse, Ashby, Lever, Workable, SmartRecruiters, Teamtailor, Personio, Recruitee, Rippling |
| Add your own company boards | – | Board URLs to search too |
| Include job descriptions | off | Full text and HTML (slower) |
| Max jobs | 500 | Stop after this many |
| Only new jobs | off | Skip jobs seen in earlier runs with the same filters |

### Output

```json
{
  "company": "Afresh",
  "title": "Staff Data Engineer, Analytics",
  "location": "Remote, San Francisco, California, United States",
  "remote": true,
  "department": "…",
  "employmentType": null,
  "salaryMin": null,
  "salaryMax": null,
  "salaryCurrency": null,
  "postedAt": "2026-09-11T…",
  "url": "https://…",
  "applyUrl": "https://…",
  "platform": "greenhouse",
  "boardUrl": "https://boards.greenhouse.io/…"
}
```

### Pricing

You pay **per matching job returned**. Boards that don't answer cost nothing. See the Pricing tab.

### Limits, honestly

- About 10,000 companies is a lot, but not every company in the world. It covers these directly from
  their own boards.
- Jobs from the daily snapshot can be up to a day old; a job closed this morning may still appear.
  Workday and boards you add are always live.
- "Remote" and salary come from what each company publishes. Some boards don't mark remote jobs
  clearly, so "Remote only" can miss a few.
- Posting dates come from the job board. Some systems show the last update rather than the first
  posting.
- Workday sites are searched with their own search box: up to 100 matches per keyword per company
  (without keywords, the newest 100 jobs per company).

### More tools from SwiftKit

- [Job Scraper](https://apify.com/swiftkit/company-jobs): every open job from a list of companies you choose (Workday, Greenhouse, Lever, Ashby…)
- [Hacker News Scraper](https://apify.com/swiftkit/hacker-news): search stories and comments, or the monthly Who is hiring thread as a job table
- [Website Contact Finder](https://apify.com/swiftkit/website-contacts): company socials, phones and shared inboxes from a website

### Questions?

Open an issue on the Issues tab. Want a company added to the list? Tell us its job-board link.

# Actor input Schema

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

Keep jobs whose title contains any of these, e.g. data engineer, product designer. Empty = all jobs.

## `excludeKeywords` (type: `array`):

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

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

e.g. London, Germany, Remote. Empty = anywhere.

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

Only jobs marked remote by the company.

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

Only jobs posted in the last N days. 0 = any date.

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

Limit the search to some systems. Empty = all.

## `extraBoards` (type: `array`):

Job-board URLs to include too, e.g. https://jobs.ashbyhq.com/yourcompany, https://boards.greenhouse.io/yourcompany or a Workday careers URL like https://company.wd5.myworkdayjobs.com/External

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

Full description text and HTML. Slower.

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

Stop after this many matching jobs.

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

Return only jobs not seen in earlier runs with the same filters. Schedule it daily for job alerts.

## `maxConcurrency` (type: `integer`):

Parallel requests.

## Actor input object example

```json
{
  "titleKeywords": [
    "data engineer"
  ],
  "remoteOnly": false,
  "postedWithinDays": 30,
  "includeDescription": false,
  "maxJobs": 500,
  "onlyNewJobs": false,
  "maxConcurrency": 16
}
```

# Actor output Schema

## `results` (type: `string`):

One row per matching job.

# 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"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("swiftkit/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"] }

# Run the Actor and wait for it to finish
run = client.actor("swiftkit/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"
  ]
}' |
apify call swiftkit/job-search --silent --output-dataset

```

## MCP server setup

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