JazzHR Jobs Monitor & Scraper avatar

JazzHR Jobs Monitor & Scraper

Pricing

from $1.98 / 1,000 saved job or changes

Go to Apify Store
JazzHR Jobs Monitor & Scraper

JazzHR Jobs Monitor & Scraper

Read public JazzHR job boards with job descriptions, pay and apply links. Compare full snapshots to find new, changed and removed jobs. Export JSON or CSV.

Pricing

from $1.98 / 1,000 saved job or changes

Rating

0.0

(0)

Developer

Cliqto Media

Cliqto Media

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Categories

Share

Read public JazzHR career pages and return current jobs with descriptions, pay details and apply links. Compare full snapshots to find new, changed and removed jobs.

Start with one company URL. The price is $0.08 per run + $0.00198 per saved job or change. Empty and unchanged runs still have the start fee. Check RUN_SUMMARY before you use a partial result.

JazzHR Jobs Monitor & Scraper: public input, structured results and supported export

Table of contents

What it does

Add public company pages on tenant.applytojob.com. The Actor reads the job list and each job page. It supports board URLs and single job URLs in both common JazzHR formats.

The Actor returns one row per saved job or change. It removes duplicate job IDs. It reads public pages without a JazzHR login, a paid data API or a browser. This is an independent product for public JazzHR pages.

What data you get

You get titles, company names, locations, job descriptions, employment type, pay details and apply URLs when the company provides them. Each row has a stable job_id and a source URL. A missing value is null; missing structured locations are an empty array.

There are three reports in the Key-value store:

RecordWhat it contains
OUTPUTThe saved rows in items, source status, counts and limits
RUN_SUMMARYThe same report without job rows; includes request counts, bytes, run status and release IDs
SNAPSHOTThe complete unfiltered jobs for the next monitor run; null when the scan or output is partial, missing or failed

Quick start

  1. Open Input.
  2. Add https://ecosystems.applytojob.com/apply/jobs/ to JazzHR board or job URLs (startUrls).
  3. Keep maxResults: 20, includeDescription: true and mode: "snapshot".
  4. Use 256 MB, a 160-second timeout and a $0.30 maximum charge. Click Start.
  5. Open the Dataset and check title, job_id and url. Open RUN_SUMMARY and check status.

The checked example returned Energy Auditor and Installation Technician for ecofi. The company can change its jobs after this check.

Input fields

KeyType / requiredDefault / UI prefillAllowed valuesEffect and exampleRecommendation
startUrlsstring array / yesNo runtime default. UI prefill: the ecofi board above1–5 URLs, each up to 2,048 characters. HTTPS on one *.applytojob.com tenantRoot, /apply, /apply/jobs/, /apply/jobs/details/CODE, or /apply/CODE/Title. Tracking query strings are removed. Duplicate URLs and job IDs are removedStart with one board. Use job URLs for a narrow check
maxResultsinteger / no201–100Maximum saved jobs or changes. A smaller value can return a partial resultUse 100 when you need a full monitor snapshot
querystring / no""Up to 200 charactersAll words must appear in the title, company, locations or included description text. Example: "energy remote"Leave empty for a full job feed
includeDescriptionboolean / notruetrue, falseReturn clean HTML and plain text. With false, both description fields are null and are not searchedKeep true when job text matters
modestring / no"snapshot""snapshot", "monitor"Snapshot returns current jobs. Monitor returns job changesUse snapshot for exports and monitor for comparisons
previousSnapshotobject / noOmittedA complete SNAPSHOT record: version: 1, matching scope, up to 100 complete jobs and 20 MB of JSON textCompare the previous full jobs with the current full jobs. Without this field, monitor emits initial jobsCopy the full record. Keep the same URLs and description setting

Empty input and unknown input keys fail clearly. URLs with credentials, private addresses, other domains or custom ports are rejected.

The filter applies after the source scan. It does not reduce the work needed to check the board. The snapshot stores the full unfiltered inventory. Changing query does not change the comparison scope. Changing URLs or includeDescription needs a fresh baseline.

Input examples

Read one board

{
"startUrls": ["https://ecosystems.applytojob.com/apply/jobs/"],
"maxResults": 20,
"includeDescription": true,
"mode": "snapshot"
}

Expected: current jobs, their source links, and a full snapshot if the scan is complete.

Read one job

{
"startUrls": ["https://bambooworks.applytojob.com/apply/PoyKNF6JP8/B2B-Lead-Generation-Specialist-Staffing-BPO"],
"maxResults": 1
}

This checked job returned a Manila structured location, a remote signal and a monthly USD pay range. Check the source link for the current listing.

Start monitoring

{
"startUrls": ["https://ecosystems.applytojob.com/apply/jobs/"],
"maxResults": 100,
"mode": "monitor"
}

The first complete run returns initial rows. For the next run, add the complete SNAPSHOT JSON as previousSnapshot. See the next sections for status and pricing.

Output example

This is a trimmed row from the first board example. Long description fields are omitted here. They are present in the real Dataset when enabled.

{
"title": "Energy Auditor",
"locations": ["Remote"],
"url": "https://ecosystems.applytojob.com/apply/jobs/details/0GZ4T5FOYL",
"date_posted": null,
"input_url": "https://ecosystems.applytojob.com/apply/jobs/",
"job_id": "ecosystems:0GZ4T5FOYL",
"company": "ecofi",
"location": "Remote",
"employment_type": "Full Time",
"salary": null,
"remote": true,
"change_type": "current",
"status": "complete",
"source": "jazzhr"
}

Output fields

FieldType / can be nullExampleMeaning
titlestring / noEnergy AuditorPublic job title
descriptionstring / yes<p>Job text...</p>Safe source HTML. Unsafe elements and all attributes are removed. Null when disabled or missing
locationsstring array / no; can be []["Manila, Manila"]Structured city, region and country when present; otherwise the visible location
urlstring / noThe job link aboveSource application page, using the public structured URL when available
date_postedstring / yes2026-09-28Date from the source. Null when no date is provided
input_urlstring / noThe board URL aboveCanonical input that found the job
job_idstring / noecosystems:0GZ4T5FOYLTenant plus public job code. Use this to update your database
companystring / yesecofiSource employer name
locationstring / yesRemoteLocation from the visible job summary; it may differ from structured locations
employment_typestring / yesFULL_TIME or Full TimeSource JSON-LD value, with visible text as a fallback
description_textstring / yesAbout Bamboo Works...Plain text version of the description. Null when disabled or missing
salaryobject / yes{"currency":"USD","unit":"MONTH","min":1600,"max":2000,"value":null}Source pay values. currency and unit are string or null; min, max, value are number or null. No annual conversion or currency conversion
remoteboolean / yestrueTrue for the source remote signal. Null when unknown; location is not guessed
change_typestring / nocurrent, initial, new, changed, removedSnapshot row or monitor event. Removed rows keep the previous job data
statusstring / nocomplete, partialJob detail status. Missing optional dates or pay do not make a row partial. A missing or clipped enabled description does
scraped_atstring / noAn ISO timestamp from the runTime the detail was read, or the removal was detected
sourcestring / nojazzhrSource platform

Dataset rows and OUTPUT.items match. A row can be complete while the overall run is partial. Always check RUN_SUMMARY.status and each source status.

Pricing and examples

The applied price is $0.08 per run start + $0.00198 per saved job or change, on all plan tiers. The start fee is one event at the supported 256–512 MB memory. This Actor includes its in-run platform usage in the event price. Your own post-run exports and other storage operations follow normal Apify platform pricing.

The start fee applies to a valid empty result, a filter with no matches and a monitor run with no changes. Partial or failed runs can still have the start fee and charges for saved rows. Rows that are never saved are not charged as job events.

ResultRunsEvent price
No saved rows1$0.08
1 saved row1$0.08198
10 saved rows1$0.09980
100 saved rows1$0.27800
1,000 saved rows across separate batchesAt least 10At least $2.78000

The tested per-run saved result limit is 100. The 1,000-row line is a calculation for separate batches, not a tested single run. A large board may need smaller input scope. Repeating the same capped board does not paginate it and can repeat the same jobs.

The default $0.30 maximum charge covers the start and up to 100 saved rows. A lower charge cap can produce partial output. See Apify event pricing for platform billing behavior.

Use cases

TaskSettingsUseful fields
Add public JazzHR jobs to a niche job boardmode: "snapshot"job_id, title, url, description_text
Compare a company's hiring activitymode: "monitor" with a previous full snapshotjob_id, change_type, company
Review roles by location or wordsquery, with descriptions enabled when neededlocations, location, title

Scheduling and monitoring

  1. Run mode: "monitor" with maxResults: 100 and your chosen URLs.
  2. Check that RUN_SUMMARY.status is complete and SNAPSHOT is an object.
  3. Store the entire SNAPSHOT in your own workflow.
  4. Pass that object as previousSnapshot in the next run, with the same URLs and description setting.
  5. Read change_type to send new, changed or removed jobs to your next step.
  6. Replace your saved baseline only after another complete run with a usable snapshot.

An unchanged run returns no change rows and still costs $0.08. Removal means the job was absent from a complete current scan. It is not a promise that the employer closed the role.

You can create an Apify schedule or use your own automation. A fixed scheduled input does not update previousSnapshot by itself. Your workflow must pass the latest complete snapshot. Keep comparison runs in order and check partial results.

API, MCP and integrations

Call the Actor through the Apify API with the same input JSON:

curl -X POST 'https://api.apify.com/v2/acts/cliqtomedia~jazzhr-jobs-monitor-scraper/runs?build=latest&memory=256&timeout=160&maxTotalChargeUsd=0.30' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"startUrls":["https://ecosystems.applytojob.com/apply/jobs/"],"maxResults":20}'

Poll the returned run ID. Then read items from its defaultDatasetId and the three records from its defaultKeyValueStoreId. Export Dataset rows as JSON, CSV or Excel. Use job_id for updates and change_type for alerts.

An MCP client can call an accessible Actor through the Apify MCP service. Access to a private Actor needs your Apify account. Make, Zapier, n8n or your own code can pass the same JSON and consume the Dataset. Monitor workflows must also pass the prior snapshot. Never put an Apify token in a public page.

Limits and partial results

  • Up to 5 input URLs and 100 saved jobs or changes per run.
  • A complete 78-job board was checked. A 100-row multi-board run reached result and time limits and was partial. Five single-job inputs were also checked with a complete result.
  • Source work is bounded by 120 scanned jobs, 150 request attempts, 100 seconds, 1 MiB per response and 20 MiB of response bodies in total. Storage and reporting can add time after the scan. The recommended timeout is 160 seconds. A 300-second Store test or larger finite positive timeout is supported without extending the 100-second source deadline.
  • Use 256–512 MB. Larger memory, longer timeouts and restart-on-error are rejected before source work.
  • Enabled descriptions are limited to 40,000 HTML characters and 30,000 plain-text characters. Clipping is marked partial.
  • Complete snapshots can hold up to 100 jobs. A partial run returns SNAPSHOT: null; keep your earlier good baseline.
  • Closed detail links can return not_found. An unknown page layout, access block or network error is reported as an error, not a successful empty board.
  • Partial source scans do not infer removals. Output or charge caps may limit delivery after a full scan. Read both source and run status.
  • Only supplied public JazzHR tenant pages are supported. There is no worldwide job search, automatic company discovery, custom-domain support or candidate data access.

Employers can remove or change pages. Some old themes have no posting date or pay values. This Actor does not fill missing values with guesses.

Troubleshooting

What you seeCheckAction
error with UNSUPPORTED_URLDomain, HTTPS and pathUse a public tenant URL on applytojob.com
not_foundThe source job URLCheck whether the job was removed
complete with no rowsquery, mode and countsRemove the filter, or check that there were no monitor changes
partialSource reasons, result and charge capsNarrow the board scope, increase maxResults up to 100, or use a sufficient charge cap
UNRECOGNIZED_BOARD or UNRECOGNIZED_JOBSource page and run IDCheck the public page and report a changed layout or access block
SNAPSHOT_SCOPE_MISMATCHURLs and description settingStart a new monitor baseline after changing scope
TIME_LIMIT, BYTE_LIMIT, REQUEST_LIMITWork countersUse fewer or smaller boards. Keep the earlier complete snapshot

FAQ

Do I need a JazzHR account?

No. The Actor reads public career pages. It does not read recruiter accounts or applications.

Is every zero-row run free?

No. The $0.08 start fee applies even when no job or change is saved.

Can I get only new jobs?

Yes. Compare with the previous full snapshot and keep rows with change_type: "new". The first monitor run uses initial. The Actor also returns changed and safely detected removed jobs.

Why do the two location fields differ?

locations uses structured data when present. location uses the visible page summary. A job may show a city in structured data and Remote in visible text.

Can I replace another JazzHR scraper without changing my code?

The fields title, description, locations, url, date_posted and input_url keep the common meaning. Input keys, canonical input URLs, safe HTML formatting and extra status fields can differ. Check your mapping before switching.

Support

Open an issue on this Actor's Apify page. Include the run ID, public source URL and the field or status you expected. Do not share API tokens, cookies or private account data.