# HireHeat: Company Hiring Signals & Job Postings by Domain (`cybermax/hiring-signals`) Actor

Find the companies that are growing right now. Company domains in, one hiring summary each: open roles, new roles in the last 7/30 days, roles by function, seniority and location. Auto-finds the job board on Greenhouse, Lever, Ashby, SmartRecruiters, Workable and Recruitee.

- **URL**: https://apify.com/cybermax/hiring-signals.md
- **Developed by:** [CyberMax](https://apify.com/cybermax) (community)
- **Categories:** Jobs, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## HireHeat: company hiring signals & job postings by domain

**Find the companies that are growing right now.** Paste company domains. HireHeat finds each
company's job board and tells you how many roles are open, how many are new in the last 7 and
30 days, and where the hiring is happening (function, seniority, location).

### Why HireHeat

- **Hiring is a buying signal.** Rank a lead list or a portfolio by new roles in the last 30 days,
  or find the accounts hiring for the exact role your product serves.
- **No job-board guesswork.** It reads the company's own site for Greenhouse, Lever, Ashby,
  SmartRecruiters, Workable or Recruitee links, and labels every match with how it was found and a
  confidence level.
- **Pay only for hits.** $0.01 per company whose board is found; companies with no board are free.
  Data comes from the vendors' official public job-board APIs, with no browser, proxy or login.

**Example summary:**

> Vercel: 89 open roles (strong hiring) on greenhouse, 24 posted in the last 30 days; mostly 43 engineering, 20 sales, 7 product.

### What you get

For each company, **one compact hiring summary**:

- **Open roles** right now, and how many were **posted in the last 7 and 30 days**
- Roles by **function** (engineering, sales, product, data, design, marketing, customer, people, finance, legal, operations) and by **seniority** (intern to executive)
- **Top departments and locations**, remote roles, median posting age
- The **10 newest postings** with links
- Optional: a count of roles whose title matches your keywords (`"data engineer"`, `"sales"`…)
- A **one-line summary** an LLM can quote directly

Most companies finish in 1–6 seconds.

### Who it's for

- **AI agents and MCP clients** answering "is acme.com hiring?", "how many engineers is Ramp hiring?" or "which of these accounts are growing?"
- **Sales and recruiting:** hiring is a buying signal. Rank a lead list by new roles in the last 30 days, or find accounts hiring for the role your product serves.
- **Investors and market research:** track hiring momentum across a portfolio or a set of competitors.

### Input

```json
{
  "companies": ["stripe.com", "ramp.com", "https://jobs.lever.co/palantir"],
  "titleKeywords": ["engineer"],
  "includeJobs": false
}
```

| Field | Default | What it does |
|---|---|---|
| `companies` | required | Domains, website URLs or job-board URLs. One summary each. |
| `titleKeywords` | `[]` | Adds `matchingJobs` to each summary and filters the job list. |
| `includeJobs` | `false` | Also returns one item per job (title, department, location, remote, posted date, salary where published, URL). |
| `maxJobsPerCompany` | `100` | Caps the job list per company. Summaries always count every job. |
| `discoverWebsite` | `true` | Look for ATS links on the homepage and careers pages. |
| `guessSlugs` | `true` | If the website shows no ATS link, try boards named after the domain. |

### Output (summary item, trimmed)

```json
{
  "type": "company",
  "domain": "vercel.com",
  "company": "Vercel",
  "found": true,
  "summary": "Vercel: 89 open roles (strong hiring) on greenhouse, 24 posted in the last 30 days; mostly 43 engineering, 20 sales, 7 product.",
  "boards": [
    {
      "ats": "greenhouse",
      "slug": "vercel",
      "boardUrl": "https://boards.greenhouse.io/vercel",
      "confidence": "high",
      "matchMethod": "linked-from-website",
      "evidence": "https://vercel.com/careers",
      "jobs": 89
    }
  ],
  "signals": {
    "openJobs": 89,
    "newLast7Days": 9,
    "newLast30Days": 24,
    "hiringLevel": "strong",
    "byFunction": {
      "engineering": 43,
      "sales": 20,
      "product": 7
    },
    "bySeniority": {
      "mid": 51,
      "manager": 24,
      "senior": 7
    },
    "topLocations": [
      {
        "name": "Hybrid - San Francisco",
        "count": 23
      }
    ],
    "remoteJobs": 11,
    "medianPostingAgeDays": 69,
    "newestJobs": [
      {
        "title": "Software Engineer, Workflows",
        "postedAt": "2026-09-22T23:18:13.000Z",
        "url": "https://job-boards.greenhouse.io/vercel/jobs/6206023004"
      }
    ]
  }
}
```

(A real record from 2026-09-23, trimmed to the first entries of each list. Numbers change daily.)

**Confidence levels:** `high`: the board is linked from the company's own site, or you passed the board URL. `medium`: the board was found by name and confirmed: its company name, its job links or its job descriptions match the company. `low`: the board slug equals the domain name, but nothing else confirms it. Filter on `confidence` if you need certainty.

### Pricing

Pay per result, no subscription:

- **$0.01 per company** whose job board was found (the summary). Companies with no board found are **free**.
- **$0.001 per job** only if you turn on `includeJobs`.

Checking 1,000 domains for summaries costs at most $10. Set a maximum charge per run in Apify and the Actor stops cleanly when it's reached.

### When NOT to use this

- Companies that hire only through **Workday, iCIMS, Taleo, SAP SuccessFactors** or their own in-house system: not covered yet, and they return "no public job board found".
- **LinkedIn / Indeed job search** across all employers: this Actor looks up known companies. It does not search the job market.
- **Historical hiring trends:** this is a snapshot of current openings. Run it on a schedule to build history.
- Workable rate-limits heavy traffic, so very large Workable-only lists can be slow.

### Use from an AI agent

The Actor is callable through Apify's MCP server (`https://mcp.apify.com`) as a tool. Pass `companies` and read `summary` from each item.

# Actor input Schema

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

Company domains (acme.com), website URLs, or job-board URLs (https://jobs.lever.co/acme, https://boards.greenhouse.io/acme). Each returns one summary record.

## `titleKeywords` (type: `array`):

Optional. Case-insensitive keywords, e.g. \["data engineer", "sales"]. Adds a matchingJobs count to each summary and filters the job list.

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

Adds one dataset item per open job (title, department, location, remote, posted date, salary where published, URL). Charged per job.

## `maxJobsPerCompany` (type: `integer`):

Caps the job list per company when 'Also return every job' is on. Summaries always count all jobs.

## `discoverWebsite` (type: `boolean`):

Look for ATS links on the homepage and common careers pages (high confidence).

## `guessSlugs` (type: `boolean`):

If the website shows no ATS link, try boards named after the domain and keep only those whose company name or job links match it (medium/low confidence, labelled).

## `timeoutSecs` (type: `integer`):

Timeout for each HTTP request.

## `maxConcurrency` (type: `integer`):

How many companies to check at the same time.

## Actor input object example

```json
{
  "companies": [
    "stripe.com",
    "ramp.com",
    "https://jobs.lever.co/palantir"
  ],
  "titleKeywords": [],
  "includeJobs": false,
  "maxJobsPerCompany": 100,
  "discoverWebsite": true,
  "guessSlugs": true,
  "timeoutSecs": 20,
  "maxConcurrency": 5
}
```

# Actor output Schema

## `results` (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": [
        "stripe.com",
        "ramp.com",
        "https://jobs.lever.co/palantir"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cybermax/hiring-signals").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": [
        "stripe.com",
        "ramp.com",
        "https://jobs.lever.co/palantir",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("cybermax/hiring-signals").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": [
    "stripe.com",
    "ramp.com",
    "https://jobs.lever.co/palantir"
  ]
}' |
apify call cybermax/hiring-signals --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cybermax/hiring-signals"
        }
    }
}
```

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/ZBXleKlerUbmuCgEK/builds/YAl5H9QxvAGQfRUjC/openapi.json
