# Company Job Postings Monitor (Greenhouse & Lever) (`edgesignals/company-job-postings-monitor`) Actor

Tracks live job-posting counts for any company on Greenhouse or Lever, detects hiring surges and freezes between runs.

- **URL**: https://apify.com/edgesignals/company-job-postings-monitor.md
- **Developed by:** [Carter Siniavsky](https://apify.com/edgesignals) (community)
- **Categories:** AI, Jobs, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Company Job Postings Monitor (Greenhouse & Lever)

**Know when any company starts hiring like crazy — or quietly freezes — before
it shows up anywhere else.**

Hiring is a leading indicator. Peer-reviewed research (Management Science)
shows changes in a company's job-posting count predict revenue and earnings
growth ahead of announcements. Sales teams use hiring surges to time
outreach; recruiters use them to find warm markets; investors use freezes as
an early warning; competitive-intel teams track rivals' team-building in real
time.

This actor monitors the live job boards of any companies using **Greenhouse**
or **Lever** (thousands of tech companies, from startups to public
companies), counts open postings, and — because it remembers previous counts
between runs — flags **HIRING\_SURGE** and **HIRING\_FREEZE** signals
automatically.

### What you get

One dataset row per company per run:

```json
{
  "company": "Stripe",
  "ats": "greenhouse",
  "slug": "stripe",
  "open_postings": 312,
  "previous_postings": 198,
  "change_pct": 0.576,
  "signal": "HIRING_SURGE",
  "checked_at": "2026-08-15T04:30:00Z"
}
```

Optionally include the full list of open job titles per company.

### Use cases

- **Sales intelligence**: a company surging in engineering hires is buying
  tools — reach out this week, not next quarter
- **Investing research**: posting deltas front-run earnings; freezes precede
  layoffs and guidance cuts
- **Recruiting**: spot which companies are actually hiring in your vertical
  right now
- **Competitive intel**: watch competitors' headcount plans by department

### How to use

1. Find each company's board slug — it's in their careers URL:
   `boards.greenhouse.io/SLUG` or `jobs.lever.co/SLUG`
2. Add them to the input with `ats` and `slug`
3. **Schedule the actor weekly** — the surge/freeze signals come from
   comparing runs, so the value compounds with every run

First run sets the baseline; every run after that reports deltas. Data comes
from the companies' own public job-board APIs — stable JSON endpoints, no
scraping fragility.

# Actor input Schema

## `companies` (type: `array`):

One object per company: {"ats": "greenhouse" or "lever", "slug": "the board slug", "name": "optional display name"}. The slug is the company identifier in their careers-page URL (e.g. boards.greenhouse.io/SLUG or jobs.lever.co/SLUG).

## `includeTitles` (type: `boolean`):

Also output the list of open job titles per company (up to 200).

## `baselineStore` (type: `string`):

Named key-value store where previous counts are kept between runs (for surge/freeze detection). Use different names to track separate watchlists.

## Actor input object example

```json
{
  "companies": [
    {
      "ats": "greenhouse",
      "slug": "stripe",
      "name": "Stripe"
    },
    {
      "ats": "lever",
      "slug": "rocketlab",
      "name": "Rocket Lab"
    }
  ],
  "includeTitles": false,
  "baselineStore": "job-postings-baselines"
}
```

# Actor output Schema

## `signals` (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 = {
    "companies": [
        {
            "ats": "greenhouse",
            "slug": "stripe",
            "name": "Stripe"
        },
        {
            "ats": "lever",
            "slug": "rocketlab",
            "name": "Rocket Lab"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("edgesignals/company-job-postings-monitor").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 = { "companies": [
        {
            "ats": "greenhouse",
            "slug": "stripe",
            "name": "Stripe",
        },
        {
            "ats": "lever",
            "slug": "rocketlab",
            "name": "Rocket Lab",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("edgesignals/company-job-postings-monitor").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 '{
  "companies": [
    {
      "ats": "greenhouse",
      "slug": "stripe",
      "name": "Stripe"
    },
    {
      "ats": "lever",
      "slug": "rocketlab",
      "name": "Rocket Lab"
    }
  ]
}' |
apify call edgesignals/company-job-postings-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,edgesignals/company-job-postings-monitor"
        }
    }
}

```

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/bSr4j9FhiYz8gilPd/builds/1FwoMgoElQxSvk5bN/openapi.json
