# JazzHR jobs scraper for applytojob.com career pages

> JazzHR jobs scraper for public applytojob.com pages. Get job text, pay and apply links. Compare snapshots to find new, changed and removed jobs.

URL: https://cliqtomedia.com/actors/jazzhr-jobs-monitor-scraper/

Category: Jobs & hiring · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/jazzhr-jobs-monitor-scraper?fpr=cliqto

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.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify 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 Start.** No 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 results.** When 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.

## 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.





## Price

Pay per event. Apify bills you, not us.

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

- 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.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/jazzhr-jobs-monitor-scraper?fpr=cliqto

## 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.

## Data fields

- `title` (string): Public job title.
- `description` (string): Safe HTML; null when disabled or missing.
- `locations` (array): Structured location strings, or visible location fallback; [] when unknown.
- `url` (string): Public application page URL.
- `date_posted` (string): Source posting date, or null.
- `input_url` (string): Canonical input URL that found the job.
- `job_id` (string): Stable tenant:public-job-code identifier.
- `company` (string): Public employer name, or null.
- `location` (string): Visible location summary, or null.
- `employment_type` (string): Source employment type; JSON-LD or visible fallback.
- `description_text` (string): Plain description text; null when disabled or missing.
- `salary` (object): Source pay currency/unit/min/max/value; no conversion.
- `remote` (boolean): True when source marks remote, otherwise null.
- `change_type` (string): Current snapshot row or initial/new/changed/removed monitor event.
- `status` (string): Detail completeness; also check run-level status.
- `scraped_at` (string): ISO fetch or removal-detection timestamp.
- `source` (string): jazzhr platform marker.

## Input settings

- `startUrls` (array, required): Add 1–5 public HTTPS tenant.applytojob.com board or job URLs. Duplicate URLs and job IDs are removed.
- `maxResults` (integer): Save 1–100 jobs or change events. Default 20. A full scan can cost time even with no filter matches. A result limit can make the run partial.
- `query` (string): All words must appear in title, company, locations or included description text. Empty means all jobs. Maximum 200 characters.
- `includeDescription` (boolean): Return safe HTML and plain text descriptions. Default true. False reduces output size and removes description text from keyword matching.
- `mode` (string): Snapshot returns current jobs. Monitor compares with previousSnapshot. Without a previous snapshot, monitor returns initial jobs.
- `previousSnapshot` (object): In monitor mode, paste the complete SNAPSHOT record from the previous run. It must have the same URLs and description setting, version 1 and at most 100 complete jobs. Omit for the first run. Never use a partial run as the baseline.

## 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

| Task | Settings | Key fields |
|---|---|---|
| Add public JazzHR jobs to a niche job board | `mode: "snapshot"` | `job_id`, `title`, `url`, `description_text` |
| Compare a company's hiring activity | `mode: "monitor"` with a previous full snapshot | `job_id`, `change_type`, `company` |
| Review roles by location or words | `query`, with descriptions enabled when needed | `locations`, `location`, `title` |

## Tips

- 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

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.

## Sample 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`

```python
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)
```

```bash
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}'
```

```python
# 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)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [Greenhouse Jobs Monitor & Scraper](https://cliqtomedia.com/actors/greenhouse-jobs-monitor-scraper/)
- [Lever Job Scraper](https://cliqtomedia.com/actors/lever-jobs-scraper/)
- [Wellfound Jobs Scraper](https://cliqtomedia.com/actors/wellfound-jobs-scraper/)
- [Ashby Jobs Scraper](https://cliqtomedia.com/actors/ashby-jobs-scraper/)
- [Recruitee Job Snapshots & Changes](https://cliqtomedia.com/actors/recruitee-jobs-monitor-scraper/)
- [SmartRecruiters Jobs Monitor & Scraper](https://cliqtomedia.com/actors/smartrecruiters-jobs-monitor-scraper/)
