# Company Hiring Monitor - All Open Roles from Careers Pages (`centorprat/company-hiring-monitor`) Actor

Every open role straight from a company's careers board (Greenhouse, Lever, Ashby, Workable, Recruitee, SmartRecruiters): hiring momentum, departments, leadership hires, buying-intent signals, tech stack and salaries, plus new and closed roles since your last run. Keyless.

- **URL**: https://apify.com/centorprat/company-hiring-monitor.md
- **Developed by:** [Centor Prat](https://apify.com/centorprat) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $25.50 / 1,000 company checkeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Company Hiring Monitor — All Open Roles from Careers Pages

Job-board search (LinkedIn, Indeed) shows a slice of what a company is hiring for. A company's **own careers board** shows **every open role**, with exact publish dates, its own department names, full descriptions and often salary ranges. This Actor finds that board (**Workday**, Greenhouse, Lever, Ashby, Workable, Recruitee or SmartRecruiters) and turns it into hiring intelligence.

- **Monitor mode:** pick a history store and each run lists **new roles and closed roles since the last run**, net change by department, and **how long roles stayed open**.
- **Keyless**, no paid scraper. Batch runs **or an instant HTTP endpoint**.

### What you get per company

| | |
|---|---|
| **Coverage** | Which ATS, board name, how it was matched (ATS URL / careers page / name guess) |
| **Momentum** | Open roles, posted in the last 7 / 30 days, momentum label (`surging` · `active` · `steady` · `slow` · `hiring-pause-signals`) and intensity score |
| **Where the hiring is** | Department mix (normalised and the company's own departments), seniority mix, **leadership openings**, top locations, countries (new markets) and remote share |
| **Buying intent** | Signals mapped to what vendors sell (sales expansion, support scaling, security, data platform, AI, recruiting ramp, IPO readiness, Salesforce ecosystem…) with evidence. Description-only boilerplate is filtered out, and signals at big employers are judged by share of openings, not raw counts. |
| **Your keywords** | `intentKeywords` counts the open roles mentioning what *you* sell (titles + full descriptions) |
| **From full descriptions** | Tech stack by category, salary bands by department (US, UK and European formats: $, €, £, k-ranges, '70.000 €'), compliance signals (SOC 2, ISO 27001, HIPAA, SOX/IPO…) |
| **Changes (monitor)** | New roles, closed roles, net change, by department, average days roles stayed open |

Real runs: **NVIDIA** (Workday, found from nvidia.com): 2,000 open roles, the newest 400 all posted within 5 days (`surging`). **Stripe** had 732 open roles on Greenhouse, 266 posted in the last 30 days (`surging`). **Palantir** (Lever): 310 roles, 55% engineering, security hiring at an above-baseline share. **Notion** (Ashby) and **Figma** (Greenhouse) resolved straight from their careers pages.

### Input

| Field | Type | Description |
|---|---|---|
| `companies` | array | Careers or ATS board URLs (exact), website domains (scanned for the board), or names (board-name guess, flagged). |
| `intentKeywords` | array | What you sell into; matched in titles and descriptions. |
| `historyStore` | key-value store | Pick one to get new / closed roles since the last run. |
| `includeJobs` | boolean | Return every role too (up to 500 per company). |
| `datasetId` | dataset | …or read companies from a lead list. |
| `webhookUrl` | string | POST results here (pair with a schedule for hiring alerts). |

```json
{ "companies": ["stripe.com", "https://jobs.ashbyhq.com/notion", "https://boards.greenhouse.io/figma"], "intentKeywords": ["kubernetes"] }
```

### Instant HTTP endpoint (Standby)

```bash
curl "https://centorprat--company-hiring-monitor.apify.actor/?companies=stripe.com" -H "Authorization: Bearer <APIFY_TOKEN>"
```

### Use cases

- **Sales prospecting:** accounts expanding the team you sell to, or hiring for the tool you replace.
- **Hiring alerts:** schedule daily and get only the new roles at your target accounts (webhook to Slack / CRM).
- **Recruiting & staffing:** full open-role lists, how long roles stay open, salary bands.
- **Competitive / investor research:** headcount push by function, new markets, leadership hires, IPO-readiness roles.
- **AI agents:** a structured hiring brief per company in one call.

### Ready-made tasks

- [New Job Postings Alert for Target Accounts](https://apify.com/centorprat/company-hiring-monitor/examples/new-job-postings-alert-target-accounts)
- [Greenhouse, Lever & Ashby Jobs Export (All Open Roles)](https://apify.com/centorprat/company-hiring-monitor/examples/greenhouse-lever-ashby-jobs-export)
- [Hiring Intent from a Company's Careers Page](https://apify.com/centorprat/company-hiring-monitor/examples/company-hiring-intent-from-careers-page)

### For AI agents / MCP

```
https://mcp.apify.com/?tools=actors,docs,centorprat/company-hiring-monitor
```

Loads as `centorprat--company-hiring-monitor`. Claude Code:

```
claude mcp add apify -- npx -y @apify/actors-mcp-server --actors centorprat/company-hiring-monitor
```

### FAQ

**Why not just LinkedIn?** LinkedIn's public job search shows a capped subset. The ATS board is the company's complete, authoritative list. (For LinkedIn-side signals, see LinkedIn Hiring Signals below.)

**Which companies work?** Any company whose careers page uses **Workday** (most large enterprises), Greenhouse, Lever, Ashby, Workable, Recruitee or SmartRecruiters. iCIMS, Taleo, SuccessFactors and Oracle boards are detected and reported as `unsupported-ats` (no public job API). For Workday, the newest 400 roles are analysed (descriptions for the newest 40) and the board's full total is reported.

**Name-only input?** The name is resolved to the company's official domain, and its careers page is scanned for the board, giving an exact match (e.g. "Palantir" → palantir.com → Lever). Only if that fails does it fall back to a board-name guess, flagged in `matchNote`. Careers sites that build links with JavaScript may need the careers or ATS URL.

**Personal data?** None. Job postings and company data only.

**Cost?** One `company-checked` event per company. No API keys, no paid scraper.

### Related actors

- [LinkedIn Hiring Signals](https://apify.com/centorprat/linkedin-hiring-signals-intelligence)
- [Website Trust & Scam Check](https://apify.com/centorprat/website-trust-scam-check)

# Actor input Schema

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

Careers / ATS URLs give an exact match (e.g. "https://jobs.ashbyhq.com/notion", "https://boards.greenhouse.io/figma"); domains are scanned for their careers board ("stripe.com"); plain names fall back to a board-name guess.

## `intentKeywords` (type: `array`):

Products / tools / skills you sell into (e.g. "salesforce", "kubernetes", "soc 2"). Reports how many open roles mention each (titles + full descriptions).

## `historyStore` (type: `string`):

Pick (or create) a key-value store. Each run saves the job list and reports new roles, closed roles, net change by department and how long roles stayed open. Schedule it daily/weekly for hiring alerts.

## `includeJobs` (type: `boolean`):

Also return every open role (title, department, location, posted date, salary, URL) - up to 500 per company.

## `datasetId` (type: `string`):

Read companies from another dataset - uses 'careersUrl' / 'website' / 'domain' / 'companyName'.

## `maxCompanies` (type: `integer`):

Cap per run.

## `webhookUrl` (type: `string`):

If set, the briefs are POSTed here as JSON when the run completes (use with a schedule for hiring alerts).

## Actor input object example

```json
{
  "companies": [
    "figma.com"
  ],
  "includeJobs": false,
  "maxCompanies": 25
}
```

# Actor output Schema

## `companies` (type: `string`):

One brief per company: ATS + board, open roles, postings in the last 7/30 days, momentum + intensity, department mix (normalised and the company's own), seniority, leadership openings, locations/countries/remote share, buying-intent signals with evidence, keyword signals, tech stack, salary bands, compliance signals, changes since last run (new/closed roles, days open) and optionally every role.

# 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": [
        "figma.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("centorprat/company-hiring-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": ["figma.com"] }

# Run the Actor and wait for it to finish
run = client.actor("centorprat/company-hiring-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": [
    "figma.com"
  ]
}' |
apify call centorprat/company-hiring-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,centorprat/company-hiring-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/7M7i339ZXEth3v61C/builds/9VdTHQMzEkYau5fxc/openapi.json
