JazzHR Jobs API
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@JazzHR Jobs APIfind remote full-time software engineer jobs posted this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
💼 JazzHR Jobs API: search every company hiring on JazzHR
A Python and MCP quick-start for the JazzHR API on Apify. One search covers every employer on the platform, so you never have to hunt down a company career URL first.
Actor: JazzHR Jobs API on Apify
Input schema: input parameters
Get a free API token: apify.com
Most JazzHR tools want a company board URL before they will do anything. This one already knows all of them. Point it at the whole platform and it returns structured job posting data: title, employer, location, employment type, real posting date, apply link, and the full description as markdown, HTML, or plain text. It can also hand back a directory of every business hiring on JazzHR, which is a useful thing to have before you decide whose board is worth reading in full.

Text walkthrough
The JazzHR API reads the public career boards that JazzHR hosts on applytojob.com. Every input is optional: run it with nothing set and you get a sample from across the platform, or narrow it with keywords, location, employmentType, remoteOnly, and postedAfter. Keywords are matched against the job URL before a posting is opened, so filtering makes the run cheaper as well as tighter. Each row comes back with title, companyName, locationText, employmentType, datePosted, validThrough, applyUrl, and descriptionMarkdown. Switch outputMode to companiesOnly and you get one row per employer with a live count of open roles, which is how you build a list of companies that use JazzHR. Switch it to urlsOnly and you get the entire job index for a handful of upstream requests, the cheapest way to survey what is out there. Turn on newJobsOnly and each scheduled run returns only postings it has not seen before.
Quick Start
Prerequisites: Python 3.11 or newer, uv, and a free Apify API token from apify.com.
git clone https://github.com/johnisanerd/Apify-JazzHR-Jobs-API.git
cd Apify-JazzHR-Jobs-API
uv sync
cp .env.example .env # paste your token into .env
uv run python jazzhr-jobs-api-example.pyEach example is a separate flag:
uv run python jazzhr-jobs-api-example.py --example jobs # full job records
uv run python jazzhr-jobs-api-example.py --example companies # employer directory
uv run python jazzhr-jobs-api-example.py --example urls # job index, no descriptions
uv run python jazzhr-jobs-api-example.py --example new-jobs # delta mode
uv run python jazzhr-jobs-api-example.py --example allEvery example asks for a small number of rows on purpose. You pay per row returned, so confirm the shape of the data first, then raise maxItems.
Why use this API
No company URL required. Other tools make you supply a board before they can do anything. Leave the input empty here and the search covers every employer on the platform.
A directory nobody else sells. The companiesOnly mode returns every business hiring on JazzHR with a live count of their open roles. That is the list you want if you are prospecting companies that use JazzHR.
Descriptions ready for an LLM. Ask for markdown and hand the result straight to a model without stripping HTML first.
Two sources per posting. Around half of live postings publish no structured job data at all. Those are read from the page markup instead, so they arrive with a title, company, location and description rather than coming back half empty. The parseStatus field tells you which kind of row you have.
Expired postings are skipped and never billed. Roughly a fifth of the platform index points at roles that have already closed. You are charged for jobs you actually receive, not for dead links.
A feed, not just a snapshot. Delta mode remembers what it has already returned, so a scheduled run gives you only new postings.
Recipes
No Store example pages are published for this Actor yet. The four scripted examples above cover the same ground: a filtered job search, the employer directory, the cheap job index, and the delta feed.
Schedule tip. Save your input as a Task in the Apify Console, turn on newJobsOnly, and schedule it daily or weekly. From then on the dataset only ever contains postings that appeared since the last run, so the pipeline stays current without anyone touching it.
Usage Examples
Basic, matching the default run:
{
"keywords": ["nurse", "registered nurse"],
"location": "TX",
"employmentType": "FULL_TIME",
"postedAfter": "2026-01-01",
"descriptionFormat": "markdown",
"maxItems": 10
}Advanced, a remote-only search that skips staffing agencies and returns every description format:
{
"keywords": ["software engineer"],
"remoteOnly": true,
"excludeCompanies": ["someagency"],
"descriptionFormat": "all",
"maxConcurrency": 25,
"maxItems": 100
}Input Parameters
Every parameter is optional.
Parameter | Type | Default | Description |
| array | empty | Company boards such as |
| array | empty | Job title words to keep. Applied before a posting is opened, so it also lowers the cost of the run. |
| string |
|
|
| string |
|
|
| array | empty | Only include these company slugs. For |
| array | empty | Skip these company slugs. |
| string | empty | Text match on city, state, postal code, or country. |
| string |
|
|
| boolean |
| Keep only remote roles. |
| string | empty |
|
| integer |
| Row cap. The platform holds over 100,000 live jobs, so this keeps a first run small. |
| boolean |
| Return only postings not seen in an earlier run. |
| string |
| On the first delta run, return everything or just record what exists today. |
| string |
| Named store holding the remembered job IDs. |
| integer |
| Parallel page reads, up to 25. |
| object | direct | Optional Apify Proxy settings. |
Output Format
A full job record:
{
"id": "job_20260617184930_ZL9U2ROWTQWMZDDD",
"jobId": "vMHpWDZa3l",
"title": "Account Executive",
"companyName": "Ease Inc",
"companySlug": "easeinc",
"companyWebsite": "http://www.ease.io",
"boardUrl": "https://easeinc.applytojob.com",
"applyUrl": "https://easeinc.applytojob.com/apply/vMHpWDZa3l/Account-Executive",
"canonicalUrl": "https://careers.easeinc.com/apply/vMHpWDZa3l/Account-Executive",
"city": "Irvine",
"region": "CA",
"postalCode": "92618",
"country": "US",
"locationText": "Irvine, CA, US",
"isRemote": true,
"employmentType": "FULL_TIME",
"experienceLevel": "Mid Level",
"datePosted": "2026-06-17",
"validThrough": "2026-09-15",
"descriptionMarkdown": "Ease is hiring an Account Executive...",
"parseStatus": "full",
"scrapedAt": "2026-08-24T18:22:04Z"
}The employer directory returns a smaller row:
{
"companySlug": "10pearls",
"boardUrl": "https://10pearls.applytojob.com",
"jobCount": 21,
"sampleJobTitles": ["AI Solutions Architect", "Associate Account Executive Intern"],
"scrapedAt": "2026-08-24T18:22:04Z"
}People also search for
Is this a JazzHR scraper?
It reads public pages the way a scraper does, and what you get back is an API: structured JSON, filters, stable field names, no HTML unless you ask for it. If you have been trying to scrape job postings yourself, this is the version where someone else maintains the parser.
What is applytojob.com?
It is the domain where JazzHR hosts its customers' career pages. A company hiring through JazzHR gets a board at company.applytojob.com, and application email comes from that domain too, which is why so many people look it up after applying somewhere.
How do I find companies that use JazzHR?
Set outputMode to companiesOnly. You get one row per employer with their board URL and a live count of open roles. The --example companies script does exactly this.
How do I use the JazzHR API from Python?
Clone this repo, run uv sync, put your Apify token in .env, and run the example. The rows() helper shows the whole pattern: call the Actor, then iterate the dataset.
Can I run it on a schedule or through MCP?
Both. Save the input as a Task in the Apify Console and schedule it, ideally with newJobsOnly on. For MCP, the install sections below add this Actor as a tool in Claude, Cursor, or ChatGPT.
Install in Claude Cowork Desktop

Cowork is the desktop app's automation mode. To give it the JazzHR Jobs API as a tool, add the Apify MCP server as a connector.
Open the Claude desktop app and go to Settings → Connectors (or Settings → Developer → Edit Config to edit
claude_desktop_config.jsondirectly).macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the Apify MCP server, preloaded with only this Actor:
{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com/?tools=actors,docs,johnvc/jazzhr-jobs-api"
]
}
}
}Restart the app. When Cowork first calls the tool, complete the OAuth prompt in your browser, or add your Apify API token in the connector settings to skip OAuth.
In a Cowork chat, confirm the tool is available and ask it to run the JazzHR Jobs API.
Download the desktop app and start a free trial: https://claude.ai/referral/uIlpa7nPLg More help: https://docs.apify.com/platform/integrations/claude-desktop
Install in Claude Code

Claude Code is the command-line tool. Add the Actor's MCP server with one command:
claude mcp add --transport http apify \
"https://mcp.apify.com/?tools=actors,docs,johnvc/jazzhr-jobs-api"To use a token instead of browser OAuth:
claude mcp add --transport http apify \
"https://mcp.apify.com/?tools=actors,docs,johnvc/jazzhr-jobs-api" \
--header "Authorization: Bearer YOUR_APIFY_TOKEN"Then verify with claude mcp list, or run /mcp inside a session. Ask Claude Code to call the JazzHR Jobs API.
Try Claude Code free: https://claude.ai/referral/uIlpa7nPLg Claude Code MCP docs: https://code.claude.com/docs/en/mcp
Install in Claude (website)

On claude.ai you add Apify as a connector, then enable just this Actor's tool.
Go to Settings → Connectors → Browse connectors and search for Apify MCP server. Install it (enable or update if prompted).
When connecting, authenticate with your Apify API token, and enable the tool
johnvc/jazzhr-jobs-api.In any chat, open + → Connectors and turn on Apify.
Alternatively, choose Add custom connector and paste the full MCP URL
https://mcp.apify.com/?tools=actors,docs,johnvc/jazzhr-jobs-api, using OAuth when prompted.Ask Claude to run the JazzHR Jobs API.
Open Claude on the web: https://claude.ai
Install in Cursor

Cursor reads MCP servers from a project file at .cursor/mcp.json.
In your project, create
.cursor/mcp.json:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=actors,docs,johnvc/jazzhr-jobs-api"
}
}
}If you prefer token auth over browser OAuth, add a header:
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=actors,docs,johnvc/jazzhr-jobs-api",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}Open Cursor → Settings → MCP and confirm the apify server is connected (green dot).
In Composer or Chat, ask Cursor to call the JazzHR Jobs API.
New to Cursor? Get it here: https://cursor.com/referral?code=XQP4VBLI3NNX
Install in ChatGPT

ChatGPT connects to the Apify MCP server through Developer mode (available on ChatGPT Pro, Plus, Business, Enterprise, and Education plans).
Click your profile icon, then go to Settings > Apps. If you do not see a Create app button, open Advanced settings and enable Developer mode.
Click Create app and fill out the form:
Name: Apify
MCP Server URL:
https://mcp.apify.com/?tools=actors,docs,johnvc/jazzhr-jobs-apiAuthentication: OAuth
Click Create and authorize the connection with Apify.
To use the app in a conversation, click + in the chat, choose Developer mode, and select Apify.
More help: https://docs.apify.com/platform/integrations/mcp
Made with care by johnvc on Apify.
Last Updated: 2026.08.24
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Search a live index of millions of open jobs from employer career sites and 100+ ATS platforms.
Live job postings from 30+ ATS feeds and job boards, one schema. Live results need a Bearer key.
Semantic search over 3.5M+ live US job postings pulled straight from company ATSes. Read-only.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/johnisanerd/Apify-JazzHR-Jobs-API'
If you have feedback or need assistance with the MCP directory API, please join our Discord server