Adderley Data Apify Store

Adderley Data / Guides

JazzHR job board API: the keyed API, the public career page and what each holds

JazzHR documents one API, under api.resumatorapi.com/v1, and it needs the key from the company's own JazzHR account. A company's public career page, {company}.applytojob.com/apply, has no JSON or XML feed of its own: it is HTML, with a block of structured data on each posting's page. This page covers both, as we measured them.

The documented API

JazzHR's interactive reference at resumatorapi.com/v1 (read 12 October 2026) says the key "can be found in the Integrations section of your JazzHR account", and the reference sends it as an apikey query parameter. Each call returns at most 100 results; for more, append /page/2 and so on to the address until a page comes back empty.

curl "https://api.resumatorapi.com/v1/jobs/status/open?apikey={key}"
  • Filters go in the path. GET /jobs takes any number of them: title, department, city, state, status (open, on hold, approved, needs approval, drafting and more), from_open_date and to_open_date, confidential, private, recruiter, hiring_lead and board_code. GET /jobs/{job_id} returns one job.
  • Without a key it answers HTTP 401 with {"error":"apikey not set"}. That response carried x-ratelimit-limit: 15 with a reset about a minute ahead (12 October 2026); the reference states no limit, so treat that number as observed, not promised.
  • Whose view it is. The key reads the account itself: drafts, jobs on hold, private and confidential jobs, recruiters and hiring leads, alongside applicants and their files. It is the way to read your own account, not a feed of another company's openings.

The public career page

curl "https://{company}.applytojob.com/apply"

The page lists every open posting on the board in one response, without paging: the largest of 49 boards we read on 25 September listed 412. Each entry gives the title, a link of the form https://{company}.applytojob.com/apply/{id}/{Slug}, the location, and the department when the posting has one. Checked against the live site on 25 September and 12 October 2026:

  • An unknown subdomain answers HTTP 302, a redirect to JazzHR's page for job seekers, not a 404.
  • A closed account answers HTTP 200 with a page titled "JazzHR - Inactive Career Page". JazzHR's own subdomain, jazzhr, answered that on 12 October.
  • A posting the board no longer has answers HTTP 410 with "Hiring for this position has been put on hold at this time."
  • Two layouts. 48 of the 49 boards used the current layout and one an older one, with different markup for the same facts, so a parser needs both.

The location is JazzHR's own rendering of the posting's place: "Wichita, KS" with no country printed for the United States, "Rome, Italy", "Mexico" or "Remote". Posting ids are case-sensitive, 10 characters on current postings and 6 on older ones.

What a posting's page adds

The list has no date, no employment type and no pay. The posting's own page has the employment type in words ("Full Time", "Part Time", "Internship", "Contracted" and others), the text, and a schema.org block of structured data:

  • A JobPosting block gave a date on 118 of the 125 posting pages measured below; on 25 September, 17 of 30 pages across ten boards carried one, and the rest only the company's Organization block. It gives datePosted as a date without a time, employmentType, the address's locality, region and postcode, and sometimes baseSalary: on 15 of the 125, and 2 of the 30.
  • validThrough is not a closing date. It was exactly 90 days after datePosted on all 17 blocks read in September and on all 10 we read directly in October, so it is JazzHR's window for search engines, not a date the company set.
  • The application form follows the text on every posting page: name, email, phone, resume and screening questions. A jobs table needs none of it.

Measured on a public board

The board in the Actor's example input listed 125 postings on Monday 12 October 2026. Because the date, the type and the pay live on each posting's page, a full read is the list plus one page per posting: 126 requests, every one answered at the first attempt, in 1 minute 14 seconds at the default pace (run Xce3P1BfcxvEFJN8E).

One public JazzHR career page, 125 postings, 12 October 2026
FactPostings with itNotes
Location125 of 12552 different places, 79 in Wisconsin; 5 not a city: "Remote" twice, "United States", "(Multiple states)" and a state alone
Department17 of 125On the list itself
Employment type125 of 125From the posting page: full-time 116, part-time 4, full- or part-time 2, temporary 2, internship 1
Date posted118 of 125From the JobPosting block: 68 in September, 33 so far in October, the oldest 21 July 2026
Postcode30 of 125From the JobPosting block's address
Pay33 of 12515 in the JobPosting block, 18 stated only in the text

Where it stops

  • It is HTML. Two layouts, no feed, and nothing JazzHR promises to keep stable for readers outside the account.
  • Every posting costs a request. The facts a table needs are on the posting pages, so a board of 412 postings is 413 requests on every full read.
  • Nothing says what changed. The list carries no date, so a changed posting is found only by comparing it with the last read.

JazzHR Jobs Scraper reads the career page and each posting's page in either layout, at 4 requests at a time and 90 a minute by default, and never reads the application form. In incremental mode it compares each posting's title, place and department on the list with the last run; an unchanged posting is skipped, costs no page request and is not charged. The price of that saving: an edit only to a posting's type, date, pay or text is not reported as a change. Its page has the price and every field. For JazzHR beside fourteen other systems in one table, see the measured run of the Career Site Jobs Scraper.

The same reference for other systems

Published 2026-10-12.