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.
Job ID
job_id
Required
Stable ID of this role: '-'. Use it to deduplicate across runs.
Thread month
month
Required
Month of the HN 'Who is hiring?' thread this role was posted in (YYYY-MM).
HN thread ID
hn_thread_id
Required
Hacker News item ID of the monthly thread.
HN comment ID
hn_comment_id
Required
Hacker News item ID of the job post. Unique per post; several roles from one post share it.
HN post URL
hn_url
Required
Link to the original post. Check it before acting on salary or visa details.
Posted at
posted_at
Required
When the post was published (ISO 8601, UTC).
Company
company_name
Required
Hiring company name as written in the post.
Company website
company_url
Required
Company website, only if the URL appears in the post.
Company summary
company_summary
Required
One-sentence English summary of what the company does (AI-written, max ~25 words).
Careers page
careers_url
Required
Company-wide careers page, only if it appears in the post.
Contact emails
contact_emails
Required
Emails written in plain text in the post. Obfuscated addresses (name [at] domain) are not decoded. Use only to apply for the role.
[ "jobs@example.com"]Job title
title
Required
Role title as written in the post. One row per role.
Seniority
seniority
Required
Seniority level. 'unspecified' when the post doesn't say.
Job category
category
Required
Broad job family inferred from the title and duties.
Employment type
employment_type
Required
Contract type. 'unspecified' when the post doesn't say.
Work mode
work_mode
Required
remote = fully remote; hybrid = some office days; onsite = office only; remote_or_onsite = candidate can choose.
Office locations
locations
Required
Office cities/countries for this role, e.g. 'Berlin, Germany'. Empty for remote-only roles.
[ "San Francisco, CA"]Remote regions
remote_regions
Required
Where remote candidates may live, as written (e.g. 'US', 'EU', 'Worldwide'). A bare 'REMOTE' is NOT turned into 'Worldwide'.
[ "US", "Canada"]Time zone requirement
timezone_note
Required
Time zone constraint from the post, verbatim summary.
Salary min
salary_min
Required
Lower bound as a plain number (60k -> 60000). Null if no salary is given. Period is in salary_period.
Salary max
salary_max
Required
Upper bound as a plain number. Null if no salary or no upper bound is given.
Salary currency
salary_currency
Required
ISO 4217 currency code, e.g. USD, EUR, GBP.
Salary period
salary_period
Required
Pay period of salary_min/salary_max.
Salary is total comp
salary_is_total_comp
Required
True when the range is total compensation (e.g. marked 'TC'). Null if not stated.
Equity offered
has_equity
Required
True when the post mentions equity/stock options. Null if not stated.
Visa sponsorship
visa_sponsorship
Required
yes/no only when the post says so explicitly; otherwise 'unspecified'.
Citizenship / residency requirement
citizenship_required
Required
Short summary of any citizenship or residency requirement.
Security clearance required
security_clearance
Required
True when a security clearance is required. Null if not stated.
Tech stack
tech_stack
Required
Technologies mentioned for this role, with common aliases unified (e.g. 'Postgres' -> 'PostgreSQL', 'NextJS' -> 'Next.js', 'Rails' -> 'Ruby on Rails').
[ "Python", "PostgreSQL", "Kubernetes"]Apply URL
apply_url
Required
Role-specific application link, only if it appears in the post.
First seen month
first_seen_month
Required
Earliest month (YYYY-MM) in which the same company posted the same job title, within the months this Actor covers. Equal to month for new postings.
Is repost
is_repost
Required
True when the same company already posted this job title in an earlier month (first_seen_month < month). Titles are compared after normalizing case and punctuation.