JazzHR Jobs API | Search Every Company Job Board avatar

JazzHR Jobs API | Search Every Company Job Board

Pricing

from $1.00 / 1,000 job records

Go to Apify Store
JazzHR Jobs API | Search Every Company Job Board

JazzHR Jobs API | Search Every Company Job Board

Search live job postings across every company hiring on JazzHR (applytojob.com). No company URL needed. Returns titles, employers, locations, posting dates, apply links, and full descriptions in markdown, HTML, or text, plus a directory of every employer on the platform.

Pricing

from $1.00 / 1,000 job records

Rating

0.0

(0)

Developer

John

John

Maintained by Community

Actor stats

1

Bookmarked

5

Total users

5

Monthly active users

17 days ago

Last modified

Share

JazzHR Jobs API

Search live job postings across every company hiring on JazzHR (applytojob.com) with one API call. Most JazzHR tools make you supply a company URL first. This one already knows every employer on the platform, so you can search all of them at once, or narrow to a single board. In practice it works as a read-only JazzHR API for public job data: no API keys, no login, nothing to install.

This is an independent tool. It is not affiliated with, endorsed by, or connected to JazzHR or Employ Inc. It reads only public job postings.

What you can extract

FieldWhat it is
title, descriptionMarkdownJob title and the full description, in markdown, HTML, or plain text
companyName, companySlug, companyWebsite, boardUrlThe employer, their site, and their JazzHR board
city, region, postalCode, country, isRemoteWhere the job is, and whether it is remote
employmentType, experienceLevelFull time, part time, contract, and the seniority the employer asked for
datePosted, validThroughWhen the employer posted it and when it expires
applyUrl, canonicalUrlThe application link, plus the employer's own branded careers URL when they use one

A JazzHR API that already knows every employer

You do not need a company URL to start. Leave the input empty and the search covers every employer on the platform.

Switch to the company directory mode and you get the employer list itself: every business hiring on JazzHR, with a live count of their open roles. That is a useful thing to have before you decide which boards are worth pulling in full.

Descriptions come back as markdown, so you can hand them to an LLM without stripping HTML first.

Two things happen quietly that matter more than they sound. About a quarter of live postings publish no structured job data at all; those get read from the page markup instead of coming back half empty. And roughly a fifth of the entries in the platform index point at roles that have already closed, which are skipped and never billed. You pay for jobs you actually receive.

Delta mode handles the rest: turn it on and each scheduled run returns only the postings you have not seen before.

What is applytojob.com?

applytojob.com is the domain where JazzHR hosts its customers' career pages. When a company uses JazzHR to hire, their job board lives at company.applytojob.com, and application emails come from that domain too, which is why so many people search for it after applying somewhere. Every public board hosted there is what this Actor indexes: one search covers all of them.

Use cases

  • Scrape job postings for a niche job board fed by small and mid-sized employers the big aggregators miss.
  • Give an AI career assistant live job data with descriptions it can read directly.
  • Find companies hiring for a role in your territory, then sell to them.
  • Feed job posting data into hiring-velocity dashboards by company, city, or title.
  • Alert a team whenever a competitor posts a new opening.

🔌 Integrations: turn JazzHR postings into a live feed

One run answers a question. The integrations are how this becomes a pipeline you stop thinking about.

  • Tasks and Schedules. Save your search as an Apify Task, put it on a weekly schedule, and switch on newJobsOnly. From then on the dataset only ever contains postings that appeared since the last run: a self-maintaining new-jobs feed.
  • n8n, Make, and Zapier. Trigger runs and consume results through Apify's integrations, so new postings can land in Slack, Sheets, Airtable, or your CRM.
  • Databases and storage. Push each run's dataset to Postgres, Supabase, or S3 with the standard Apify dataset integrations, and query job posting data with SQL.
  • Webhooks. Fire a webhook on run completion to kick off your own processing the moment a delta run finds something new.
  • MCP. AI agents can run the whole loop themselves; see the Claude section below.

Input parameters

Every field is optional. Running with no input at all returns a sample of jobs from across the platform.

ParameterTypeDefaultWhat it does
startUrlsarrayemptyCompany boards such as https://company.applytojob.com, or individual job URLs. Empty searches every employer.
keywordsarrayemptyJob title words to keep. Applied before each posting is opened, so it also makes the run cheaper.
outputModeselectjobsjobs for full records, urlsOnly for the job index, companiesOnly for the employer directory.
descriptionFormatselectmarkdownmarkdown, html, text, or all.
companies / excludeCompaniesarrayemptyCompany slugs to include or skip. For acme.applytojob.com the slug is acme.
locationstringemptyText match on city, state, postal code, or country.
employmentTypeselectANYFull time, part time, contractor, temporary, intern, or other.
remoteOnlybooleanfalseKeep only remote roles.
postedAfterstringemptyYYYY-MM-DD. Uses the employer's real posting date.
maxItemsinteger100Row cap. The platform holds over 100,000 live jobs, so this is what keeps a first run small.
newJobsOnlybooleanfalseReturn only postings not seen in an earlier run.
firstRunBehaviorselectemitAllOn the first delta run, return everything or just record what exists today.
deltaStoreNamestringjazzhr-seen-jobsNamed store holding the remembered job IDs. Change it to keep separate delta histories per search.
maxConcurrencyinteger10Parallel page reads, up to 25.
proxyConfigurationobjectdirectOptional Apify Proxy settings. Direct connections work; leave off unless you hit blocking.

Example output

{
"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 to help manufacturers improve quality, safety, and operational performance...",
"parseStatus": "full",
"scrapedAt": "2026-08-10T18:22:04Z"
}

The company directory mode returns a different, much smaller row:

{
"companySlug": "easeinc",
"boardUrl": "https://easeinc.applytojob.com",
"jobCount": 17,
"sampleJobTitles": ["Account Executive", "Implementation Manager"],
"scrapedAt": "2026-08-10T18:22:04Z"
}

Output reference

Every field the Actor can return. Job rows carry the job fields; the company directory and job URL modes return their own smaller shapes, noted below.

FieldTypeWhat it is
idstringStable identifier for the posting. The employer job code when the posting exposes one, otherwise the job ID from the apply URL.
jobIdstringThe identifier in the apply URL. Unique across the whole platform and safe to use as a deduplication key.
uniqueJobCodestring, nullableThe employer's own requisition code, when published.
titlestring, nullableJob title as published by the employer.
companyNamestring, nullableHiring organization name.
companySlugstring, nullableSubdomain that identifies the employer's job board. Use it with the companies input to pull every job from one employer.
companyWebsitestring, nullableThe employer's own website, when published alongside the posting.
companyLogostring, nullableURL of the employer logo image, when published.
boardUrlstring, nullableThe employer's job board, listing all of their open roles.
applyUrlstringDirect link to the application page for this job.
canonicalUrlstring, nullableThe employer's preferred URL for the posting. Often a branded careers domain rather than the apply link.
citystring, nullableCity of the job location.
regionstring, nullableState, province, or region of the job location.
postalCodestring, nullablePostal code of the job location.
countrystring, nullableCountry of the job location, or the country applicants must be in for a remote role.
locationTextstring, nullableCity, region, and country joined into one readable string.
isRemotebooleanTrue when the employer flagged the role as remote.
employmentTypestring, nullableEmployment type as published, for example FULL_TIME or PART_TIME.
experienceLevelstring, nullableSeniority as published by the employer.
datePostedstring, nullableThe date the employer published the posting. This is the real posting date, not the date the row was collected.
validThroughstring, nullableThe date the posting expires, when the employer sets one. Useful for filtering out stale listings.
descriptionMarkdownstring, nullableFull job description converted to markdown. Populated when the description format is markdown or all.
descriptionHtmlstring, nullableFull job description as published HTML, with scripts and embedded base64 images removed. Populated when the description format is html or all.
descriptionTextstring, nullableFull job description as plain text. Populated when the description format is text or all.
parseStatusstringfull when the posting published complete structured job data, partial when the fields were read from the page markup instead, degraded when only the URL was usable, error when the run itself failed.
sourceFeedPageinteger, nullableWhich platform index page this job was discovered on. Null when the job came from a URL you supplied.
scrapedAtstringUTC timestamp of when this row was collected.
titleFromSlugstring, nullableJob title recovered from the apply URL. Returned by the job URLs only mode, which never opens the posting.
jobCountinteger, nullableHow many live jobs this employer has. Returned by the company directory mode.
sampleJobTitlesarrayA few example titles from this employer's board. Returned by the company directory mode.
errorMessagestring, nullablePresent only on an error row, describing why the run could not complete.

Three description fields exist so you can pick a format: descriptionMarkdown, descriptionHtml, and descriptionText. Only the one you asked for is populated; the others stay null. Set descriptionFormat to all to fill all three.

parseStatus tells you how complete a row is. full means the posting published structured job data. partial means the fields were read from the page markup instead, which happens on roughly half of live postings and is why those rows still arrive with a title, company, location and description. degraded means only the URL was usable. error appears only if the run itself failed.

Pricing

You pay per row returned, and the three output modes are priced differently because they cost very differently to produce. Full job records carry the highest rate since each one is a separate page read. The job index and the company directory are built from a handful of requests, so they are priced far lower and are the cheap way to survey the whole platform before deciding what to pull in full. Nothing is charged for postings that turn out to be expired, for rows removed by your filters, or for jobs suppressed by delta mode. Current rates are on the Store page.

How to get started

  1. Open the Actor and press Start. With no input it returns a sample of jobs from across the platform.
  2. Add keywords to narrow to the roles you care about, or startUrls to target one employer.
  3. Switch outputMode to companiesOnly to see who is hiring before pulling any descriptions.
  4. Raise maxItems once the shape of the output looks right.

View on Apify Store

Working Python and MCP examples live in the JazzHR Jobs API example repo: four runnable scripts covering full job records, the employer directory, the job index, and the new-jobs delta feed.

🔌 Use this API from Claude (MCP)

Add this Actor as a tool in Claude Code (free trial), Claude Cowork (free trial), or any other MCP client, through the hosted Apify MCP server:

https://mcp.apify.com/?tools=actors,docs,johnvc/jazzhr-jobs-api

Setup walkthrough:

Apify MCP integration docs: https://docs.apify.com/platform/integrations/mcp

💸 Pay per run with crypto (x402)

The JazzHR Jobs API supports agentic payments via the x402 protocol. AI agents and MCP clients can pay for runs in USDC (on Base) with no Apify account or API token needed: point your agent at the Apify MCP server and it can discover, pay for, and run this Actor autonomously. Read the Apify x402 announcement for details.

FAQ

Is this an API or a web scraper?

Both, honestly. Under the hood it reads public pages the way a scraper does. What you get is an API: structured JSON on demand, filters, stable field names, and no HTML in sight 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.

Do I need a company URL to use this?

No. That is the main difference from other JazzHR tools. Leave startUrls empty and the Actor searches every employer on the platform. Supply a board URL only when you want one specific company.

How many jobs and companies are there?

The platform index currently lists a little over 114,000 postings across roughly 7,500 employers. A portion of those postings have already been filled or withdrawn; the Actor skips them and does not bill for them.

Why do some rows have no posting date?

Employers publish their postings in two different ways. Where a posting carries structured job data, the real posting date and expiry date come with it. Where it does not, the title, company, location, employment type, and description are read from the page instead, and no date is available. The parseStatus field tells you which kind of row you are looking at.

How do I get only jobs posted since my last run?

Turn on newJobsOnly. The Actor remembers the job IDs it has returned and skips them next time. On the very first run, set firstRunBehavior to seedOnly if you want it to record what exists today and return nothing, so the following run is a clean list of new postings.

Can I run it on a schedule?

Yes, and that is the intended way to use it. Save your input as a Task, add a schedule, and turn on delta mode so each run returns only new postings. The Integrations section above shows where to send the results.

How do I use the JazzHR API from other apps?

Every run is reachable over the Apify REST API, so anything that can make an HTTP request can start a search and read the results. n8n, Make, and Zapier all have ready connectors, listed in the Integrations section.

Can AI assistants run this through an MCP server?

Yes. The hosted MCP server URL in the Claude section above registers this Actor as a tool, so an assistant can search postings, pull the company directory, and pay per result without you writing any code.

Can I get salaries?

Salary is not a separate field because most employers on this platform write pay into the job description rather than into a structured field. Search descriptionMarkdown for it.

Why did my run return fewer rows than maxItems?

Either the filters matched fewer jobs than the cap, or the run hit the budget you set for it. The run log states which, along with how many postings were filtered out and how many had already expired.

Is applytojob.com legit?

Yes. It is the hosting domain for JazzHR customer career pages, so a real company you applied to will send mail from it. If an offer arrived from that domain for a job you never applied to, treat it with the same suspicion as any unsolicited offer.

Where does JazzHR post jobs?

Each customer gets a public board on applytojob.com, and JazzHR syndicates postings out to external boards the employer chooses. This Actor reads the public boards, which are the complete, first-party source.

Is scraping this data allowed?

The Actor reads only public job postings and the public sitemap index that the platform itself publishes for search engines in its robots.txt. It signs in to nothing and collects no candidate or applicant data. Job boards are one of the most common public data sources for an applicant tracking system ecosystem, and this one stays strictly on the public side.

💡 Example tasks

Each of these is a ready-to-run configuration with its own page. Open one, press Start, and adjust from there.

Scrape Job Postings with Full Descriptions

A filtered search returning title, company, location, posting date and the full description as markdown.

Companies That Use JazzHR: Live Directory

Every employer on the platform with a live count of their open roles and a link to their board.

New Job Postings Only: a Delta Feed

Delta mode on a schedule, so each run returns only postings that appeared since the last one.

Search JazzHR Jobs from Claude via MCP

The same search driven by an AI agent through the hosted MCP server, with no code to write.

Remote Jobs at Small Companies, Live List

Remote-only roles across the whole platform, weighted to small and mid-sized employers.

applytojob.com Jobs: Browse the Full Index

The entire job index as structured rows, without opening a single posting.

查询使用 JazzHR 招聘的公司:实时名录

The company directory, for Simplified Chinese search.

获取 JazzHR 全部在招职位与完整描述

Platform-wide job search with full descriptions, for Simplified Chinese search.

Hiring data rarely stops at one platform. These pair well with this Actor:

There are simpler JazzHR tools on the Store, like this one, that fetch a handful of rows from a board URL you already know. Fine for a spot check; this Actor is for when you need the whole platform, filters, and a feed that keeps itself current.


🌐 About Alpha OSINT

This Actor is part of Alpha OSINT, toolset of financial and operations data sources and APIs. For support or requests for this actor, please start a ticket directly on our support page.

Last Updated: 2026.08.24