# Career Site Job Search - Greenhouse, Lever, Ashby, $3/1K (`plotpointtech/career-site-job-search`) Actor

Search open jobs across 10,000+ employer career sites on Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee by keyword, location, remote and date. No company list needed. $3 per 1,000 jobs.

- **URL**: https://apify.com/plotpointtech/career-site-job-search.md
- **Developed by:** [Plot Point Technologies](https://apify.com/plotpointtech) (community)
- **Categories:** Jobs, Automation, Lead generation
- **Security:** Limited permissions
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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.
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 Job Search: Greenhouse, Lever, Ashby & More, No Company List Needed

**Search open jobs straight from thousands of employers' own career sites by keyword, location, remote status and posting date, without knowing which companies to look at.** This job search API keeps an index of 14,000+ employer job boards on Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee, picks the boards most likely to have what you want, reads them live and returns matching jobs in one clean format, with salary, seniority and remote/hybrid/on-site fields. **$3 per 1,000 jobs.**

Most career-site scrapers ask you for a list of companies first. This one does not: type `engineer`, `account executive` or `nurse`, choose "Last 24 hours", and get fresh jobs from whichever employers posted them.

### What does Career Site Job Search do?

- **Searches across employers you did not name.** The employer index is built from public sources (the Common Crawl URL index and open-source company lists) and each board is checked against the ATS's public job-board API. It is refreshed on a schedule, so new employers are added and closed boards dropped.
- **Reads every job live** from the employer's own board at run time, so titles, dates, links and pay ranges are current, not a stale copy.
- **Filters** by title keywords (with exclusions), locations (city, state or country), remote / hybrid / on-site, posted within 1 hour, 24 hours, 7 days or 30 days, seniority, ATS platform, and company include/exclude lists.
- **Adds derived fields**: seniority from the title, workplace type when the employer does not label it, country code from the location, and salary parsed from the description when no structured pay range is published.
- **Removes duplicates** and caps jobs per company so results cover many employers.

### Who uses it?

- **Job boards and newsletters** filling niche boards (e.g. remote design roles, climate jobs, Rust engineers) with direct-from-employer listings.
- **Recruiters and staffing agencies** looking for companies that are hiring for a role right now.
- **Sales and RevOps teams** using fresh job posts as buying signals ("hiring a first data engineer", "opening an office in Berlin").
- **Job seekers and career coaches** who want new postings within hours instead of days.
- **Researchers and analysts** tracking hiring by role, location, seniority and pay.

### How to use it

1. Click **Try for free** (or **Start**).
2. Enter **Job title keywords**, for example `data engineer`, `product designer`.
3. Optionally add **Locations** (`London`, `United States`, `Remote`), pick a **Workplace type** and **Posted within**.
4. Set **Maximum results** and run. Export to Excel, CSV or JSON, or send the results to Google Sheets, Slack or a webhook.
5. For alerts, schedule it hourly or daily with "Posted within" set to "Last hour" or "Last 24 hours".

Tip: for rare titles or long time windows, raise **Max employer boards to scan** and the run timeout so more boards are opened.

### Input example

```json
{
  "keywords": [
    "data engineer",
    "analytics engineer"
  ],
  "excludeKeywords": [
    "intern"
  ],
  "locations": [
    "United States",
    "Remote"
  ],
  "workplaceType": "any",
  "postedWithin": "24h",
  "seniority": [
    "Senior",
    "Staff"
  ],
  "maxResults": 200,
  "maxJobsPerCompany": 5
}
```

### Output example

This is a real record from a default run (description shortened):

```json
{
  "company": "Tessera Labs",
  "ats": "Ashby",
  "companySlug": "tessera-labs",
  "jobId": "7bdf25c8-1f54-4077-bafb-08519bab9ebc",
  "title": "AI Infrastructure Engineer [Senior]",
  "department": "Platform",
  "team": "Platform",
  "location": "Remote in the U.S.",
  "locations": [
    "Remote in the U.S."
  ],
  "country": "US",
  "workplaceType": "Remote",
  "isRemote": true,
  "employmentType": "Full-time",
  "postedAt": "2026-10-29T18:44:43Z",
  "updatedAt": null,
  "salaryMin": 200000,
  "salaryMax": 290000,
  "salaryCurrency": "USD",
  "salaryPeriod": "year",
  "salaryText": "$200K – $290K • Offers Equity",
  "jobUrl": "https://jobs.ashbyhq.com/tessera-labs/7bdf25c8-1f54-4077-bafb-08519bab9ebc",
  "applyUrl": "https://jobs.ashbyhq.com/tessera-labs/7bdf25c8-1f54-4077-bafb-08519bab9ebc/application",
  "description": "AI Infrastructure Engineer [Senior]\n\nAbout Tessera Labs\nTessera Labs is redefining how enterprises adopt and operationalize Artificial Intelligence. Backed by Foundation Capital and led by a world-class founding team, we build multi-agent AI systems that automate complex business workflows across pl...",
  "seniority": "Senior",
  "salarySource": "ats",
  "companyBoardUrl": "https://jobs.ashbyhq.com/tessera-labs",
  "scrapedAt": "2026-11-02T21:01:47Z"
}
```

### Output fields

| Field | Description |
|---|---|
| `title`, `company`, `ats`, `companySlug`, `jobId` | Job title, employer name, ATS platform and identifiers |
| `location`, `locations`, `country` | Main location, all listed locations, ISO country code (from the ATS or inferred from the location) |
| `workplaceType`, `isRemote` | Remote, Hybrid or On-site (employer's label, otherwise inferred) |
| `seniority` | Internship, Entry level, Mid level, Senior, Lead, Staff, Principal, Manager, Head, Director, VP or C-level (from the title; empty if the title gives no signal) |
| `department`, `team`, `employmentType` | As published by the employer |
| `postedAt`, `updatedAt` | First published and last updated (ISO 8601, UTC) |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `salaryText`, `salarySource` | Pay range; `salarySource` is `ats` when the employer published it as data, `description` when parsed from the job text |
| `jobUrl`, `applyUrl`, `companyBoardUrl` | Links to the job, the application form and the employer's board |
| `description` | Plain-text job description (optional) |
| `scrapedAt` | When the job was read |

Field names match our Greenhouse/Lever/Ashby Jobs Scraper and Workday Jobs Scraper, so datasets combine without remapping.

### How much does it cost?

**$3 per 1,000 jobs** ($0.003 per job) on the Apify Free plan, plus a $0.00005 start fee per run. There are no separate compute charges, and employer boards that are scanned but have no matching jobs cost you nothing.

| You get | You pay |
|---|---|
| 50 jobs (default run) | $0.15 |
| 1,000 jobs | $3.00 |
| Hourly alert, ~20 new jobs per run, for a month (~14,400 jobs) | about $43 |
| 25,000 jobs for a niche job board | $75.00 |

**Volume discounts on higher Apify plans.** The prices above are for the Apify Free plan. On paid plans the per-result price drops automatically: about 15% lower on Bronze, 25% lower on Silver and 33% lower on Gold and above.

### Use it via API, Make, Zapier, n8n or an AI agent

**Apify API.** Start a run and get the results back in one HTTP request (replace `YOUR_API_TOKEN` with the token from Apify Console > Settings > Integrations):

```bash
curl -X POST "https://api.apify.com/v2/acts/plotpointtech~career-site-job-search/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords": ["data engineer", "analytics engineer"], "excludeKeywords": ["intern"], "locations": ["United States", "Remote"], "workplaceType": "any", "postedWithin": "24h", "seniority": ["Senior", "Staff"], "maxResults": 200, "maxJobsPerCompany": 5}'
```

For longer jobs, start the run asynchronously and read the dataset when it finishes. Official `apify-client` libraries exist for Python and JavaScript; the **API** tab on this page has ready-made code.

**No-code automation.** Connect the tool to **Make, Zapier, n8n, Google Sheets, Slack, Airtable** or any webhook with Apify integrations, and use **Schedules** in Apify Console to run it hourly, daily or weekly.

**AI agents (MCP).** Give Claude, ChatGPT, Cursor, VS Code or any MCP-compatible agent direct access to this tool through the hosted Apify MCP server. Add this server URL to your client:

```
https://mcp.apify.com?tools=plotpointtech/career-site-job-search
```

The agent can then call the tool with the same input fields shown above and read the results.

### FAQ

**How is this different from a company job board scraper?**
A company scraper needs you to list the companies. This tool searches its own index of employer boards, so you only describe the job. If you already know the companies, add them under "Only these companies" or use our Greenhouse, Lever & Ashby Jobs Scraper.

**How many employers are covered?**
The index currently holds 14,000+ validated employer boards with open jobs, across six ATS platforms. It grows as new boards are discovered. Employers on Workday, iCIMS, Taleo and other systems are not included; Workday sites are covered by our Workday Jobs Scraper.

**Is it legal?**
The tool reads public job-board feeds that Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee publish so employers can display their jobs, plus the public Common Crawl index. No login is used and no personal data is collected. If you republish listings, follow each employer's terms and link back to the original posting.

**Why did I get fewer results than I asked for?**
Only jobs that match every filter are returned. Short windows such as "Last hour" or rare titles may simply have few matches. Raise "Max employer boards to scan", widen the window or remove filters. The log shows how many boards were scanned.

**How fresh are the jobs?**
Every job is read live from the employer's board during your run. The index only decides which boards to open, and is refreshed several times a day.

**Can I call it from code, Make, Zapier, n8n or an AI agent?**
Yes, see the API section above. AI agents can use it through the Apify MCP server.

### Related tools from Plot Point Technologies

- [Greenhouse, Lever & Ashby Jobs Scraper - 6 ATS, $1/1K](https://apify.com/plotpointtech/company-job-board-scraper): every open job from the companies you choose, on six ATS platforms.
- [Workday Jobs Scraper - Any myworkdayjobs Site, $0.90/1K](https://apify.com/plotpointtech/workday-jobs-scraper): open jobs from any company's Workday career site.
- [Remote Jobs Scraper - Remote OK, Jobicy & We Work Remotely](https://apify.com/plotpointtech/remote-jobs-aggregator): remote jobs from the main remote-work job boards.
- [Email & Contact Scraper - Website Emails, Phones & Socials](https://apify.com/plotpointtech/website-contact-finder): emails, phones and social links for the hiring companies you find.

Plot Point Technologies is not affiliated with Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Common Crawl or any employer whose jobs are listed.

***

If this tool saved you time, we would be grateful for a short review on this page; it helps other people find it. If something did not work as expected, please open an issue on the **Issues** tab and we will look into it quickly.

# Actor input Schema

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

Keep jobs whose title contains any of these keywords (case-insensitive). A multi-word keyword such as 'data engineer' needs all its words in the title. Leave empty for all titles.

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

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

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

Keep jobs whose location contains any of these words: a city (London, Austin), a country (United States, Germany, UK) or 'Remote'. Country names also match jobs whose city or state is in that country where we can tell (e.g. 'United States' matches 'Austin, TX').

## `workplaceType` (type: `string`):

Remote, hybrid or on-site. Uses the employer's own label where given, otherwise inferred from the title, location and description.

## `postedWithin` (type: `string`):

Only jobs first published within this period.

## `seniority` (type: `array`):

Optional. Keep only these seniority levels (derived from the job title).

## `ats` (type: `array`):

Which applicant tracking systems to search. Leave empty for all six.

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

Optional. Keep only employers whose name or board slug contains any of these words, e.g. stripe, openai.

## `excludeCompanies` (type: `array`):

Skip employers whose name or board slug contains any of these words (e.g. staffing agencies you do not want).

## `maxResults` (type: `integer`):

Stop after this many jobs.

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

Cap on matching jobs taken from any one employer, so results cover many companies. 0 = no cap.

## `maxCompaniesToScan` (type: `integer`):

Upper limit on how many employer career boards are opened live in one run. Boards that most likely match (right titles, recent postings) are opened first. Raise it for rare titles or long time windows.

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

Add the job description as plain text (HTML removed). Also used to find salaries written in the text.

## `descriptionMaxLength` (type: `integer`):

Cut descriptions to this many characters. 0 = full text.

## `fetchGreenhouseSalaries` (type: `boolean`):

Greenhouse publishes structured pay ranges on each job's detail record; when on, one extra request is made per Greenhouse job returned.

## Actor input object example

```json
{
  "keywords": [
    "engineer"
  ],
  "excludeKeywords": [],
  "locations": [],
  "workplaceType": "any",
  "postedWithin": "7d",
  "seniority": [],
  "ats": [],
  "companies": [],
  "excludeCompanies": [],
  "maxResults": 50,
  "maxJobsPerCompany": 10,
  "maxCompaniesToScan": 3000,
  "includeDescription": true,
  "descriptionMaxLength": 0,
  "fetchGreenhouseSalaries": true
}
```

# Actor output Schema

## `results` (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 = {
    "keywords": [
        "engineer"
    ],
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("plotpointtech/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 = {
    "keywords": ["engineer"],
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("plotpointtech/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 '{
  "keywords": [
    "engineer"
  ],
  "maxResults": 50
}' |
apify call plotpointtech/career-site-job-search --silent --output-dataset

```

## MCP server setup

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