# HN Who’s Hiring AI Infrastructure Extractor (`catalini82/hn-whos-hiring-ai-infra`) Actor

Extract Hacker News Who’s Hiring comments into structured AI-infrastructure job records with company, role, stack, salary, remote signal, confidence, and whyItMatches.

- **URL**: https://apify.com/catalini82/hn-whos-hiring-ai-infra.md
- **Developed by:** [Catalin Ionut Iliescu](https://apify.com/catalini82) (community)
- **Categories:** Jobs, AI, Developer tools
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## HN Who's Hiring AI Infrastructure Extractor

Extract AI Infrastructure, LLMOps, MLOps, GPU, Kubernetes, cloud, and platform engineering job signals from Hacker News Who's Hiring threads.

### What It Does

This Actor finds recent Hacker News "Who is hiring?" threads, fetches public comments from each thread, scores each job-like comment for AI infrastructure relevance, and outputs clean structured records.

It is built for deterministic, low-cost job intelligence. It does not use browser automation, proxies, paid APIs, local LLMs, or personal-data enrichment.

### Why this Actor

Generic HN scrapers return raw comments. This Actor focuses specifically on AI infrastructure, LLMOps, MLOps, GPU, Kubernetes, platform, SRE, cloud, and data-platform roles.

It extracts structured job records from unstructured HN Who's Hiring comments and adds company, role, location, remote type, seniority, salary, detected skills, role families, AI infrastructure score, confidence, and `whyItMatches`. The differentiation is stronger because HN Who's Hiring has fewer specialized AI-infra-focused Actors than broad job-board sources.

### Who It Is For

- Recruiters and sourcers tracking AI infrastructure hiring demand.
- Founders and operators mapping LLMOps, MLOps, GPU, Kubernetes, and platform engineering markets.
- Developers searching for AI infrastructure jobs on Hacker News.
- Job board builders enriching public hiring posts with structured metadata.
- Analysts comparing role families, locations, and infrastructure skills across hiring threads.

### Example Use Cases

- AI infrastructure job research.
- Recruiting and sourcing for platform, MLOps, LLMOps, GPU, and SRE roles.
- Market mapping for LLMOps and MLOps roles.
- Personal job search across recent Hacker News hiring posts.
- Job board enrichment with role families, skills, seniority, remote type, and source URLs.

### Input

```json
{
  "monthsBack": 6,
  "maxThreads": 6,
  "maxItems": 250,
  "minFitScore": 40,
  "includeGenericInfra": true,
  "includeDevOpsSre": true,
  "includeDataPlatform": true,
  "locations": [],
  "keywords": [
    "AI infrastructure",
    "LLMOps",
    "MLOps",
    "GPU",
    "CUDA",
    "Kubernetes",
    "inference",
    "model serving",
    "RAG",
    "vector database",
    "Ray",
    "vLLM",
    "Terraform",
    "platform engineer",
    "SRE"
  ]
}
````

#### Input Fields

- `monthsBack`: Number of recent months to search, from 1 to 36.
- `maxThreads`: Maximum monthly Who's Hiring threads to inspect, from 1 to 24.
- `maxItems`: Maximum output records, from 1 to 1000.
- `minFitScore`: Minimum AI infrastructure score, from 0 to 100.
- `includeGenericInfra`: Include broader platform, Kubernetes, Terraform, observability, distributed systems, and cloud infrastructure matches.
- `includeDevOpsSre`: Include DevOps and SRE signals.
- `includeDataPlatform`: Include data platform signals such as Spark, Kafka, Airflow, warehouses, and lakehouses.
- `locations`: Optional location filters. Leave empty to include all locations.
- `keywords`: Custom keywords to match alongside the built-in deterministic classifier.

### Output Example

```json
{
  "source": "hacker-news",
  "recordType": "who_is_hiring_job_comment",
  "threadId": "48747976",
  "threadTitle": "Ask HN: Who is hiring? (July 2026)",
  "threadUrl": "https://news.ycombinator.com/item?id=48747976",
  "commentId": "48750000",
  "hnUrl": "https://news.ycombinator.com/item?id=48750000",
  "author": "example_user",
  "createdAt": "2026-07-01T16:20:00Z",
  "text": "ExampleCo | Senior AI Infrastructure Engineer | Remote US | Kubernetes, GPU inference, model serving, Terraform | Salary: $170k - $230k",
  "company": "ExampleCo",
  "roleTitles": ["Senior AI Infrastructure Engineer"],
  "locationRaw": "Remote US",
  "remoteType": "remote",
  "seniority": "senior",
  "salaryRaw": "Salary: $170k - $230k",
  "detectedSkills": ["Kubernetes", "GPU", "Terraform"],
  "roleFamilies": ["ai_infrastructure", "gpu_platform", "kubernetes_platform", "cloud_infrastructure"],
  "aiInfraScore": 95,
  "confidence": "high",
  "whyItMatches": "Mentions AI infrastructure, GPU, model serving, Kubernetes, and Terraform.",
  "matchedKeywords": ["AI infrastructure", "GPU", "model serving", "Kubernetes", "Terraform"]
}
```

### Suggested Pricing

Suggested starting price: **$3 per 1,000 scored job records** using Apify Pay Per Event / default dataset item pricing.

### Source Freshness

This Actor depends on public Hacker News Who's Hiring threads and Hacker News Algolia availability. Output volume and freshness vary by month and by how many relevant hiring comments are present.

### Suggested public tasks

- Extract AI Infrastructure Jobs from HN Who's Hiring
- Find LLMOps and MLOps Jobs on Hacker News
- Track GPU, Kubernetes, and Platform Engineering Roles on HN

### Data Source And Disclaimer

This Actor is unofficial. It is not affiliated with Hacker News, Y Combinator, or Algolia.

It uses publicly accessible Hacker News search data from the public Algolia-powered Hacker News API.

### Limitations

- Classification is heuristic and deterministic, not LLM-based.
- Hacker News comments are unstructured, so company, role, salary, and location extraction are best-effort.
- Not all job posts provide salary or location.
- The Actor does not perform personal-data enrichment.
- The Actor is not affiliated with Hacker News, Y Combinator, or Algolia.

### Changelog

#### v0.1

- Initial release.

# Actor input Schema

## `monthsBack` (type: `integer`):

Only inspect Who's Hiring threads created within roughly this many months.

## `maxThreads` (type: `integer`):

Maximum number of monthly Who's Hiring threads to inspect.

## `maxItems` (type: `integer`):

Maximum number of extracted job records to output.

## `minFitScore` (type: `integer`):

Only output records with an AI infrastructure score at or above this threshold.

## `includeGenericInfra` (type: `boolean`):

Allow broader platform, Kubernetes, Terraform, observability, distributed systems, and cloud infrastructure matches.

## `includeDevOpsSre` (type: `boolean`):

Allow DevOps and SRE matches to contribute to scoring and role family output.

## `includeDataPlatform` (type: `boolean`):

Allow data platform terms such as Spark, Kafka, Airflow, warehouses, and lakehouses to contribute.

## `locations` (type: `array`):

Optional location filters. Leave empty to include all locations.

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

Custom keywords to match in addition to the built-in AI infrastructure classifier.

## Actor input object example

```json
{
  "monthsBack": 6,
  "maxThreads": 6,
  "maxItems": 250,
  "minFitScore": 40,
  "includeGenericInfra": true,
  "includeDevOpsSre": true,
  "includeDataPlatform": true,
  "locations": [],
  "keywords": [
    "AI infrastructure",
    "LLMOps",
    "MLOps",
    "GPU",
    "CUDA",
    "Kubernetes",
    "inference",
    "model serving",
    "RAG",
    "vector database",
    "Ray",
    "vLLM",
    "Terraform",
    "platform engineer",
    "SRE"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items with parsed company, role, location, salary, source comment URL, detected skills, and AI infrastructure match explanations.

# 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("catalini82/hn-whos-hiring-ai-infra").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("catalini82/hn-whos-hiring-ai-infra").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 catalini82/hn-whos-hiring-ai-infra --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "HN Who’s Hiring AI Infrastructure Extractor",
        "description": "Extract Hacker News Who’s Hiring comments into structured AI-infrastructure job records with company, role, stack, salary, remote signal, confidence, and whyItMatches.",
        "version": "0.1",
        "x-build-id": "i5aHOZZwLV0unu5zv"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/catalini82~hn-whos-hiring-ai-infra/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-catalini82-hn-whos-hiring-ai-infra",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/catalini82~hn-whos-hiring-ai-infra/runs": {
            "post": {
                "operationId": "runs-sync-catalini82-hn-whos-hiring-ai-infra",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/catalini82~hn-whos-hiring-ai-infra/run-sync": {
            "post": {
                "operationId": "run-sync-catalini82-hn-whos-hiring-ai-infra",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "monthsBack": {
                        "title": "Months Back",
                        "minimum": 1,
                        "maximum": 36,
                        "type": "integer",
                        "description": "Only inspect Who's Hiring threads created within roughly this many months.",
                        "default": 6
                    },
                    "maxThreads": {
                        "title": "Max Threads",
                        "minimum": 1,
                        "maximum": 24,
                        "type": "integer",
                        "description": "Maximum number of monthly Who's Hiring threads to inspect.",
                        "default": 6
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of extracted job records to output.",
                        "default": 250
                    },
                    "minFitScore": {
                        "title": "Minimum Fit Score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only output records with an AI infrastructure score at or above this threshold.",
                        "default": 40
                    },
                    "includeGenericInfra": {
                        "title": "Include Generic Infrastructure",
                        "type": "boolean",
                        "description": "Allow broader platform, Kubernetes, Terraform, observability, distributed systems, and cloud infrastructure matches.",
                        "default": true
                    },
                    "includeDevOpsSre": {
                        "title": "Include DevOps/SRE",
                        "type": "boolean",
                        "description": "Allow DevOps and SRE matches to contribute to scoring and role family output.",
                        "default": true
                    },
                    "includeDataPlatform": {
                        "title": "Include Data Platform",
                        "type": "boolean",
                        "description": "Allow data platform terms such as Spark, Kafka, Airflow, warehouses, and lakehouses to contribute.",
                        "default": true
                    },
                    "locations": {
                        "title": "Locations",
                        "maxItems": 20,
                        "type": "array",
                        "description": "Optional location filters. Leave empty to include all locations.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        },
                        "default": []
                    },
                    "keywords": {
                        "title": "Keywords",
                        "maxItems": 100,
                        "type": "array",
                        "description": "Custom keywords to match in addition to the built-in AI infrastructure classifier.",
                        "items": {
                            "type": "string",
                            "minLength": 1
                        },
                        "default": [
                            "AI infrastructure",
                            "LLMOps",
                            "MLOps",
                            "GPU",
                            "CUDA",
                            "Kubernetes",
                            "inference",
                            "model serving",
                            "RAG",
                            "vector database",
                            "Ray",
                            "vLLM",
                            "Terraform",
                            "platform engineer",
                            "SRE"
                        ]
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
