Hacker News Scraper: Who Is Hiring Jobs, Stories, Comments
Pricing
from $0.35 / 1,000 results
Hacker News Scraper: Who Is Hiring Jobs, Stories, Comments
Scrape Hacker News stories, full comment trees, user profiles and the monthly Who Is Hiring threads as HN jobs with company, role, location, remote, salary and visa fields. Search by keyword, domain or author with date and points filters, past the 1,000-result limit. Official HN API.
Hacker News Scraper: Stories, Comments, Who's Hiring, Search
Get Hacker News stories, full comment trees, user profiles, search results and the monthly "Who is hiring?" job posts as clean JSON, CSV or Excel. No login, no API key, no browser. Built on the official Hacker News API (Firebase) and the HN Search API by Algolia.
Use it for: tech job leads from Who is hiring, hiring-market research (remote share, salary ranges, stacks), brand and launch monitoring (who links to your domain), competitor and trend research, Show HN and Ask HN analysis, sentiment analysis of big discussions, and LLM / RAG datasets of HN threads.
What you get
| Mode | One row per | Main fields |
|---|---|---|
| Story lists (top, new, best, Ask HN, Show HN, jobs) | story (+ optional comments) | rank, title, URL, domain, points, comment count, author, date, text, HN link |
| Search (keyword, linked domain or URL, author, date range, min points, min comments) | story or comment | same as above, plus story title and parent for comments |
| Stories by ID or URL | story + every comment | depth, parentId, path (story/parent/.../comment), reply count, clean text, links |
| Who is hiring / Who wants to be hired / Freelancer | top-level post | company, role, location, remote (yes / no / hybrid), salary text, visa (yes / no), employment type, company URL, full text, hasEmail flag |
| User profiles | user | karma, join date, about text, links in about, number of submissions |
All text is converted from HN's HTML to plain text. Links are kept as a separate links list.
Features
- Search beyond 1,000 results. The HN Search API returns at most 1,000 hits per query. In date order the Actor walks back in time automatically, so a query like
rustfrom 2025-01-01 returns every match (tested: 2,500 results in 5 requests). - Complete comment trees. Every comment of a story, flattened in HN display order with
depth,parentIdandpath. Tested on a 1,051-comment story: 1,051 of 1,051 comments (100% of HN's own count). - Parsed Who is hiring posts. Best-effort extraction of company, role, location, remote, salary, visa and employment type from the usual
Company | Role | Location | Remote | Salaryfirst line. Filter by keywords, remote and location. "Who wants to be hired" posts give location, remote, relocation, technologies and resume link. - Domain and URL monitoring. Find every HN story linking to
yourcompany.comorgithub.com/your-org. Fuzzy matches are removed, only real links are returned. - New items only mode for daily or hourly schedules: the Actor remembers what it already returned per list, search, story or thread and outputs only new items. Runs with nothing new succeed and cost almost nothing.
- Polite and fast fail. Official APIs only, at most 10 parallel requests to the HN API and at most 2.5 requests per second to HN Search. Rate limits and server errors are retried with backoff. Invalid input stops the run within seconds with a clear message and no charge.
Input examples
Front page right now (default)
{ "mode": "lists", "lists": ["top"], "maxItems": 30 }
This month's Who is hiring, remote jobs that mention Python
{"mode": "hiring","hiringThreads": ["who_is_hiring"],"hiringMonths": ["latest"],"hiringKeywords": ["python"],"hiringRemote": "remote","maxItems": 0}
Last 3 months of Who is hiring in Europe
{ "mode": "hiring", "hiringMonths": ["last 3"], "hiringLocations": ["Europe", "London", "Berlin", "Amsterdam"], "maxItems": 0 }
Every story about Rust since 2025 with at least 50 points
{"mode": "search","searchQueries": ["rust"],"searchType": "story","searchSort": "date","dateFrom": "2025-01-01","minPoints": 50,"maxItems": 0}
Who links to my site (daily monitor)
{"mode": "search","searchDomains": ["github.com/anthropics"],"searchType": "story","onlyNewItems": true,"monitorName": "anthropic-github-links","maxItems": 0}
Comments mentioning my product in the last 7 days
{ "mode": "search", "searchQueries": ["\"apify\""], "searchType": "comment", "dateFrom": "7 days", "maxItems": 0 }
A whole discussion with every comment
{ "mode": "items", "storyIds": ["https://news.ycombinator.com/item?id=8863"] }
User profiles
{ "mode": "users", "users": ["pg", "dang"] }
Output example
Who is hiring row (type: "job"):
{"type": "job","threadType": "who_is_hiring","threadTitle": "Ask HN: Who is hiring? (October 2026)","threadMonth": "2026-10","id": 49930681,"author": "PolinaLu","firstLine": "Modash.io | Senior Product Engineer | Remote (Europe) | Full-time | €75k–110k | https://modash.io","company": "Modash.io","role": "Senior Product Engineer","location": "Remote (Europe)","remote": "yes","salary": "€75k–110k","visa": null,"employmentType": "full-time","url": "https://modash.io","text": "Modash.io | Senior Product Engineer | ...","links": ["https://modash.io", "https://modash.io/engineering", "https://apply.workable.com/modash/j/C1507B65C3"],"hasEmail": false,"replyCount": 0,"createdAt": "2026-10-02T07:13:32.000Z","hnUrl": "https://news.ycombinator.com/item?id=49930681"}
Comment row (type: "comment"):
{"type": "comment","id": 47940125,"storyId": 47939579,"storyTitle": "Ghostty is leaving GitHub","parentId": 47939809,"depth": 2,"path": "47939579/47939809/47940125","author": "idan","text": "Hi there! Longtime fan and hubber here. ...","links": [],"hasEmail": false,"replyCount": 38,"createdAt": "2026-04-28T20:21:02.000Z","hnUrl": "https://news.ycombinator.com/item?id=47940125"}
A RUN_SUMMARY record in the default key-value store lists, per list, query, story and thread: rows saved, total matches, comment completeness versus HN's count, non-posts skipped, rows filtered out and errors.
Email addresses
Email addresses in posts and profiles are replaced with [email hidden] and only a hasEmail: true/false flag is returned. This Actor is not a tool for collecting personal email addresses. Use the hnUrl to read the original post and contact people the way they asked to be contacted.
Pricing
Pay per result: $0.50 per 1,000 results plus a tiny Actor start fee. You pay for each row saved to the dataset, nothing for requests that return nothing. Runs that find nothing new in new-only mode cost almost nothing.
Tips
- Who is hiring fields are best effort. Posts are free text.
company,role,location,remote,salaryandvisaare filled when the post follows the usual pattern.textalways has the full post. - Relevance vs date order. Relevance is limited to 1,000 results by the search API. Use date order (default) for anything bigger.
- Points and comment counts in search results come from the search index and can lag a few minutes. Lists and comment trees read live data from the official API.
- Deleted and flagged (dead) comments are not returned. Their visible replies are, with the original
parentId. - Usernames are case-sensitive.
Use with AI agents (MCP)
Call this Actor from Claude, ChatGPT or any MCP client through the Apify MCP server (https://mcp.apify.com), for example: "Get this month's remote Who is hiring jobs that mention Rust".
FAQ
Is it legal to scrape Hacker News? This Actor does not scrape the website. It reads the official Hacker News API that Y Combinator publishes for developers, and the public HN Search API. You are responsible for how you use the data, including the privacy of the people who wrote it.
Do I need a Hacker News account or API key? No.
How fresh is the data? Lists and comment trees are live. Search results are usually seconds to minutes behind.
Can I get all comments of a user? Yes: mode search, searchAuthor set to the username, searchType comment, maxItems 0.
This Actor is not affiliated with Y Combinator, Hacker News or Algolia.