# Monitor New Jobs Only

**Use case:** 

Return only jobs first observed since your last complete scan. The first run saves a baseline; unchanged runs return no rows. Pay $0.01 per fetched board ($0.006 on Business/Gold+) plus new-job events; no summary fee. Updated, closed and reopened jobs are excluded.

## Input

```json
{
  "companyNames": [
    "Duolingo"
  ],
  "companyDomains": [],
  "atsBoardUrls": [
    "https://boards.greenhouse.io/duolingo"
  ],
  "atsSlugs": [],
  "maxCompanies": 1,
  "maxJobsPerCompany": 1000,
  "maxOutputJobs": 0,
  "jobOutputMode": "new",
  "includeDescriptions": false,
  "titleKeywords": [],
  "excludeTitleKeywords": [],
  "locations": [],
  "remoteOnly": false,
  "watchMode": true,
  "watchlistId": "new-jobs-watchlist",
  "resetBaseline": false,
  "notificationFormat": "generic",
  "notifyOnlyChanges": true,
  "enableAiAnalysis": false,
  "llmProvider": "openrouter",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

## Output

```json
{
  "company": {
    "label": "Company",
    "format": "string"
  },
  "source_ats": {
    "label": "Source ATS",
    "format": "string"
  },
  "title": {
    "label": "Job Title",
    "format": "string"
  },
  "department": {
    "label": "Department",
    "format": "string"
  },
  "location": {
    "label": "Location",
    "format": "string"
  },
  "remote_status": {
    "label": "Remote Status",
    "format": "string"
  },
  "seniority": {
    "label": "Seniority",
    "format": "string"
  },
  "salary_min": {
    "label": "Salary Minimum",
    "format": "number"
  },
  "salary_max": {
    "label": "Salary Maximum",
    "format": "number"
  },
  "currency": {
    "label": "Currency",
    "format": "string"
  },
  "change_type": {
    "label": "Change Type",
    "format": "string"
  },
  "url": {
    "label": "Job URL",
    "format": "string"
  },
  "comparison_status": {
    "label": "Comparison Status",
    "format": "string"
  },
  "snapshot_complete": {
    "label": "Complete Snapshot",
    "format": "boolean"
  },
  "changed_fields": {
    "label": "Changed Fields",
    "format": "array"
  },
  "job_id": {
    "label": "Job ID",
    "format": "string"
  },
  "ats_slug": {
    "label": "ATS Slug",
    "format": "string"
  },
  "change_event_id": {
    "label": "Change Event ID",
    "format": "string"
  }
}
```

## How it works

### 1. Sign up on Apify or log in

The ATS Job Board Scraper & Alerts: Greenhouse, Lever, Ashby Actor is ready to run with the inputs already set for "Monitor New Jobs Only". [Sign up or log in](https://console.apify.com/create-task-from-example/DdyVPC7uZP9PeB1Zs) and you'll land in Apify Console with a copy of this exact task.

### 2. Start the "Monitor New Jobs Only" task

The ATS Job Board Scraper & Alerts: Greenhouse, Lever, Ashby Actor will start running based on the input automatically. You can also change all the input fields, like company names, company domains, and more, to match your specific use case.

### 3. Receive the "Monitor New Jobs Only" output

Monitor the progress in real time. You will be notified as soon as your dataset is complete and ready for review. Each result includes data such as company, source ats, job title, and more.

### 4. Integrate into your workflow

The final output is delivered in JSON, CSV, or Excel format, ready to be plugged into your workflow. You can also [run the "Monitor New Jobs Only" task via API](https://apify.com/harvestlab/ats-hiring-signal-monitor.md).

## FAQ

### Why does the first run return no jobs?

First complete run saves history and returns no jobs. Repeat with the same watchlistId to export additions. An unchanged board is also empty. Check Run Summary and Diagnostics to distinguish quiet runs from incomplete scans.

### What does an unchanged run cost?

Each fetched board costs $0.01 base or $0.006 Business/Gold+; new jobs add $2.50 or $1.50 per 1,000. No summary fee. Platform usage included; AI and proxy off. Partial fetched sources still incur the scan fee. See Pricing for all tiers.

### Does this include updated, closed or reopened jobs?

No. Only jobs first observed since a complete comparable baseline are exported. Updated, closed, reopened and unchanged jobs are excluded. First observed does not guarantee a recent source posting date.

### Does copying the task schedule it automatically?

No. Copy it, replace the example board, keep watchlistId stable and resetBaseline false. Verify baseline and repeat, then create an Apify Schedule. Avoid overlapping runs. No webhook is configured.

### Which job boards can I monitor?

Greenhouse, Lever, Ashby, SmartRecruiters and Workable public boards. Company names are labels, not global search. Workday, iCIMS and applicant data are unsupported. Salary and dates depend on the source.

## About this Actor

This example demonstrates how to use [ATS Job Board Scraper & Alerts: Greenhouse, Lever, Ashby](https://apify.com/harvestlab/ats-hiring-signal-monitor.md) with a specific input configuration. Visit the [Actor detail page](https://apify.com/harvestlab/ats-hiring-signal-monitor.md) to learn more, explore other use cases, and run it yourself.


## How to integrate an Actor?

This Task's input is already configured above. Use it as-is rather than inventing a new one.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For full API examples (JavaScript, Python, CLI, MCP, OpenAPI), see this Task's Actor page: https://apify.com/harvestlab/ats-hiring-signal-monitor.md

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).
