# Job Search API - Greenhouse, Lever, Workday, Ashby & 14 More (`anshumanatrey/job-boards-search`) Actor

Job search API for 18 job boards in one run: Hiring Cafe, Greenhouse, Lever, Workday, Ashby, SmartRecruiters, Workable, Y Combinator and Wellfound, newest first, each job once. Plus Naukri, foundit, Instahyre, Hirist, Cutshort, eFinancialCareers, Welcome to the Jungle, Cornerstone and Deel.

- **URL**: https://apify.com/anshumanatrey/job-boards-search.md
- **Developed by:** [Anshuman Atrey](https://apify.com/anshumanatrey) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.20 / 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

## Job Search API - Greenhouse, Lever, Workday, Ashby & 14 More

Job search API for 18 job boards at once: type a job title and get the newest matching jobs from Hiring Cafe, Greenhouse, Lever, Workday, Ashby, SmartRecruiters, Workable, Cornerstone, Deel, Y Combinator, Wellfound, Welcome to the Jungle (with Otta), eFinancialCareers, Naukri, foundit, Instahyre, Hirist and Cutshort, searched live and in parallel, each job once. Every row has the title, company, places, remote or office, job type, published pay, posting date, the board it came from and the apply link. Turn on full details for the description.

Use it as one multi job board scraper and API with no login and no API key, an ATS jobs API for company career sites, a job aggregator feed for your own job board, or a daily job alert, from the Apify Console, the Apify API, Python, JavaScript, n8n, Make or an AI agent over MCP, and export JSON, CSV or Excel. It is the alternative to running 18 job scrapers one after another: every board is searched at the same time, so a run takes about as long as its slowest board. Available as an [Apify Actor](https://apify.com/anshumanatrey/job-boards-search). $0.004 per job, $0.005 with full details, and $0.01 per board searched.

**Use it from an AI assistant:**

- **Claude** (claude.ai and the desktop app): [Add Job Boards Search to Claude](https://claude.ai/customize/connectors?modal=add-custom-connector\&connectorName=Job%20Boards%20Search\&connectorUrl=https%3A%2F%2Fmcp.apify.com%3Ftools%3Danshumanatrey%2Fjob-boards-search), click Continue, sign in to Apify, Allow, and ask in plain words.
- **Claude Code:** `claude mcp add --transport http job-boards-search "https://mcp.apify.com?tools=anshumanatrey/job-boards-search"`, then run `/mcp` to sign in to Apify.
- **Codex:** `codex mcp add job-boards-search --url "https://mcp.apify.com?tools=anshumanatrey/job-boards-search"`, then `codex mcp login job-boards-search`.
- **Any other MCP client:** `https://mcp.apify.com?tools=anshumanatrey/job-boards-search`, signed in with Apify or an `Authorization: Bearer <APIFY_TOKEN>` header.

### What does it do?

- **Searches 18 job boards in one run, all at the same time.** Job boards that index jobs themselves (Hiring Cafe's 6 million jobs from employers' career sites, Y Combinator's Work at a Startup, Wellfound, Welcome to the Jungle and Otta, eFinancialCareers, and India's Naukri, foundit, Instahyre, Hirist and Cutshort) and company career sites on eight applicant tracking systems (Greenhouse's 8,357 job boards, Lever's 2,396, Workday's 2,207, Ashby's 3,814, SmartRecruiters' 2,917, Workable's 2,196, Cornerstone's 1,110 and Deel's 161).
- **The newest jobs of all of them, newest first.** Each board finds its newest matches, then the newest of them all are saved, up to Number of jobs (`maxJobs`), with the board each came from in `platform`.
- **Each job once.** A job listed on two boards (a company's Greenhouse posting that Hiring Cafe and eFinancialCareers also carry) is saved once: the same job link, the same company, title and city, or the same company and title posted at the same second.
- **The same filters on every board.** Job titles, places (cities, states, countries, regions, Worldwide), remote or office, job type, posting period, years of experience, words to leave out, and companies.
- **Links go to their own board.** A company link pasted in the search (job-boards.greenhouse.io/stripe) searches that board only; job links of any of the 18 boards are checked by their own board and come back open, closed or not found.
- **A summary per board.** The OUTPUT record says, for every board, how many jobs matched and were saved, how long it took, and any trouble it met.

### How is it different from other job search scrapers?

- **Job boards and company career sites together.** The multi-board actors on the Apify Store read applicant tracking systems or general job boards; this one reads both, India's job boards included, and keeps each job once across them.
- **Live at the moment of your run.** Every board is read when you run it, not from an index built earlier, so a job posted an hour ago can be in your results.
- **Titles that match.** A job matches when its title has every word of one of your lines, so 100 rows for data analyst are 100 data analyst jobs.
- **Parallel, with a time cap.** The boards are read at the same time, and Time per board (`secondsPerBoard`) caps how long any one of them searches: a slow board delivers what it found and the run goes on.
- **Open source.** The search engine behind it, one adapter per board, is public on GitHub under the MIT license.

### When should I use it?

- **Job seekers:** one search across every board for your title and city, newest first, each with its apply link.
- **Job boards and aggregators:** a fresh feed of jobs from career sites and job boards in one schema.
- **Recruiters and sales teams:** who is hiring for a role right now, and on which hiring system.
- **AI agents:** one tool that searches every board, instead of a tool per board.

### How much does it cost to search 18 job boards?

Pay per event: $4.00 per 1,000 jobs, or $5.00 per 1,000 with full details, plus $0.01 for each board a search reads, charged when the run starts. Apify's free $5 monthly credit covers about 8 runs of 100 jobs on all 18 boards, or about 20 runs of 50 jobs on 5 boards. Platform usage is included, and there is no monthly fee.

| Event | Price | When it is charged |
|---|---|---|
| Job | $0.004 | One saved job, and one checked job link that is closed or not found |
| Job with details | $0.005 | One saved job with full details on |
| Board searched | $0.01 | Once for each board a search reads, when the run starts (18 when every board is searched); checking job links charges none |

On Apify's paid plans a job costs less: $0.004 on BRONZE, $0.0036 on SILVER and $0.0032 on GOLD and above; a job with details $0.005, $0.0045 and $0.004. The board fee is the same on every plan.

| Run | Cost |
|---|---|
| 100 jobs from all 18 boards | $0.58 |
| 50 jobs from 5 boards | $0.25 |
| 100 jobs from all 18 boards with full details | $0.68 |

Set a maximum cost per run in Apify and the run reads only the boards that fit, keeping room for at least one job, then stops saving at the limit.

### How does the price compare with other job search scrapers?

Every actor on the Apify Store that searches several job boards or applicant tracking systems in one run and had 80 or more users in the last 30 days on 2026-11-13, ordered by users. Prices are each actor's live price on Apify's free plan that day, with the run start at its default memory.

| Actor | Users, 30 days | What its description names | Per job | Start fee | 100 jobs |
|---|---|---|---|---|---|
| fantastic-jobs/career-site-job-listing-api | 1,607 | 275,000+ career sites on 58 ATS, AI enrichment | $0.012 | $0.01 | $1.21 |
| fantastic-jobs/career-site-job-listing-feed | 280 | The same career sites, as a feed | $0.0025 | $0.10 | $0.35 |
| agentx/all-jobs-scraper | 204 | 42 job platforms | $0.0035 | $0.01 | $0.36 |
| jobo.world/ats-jobs-api | 164 | 7 million jobs on 200+ ATS | $0.004 | $0.0002 | $0.40 |
| hirebase/job-search | 145 | 4 million jobs from Greenhouse, Workday, Lever and 20+ ATS | $0.005 | $0.004 | $0.50 |
| factpipe/ats-jobs-feed | 144 | 800,000 jobs on 8 ATS | $0.005 | none | $0.50 |
| yugenox/ats-jobs-search | 143 | Live search of 12,000 career sites on Greenhouse, Lever and Ashby | $0.002 | none | $0.20 |
| memo23/career-site-ats-jobs-api | 84 | 116 ATS, fetched at run time | $0.004 | $0.03 | $0.43 |
| bovi/greenhouse-lever-ashby-job-scraper | 80 | Greenhouse, Lever and Ashby, by company or preset list | $0.0015 | $0.00005 | $0.15 |
| jtpalms/ats-jobs-index | 80 | 17,000 career sites, indexed twice a day | $0.003 | $0.00005 | $0.30 |
| **This actor** | new | 18 boards: 10 job boards and 8 ATS, live | $0.004 | $0.01 a board | $0.58 (18 boards), $0.45 (5 boards) |

Where others are cheaper: all but fantastic-jobs' API cost less than a search of all 18 boards here, because this actor reads every company on every board at the moment of your run, and the board fee pays for that reading; a search of 5 boards ($0.45) costs less than hirebase and factpipe. bovi, yugenox and jtpalms cost far less when Greenhouse, Lever and Ashby are all you need. For one board, the matching actor below costs far less: Hiring Cafe Jobs Scraper charges $0.000062 a job. Where others do more: the database actors cover more applicant tracking systems (58 to 200+) and add AI-extracted fields.

### Which inputs does it take?

| Field | What it does |
|---|---|
| Job titles to find (`searchTerms`) | Job titles or keywords, one per line. A job matches when its title has every word of a line. Empty: the newest jobs of every kind. A pasted board link searches that board only |
| Job boards (`platforms`) | The boards to search, all at the same time. Empty: all 18. Keys or names (Hiring Cafe, YC, Otta) |
| Where the job is (`location`) | Cities, states, countries or regions; Worldwide; Remote alone asks for remote jobs |
| Remote or onsite (`workType`) | remote, hybrid or onsite |
| Posted in the last (`postedWithin`) | 24 hours, 3, 7, 14 or 30 days (the default), any time, or your own period |
| Number of jobs (`maxJobs`) | How many jobs in all, newest first across every board: 100 by default; 0 for every match |
| Full details (`includeDetails`) | Adds the description as text and HTML, pay as numbers and the address |
| Leave out words (`excludeTerms`) | Words that leave a job out when its title has them |
| Job type (`employmentType`) | full-time, part-time, contract, intern or temporary |
| Experience (`experienceYears`) | Your years: 3, 2-5, 5+ or fresher. Only boards that state years can match then |
| Match descriptions (`searchDescriptions`) | Matches your words in descriptions too; slower |
| Only these companies (`companies`) | Company names or board links; a board where none is found sits the run out |
| Job links to check (`jobUrls`) | Job links of any of the 18 boards to check instead of searching |
| Time per board (`secondsPerBoard`) | How long each board may search: 240 seconds by default; 0 for no cap of its own |

Example input:

```json
{
  "searchTerms": ["data analyst"],
  "location": ["London"],
  "platforms": ["hiringcafe", "greenhouse", "lever", "ashby", "efinancialcareers"],
  "postedWithin": "7 days",
  "maxJobs": 50
}
```

### What does the output look like?

One row per job, newest first across every board searched. A row from a search for data analyst in London on 2026-11-12:

```json
{
  "title": "EMEA | Senior Data Business Analyst / Product Owner (Contractor)",
  "company": "Infinite Lambda",
  "location": "London",
  "otherLocations": ["Romania", "Sofia I Bulgaria", "Hungary", "Spain", "Slovakia", "Portugal"],
  "workType": "remote",
  "employmentType": "full-time",
  "department": "Customer Success",
  "team": "Customer Success",
  "salary": null,
  "postedAt": "2026-11-11T10:52:26.238+00:00",
  "expiresAt": null,
  "jobUrl": "https://jobs.ashbyhq.com/Infinite%20Lambda/4bdf2b62-422f-4036-8645-cd1ffeef0a27",
  "applyUrl": "https://jobs.ashbyhq.com/Infinite%20Lambda/4bdf2b62-422f-4036-8645-cd1ffeef0a27/application",
  "status": "open",
  "platform": "ashby",
  "companySlug": "Infinite Lambda",
  "companyWebsite": "https://infinitelambda.com",
  "jobId": "4bdf2b62-422f-4036-8645-cd1ffeef0a27",
  "checkedAt": "2026-11-12T20:12:25+00:00"
}
```

| Field | What it holds |
|---|---|
| Job title (`title`) | The job title as the employer wrote it |
| Company name (`company`) | The company that is hiring |
| Main location (`location`), Other locations (`otherLocations`) | Every place the job names |
| Remote or onsite (`workType`) | remote, hybrid or onsite, when the job says |
| Job type (`employmentType`) | full-time, part-time, contract, intern or temporary, when the job says |
| Pay summary (`salary`) | Published pay as text; with full details also `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod` |
| Posted on (`postedAt`) | When the job was posted |
| Job board (`platform`) | The board the row came from |
| Job link (`jobUrl`), Apply link (`applyUrl`) | The job on its board, and where to apply |
| Job description (`description`) | With full details: the description as text, and `descriptionHtml` |

Each board adds the fields its own actor gives, such as Hiring Cafe's `seniority`, `skills` and `visaSponsorship`, Y Combinator's `batch`, or Naukri's `experience`; the dataset schema names the boards that fill each field. The OUTPUT record holds the run summary: `boards` has one entry per board with `matchingJobs`, `jobsSaved`, `seconds`, `duplicatesOfOtherBoards` and any `boardsWithErrors`.

### How fast is it?

Minutes, because the boards are read at the same time, the company career sites each in a process of their own. On Apify at the default 8 GB on 2026-11-13: data analyst in London on all 18 boards took 236 s and read every company on every board (Greenhouse's 8,357 job boards in 178 s, Ashby's 3,814 in 83 s, SmartRecruiters' 2,917 in 130 s, Lever's 2,396 in 145 s, Workday's 2,207 in 231 s); the job boards with their own search answered in 2 to 77 s. The example input, software engineer on 5 boards, took 113 s. Apify gives a run one CPU core for each 4 GB: at 4 GB, a search of all 18 boards is cut at Time per board (`secondsPerBoard`) with part of the big boards unread, and 16 GB runs faster. On a laptop the same day, software engineer on 16 boards took 255 s in one run, while the same search one board at a time added up to 938 s.

### Common questions

#### Which boards does it search?

All 18 unless you pick some in Job boards (`platforms`): hiringcafe, greenhouse, lever, workday, ashby, smartrecruiters, workable, cornerstone, deel, ycombinator, wellfound, welcometothejungle, efinancialcareers, naukri, foundit, instahyre, hirist and cutshort. Names work too: Hiring Cafe, YC, Otta, Monster India.

#### Why does a run take a few minutes?

Company career sites have no search of their own across companies, so Greenhouse, Lever, Ashby and the other applicant tracking systems read every company's job list. The run takes about as long as its slowest board; lower Time per board (`secondsPerBoard`) to cap it, or pick the boards you need.

#### How does it keep each job once?

A job is left out when a board earlier in the newest-first list already gave the same job link, the same company and title in the same city, or the same company and title posted at the same second. In a search for data analyst in London on all 18 boards (Apify, 2026-11-13), 31 jobs that two boards listed were saved once; in the example input's software engineer search on 5 boards, 40.

#### Why did a board return nothing?

Its jobs may be older than the newest jobs of the other boards (raise Number of jobs), or it has none for your words and place: India's boards rarely list London jobs. The OUTPUT record's `boards` says what each board matched.

#### Does it work on Apify's free plan?

Job Boards Search works on Apify's free plan, which pays $0.004 a job and $0.01 a board. The free $5 monthly credit pays for about 8 runs of 100 jobs on all 18 boards, or 20 runs of 50 jobs on 5 boards.

#### How often should I run it?

Running Job Boards Search once a day keeps a job feed fresh: set Posted in the last (`postedWithin`) to 24 hours, schedule it under Schedules in Apify Console, and match rows on `jobUrl` to skip jobs you already have.

#### How do I check a list of job links?

Paste them in Job links to check (`jobUrls`), one per line, from any of the 18 boards. Each goes to its own board and comes back open with the job, closed or not found, in the order pasted. A link of another site is skipped with a note.

#### How do I call it from the API, Python, JavaScript, n8n or an AI agent?

Job Boards Search runs from the Apify API, Python, JavaScript, n8n, Make or an AI agent over MCP. Each way uses your Apify token (Apify Console, Settings, API & Integrations) and takes the input as JSON keyed by the field names, such as `searchTerms` and `platforms`.

**API.** One call runs the actor and returns its rows (Apify waits up to 300 seconds):

```bash
curl -X POST "https://api.apify.com/v2/acts/anshumanatrey~job-boards-search/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["data analyst"], "location": ["London"], "platforms": ["hiringcafe", "greenhouse", "ashby"]}'
```

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("anshumanatrey/job-boards-search").call(run_input={"searchTerms": ["data analyst"]})
for row in client.dataset(run.default_dataset_id).iterate_items():  # apify-client 3+; on 2.x use run["defaultDatasetId"]
    print(row["platform"], row["title"], row["company"], row["location"], row["applyUrl"])
```

**JavaScript** (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('anshumanatrey/job-boards-search').call({ searchTerms: ['data analyst'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const row of items) console.log(row.platform, row.title, row.company, row.location, row.applyUrl);
```

**n8n and Make.** In n8n, add the Apify node, pick Run an Actor and get dataset, choose this actor and paste the input JSON. In Make, the Apify app's Run an Actor and Get Dataset Items modules do the same.

**AI agents (MCP).** Add `https://mcp.apify.com?tools=anshumanatrey/job-boards-search` to your MCP client and sign in with Apify, or send `Authorization: Bearer <YOUR_APIFY_TOKEN>`. The agent gets one tool that searches all 18 boards and sees every input field by its JSON key.

#### Is it legal to use?

Job Boards Search reads public job postings, the pages any visitor sees without logging in. It is not affiliated with any of the boards it reads. You are responsible for how you use the data, including each board's terms and the privacy laws that apply to you.

### Limitations

- A run takes about as long as its slowest board, up to Time per board (`secondsPerBoard`, 240 seconds by default); a board stopped there delivers what it found, and the OUTPUT record says so.
- Experience (`experienceYears`) keeps only jobs that state years: company career sites state none, so with it set only Hiring Cafe, Y Combinator, Wellfound, Welcome to the Jungle and the India boards can match.
- Each board keeps the limits of its own actor: Workable's jobs feed can end before today's jobs, Instahyre reads its jobs one by one, and HiringCafe shows a search's newest 10,000 employers.
- Read fast, Workday answers some career sites with HTTP 429: a run can miss a few of its 2,207 sites (8 in one run of 2026-11-13), named in the OUTPUT record.
- The default 8 GB of memory is what reads all 18 boards in full in about four minutes; a run at 4 GB gets one CPU core and cuts the biggest boards at Time per board.
- Pay is published on part of the jobs only, and `salary` is empty for the rest.
- Places are matched as each board writes them, so a US city next to United States finds more.
- Two listings of one job written differently on two boards (another title, another city) can both be saved.

### Who maintains it?

Built and maintained by **Anshuman Atrey** ([@AnshumanAtrey](https://github.com/AnshumanAtrey)), who publishes a portfolio of data and OSINT actors on Apify Store. For a feature request or a bug, message [LinkedIn](https://linkedin.com/in/anshumanatrey) (fastest), open an issue on the GitHub repo, or write through [atrey.dev](https://atrey.dev).

### Sibling actors

One board at a time, for less:

| Actor | What it searches |
|---|---|
| [Hiring Cafe Jobs Scraper](https://apify.com/anshumanatrey/hiringcafe-jobs-search) | HiringCafe's 6 million jobs from employers' own career sites |
| [Greenhouse Jobs Scraper](https://apify.com/anshumanatrey/greenhouse-jobs-search) | Jobs from every company on Greenhouse |
| [Lever Jobs Scraper](https://apify.com/anshumanatrey/lever-jobs-search) | Jobs from 2,300+ companies on Lever |
| [Workday Jobs Scraper](https://apify.com/anshumanatrey/workday-job-search) | Jobs from every company on Workday |
| [Ashby Jobs Scraper](https://apify.com/anshumanatrey/ashby-jobs-search) | Jobs from every company on Ashby |
| [SmartRecruiters Jobs Scraper](https://apify.com/anshumanatrey/smartrecruiters-jobs-search) | Jobs from 2,900+ companies on SmartRecruiters |
| [Workable Jobs Scraper](https://apify.com/anshumanatrey/workable-job-search) | Jobs from every company on Workable |
| [Cornerstone Jobs Scraper](https://apify.com/anshumanatrey/cornerstone-jobs-search) | Jobs from every company on Cornerstone |
| [Deel Jobs Scraper](https://apify.com/anshumanatrey/deel-jobs-search) | Jobs from every company on Deel ATS, with pay |
| [Y Combinator Jobs Scraper](https://apify.com/anshumanatrey/ycombinator-jobs-search) | YC startup jobs from Work at a Startup |
| [Wellfound Jobs Scraper](https://apify.com/anshumanatrey/wellfound-jobs-search) | Startup jobs on Wellfound |
| [Welcome to the Jungle Jobs Scraper](https://apify.com/anshumanatrey/welcome-to-the-jungle-jobs-search) | Welcome to the Jungle and Otta jobs |
| [eFinancialCareers Jobs Scraper](https://apify.com/anshumanatrey/efinancialcareers-jobs-search) | Finance, banking and quant jobs |
| [Naukri Jobs Scraper](https://apify.com/anshumanatrey/naukri-jobs-search) | India's biggest job board |
| [Foundit Jobs Scraper](https://apify.com/anshumanatrey/foundit-jobs-search) | foundit (Monster India) in 9 countries |
| [Instahyre Jobs Scraper](https://apify.com/anshumanatrey/instahyre-jobs-search) | Tech jobs on Instahyre |
| [Hirist Jobs Scraper](https://apify.com/anshumanatrey/hirist-jobs-search) | Tech jobs on Hirist |
| [Cutshort Jobs Scraper](https://apify.com/anshumanatrey/cutshort-jobs-search) | Startup jobs on Cutshort |

### Documentation

- Apify Store: https://apify.com/anshumanatrey/job-boards-search
- GitHub repo: https://github.com/AnshumanAtrey/job-boards-search (MIT license, see [LICENSE](LICENSE))
- The engine behind it: https://github.com/AnshumanAtrey/ats-jobs-engine

### Last updated

2026-11-13 (version 1.0)

# Actor input Schema

## `searchTerms` (type: `array`):

Type the job titles or keywords to find, one per line, for example data analyst. A job matches when its title has every word of a line: frontend also finds Front-End. Leave it empty for the newest jobs of every kind. A board link pasted here searches that board only: a company link on Greenhouse, Lever or Ashby, or a Hiring Cafe search link.

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

Pick the job boards to search, all at the same time, or clear it to search all 18: hiringcafe, greenhouse, lever, workday, ashby, smartrecruiters, workable, cornerstone, deel, ycombinator, wellfound, welcometothejungle, efinancialcareers, naukri, foundit, instahyre, hirist, cutshort. Names work too (Hiring Cafe, YC, Otta). A run takes about as long as its slowest board.

## `location` (type: `array`):

Type where the jobs should be: a city, state, country or region, one per line, for example London, Germany, EMEA or Bangalore. Boards keep locations as the employer typed them, so a US city also helps next to United States. Worldwide finds the jobs open everywhere; Remote alone asks for remote jobs. Leave it empty for anywhere.

## `workType` (type: `array`):

Pick remote, hybrid or onsite, or several. Leave it empty for all of them. A job that states no work type is left out once you pick one. Typed words such as wfh work too.

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

Pick how new the jobs must be: posted in the last 24 hours, 3, 7, 14 or 30 days. 30 days, the default, keeps the last month, newest first; any time keeps every open job. You can also type your own period, such as 48 hours or 2 weeks.

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

Type how many jobs to get in all, newest first across every board: 100 by default. Type 0 for every matching job. Each job is one charged row, so this, with the run start, sets the most a run can cost.

## `includeDetails` (type: `boolean`):

Tick to add the full details of each job: the description as text and HTML, pay as numbers with its currency, and the address. The run reads each saved job once more. A job with details costs $5.00 per 1,000 instead of $4.00.

## `excludeTerms` (type: `array`):

Type words that leave a job out when its title has them, one per line, for example senior or manager. Leave it empty to keep every job.

## `employmentType` (type: `array`):

Pick the job type: full-time, part-time, contract, internship or temporary, or several. Leave it empty for every job type. Only jobs that state a type can match, and many company career sites state none. Typed words such as freelance or temp work too.

## `experienceYears` (type: `string`):

Type your years of experience: a number such as 3, a range such as 2-5, 5+ for five or more, or fresher. A job is kept when the years it asks for fit yours. Only boards that state years can match then: Hiring Cafe, Y Combinator, Wellfound, Welcome to the Jungle and the India boards. Company career sites state none, so they return nothing. Leave it empty for every job.

## `searchDescriptions` (type: `boolean`):

Tick to match your keywords in the job description too, not only in the title: kubernetes then finds every job that asks for Kubernetes. Boards that send descriptions only when asked read every description, so the run is slower.

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

Type company names to search only them, one per line: a name (Stripe) or a board link (job-boards.greenhouse.io/stripe). Each board searches the companies it has; a board where none of them is found sits the run out. Leave it empty to search every company.

## `jobUrls` (type: `array`):

Paste job links of any of the 18 boards to check whether they are still open, one per line, instead of searching. Each link goes to its own board and comes back open with the job, closed, or not found, in the order pasted.

## `secondsPerBoard` (type: `integer`):

Type how long each board may search before the run uses the jobs it has found: 240 seconds by default. Boards are searched at the same time, so this caps how long a run searches. Type 0 for no cap of its own; the run timeout still holds.

## Actor input object example

```json
{
  "searchTerms": [
    "software engineer"
  ],
  "platforms": [
    "hiringcafe",
    "greenhouse",
    "ashby",
    "ycombinator",
    "wellfound"
  ],
  "location": [
    "London"
  ],
  "workType": [
    "remote"
  ],
  "postedWithin": "24 hours",
  "maxJobs": 100,
  "includeDetails": false,
  "excludeTerms": [
    "senior"
  ],
  "employmentType": [
    "full-time"
  ],
  "experienceYears": "3",
  "searchDescriptions": false,
  "companies": [
    "Anthropic"
  ],
  "jobUrls": [],
  "secondsPerBoard": 240
}
```

# Actor output Schema

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

Every saved job, newest first across all boards searched, each job once: title, company, places, remote or office, job type, published pay, posting date, the board it came from and its links; with details on, the description. Export as JSON, CSV or Excel.

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

The OUTPUT record in the default key-value store: the boards searched, the jobs matched and saved on each, jobs listed on two boards and saved once, how long each board took, notes about how the input was read and the settings used.

# 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 = {
    "searchTerms": [
        "software engineer"
    ],
    "platforms": [
        "hiringcafe",
        "greenhouse",
        "ashby",
        "ycombinator",
        "wellfound"
    ],
    "maxJobs": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("anshumanatrey/job-boards-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 = {
    "searchTerms": ["software engineer"],
    "platforms": [
        "hiringcafe",
        "greenhouse",
        "ashby",
        "ycombinator",
        "wellfound",
    ],
    "maxJobs": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("anshumanatrey/job-boards-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 '{
  "searchTerms": [
    "software engineer"
  ],
  "platforms": [
    "hiringcafe",
    "greenhouse",
    "ashby",
    "ycombinator",
    "wellfound"
  ],
  "maxJobs": 100
}' |
apify call anshumanatrey/job-boards-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anshumanatrey/job-boards-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/GE4pjOZOMfODEYdGd/builds/6klC2dff4IT2bV32W/openapi.json
