Hacker News Scraper — Submissions, Jobs, Users & Comments
Pricing
from $0.50 / 1,000 items
Hacker News Scraper — Submissions, Jobs, Users & Comments
Scrape Hacker News top/new/best/ask/show/job/user submissions. Returns title, author, score, comments, URL, and full text. No login required. Pay-per-result.
Pricing
from $0.50 / 1,000 items
Rating
0.0
(0)
Developer
Alessandro Santamaria
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Share
Hacker News Scraper
Extract stories, jobs, comments, and user activity from Hacker News using the official HN Firebase API. No login required. Pay-per-result.
Use with AI Agents (MCP)
https://mcp.apify.com?tools=santamaria-automations/ycombinator-scraper
Example prompts:
"Get the top 50 Hacker News stories right now."
"Get all job postings from user whoishiring with comments."
"Get the comments from HN thread 47601859."
What You Can Scrape
1. Story Feeds
Scrape any HN feed — the same tabs you see on the website.
storyType | HN Page | What It Returns |
|---|---|---|
top | /news | Front page stories (ranked by score) |
new | /newest | Most recent submissions |
best | /best | Highest-scored stories of all time |
ask | /ask | Ask HN discussions |
show | /show | Show HN project launches |
job | /jobs | YC startup job listings |
{ "storyType": "top", "maxResults": 30 }
2. Thread Comments
Extract top-level comments from any HN thread by its ID. Works for any story, Ask HN discussion, or monthly "Who is Hiring?" megathread.
{ "storyIds": [47601859], "includeComments": true, "maxCommentsPerStory": 100 }
Find the thread ID in the URL: news.ycombinator.com/item?id=47601859
You can pass multiple thread IDs to scrape several threads at once.
3. User Activity
Scrape all submissions and comments from any HN user. Covers both /submitted and /threads pages.
{ "usernames": ["whoishiring"], "maxResults": 50 }
Tip: To get "Who is Hiring?" job postings, scrape the whoishiring user's submissions — these are the monthly hiring megathreads. Then use their thread IDs with includeComments to get the individual job posts.
Input
| Field | Type | Description | Default |
|---|---|---|---|
storyType | string | Feed to scrape: top, new, best, ask, show, job | top |
storyIds | integer[] | Specific thread IDs to scrape | — |
usernames | string[] | HN usernames — scrape all their submissions & comments | — |
includeComments | boolean | Also extract comments for each story | false |
commentDepth | integer | Reply depth: 1 = top-level, 2 = + replies, 3 = + replies to replies. Max 5. | 1 |
maxResults | integer | Maximum stories/items to return | 100 |
maxCommentsPerStory | integer | Maximum comments (all depths combined) per story | 100 |
proxyConfiguration | object | Apify proxy settings | Auto |
Priority: usernames > storyIds > storyType. If multiple are set, the first takes precedence.
Output
Flat table with stories and comments in the same dataset. Filter by type to separate them.
| Field | Type | Description |
|---|---|---|
id | integer | HN item ID |
type | string | story or comment |
title | string | Story title, or first line of comment (company/role for job posts) |
author | string | HN username |
url | string | External link (stories only) |
text | string | Full text/HTML content |
score | integer | Points (stories only) |
num_comments | integer | Comment count (stories only) |
thread_id | integer | Parent story ID (comments only) |
thread_title | string | Parent story title (comments only) |
hn_url | string | Direct link to item on HN |
posted_at | string | ISO timestamp |
scraped_at | string | ISO timestamp |
Examples
Today's front page
{ "storyType": "top", "maxResults": 30 }
YC startup jobs
{ "storyType": "job", "maxResults": 50 }
"Who is Hiring?" job postings
{ "storyIds": [47601859], "includeComments": true, "maxCommentsPerStory": 500 }
Thread ID 47601859 = April 2026. Find the latest at whoishiring's submissions.
Ask HN discussions with answers
{ "storyType": "ask", "maxResults": 10, "includeComments": true, "maxCommentsPerStory": 20 }
All activity from a user
{ "usernames": ["pg"], "maxResults": 100 }
Multiple threads at once
{ "storyIds": [47601859, 47219668], "includeComments": true, "maxCommentsPerStory": 100 }
Pricing
| Event | Price | Description |
|---|---|---|
| Actor start | $0.001 | One-time fee per run |
| Item result | $0.50 / 1,000 | Per story or comment returned |
Examples:
- 30 front page stories → $0.016
- 500 "Who is Hiring" job posts → $0.251
- 10 stories + 200 comments → $0.106
No monthly fees. No minimum spend.
FAQ
Do I need an API key? No. Uses the public HN Firebase API — no authentication required.
What's the difference between /jobs and "Who is Hiring"?
storyType: "job" returns YC-backed startup listings from the /jobs page. "Who is Hiring?" threads are open community job posts from any company (400–1,000 per month). Use usernames: ["whoishiring"] to find the threads, then storyIds + includeComments to get the posts.
How fast is it? ~10 items/second. 50 stories + 50 comments each = ~800 items in 80 seconds.
Can I get nested/threaded comments?
Yes. Set commentDepth: 2 for direct replies, 3 for replies to replies, up to 5 levels deep. All comments are in a flat table with parent_id linking them — reconstruct the tree if needed.