HN Who is Hiring — AI Structured Jobs
Pricing
from $1.80 / 1,000 job rows
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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
| Field | Example |
|---|---|
company_name, company_summary | Discord · "Communities and friend groups spend time together…" |
title, seniority, category | Senior Software Engineer, Application Security · senior · security |
work_mode, locations, remote_regions, timezone_note | onsite · San Francisco, CA |
salary_min, salary_max, salary_currency, salary_period, salary_is_total_comp, has_equity | 280000 · 330000 · USD · year · true |
visa_sponsorship, citizenship_required, security_clearance | unspecified · null · null |
employment_type | full_time / part_time / contract / internship |
tech_stack | Python, TypeScript, React, Rust, Google Cloud Platform |
apply_url, careers_url, company_url, contact_emails | links copied from the post |
hn_url, posted_at, month | link back to the original comment |
job_id | stable ID per role (<comment id>-<index>) for deduplication |
first_seen_month, is_repost | whether 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
| Option | Description |
|---|---|
months | latest, all, or YYYY-MM (e.g. 2026-09). Several months allowed. |
workModes | remote, hybrid, onsite, remote_or_onsite. For remote jobs use both remote and remote_or_onsite. |
techStack | any of, exact name (case-insensitive), e.g. Python, PostgreSQL, Node.js. Add aliases when unsure (Rails, Ruby on Rails). |
regions | any of, matched at word start in remote regions and office locations, e.g. EU, Berlin, Worldwide |
keywords | any of, matched at word start in title, company, summary, tech stack (engineer matches Engineering) |
requireVisaSponsorship | only posts that explicitly offer sponsorship |
excludeCitizenshipRequired | drop roles requiring citizenship or clearance |
seniority, categories, employmentTypes | any of the listed values, e.g. senior, data, full_time |
minAnnualSalary, salaryCurrencies | e.g. 150000 and USD. Hourly/monthly pay is annualized. Roles without a salary are dropped. |
postedAfter | 2026-09-15 or relative like 7 days |
excludeReposts | hide roles the company already posted in an earlier month |
onlyNew | for scheduled runs: return only rows you haven't received yet with the same filters |
maxItems | cap 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
nullor"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,
latestkeeps returning the previous month until the new one is ready. - Tech names are unified:
Postgres→PostgreSQL,NextJS→Next.js,Rails→Ruby on Rails, sotechStackfilters 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_emailscontains 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.
Related
- HN Who wants to be hired — AI Structured Candidates: the candidates' side — developers looking for work, with seniority, years, location, remote/relocation, visa, tech stack, email and résumé.