# Hiring Intent — Target Account Job Board Watcher (`0xgollum/hiring-intent`) Actor

Watches your target companies' Greenhouse and Lever job boards for fresh openings matching roles you care about, and surfaces them as hiring-intent leads: a company hiring for a specific role often means fresh budget for the tools that role needs.

- **URL**: https://apify.com/0xgollum/hiring-intent.md
- **Developed by:** [0xGollum](https://apify.com/0xgollum) (community)
- **Categories:** Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 hiring leads

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

## Hiring Intent — Target Account Job Board Watcher 🎯

**Watch your target companies' Greenhouse and Lever job boards for fresh openings — a company hiring for a specific role usually means fresh budget for the tools that role needs.**

Searches this actor ranks for: hiring intent leads, job posting buying signals, Greenhouse job board API, Lever job board API, account-based sales triggers, B2B lead generation from job postings, ATS monitoring.

### Why a fresh job posting is a buying signal

"Companies hiring for X are shopping for Y" is one of the oldest B2B sales triggers: a company hiring a DevOps engineer is a live prospect for DevOps tooling, a company hiring its first Sales Ops hire is shopping for a CRM/analytics stack, a company hiring a Security Engineer just got budget approved for security tooling. Sales and recruiting teams have used this signal for years — the problem is reliably tracking it without either paying for an expensive intent-data platform or burning time checking career pages by hand.

Thousands of companies — most tech startups included — host their open roles on **Greenhouse** or **Lever**, both of which expose a fully public, unauthenticated, versioned JSON API meant for exactly this kind of consumption. No login, no scraping fragility, no anti-bot wall.

### Who uses this and for what

| Persona | Use it to... |
|---|---|
| **SDR / sales teams running ABM** | Get pinged the week a target account opens a role that signals budget for your product |
| **Recruiters / staffing agencies** | Track which companies on a client list are actively scaling a given function |
| **VC / PE associates** | Watch portfolio companies' hiring pace as a proxy for growth stage |
| **Competitive intelligence** | Track a competitor's hiring focus (which teams are growing) without reading every job board by hand |
| **Vendors selling to a specific role** (DevOps tools, sales enablement, security) | Get a fresh, filtered feed of exactly the companies hiring that role right now |

### vs. the alternatives

| | Hiring Intent | Google-Jobs-based scrapers | Manually checking career pages |
|---|---|---|---|
| **Data source** | Direct public ATS APIs (Greenhouse/Lever) | Scraped search results, anti-bot-prone | Whatever's on the page |
| **Reliability** | Structured JSON, versioned public API | Breaks when Google changes result markup | Manual, doesn't scale |
| **Freshness filter** | ✅ Built in (days-since-posted) | Varies | None |
| **Setup** | Run it with a company list | Search-query based | Bookmark every career page |

### The honest tradeoff

This actor watches a **list of companies you already care about** — it does not discover new companies hiring for a role across the whole web (that would require scraping a search engine, which is exactly the fragile approach this actor avoids). If your workflow is account-based (you already have a target list — an ICP, a client roster, a competitor set), this is a much more reliable way to monitor it than search-based scraping. If you need open-ended "find me any company anywhere hiring a DevOps engineer," this isn't that tool.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| **companies** | array | *(required)* | Greenhouse/Lever board tokens to watch — usually the company name, lowercase, no spaces. Each is checked against both platforms automatically. |
| **role\_keywords** | array | (all) | Only keep postings whose title contains one of these (case-insensitive substring) |
| **max\_days\_since\_posted** | integer | 14 | Only keep postings first published within this many days |
| **max\_results** | integer | 100 | Cap on leads returned, freshest first |
| **request\_timeout\_secs** | integer | 30 | HTTP request timeout |

### Output example

```json
{
  "company": "Stripe",
  "ats_source": "greenhouse",
  "job_title": "Software Engineer - Infrastructure",
  "department": "Global Operations",
  "location": "Seattle, WA",
  "posted_date": "2026-07-31",
  "days_since_posted": 2.7,
  "url": "https://stripe.com/jobs/search?gh_jid=8099239"
}
```

### FAQ

**Do I need an API key?** No — both Greenhouse and Lever's public job board APIs are open, no auth.

**How do I find a company's board token?** It's usually right in their careers page URL: `boards.greenhouse.io/<token>` or `jobs.lever.co/<token>`.

**What if a company isn't on Greenhouse or Lever?** It's silently skipped — no error, just no results for that entry (many large enterprises use other ATS platforms like Workday, not covered here).

**Is this legal / against any ToS?** Yes it's fine — both APIs are public, documented-by-convention endpoints meant to power exactly this kind of external job listing consumption (that's literally why companies embed them on their own sites).

### Part of the 0xGollum signal suite

Stacks with [Funding Intent](https://apify.com/0xgollum/funding-intent) and the rest of the portfolio — each actor turns one public, noisy, or hard-to-monitor data source into a single actionable signal instead of a data dump.

# Actor input Schema

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

The board token/slug a company uses on Greenhouse (boards.greenhouse.io/<token>) or Lever (jobs.lever.co/<token>) - usually the company name, lowercase, no spaces. Each company is checked against both ATS platforms automatically; if a company isn't on either, it's silently skipped.

## `role_keywords` (type: `array`):

Only keep postings whose job title contains one of these (case-insensitive substring match, e.g. 'DevOps' also matches 'Senior DevOps Engineer'). Leave empty to keep every open role.

## `max_days_since_posted` (type: `integer`):

Only keep postings first published within this many days - a hiring signal is only 'hot' when it's fresh.

## `max_results` (type: `integer`):

Cap on the number of hiring leads returned per run, freshest posting first.

## `request_timeout_secs` (type: `integer`):

HTTP request timeout.

## Actor input object example

```json
{
  "companies": [
    "stripe",
    "leverdemo"
  ],
  "role_keywords": [],
  "max_days_since_posted": 14,
  "max_results": 100,
  "request_timeout_secs": 30
}
```

# 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",
        "leverdemo"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("0xgollum/hiring-intent").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",
        "leverdemo",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("0xgollum/hiring-intent").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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",
    "leverdemo"
  ]
}' |
apify call 0xgollum/hiring-intent --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=0xgollum/hiring-intent",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xW8MTetAtaZANPY8l/builds/FbdT6OaiMPOgZfJHc/openapi.json
