Crunch Fitness (crunchfitness), The Joint Chiropractic (thejointchiropractic) and Ethos Veterinary Health (ethosveterinaryhealth) hire through JazzHR, and CommonSpirit Health through Radancy. Both put a schema.org JobPosting on each job's page, the markup Google for Jobs reads, and it has a field for the pay: baseSalary. Five things to know about it, measured on 2026-10-29 on the eight newest jobs of five JazzHR boards and the ten newest of four Radancy sites, a few seconds between requests.

1. JazzHR's list has no posting; the job page has a JobPosting

A JazzHR board's /apply page lists each opening's title, place and department, and nothing else. The posting, the date and the pay are on the job's own page, in a JobPosting: on 7 of the 8 newest at Crunch Fitness, 7 at Bath Concepts, 6 at CentiMark, 5 at Ethos and 2 at The Joint. A page without one still shows the posting in its #job-description block, but no date.

2. One request per job page

jp() { # a JazzHR job page: its schema.org JobPosting's title, date and pay curl -s "$1" | perl -0ne 'print "$1\n" while /<script type="application\/ld\+json">(.*?)<\/script>/sg' \ | jq -c 'select(."@type" == "JobPosting") | {title, datePosted, baseSalary}' } jp https://centimark.applytojob.com/apply/Oyh2N2Nl4F/Assistant-Roofing-Foreman 

That printed {"title":"Assistant Roofing Foreman","datePosted":"2026-10-08","baseSalary":{"@type":"MonetaryAmount","currency":"USD","value":{"@type":"QuantitativeValue","unitText":"HOUR","minValue":27,"maxValue":33}}}. That page carries two ld+json blocks, the employer's Organization first, so the command keeps the one whose @type is JobPosting.

3. baseSalary is there when the employer fills it in

On those eight jobs a board, baseSalary had numbers on 5 at Ethos, 3 at CentiMark, 2 at The Joint, 1 at Crunch Fitness (an Operations Manager, 31,200 to 41,360 a year) and none at Bath Concepts. A band is minValue and maxValue; a single rate is value, as The Joint wrote it for a Chiropractic Manager in Colorado: {"@type":"QuantitativeValue","unitText":"YEAR","value":110000}.

4. The unit can be wrong

Ethos marks four of its five bands "unitText":"YEAR": 28 to 32, 28 to 35 and 30 to 35 for licensed veterinary technicians, 12 to 27 for a veterinary assistant. Nobody is paid $28 a year; those are hourly rates, and the fifth, 28 to 35 for another technician, says HOUR. Check the numbers against the unit before trusting either.

5. Radancy sends the field on every job, often empty

CommonSpirit Health filled baseSalary on all ten of its newest jobs, 61.81 to 105.18 an hour for a Nursing House Supervisor. UnitedHealth Group, Kaiser Permanente and Comcast, on the same system, sent it on all ten too, every time as {"@type":"MonetaryAmount","currency":"","value":{"@type":"QuantitativeValue","unitText":""}}. At UnitedHealth the pay is in the posting's text instead: 7 of its 8 newest postings state it, 73,188 to 109,782 a year for a Clinical Manager.

Hosted

Company Career Page Jobs Scraper on Apify takes CommonSpirit Health or The Joint Chiropractic by name, and JazzHR boards as jazzhr:crunchfitness. It returns the pay as salaryMin, salaryMax, salaryCurrency and salaryPeriod: from a filled baseSalary (CommonSpirit's on every run), from each JazzHR job page with includeDescription, and from the posting's text where the field is empty or its unit cannot be true. Every other system's public endpoint, with a tested curl, is in job-board-apis.