# Track new and closed jobs daily on Greenhouse and Lever

**Use case:** 

Track new and closed jobs on Greenhouse and Lever boards for your companies. Each run returns jobs not delivered before, marked new, plus a free closed row for each delivered job that left its board, with firstSeenAt or closedDetectedAt. maxItems caps new rows per run; the rest carry over. Run it on a daily Apify schedule for a hiring tracker. Set up for Stripe, Databricks, Spotify and Palantir.

## Input

```json
{
  "companies": [
    "greenhouse:stripe",
    "greenhouse:databricks",
    "lever:spotify",
    "lever:palantir"
  ],
  "preset": "none",
  "remote": "include",
  "postedAfter": "7d",
  "deltaMode": true,
  "includeDescription": false,
  "maxItems": 1000,
  "keywordsInDescription": false,
  "includeJobsWithoutDate": false,
  "maxDescriptionChars": 20000,
  "maxJobsPerCompany": 0,
  "outputSignalsOnly": false,
  "newRoleWindowDays": 7,
  "maxConcurrency": 5,
  "perHostDelayMs": 1000,
  "requestTimeoutSecs": 45,
  "maxRetries": 2
}
```

## Output

```json
{
  "changeType": {
    "label": "Change type",
    "format": "string"
  },
  "companyName": {
    "label": "Company name",
    "format": "string"
  },
  "title": {
    "label": "Title",
    "format": "string"
  },
  "function": {
    "label": "Function",
    "format": "string"
  },
  "locationText": {
    "label": "Location text",
    "format": "string"
  },
  "firstSeenAt": {
    "label": "First seen at",
    "format": "string"
  },
  "closedDetectedAt": {
    "label": "Closed detected at",
    "format": "string"
  },
  "jobUrl": {
    "label": "Job url",
    "format": "string"
  }
}
```

## How it works

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

The Greenhouse & Lever Job Postings API: New & Closed Actor is ready to run with the inputs already set for "Track new and closed jobs daily on Greenhouse and Lever". [Sign up or log in](https://console.apify.com/create-task-from-example/BOgxF1IsIJTjNEVZh) and you'll land in Apify Console with a copy of this exact task.

### 2. Start the "Track new and closed jobs daily on Greenhouse and Lever" task

The Greenhouse & Lever Job Postings API: New & Closed Actor will start running based on the input automatically. You can also change all the input fields, like companies, preset company list, and more, to match your specific use case.

### 3. Receive the "Track new and closed jobs daily on Greenhouse and Lever" 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 change type, company name, 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 "Track new and closed jobs daily on Greenhouse and Lever" task via API](https://apify.com/amyorkltd/ats-job-postings-api.md).

## FAQ

### How does the new and closed jobs tracker work?

Each run saves every open job on each board as a baseline and records which jobs it delivered. The next run returns matching jobs it has not delivered yet, marked new, up to maxItems, and a closed row for each delivered job that left the board.

### What does the first run return?

Run 1 has no baseline, so it saves one and delivers open jobs as new, capped at maxItems. Jobs over the cap wait and arrive as new on the runs after. With 2,035 open jobs, this list's count on 30 Oct 2026, run 1 leaves at least 1,035 for later runs.

### Do closed jobs cost anything?

No. In the new and closed jobs tracker, rows for jobs that closed since the last run are free, and so are company status rows. New job rows are charged at the normal per-job price.

### What if a board fails to load?

The new and closed jobs tracker keeps the old baseline for any board that fails to load, so a network error never shows up as mass closures. A board that suddenly shows 0 jobs needs a second run in a row to confirm.

### Can I change the company list later?

Yes. The new and closed jobs tracker keys its baseline to your companies and filters. Set stateKey, for example my-watchlist, to keep one baseline while you edit the list.

### How do I run it every day?

Add a daily Apify schedule to the tracker task. Each run returns up to maxItems new rows: fresh openings plus jobs the cap held back. If more than maxItems jobs open between runs, the extra wait for later runs. Closed rows are free and uncapped.

## About this Actor

This example demonstrates how to use [Greenhouse & Lever Job Postings API: New & Closed](https://apify.com/amyorkltd/ats-job-postings-api.md) with a specific input configuration. Visit the [Actor detail page](https://apify.com/amyorkltd/ats-job-postings-api.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/amyorkltd/ats-job-postings-api.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`).
