Hacker News Who Is Hiring Scraper - Structured Jobs
Pricing
from $2.00 / 1,000 job posts
Hacker News Who Is Hiring Scraper - Structured Jobs
Parse HN 'Who is hiring?' and the HN jobs board (YC ads with salary & equity) into structured jobs: tech stack, remote, seniority, company leads, trends, plus a live still-hiring check. $2 / 1,000 results.
Pricing
from $2.00 / 1,000 job posts
Rating
0.0
(0)
Developer
Bin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Turn the monthly Hacker News "Ask HN: Who is hiring?" threads into clean, structured job data: company, roles, locations, remote / onsite / hybrid, visa sponsorship, parsed salary (min, max, currency, period), tech stack, apply URL and more. Run it once for a dataset, or on a schedule with new-posts-only monitoring so you only get (and pay for) fresh posts. Also covers the HN jobs board (news.ycombinator.com/jobs): the "Acme (YC W24) Is Hiring" ads that YC startups post, with salary, equity %, visa, minimum experience, skills and company facts from the linked job page. Plus a hiring-market trends report (technology demand, salaries, remote share, month over month) for the whole thread or any segment such as "remote Rust jobs".
No login, no API key. It uses the public HN Algolia API, with the official HN Firebase API as a fallback.
Why this one
Most HN hiring scrapers give you the raw comment text. This Actor parses each post properly:
- 💰 Salary parsing:
$150k-$200k,€60-80k,$150 - 210K USD,£80,000-150,000,$120-160/hr,€6,000 - €7,000 per monthbecomesalaryMin,salaryMax,salaryCurrencyandsalaryPeriod(year / month / hour). Funding rounds ("$42M Series B") and 401(k) are ignored. - 🧰 Tech stack: matched against ~170 technologies (languages, frameworks, databases, cloud, ML, infra), e.g.
["TypeScript", "React", "PostgreSQL", "AWS", "Kubernetes"]. - 🌍 Workplace and location:
remote,onsiteandhybridflags plus normalizedlocations("San Francisco, CA","Europe","Toronto, ON"). - 🛂 Visa sponsorship:
true/false/null, and it reads phrases like "no visa sponsorship" or "we sponsor visas". - 🏢 Company, roles, employment type, YC batch, company URL and apply URL from the
Company | Role | Location | ...header plus fallbacks for free-form posts. - 🎯 Seniority, role category and company stage (new):
seniority(intern, junior, mid, senior, staff, principal, lead, founding, manager, director, executive),roleCategories(backend, frontend, full-stack, mobile, ML/AI, data, DevOps/SRE, security, embedded, design, product, sales, marketing, operations…),equityMentioned,benefits(health insurance, 401k, unlimited PTO, 4-day week, parental leave, learning budget…),fundingStage(pre-seed → Series F, public, bootstrapped),fundingRaised("$14M"),profitableandteamSize. Filter on all of them: e.g. senior ML jobs at Series A startups with equity. - 📈 Company hiring history: for every post, see how many of the last N monthly threads the company posted in (
companyMonthsHiring), its consecutive-monthcompanyHiringStreak,companyFirstSeenMonth, the list of months, andisNewToHnHiring. Spot companies that are hiring for the first time (often freshly funded) or hiring every month (fast growth or hard-to-fill roles). - 🏢 Company lead list (new): set
outputFormat: "companies"to get one row per hiring company instead of one per post: post count, months posted, all roles, locations, tech stack, yearly salary range, apply links and ahiringStatus(new/returning/consistent/recent). Ready for a CRM import. - 📊 Market trends report (new):
includeTrends(ortrendsOnly) adds onemarket-trendsrow per month: how many posts match your filters and their share of all posts, remote / visa / equity share, salary p25 / median / p75 per currency, the top 30 technologies with rank and share change vs the previous month, role categories, seniority, top locations and funding stages — plus amarket-trends-summaryrow with rising and falling technologies across the window. Rule-based, reproducible, no AI. - 🚀 HN jobs board / YC startup jobs (new):
includeJobBoard(orjobBoardOnly) adds the job ads YC companies post on news.ycombinator.com/jobs (about 40–60 a month, history back to 2010 withjobBoardDays). Each ad gets company,ycBatch, role, location, remote — and the Actor reads the linked job page: YC job pages give salary range, equity range (equityMinPct/equityMaxPct),visaRequirement,minExperience,skills, team size, founding year, one-liner and tags; Greenhouse, Ashby and Lever links are read through their public job APIs; other career pages through schema.org JobPosting data.jobListingOpentells you whether the job is still listed (removed jobs returnfalse). Same filters, same price. - ✅ Still hiring? Live open-role check (new): every post gets
atsProvider,atsBoardandatsBoardUrlwhen it links a job board (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee, Workday, Rippling, BambooHR, Breezy, Pinpoint, YC Work at a Startup…). Turn onverifyOpenRolesand the Actor also opens the company's careers page to find its job board when the post links only the website, then reads the board right now:stillHiring,liveOpenRoles,liveMatchingRoles(open roles in the same categories as the post),liveRemoteRoles,liveRolesSincePost,liveRolesLast30Daysand up to 15liveRoleTitles.onlyStillHiringdrops companies that have stopped hiring — ideal for older threads and lead lists. One request per company, no extra charge. - 🔔 Monitor mode: posts keep arriving all month. With
onlyNewPoststhe Actor remembers what it already returned, so a daily schedule gives you only new posts. You never pay twice for the same post. - 🧹 Meta comments are skipped ("there used to be more posts here…"), and you are not charged for them.
- 🔒 Privacy-safe: email addresses are never extracted and are masked in the text. The
applyByEmailflag tells you that the post has an email contact, which you can see in the linked HN post.
Parse quality measured on 6 recent months (1,550 job posts): company 97%, workplace (remote/onsite/hybrid) 92%, apply URL 89%, roles 81%, locations 80%, tech stack 71%, salary 32%. These figures count only posts that state the value: about a third of HN posts publish a salary range, and nearly all of those ranges are parsed. In the October 2026 thread (212 job posts): role category 86%, seniority 47% (the rest don't state a level), equity mentioned 23%, funding stage 13%, benefits 11% — again, only posts that say it.
Use cases
- Job seekers: get a daily feed of remote Rust/Go/TypeScript jobs above $150k in your inbox, Slack or Google Sheet.
- Recruiters and sales (lead generation): find which startups are hiring right now, what they pay and what stack they use.
- Market research and content: a ready-made monthly report of technology demand, salary ranges and remote share (whole market or your niche) for newsletters, blog posts, investor memos or hiring plans.
- Job boards and newsletters: import structured HN jobs automatically.
- YC startup jobs feed: every new "(YC …) Is Hiring" ad with salary and equity, filtered to your stack, delivered daily — with a flag when a listing closes.
- AI / RAG datasets: clean, labeled job data for analysis.
Input example
{"months": 1,"remoteOnly": true,"techs": ["Rust", "TypeScript"],"minSalary": 150000,"keywords": ["founding engineer"],"locations": ["US", "Europe"],"onlyNewPosts": true,"stateKey": "remote-rust-ts"}
months: number of latest monthly threads (default 1). Or usethreadUrlsfor specific threads, e.g.https://news.ycombinator.com/item?id=49922569.includeWhoWantsToBeHired/includeFreelancer: also parse candidate threads (see below).keywords,remoteOnly,locations,techs,minSalary: filters (ANY match within each list).onlyNewPosts+stateKey: monitoring. Use onestateKeyper schedule.seniority,roleCategories,companyStages,equityOnly: filter by level, role type, funding stage (series= any Series round,profitable) and equity.hiringHistoryMonths: add company hiring history over the last N months (e.g. 12). No extra charge.onlyNewCompanies: output only companies posting for the first time in the history window.outputFormat:"posts"(default, one row per job post) or"companies"(one row per company).maxItems: cap results (and cost).- Keywords match at the start of a word:
rustfinds "Rust" and "Rust-based" but not "trust".
Lead-generation example: startups hiring on HN for the first time
{"months": 1,"hiringHistoryMonths": 12,"onlyNewCompanies": true,"onlyNewPosts": true,"stateKey": "first-time-hirers"}
In October 2026 this returned ~90 of ~190 companies: about half of the companies in a typical month did not post in the previous 11 threads.
Senior / staff ML & AI jobs at funded startups with equity
{"months": 1,"seniority": ["senior", "staff", "principal"],"roleCategories": ["ml-ai"],"companyStages": ["seed", "series"],"equityOnly": true}
roleCategories alone (["ml-ai"], ["devops-infra"], ["design"]…) is the quickest way to cut a 200-post thread down to the jobs you care about without guessing keywords.
Company lead list: who is hiring Rust engineers, one row per company
{"months": 3,"techs": ["Rust"],"outputFormat": "companies","hiringHistoryMonths": 12}
Three months of threads (≈700 posts) → 46 companies, each with their roles, stack, salary range and hiring status. Example row:
{"recordType": "company","company": "SerpApi","companyUrl": "https://serpapi.com","postCount": 2,"monthsPosted": ["October 2026","September 2026"],"latestPostUrl": "https://news.ycombinator.com/item?id=49929200","roles": ["Junior to Senior Fullstack Engineer multiple positions","Customer Success Engineer","Hiring Coordinator"],"locations": ["Austin"],"remote": true,"techStack": ["Python","Rust","C#","Ruby","Ruby on Rails","PHP"],"salaryMinYearly": 150000,"salaryMaxYearly": 180000,"salaryCurrency": "USD","applyUrls": ["https://serpapi.com/careers"],"companyMonthsHiring": 7,"companyHiringStreak": 2,"hiringStatus": "recent"}
hiringStatus (needs hiringHistoryMonths): new = first post in the window, consistent = posted 3+ months in a row, returning = back after a gap, recent = posted in the previous month too (2-month streak). Salaries are converted to yearly (monthly × 12, hourly × 2,080) and use the currency of the most recent post.
YC startup jobs from the HN jobs board, with salary and equity
{"jobBoardOnly": true,"jobBoardDays": 30,"remoteOnly": true,"onlyNewPosts": true,"stateKey": "yc-remote"}
A real row (trimmed):
{"recordType": "jobs-board","company": "Gooseworks","ycBatch": "W23","roles": ["Founding Creative Engineer"],"locations": ["San Francisco, CA, US"],"remote": true,"salaryMin": 120000,"salaryMax": 200000,"salaryCurrency": "USD","equityRange": "0.50% - 1.50%","equityMinPct": 0.5,"equityMaxPct": 1.5,"minExperience": "Any (new grads ok)","visaRequirement": "Will sponsor","visaSponsorship": true,"seniority": ["founding"],"teamSize": 5,"companyOneLiner": "Self-Improving Ad Creative Engines","companyYearFounded": 2022,"jobListingOpen": true,"detailsSource": "ycombinator","applyUrl": "https://www.ycombinator.com/companies/gooseworks/jobs/rfgY8La-founding-creative-engineer","postUrl": "https://news.ycombinator.com/item?id=49553173","daysSincePosted": 33}
In a test over the last 90 days (73 ads), 51% had a salary range, 45% came with YC page details, and 12 listings were already closed. Combine with includeJobBoard: true (instead of jobBoardOnly) to get thread posts and board ads in one dataset; outputFormat: "companies" merges both per company.
Hiring-market trends: technology demand and salaries, month over month
{"months": 6,"trendsOnly": true}
Add filters to analyse a segment, e.g. "techs": ["Rust"] or "remoteOnly": true (filters define which posts are counted; allJobPosts is always the whole thread). One market-trends row from a real run (October 2026, all posts, shortened):
{"recordType": "market-trends","month": "October 2026","allJobPosts": 223,"matchingPosts": 223,"comparedToMonth": "September 2026","matchingPostsChangePct": -10.8,"remotePct": 53.8,"salaryDisclosedPct": 35.9,"salaryByCurrency": { "USD": { "posts": 66, "p25Yearly": 155000, "medianYearly": 186250, "p75Yearly": 219000 } },"topTechs": [{ "tech": "Python", "rank": 1, "posts": 53, "sharePct": 23.8, "prevRank": 1, "shareChangePts": -3.4 },{ "tech": "React", "rank": 2, "posts": 51, "sharePct": 22.9, "prevRank": 3, "shareChangePts": 4.1 },{ "tech": "TypeScript", "rank": 3, "posts": 49, "sharePct": 22, "prevRank": 2, "shareChangePts": 1.6 }],"roleCategories": [{ "name": "software-engineering", "posts": 92, "sharePct": 41.3 }, { "name": "ml-ai", "posts": 48, "sharePct": 21.5 }],"topLocations": [{ "name": "US", "posts": 46, "sharePct": 20.6 }, { "name": "New York", "posts": 16, "sharePct": 7.2 }],"fundingStages": [{ "name": "series-a", "posts": 9, "sharePct": 4 }]}
With 2+ months you also get a market-trends-summary row (older half of the window vs newer half): postsByMonth, change in posts, remote share and median USD salary, and risingTechs / fallingTechs / risingRoleCategories / fallingRoleCategories with share in each half. Example (Rust jobs, July–October 2026): rising Linux, AWS, C, Terraform; falling Distributed Systems, Go. The summary is also saved as the TRENDS record in the key-value store.
Companies still hiring Rust engineers (live check against their job boards)
{"months": 6,"keywords": ["rust"],"outputFormat": "companies","onlyStillHiring": true}
Real result (October 2026): 45 matching posts → 27 companies; companies whose job board shows no open role are dropped. One row per company, for example:
{"recordType": "company","company": "Rerun","postCount": 2,"latestPostMonth": "September 2026","atsProvider": "ashby","atsBoard": "rerun","atsBoardUrl": "https://jobs.ashbyhq.com/rerun","liveCheck": "ok","stillHiring": true,"liveOpenRoles": 7,"liveMatchingRoles": 5,"liveRoleTitles": ["Software Engineer (Rust) - Backend", "Software Engineer, Infrastructure"]}
In the October 2026 thread, 21% of posts link a job board directly; with verifyOpenRoles the careers pages of the others raise that to about 34% (75 boards checked, 74 found).
Output example
{"type": "job","company": "Sidekick Labs","roles": ["Senior SWE", "R&D Engineer", "Intelligence Engineer"],"locations": ["US"],"remote": true,"onsite": false,"hybrid": false,"visaSponsorship": null,"employmentType": ["full-time"],"salaryRaw": "$170k to $230k Base + Equity + Health","salaryMin": 170000,"salaryMax": 230000,"salaryCurrency": "USD","salaryPeriod": "year","techStack": ["Python", "Go", "Microservices"],"applyUrl": "https://sidekicklabs.com","companyUrl": "https://sidekicklabs.com","urls": ["https://sidekicklabs.com"],"ycBatch": null,"seniority": ["senior"],"roleCategories": ["software-engineering", "research"],"equityMentioned": true,"benefits": ["health insurance"],"fundingStage": null,"fundingRaised": null,"profitable": false,"teamSize": null,"applyByEmail": true,"headline": "Sidekick Labs | Senior SWE, R&D Engineer, Intelligence Engineer | REMOTE (US Timezones) | Full-time | $170k to $230k Base + Equity + Health","text": "Sidekick Labs | Senior SWE ... (full post as plain text, emails masked)","postId": 49922609,"postUrl": "https://news.ycombinator.com/item?id=49922609","postedAt": "2026-10-01T15:03:36.000Z","threadId": 49922569,"threadTitle": "Ask HN: Who is hiring? (October 2026)","threadMonth": "October 2026","threadType": "hiring","matchedKeywords": [],"companyMonthsHiring": 1,"companyHiringStreak": 1,"companyFirstSeenMonth": "October 2026","companyHiringMonths": ["October 2026"],"isNewToHnHiring": true,"historyWindowMonths": 12}
The companyHiring* fields appear only when hiringHistoryMonths (or onlyNewCompanies) is set. Companies are matched across months by normalized name and website domain.
A SUMMARY record in the key-value store lists threads processed, counts and parse-quality percentages for the run.
"Who wants to be hired?" and "Freelancer?" threads (optional)
Candidate posts (type: "candidate" / "freelancer") contain location, locations, remote, willingToRelocate, technologiesRaw, techStack and a summary text. All personal contact data is removed: emails, phone numbers, résumé, LinkedIn, GitHub and other links. Use postUrl to view the post on HN.
FAQ
How is "new to HN hiring" decided? The Actor parses every post in the previous monthly threads (up to 36 months) and matches companies by normalized name ("Acme, Inc." = "ACME") and website domain. If the company appears only in the current month within the window, isNewToHnHiring is true. Posts without a recognizable company get null.
Does the history cost extra? No. You pay only per returned post. History adds roughly 2–4 seconds of run time per month of history.
Can I parse an old month? Yes: put the thread URL in threadUrls. History is then computed relative to that month.
Can I get one row per company instead of per post? Yes: outputFormat: "companies". All filters apply to the posts first; matching posts of the same company (same normalized name or website) are merged. Each company row is billed as one result, so it is also cheaper than per-post output.
How are seniority and role category detected? From the parsed role titles (e.g. "Staff ML Engineer" → staff + ml-ai). Posts without role titles use the start of the headline. A post hiring for several roles gets several values. "Multiple roles" posts get no seniority. Rule-based, no AI, so results are instant and identical on every run.
How reliable is fundingStage? It is set only when the post itself says it ("we just closed our Series A", "bootstrapped and profitable"). If several rounds are mentioned, the latest one wins. Most posts don't mention their stage, so null means "not stated", not "unfunded".
How are the market trends calculated? From every job post of each monthly thread (also in monitor mode, so the numbers describe the whole month, not only new posts) after your filters. Shares are % of matching posts; salaries are converted to yearly and each post counts with the midpoint of its range; a currency needs 3+ posts. The previous month is parsed for the comparison automatically and is not charged. Location spellings are merged ("USA" = "US", "SF" = "San Francisco Bay Area").
What do the trend reports cost? $0.01 per trend row: a 6-month report is 7 rows ($0.07). With trendsOnly no job rows are output or charged.
What is the difference between the monthly thread and the HN jobs board? The monthly "Who is hiring?" thread is free for any company and has 200–500 posts. The jobs board (news.ycombinator.com/jobs) is reserved for Y Combinator companies and has 40–60 ads a month, usually linking to a structured job page. The thread is better for volume, the board for YC startups with salary and equity data.
Does reading the linked job pages cost extra? No, it is included in the per-result price. Turn off jobBoardDetails for a faster title-only run. Pages that block automated visits are skipped (never bypassed) and get a detailsError.
How does the live open-role check work? Each post's apply link is matched against known job-board URLs (including shortlinks like grnh.se). If the post links only the company website or careers page, that page is opened once and searched for an embedded or linked job board. The board's public job list is then read once per company (cached across posts): liveOpenRoles is the number of jobs listed right now, liveMatchingRoles how many of them fall in the post's role categories (backend, ML/AI, design…). liveCheck is ok, board-not-found, not-supported (a job board we can identify but not read, e.g. Personio, Teamtailor, Dover) or error. Posts without any job-board link have no live fields.
Does onlyStillHiring exclude posts that can't be checked? Yes: it outputs only posts with a confirmed open role (stillHiring: true). Use verifyOpenRoles without onlyStillHiring to keep every post and just add the live fields.
Can I get only remote jobs above a salary? Yes: remoteOnly: true and minSalary: 150000. Posts without a published yearly salary are excluded when minSalary is set.
Pricing
$2 per 1,000 job posts ($0.002 per result). No subscription. One month of "Who is hiring?" (~200–500 posts) costs about $0.40–$1. The live open-role check is included. Meta comments and posts already seen in monitor mode are free. HN jobs board ads cost the same as thread posts (job-page details included). Market trend rows (optional): $0.01 per row (one per month + one summary).
Scheduling alerts
- Set your filters, enable
onlyNewPostsand give the monitor astateKey. - Create a Schedule in Apify Console (e.g. daily at 9:00).
- Connect Slack, email, Google Sheets, a webhook, Zapier or Make to receive new matching jobs automatically.
Limits
Only public data is used: Hacker News, and for jobs board ads the public job page they link to (YC, Greenhouse, Ashby and Lever public APIs, or schema.org data on the page). The live open-role check reads public job-board lists only (titles, locations, dates). Hiring-manager and founder names are never output. Parsing is heuristic: posts that don't follow the usual Company | Role | Location | ... format may have some fields empty. The full text and postUrl are always included.
More tools from the same developer
- Company Jobs Scraper (ATS): every open job from Greenhouse, Lever, Ashby, Workable & more career sites, with new-job alerts.
- Workday Jobs Scraper: all jobs from any Workday career site, with salary and new-job monitoring.
- Telegram Channel Scraper & Keyword Monitor: posts, views and keyword alerts from public Telegram channels.