JazzHR logo

Job boards & ATS · Live on Apify

JazzHR jobs scraper for applytojob.com career pages

Paste a JazzHR career page or job link. You get current jobs with text, pay details and apply links. Save a snapshot and compare it next time.

About $2.06 for 1,000 jobs$0.00198 per job + $0.08 per run. Apify bills you, not us.One job in a run of its own: about $0.08.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

titleEnergy Auditor
urlhttps://ecosystems.applytojob.com/apply/jobs/details/0GZ4T5FOYL
input_urlhttps://ecosystems.applytojob.com/apply/jobs/

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: https://ecosystems.applytojob.com/apply/jobs/ in JazzHR board or job URLs. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

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.

Who uses it

Niche job boards

Add JazzHR jobs from small and mid-size employers.

Market watchers

See when a company adds or closes roles.

Recruiters

Filter roles by place or keywords across a few companies.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.08Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
Saved job or change$0.00198One current job or initial/new/changed/removed job event saved in the Dataset.

Examples

  • One job: about $0.08.
  • 1,000 jobs: about $2.06.
  • Every day 100 jobs, for 30 days: about $8.34 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 2,400 jobs.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Do I need a JazzHR account?

No. The tool reads public career pages, not recruiter accounts.

How many links can I add?

Up to 5 links and 100 saved jobs or changes per run.

Can I get only new jobs?

Yes. Use monitor mode with your last full snapshot. Keep rows marked new.

Why is the posting date empty?

Some old page themes show no date or pay. The tool leaves them empty.

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.

Details

Step by step on Apify
  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.
Use cases
TaskSettingsKey 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
Tips for better results
  • JazzHR pages look like company.applytojob.com. Paste the board or one job link.
  • Keep the SNAPSHOT from a full run. Paste it into the next monitor run.
  • Turn off descriptions for a small, quick list of titles and links.
Limits and good to know

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.

  • 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

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

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
{
  "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"
}

Use it from code

Actor ID: cliqtomedia/jazzhr-jobs-monitor-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/jazzhr-jobs-monitor-scraper").call(run_input={
    "startUrls": [
        "https://ecosystems.applytojob.com/apply/jobs/"
    ],
    "maxResults": 20
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~jazzhr-jobs-monitor-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": ["https://ecosystems.applytojob.com/apply/jobs/"], "maxResults": 20}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/jazzhr-jobs-monitor-scraper")
result = tool.invoke({"run_input": {"startUrls": ["https://ecosystems.applytojob.com/apply/jobs/"], "maxResults": 20}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (17)
FieldTypeMeaning
titlestringPublic job title.
descriptionstringSafe HTML; null when disabled or missing.
locationsarrayStructured location strings, or visible location fallback; [] when unknown.
urlstringPublic application page URL.
date_postedstringSource posting date, or null.
input_urlstringCanonical input URL that found the job.
job_idstringStable tenant:public-job-code identifier.
companystringPublic employer name, or null.
locationstringVisible location summary, or null.
employment_typestringSource employment type; JSON-LD or visible fallback.
description_textstringPlain description text; null when disabled or missing.
salaryobjectSource pay currency/unit/min/max/value; no conversion.
remotebooleanTrue when source marks remote, otherwise null.
change_typestringCurrent snapshot row or initial/new/changed/removed monitor event.
statusstringDetail completeness; also check run-level status.
scraped_atstringISO fetch or removal-detection timestamp.
sourcestringjazzhr platform marker.
Input settings (6)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
JazzHR board or job URLs requiredstartUrlsarray["https://ecosystems.applytojob.com/apply/jobs/"]
Maximum saved resultsmaxResultsinteger20
Keyword filterquerystring""
Include job descriptionsincludeDescriptionbooleantrue
Snapshot or changesmodestring"snapshot"
Previous full snapshotpreviousSnapshotobject

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure