# Hacker News Who is Hiring Company Leads (`scrapemint/hn-hiring-company-leads`) Actor

Parse the monthly Hacker News Who is Hiring thread into B2B leads: company, role, location, remote flag, salary, apply email, apply URL, and website. One lead per post. Keyless HN API.

- **URL**: https://apify.com/scrapemint/hn-hiring-company-leads.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Business, Lead generation
- **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/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

## Hacker News Who is Hiring Company Leads

Turn the monthly Hacker News "Who is hiring?" thread into a B2B lead list. Each post becomes one lead: company, role, location, remote flag, salary, **apply email**, apply URL, and company website.

Companies posting on HN are actively hiring engineers, which is a strong growth signal. The thread is public and read through the keyless HN API.

### Who buys this

- **Recruiting and sourcing SaaS** targeting companies that are hiring.
- **Developer-tool and dev-service vendors** selling to engineering teams.
- **Sales teams** using "actively hiring" as a buying signal.

### How it works

1. It finds the recent "Who is hiring?" threads from the HN `whoishiring` account.
2. It reads each top-level post and parses the company, role, location, remote flag, salary, apply email, and apply URL.
3. Each post is scored and tiered, then pushed as one lead.

### Output

One row per post:

```json
{
  "company": "Marker Learning",
  "role": "Lead Full-Stack Engineer",
  "location": "Remote (U.S. only)",
  "remote": true,
  "salary": "$160k-$190k",
  "applyEmail": "lucie@markerlearning.com",
  "applyUrl": "https://markerlearning.com/careers",
  "website": "https://markerlearning.com",
  "month": "June 2026",
  "hnCommentUrl": "https://news.ycombinator.com/item?id=...",
  "tier": "qualified_lead",
  "leadScore": 80
}
```

### Tiers and pricing

Pay per lead. The first 10 `qualified_lead` per run are free so you can validate output.

| Tier | Meaning | Price |
| --- | --- | --- |
| `listing` | Post with company/role but no apply email or URL | $0.01 |
| `lead` | An apply URL or company website | $0.02 |
| `qualified_lead` | A direct apply email | $0.05 |

The HN API is keyless, so runs are fast and cheap.

### Input

| Field | Default | Notes |
| --- | --- | --- |
| `months` | `1` | How many recent threads to include. |
| `keywords` | `[]` | Filter posts by text (rust, react, ml, senior, etc.). |
| `remoteOnly` | `false` | Keep only remote posts. |
| `requireEmail` | `false` | Only keep posts with an apply email. |
| `maxLeads` | `500` | Cap total leads per run. |

### Notes

- Posts are free text, so the company, role, and location are parsed from the conventional pipe-delimited first line; some posts give an apply URL or careers page instead of a direct email.
- Respect HN's terms and applicable outreach laws when contacting companies.

# Actor input Schema

## `months` (type: `integer`):

How many recent 'Who is hiring' threads to include (1 = latest month).

## `keywords` (type: `array`):

Filter posts by text match (e.g. rust, react, ml, senior, fintech). Empty keeps all.

## `remoteOnly` (type: `boolean`):

Keep only posts that mention remote.

## `requireEmail` (type: `boolean`):

Skip posts that do not include a contact email.

## `maxLeads` (type: `integer`):

Cap total leads per run.

## `concurrency` (type: `integer`):

Comments fetched in parallel.

## Actor input object example

```json
{
  "months": 1,
  "keywords": [],
  "remoteOnly": false,
  "requireEmail": false,
  "maxLeads": 500,
  "concurrency": 10
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/hn-hiring-company-leads").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/hn-hiring-company-leads").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 '{}' |
apify call scrapemint/hn-hiring-company-leads --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/gllLboywuj40f8AFf/builds/uupC0hyCQt5QkOMTl/openapi.json
