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.
HN Who is Hiring — AI Structured Jobs
Pricing
from $1.80 / 1,000 job rows
Hacker News monthly 'Who is hiring?' posts parsed by AI into clean job rows: salary range, remote regions, visa, tech stack, apply links.
Which monthly threads to search: 'latest' (newest month with data), 'all' (every month covered, about the last 12), or YYYY-MM such as '2026-09'. More months = more rows and more cost. If a month has no data, the run log and status message list the months that do.
[ "latest"][ "2026-09", "2026-08"]Keep only these work modes. For remote jobs, include both 'remote' and 'remote_or_onsite' (roles where the candidate can choose). Empty = all modes, including 'unspecified'.
[ "remote", "remote_or_onsite"]Keep roles whose tech_stack contains at least one of these names. Exact name match, case-insensitive, so use canonical names: 'PostgreSQL' (not 'Postgres'), 'Node.js', 'Go', 'Kubernetes'. Add aliases when unsure, e.g. ['Rails', 'Ruby on Rails'] or ['GCP', 'Google Cloud Platform']. For looser text search use keywords.
[ "Python", "PostgreSQL"]Keep roles whose remote regions or office locations contain one of these terms (case-insensitive, matched at word start). Common remote regions: US, Worldwide, EU, Europe, Canada, UK, LATAM. Office locations are free text such as 'Berlin, Germany' or 'Austin, TX', so 'US' does not match 'Austin, TX' — add city or state names if you need onsite roles.
[ "EU", "Europe", "Worldwide"]Free-text filter over job title, company name, company summary and tech stack (case-insensitive, matched at word start: 'engineer' matches 'Engineering', 'ML' does not match 'HTML'). Use it for roles or domains, e.g. 'data engineer', 'infrastructure', 'fintech'.
[ "data engineer", "platform"]Keep only roles whose post explicitly offers visa sponsorship (visa_sponsorship = 'yes'). Most posts don't mention visas, so this removes about 98% of rows.
Drop roles that state a citizenship/residency requirement or require a security clearance. Useful for candidates outside the hiring country.
Keep only these seniority levels. Most posts don't state seniority ('unspecified' is about 40% of rows), so include 'unspecified' if you don't want to miss roles.
[ "senior", "staff", "unspecified"]Keep only these job families (inferred from the title and duties), e.g. 'data', 'ml_ai', 'devops_infra'.
[ "data", "ml_ai"]Keep only these contract types. Most roles are 'full_time'.
[ "full_time"]Keep roles whose stated salary (upper bound, or lower bound if no upper bound) is at least this much per year. Hourly and monthly pay are converted (x2080, x12). Roles without a stated salary (about 70%) are dropped. Combine with salaryCurrencies to avoid mixing currencies.
Keep roles paid in these ISO 4217 currencies, e.g. USD, EUR, GBP. Roles without a stated salary are dropped when this is set.
[ "USD"]Keep posts published on or after this date: '2026-09-15' or relative like '7 days'. Applies within the selected months, so use months ['all'] for ranges that cross a month.
Drop roles that the same company already posted with the same title in an earlier month (is_repost = true). Useful to see only genuinely new openings.
For scheduled runs: return only job rows you haven't received from this Actor with the same filters. Seen job IDs are kept in a key-value store named 'hn-who-is-hiring-state' in your account. With months 'latest', the last 2 months are checked so late posts are not missed.