HN Who is Hiring — AI Structured Jobs avatar

HN Who is Hiring — AI Structured Jobs

Pricing

from $1.80 / 1,000 job rows

Go to Apify Store
HN Who is Hiring — AI Structured Jobs

HN Who is Hiring — AI Structured Jobs

Hacker News monthly 'Who is hiring?' posts parsed by AI into clean job rows: salary range, remote regions, visa, tech stack, apply links.

Pricing

from $1.80 / 1,000 job rows

Rating

0.0

(0)

Developer

DH

DH

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Every month, hundreds of companies post jobs in Hacker News' "Ask HN: Who is hiring?" thread. The posts are free-form text, so salary, remote rules, visa policy and tech stack are hard to filter.

This Actor uses AI (Claude) to turn each post into clean, filterable job rows — one row per role, even when a single post lists ten roles.

What you get

FieldExample
company_name, company_summaryDiscord · "Communities and friend groups spend time together…"
title, seniority, categorySenior Software Engineer, Application Security · senior · security
work_mode, locations, remote_regions, timezone_noteonsite · San Francisco, CA
salary_min, salary_max, salary_currency, salary_period, salary_is_total_comp, has_equity280000 · 330000 · USD · year · true
visa_sponsorship, citizenship_required, security_clearanceunspecified · null · null
employment_typefull_time / part_time / contract / internship
tech_stackPython, TypeScript, React, Rust, Google Cloud Platform
apply_url, careers_url, company_url, contact_emailslinks copied from the post
hn_url, posted_at, monthlink back to the original comment
job_idstable ID per role (<comment id>-<index>) for deduplication
first_seen_month, is_repostwhether the same company posted the same title in an earlier month

Rules the AI follows:

  • No guessing. If the post doesn't say it, the field is null / unspecified. A plain "REMOTE" is not turned into "Worldwide".
  • Links are verified. Every URL is checked against the original text; links that don't appear in the post are removed.
  • Multi-role posts are split into one row per role, with shared salary/location copied only where the post applies it.

Why AI instead of regex

Regex parsers depend on the Company | Role | Location first line and return empty fields when a poster writes a paragraph instead. They also miss salary formats like 100-200k CHF or $280K–$330K TC. AI reads the whole post the way a person would.

Input

OptionDescription
monthslatest, all, or YYYY-MM (e.g. 2026-09). Several months allowed.
workModesremote, hybrid, onsite, remote_or_onsite. For remote jobs use both remote and remote_or_onsite.
techStackany of, exact name (case-insensitive), e.g. Python, PostgreSQL, Node.js. Add aliases when unsure (Rails, Ruby on Rails).
regionsany of, matched at word start in remote regions and office locations, e.g. EU, Berlin, Worldwide
keywordsany of, matched at word start in title, company, summary, tech stack (engineer matches Engineering)
requireVisaSponsorshiponly posts that explicitly offer sponsorship
excludeCitizenshipRequireddrop roles requiring citizenship or clearance
seniority, categories, employmentTypesany of the listed values, e.g. senior, data, full_time
minAnnualSalary, salaryCurrenciese.g. 150000 and USD. Hourly/monthly pay is annualized. Roles without a salary are dropped.
postedAfter2026-09-15 or relative like 7 days
excludeRepostshide roles the company already posted in an earlier month
onlyNewfor scheduled runs: return only rows you haven't received yet with the same filters
maxItemscap the number of rows (and your cost)

Example — remote Python roles open to the EU:

{
"months": ["latest"],
"workModes": ["remote"],
"techStack": ["Python"],
"regions": ["EU", "Europe", "Worldwide"]
}

Using it from an AI agent (MCP)

The Actor works well as a tool for AI agents via the Apify MCP server:

  • A minimal call: {"months": ["latest"], "workModes": ["remote", "remote_or_onsite"], "techStack": ["Python"], "maxItems": 50}
  • Every row has the same fields; missing information is null or "unspecified", never guessed.
  • If nothing matches, the run's status message says so and lists the months that have data.
  • Set maxItems (or a spending limit) to control cost — the run stops cleanly at your limit.

Coverage and freshness

  • Months covered: every monthly thread from October 2025 onward (12+ months), and each new month is added automatically.
  • Freshness: new threads are processed within a day of posting; late comments are added daily. Right after a new thread appears, latest keeps returning the previous month until the new one is ready.
  • Tech names are unified: Postgres → PostgreSQL, NextJS → Next.js, Rails → Ruby on Rails, so techStack filters don't miss aliases.

Daily job alerts (scheduled runs)

Schedule this Actor daily with onlyNew: true and your filters to get only fresh roles each day, e.g.:

{
"months": ["latest"],
"workModes": ["remote", "remote_or_onsite"],
"techStack": ["Python", "PostgreSQL"],
"excludeReposts": true,
"onlyNew": true
}

You pay only for new rows. Job IDs you already received are remembered in a key-value store named hn-who-is-hiring-state in your own account.

Pricing

$1.80 per 1,000 job rows. You pay only for rows that match your filters. Use maxItems to cap spend.

Runs are fast (a few seconds) because posts are parsed once in advance — your run only filters.

Output sample

{
"month": "2026-09",
"company_name": "Discord",
"title": "Senior Software Engineer, Application Security",
"seniority": "senior",
"category": "security",
"employment_type": "full_time",
"work_mode": "onsite",
"locations": ["San Francisco, CA"],
"remote_regions": [],
"salary_min": 280000,
"salary_max": 330000,
"salary_currency": "USD",
"salary_period": "year",
"salary_is_total_comp": true,
"visa_sponsorship": "unspecified",
"tech_stack": ["Python", "TypeScript", "React", "Rust", "JavaScript", "Google Cloud Platform"],
"apply_url": "https://job-boards.greenhouse.io/discord/jobs/8656854002",
"hn_url": "https://news.ycombinator.com/item?id=49525748"
}

Data source and responsible use

  • Data comes from the official Hacker News API (public posts in the monthly "Who is hiring?" thread).
  • contact_emails contains only addresses written out in plain text by the poster. Obfuscated addresses (e.g. name [at] domain [dot] com) are not decoded.
  • Use contact details only to apply for the posted roles. Don't use them for bulk marketing. You are responsible for complying with applicable laws such as GDPR.
  • AI extraction is very accurate but not perfect. Check the original post (hn_url) before acting on salary or visa details.

FAQ

Is "Who wants to be hired?" included? Not yet — this Actor covers the hiring thread only.

How are salaries normalized? 60-100k → 60000–100000. Currency is ISO 4217. TC sets salary_is_total_comp: true. Hourly rates use salary_period: "hour".

Found a wrong row? Open an issue with the hn_url and we'll fix the parser.