# Job Search MCP for AI Agents (`digital_influx/job-search-mcp`) Actor

MCP server for Claude, ChatGPT, Gemini and Cursor: search open jobs on 20,000+ company career sites, list every open role of a company live, and read full job descriptions with salary.

- **URL**: https://apify.com/digital_influx/job-search-mcp.md
- **Developed by:** [Bruno Petrelli](https://apify.com/digital_influx) (community)
- **Categories:** MCP servers, Jobs, AI
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 job listeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 MCP for AI Agents

**An MCP server that gives Claude, ChatGPT, Gemini, Cursor and any other MCP client three job search tools, straight from company career sites:**

| Tool | What the agent gets |
|---|---|
| `search_jobs` | Open jobs from the career sites of 20,000+ companies (Greenhouse, Lever, Ashby, Workable, Recruitee, Personio, Teamtailor, Gem), indexed every day: search by title words, location, remote, seniority, employment type, skills in the description, salary and visa sponsorship. |
| `list_company_jobs` | Every open job of one company, read live from its career site: title, location, remote and workplace type, employment type, seniority, department, salary when published, posting date and apply link. Give the company name or its careers page. Also Workday, Rippling, Breezy and BambooHR. |
| `get_job_details` | One job in full: the whole description (responsibilities, requirements, benefits), the salary range when published, years of experience asked, visa sponsorship, locations and the apply link. |

Ask your agent things like *"Find remote senior data engineer jobs posted this week that publish a salary"*, *"Is Hugging Face hiring in Europe?"*, *"What engineering roles does Stripe have open?"* or *"Read me the full description of that Notion job and compare it with my CV"*: it picks the tool and gets clean JSON back. Jobs come from the employers' own career sites, not from aggregators, so there are no reposts and no expired copies. **You pay only for results:** a company with no open job, or a job that is no longer listed, costs nothing.

### Connect your agent

**Easiest, with your Apify account (sign-in in the browser, no token to copy):** add this remote MCP server URL to your client:

```
https://mcp.apify.com?tools=digital_influx/job-search-mcp
```

- **Claude** (claude.ai, Claude Desktop): add a custom connector with that URL.
- **ChatGPT:** add it as a connector (MCP server URL) in developer mode.
- **Cursor, VS Code, Windsurf, Gemini CLI and other clients:** add a remote MCP server. With a token instead of the browser sign-in:

```json
{
  "mcpServers": {
    "job-search": {
      "url": "https://mcp.apify.com?tools=digital_influx/job-search-mcp",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

(Gemini CLI writes `httpUrl` instead of `url` in `~/.gemini/settings.json`.)

**Directly, without the Apify MCP server:** this Actor runs in Standby mode as a Streamable HTTP MCP server. Take its Standby URL from the Actor's API tab in Apify Console, add `/mcp`, and send your Apify token as `Authorization: Bearer YOUR_APIFY_TOKEN`.

**A record of every call:** each tool call your agent makes is also saved as a row of the Standby run's dataset (tool, arguments, a one-line summary and the result), so you can check later what it asked and got. **Without an agent:** a standard run calls one tool from the input (`tool` and `arguments`) and saves the result to the dataset, so the tools also work from the API, schedules and integrations (Make, n8n, Zapier).

### The tools

#### search_jobs

```json
{ "keywords": ["data engineer"], "remoteOnly": true, "postedWithinDays": 7, "onlyWithSalary": true, "limit": 10 }
```

All arguments are optional: `keywords` (words in the title), `locations` (city, country or country code), `remoteOnly`, `seniority` (`intern`, `entry`, `senior`, `lead`, `director`, `executive`, `unspecified`), `postedWithinDays`, `employmentTypes`, `descriptionKeywords` (skills the description must name, e.g. Python; slower, since descriptions are read), `onlyWithSalary`, `onlyVisaSponsorship`, `companies`, `limit` (10 by default, at most 50) and `maxPerCompany` (3 by default, so one big employer does not fill the answer). Newest first, without the long descriptions, so the answer stays short for the model. The tool runs the Job Search Actor of the same author in your account and takes 20 to 60 seconds.

#### list_company_jobs

```json
{ "company": "Stripe", "keywords": ["engineer"], "locations": ["Dublin"], "limit": 20 }
```

`company` is a company name (`"Airbnb"`, `"Hugging Face"`), a careers page URL (`"https://jobs.lever.co/spotify"`, `"https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite"`) or `"platform:board"` (`"ashby:ramp"`). A name is looked up in a directory of 20,000+ career sites, rebuilt every month, and otherwise tried as a board name on each platform. Optional filters: `keywords`, `locations`, `remoteOnly`, `seniority`, `postedWithinDays`, and `limit` (20 by default, at most 100). The answer says how many jobs are open and how many match, so *"Stripe has 716 open jobs, 144 for engineers"* comes in one call, in about a second.

Real result (2026-10-03): `Notion`, 137 open jobs; with `"locations": ["San Francisco"]`, 74 match, the newest being *Payroll Analyst - Accounting*, USD 120,000 - 140,000 per year.

#### get_job_details

```json
{ "platform": "ashby", "companySlug": "notion", "jobId": "92de7ece-b7d9-4b2a-b9cb-b978cc690a46" }
```

Give the `platform`, `companySlug` and `jobId` that the two other tools return with every job, or the URL of a job page on the platform's own site (`job-boards.greenhouse.io`, `jobs.lever.co`, `jobs.ashbyhq.com`, `myworkdayjobs.com`...). Returns the description as plain text (up to 12,000 characters; longer ones are cut and say so), the salary with its minimum, maximum, currency and period, `yearsOfExperience`, `visaSponsorship`, all locations, department, team and the apply link.

### How much it costs

Pay per event, only for results:

| Event | When | Price |
|---|---|---|
| `job` | each job `list_company_jobs` returns | USD 0.002 |
| `job-details` | each job `get_job_details` reads in full | USD 0.01 |

`search_jobs` charges nothing here: the Job Search Actor it runs bills USD 0.01 per search plus USD 0.006 per job returned. A company with no open job or no career site found, and a job that is no longer listed, cost nothing. Runs in Standby use 256 MB.

### Good to know

- **Respectful by design:** an honest User-Agent (`job-search-mcp`), only the public job data that each company's career page loads from its job board platform, one company at a time, Lever's crawl delay respected, no proxies and no login.
- **Results are what the companies publish.** Salary appears when the job board gives it or the description states it (US pay-transparency ranges, for example); Greenhouse boards list no salary until a job is read in full with `get_job_details`.
- **The same engines as the single-purpose Actors** of this author: Job Search (the daily index), ATS Jobs Scraper (12 job board platforms), and the Greenhouse, Lever, Ashby and Workday job scrapers, if you want thousands of jobs in one batch or a daily feed of new postings.
- **More tools for agents:** Company Research MCP (company contacts, the legal entity behind EU websites, new US businesses, tech stack, SEC insider trades and funding rounds) by the same author.

# Actor input Schema

## `tool` (type: `string`):

The tool to call in a standard run. search_jobs: open jobs on 20,000+ company career sites. list_company_jobs: every open job of one company, live. get_job_details: one job with its full description.

## `arguments` (type: `object`):

The tool's arguments as JSON. list_company_jobs: {"company": "Airbnb", "keywords": \["engineer"], "limit": 20}. search_jobs: {"keywords": \["data engineer"], "remoteOnly": true, "limit": 10}. get_job_details: {"url": "https://jobs.lever.co/spotify/..."} or {"platform": "greenhouse", "companySlug": "airbnb", "jobId": "8184174"}.

## Actor input object example

```json
{
  "tool": "list_company_jobs",
  "arguments": {
    "company": "Airbnb",
    "limit": 5
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "tool": "list_company_jobs",
    "arguments": {
        "company": "Airbnb",
        "limit": 5
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("digital_influx/job-search-mcp").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 = {
    "tool": "list_company_jobs",
    "arguments": {
        "company": "Airbnb",
        "limit": 5,
    },
}

# Run the Actor and wait for it to finish
run = client.actor("digital_influx/job-search-mcp").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 '{
  "tool": "list_company_jobs",
  "arguments": {
    "company": "Airbnb",
    "limit": 5
  }
}' |
apify call digital_influx/job-search-mcp --silent --output-dataset

```

## MCP server setup

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

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/efmSC9sy53nguoZJ7/builds/85RswPAAmkSOh6Z4s/openapi.json
