# ATS Source Health & Job Delta Feed (`logical_resourcefulnes/ats-source-health-job-delta`) Actor

Track job board changes from authorized Greenhouse, Lever and Ashby sources: source health, new and updated jobs, and guarded closure candidates.

- **URL**: https://apify.com/logical_resourcefulnes/ats-source-health-job-delta.md
- **Developed by:** [Revenue Pilot](https://apify.com/logical_resourcefulnes) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $25.00 / 1,000 complete board checks

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

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 examples already wired to this Actor's own input schema, see the [API](#api) section below.

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

# README

## ATS Source Health & Job Delta Feed

Track authorized Greenhouse, Lever and Ashby jobs with board health, new/updated jobs and guarded closure candidates.

### Quick start

Run with the default input for a working demonstration. The default uses authored fictional input. Demonstrations are owner tests, not customer revenue.

```json
{
  "monitorKey": "default"
}
```

For your own data, set rightsConfirmed to true only if you have permission to process it. Use the input descriptions for object fields and column mappings. URLs must be public HTTPS without credentials or secret query parameters. Website/feed requests respect robots.txt; APIs use their documented endpoints. No authenticated pages, anti-bot bypass or paid API is used.

### Results and saved comparisons

OUTPUT in the run key-value store is authoritative JSON (records, diagnostics, summary and billing checkpoints). RESULTS.csv is a formula-protected export; DIAGNOSTICS.json explains failures and incomplete input. The dataset includes evidence records and nonbillable source diagnostics. Operator-stop and below-budget diagnostics are available in OUTPUT and DIAGNOSTICS.json. A green Apify run alone does not prove a source was healthy: inspect OUTPUT.status and diagnostics. Reuse monitorKey for comparisons, change it for an independent baseline. Customer state is stored in the Actor-specific named store in the customer's Apify account, bounded to 5,000 state entries / 4 MiB. Avoid concurrent runs with the same monitorKey. Source records outside the retained window may appear as baseline again.

An absent job is closure_pending after one complete observation and closed_candidate after two. Incomplete or failed sources never advance absence counters. Lever EU is supported with region: eu. No applicant or job-description collection.

### Price

Actor start: $0.01, charged by Apify per GB of assigned memory with a one-event minimum. Complete board check: $0.025 for each successfully completed board check. Completed healthy checks include zero matches or no changes. Rejected/incomplete source units are not charged the custom event; the start event still applies. For standard runs, the Actor pricing page states whether platform usage during the run is included in event prices. After the run, interactions with the dataset can incur standard Apify platform usage charges. Check Apify pricing and your account usage for details. Use maxTotalChargeUsd in the run options to bound your expense. The Actor stops before starting a unit that does not fit the remaining event budget. Results are saved before a custom charge. Uncertain charge/dataset submissions are not retried, preventing duplicate submissions; inspect OUTPUT and chargedEventCounts when a response is uncertain.

### Limits and operation

Each run is bounded by the documented input limits and 180-second default timeout. Memory is capped at 256 MB. This is an evidence utility; review results before acting. Original INPUT and run outputs remain in your Apify account under its retention settings. Remove customer data according to your own policy; no external analytics or customer-data forwarding is implemented. Built-in price and compute assumptions are hypotheses until actual customer usage is observed.

Operator pause/recovery: build a version with PORTFOLIO_STOP=1 and switch latest to that build; a stopped run returns diagnostics and no custom outcome charge. For recovery, rebuild with PORTFOLIO_STOP=0, verify a private validation tag, then switch latest. Editing an environment variable alone does not modify an existing build.

### Sources and licenses

- https://docs.greenhouse.io/job-board.html
- https://github.com/lever/postings-api
- https://developers.ashbyhq.com/docs/public-job-posting-api

Dependencies: cheerio (MIT), csv-parse (MIT), fast-xml-parser (MIT), robots-parser (MIT).

### Actual owner cloud example

Validated 2026-10-26T02:17:32.367Z. Run O5HftNgGcFghpSjNX completed with 3 processing units and 6 records. This is an owner test, not a customer sale.

Input:

```json
{
  "monitorKey": "owner-validation-v1"
}
```

Selected actual output records (full JSON/CSV available in your run storage):

```json
[
  {
    "recordType": "board_health",
    "boardKey": "greenhouse:demo-greenhouse",
    "ats": "greenhouse",
    "sourceUrl": null,
    "inputKind": "customer_snapshot",
    "sourceHealthy": true,
    "complete": true,
    "activeJobs": 1,
    "baseline": true,
    "deltaRecords": 1,
    "observedAt": "2026-10-26T02:15:36.655Z",
    "billable": true
  },
  {
    "recordType": "job_delta",
    "boardKey": "greenhouse:demo-greenhouse",
    "id": "101",
    "title": "Platform Engineer",
    "location": "London",
    "department": null,
    "sourceUrl": "https://example.org/careers/101",
    "publishedAt": null,
    "updatedAt": null,
    "salaryRaw": null,
    "ats": "greenhouse",
    "changeType": "baseline",
    "observedAt": "2026-10-26T02:15:36.655Z"
  }
]
```

# Actor input Schema

## `monitorKey` (type: `string`):

Reuse this key for the same customer workflow. Use a new key for an independent baseline.

## `rightsConfirmed` (type: `boolean`):

Confirm authorization to process the supplied or requested data. Built-in fictional demonstrations and identified open-license presets are authorized.

## `boards` (type: `array`):

Up to 5 objects: id, ats (greenhouse/lever/ashby), mode (snapshot/live), complete and payload. Live mode requires board slug and authorization. Omit for fictional demo.

## `maxJobs` (type: `integer`):

Maximum jobs per board

## Actor input object example

```json
{
  "monitorKey": "default",
  "rightsConfirmed": false,
  "maxJobs": 500
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `csv` (type: `string`):

No description

## `diagnostics` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "monitorKey": "default"
};

// Run the Actor and wait for it to finish
const run = await client.actor("logical_resourcefulnes/ats-source-health-job-delta").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "monitorKey": "default" }

# Run the Actor and wait for it to finish
run = client.actor("logical_resourcefulnes/ats-source-health-job-delta").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "monitorKey": "default"
}' |
apify call logical_resourcefulnes/ats-source-health-job-delta --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logical_resourcefulnes/ats-source-health-job-delta"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/2K4Y34k9v6oZTJSyr/builds/V349DoePYehlaxVeJ/openapi.json
