Hacker News Search — momentum, not just all-time points
Pricing
$2.00 / 1,000 story scrapeds
Hacker News Search — momentum, not just all-time points
Search Hacker News stories, Show HN and Ask HN through the public search API. Each row carries points, comments, comments-per-point and — for stories still inside their 48-hour scoring window — points-per-hour, so a story climbing now does not lose to a 2020 post. Unofficial.
Pricing
$2.00 / 1,000 story scrapeds
Rating
0.0
(0)
Developer
Entrogix Works
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Search Hacker News through its public search API and get one row per story, with the fields you need to tell a post that is climbing right now from a post that was big in 2020.
What the point count hides
Search sorted by relevance puts old winners on top. The first result for rust is a 2020 story
with 1,582 points. That number is real, and it is also useless if what you want is
"what is getting traction today".
Every row therefore carries:
pointsPerHour— points divided by hours since posting, but only for stories still inside the 48-hour scoring window. Past that, HN scores stop moving, and dividing a frozen score by an ever-growing age produces a number that shrinks forever. Older rows getnull, not a small number. The run summary tells you how many rows were inside the window, so a single high-momentum row is never mistaken for the only story worth reading.commentsPerPoint— separates a link everyone upvoted and nobody discussed from a thread that argued for a day.domain— the publisher, already normalised (www.stripped), so you can group by source.
Fields
| Field | Notes |
|---|---|
storyId, hnUrl | The HN item and its discussion page |
kind | story, show_hn, ask_hn, poll or job |
title, url, domain | url and domain are null for Ask HN and text posts — that is "no external link", not a scrape failure |
author | The HN handle only. No profile, no name, no email |
points, comments, commentsPerPoint | As of the moment of the run |
pointsPerHour, ageHours | pointsPerHour is null beyond 48 hours (see above) |
createdAt | ISO 8601, UTC |
sameUrlSubmissions, bestPointsForUrl, isBestForUrl | See the limit below |
The one field with a hard limit
sameUrlSubmissions counts how many times the same link appears in this run's results,
after stripping tracking parameters (utm_*, ref, fbclid). It is not how many times the
link was ever submitted to Hacker News. Measured over 500 results per query on 2026-08-23,
8 rows matched for openai, 6 for chatgpt and 37 for hacker news, with a maximum of 4
submissions for any one link. Useful as a flag, not as a headline. If you need the true
resubmission history of one URL, search for that URL as the query.
Input
{"query": "rust","tags": "story","sort": "date","sinceDays": 7,"minPoints": 20,"maxItems": 200}
sort: "date"is what you want for monitoring.relevancefavours well known posts.sinceDaysmatters more than it looks. Without it, search reaches back to 2006.minPointsandminCommentsare applied by the API before results are fetched, so filtered-out stories are never charged for.tags: "front_page"returns the front page at the moment the run starts. It is a snapshot; run it on a schedule if you want a history.- Leave
queryempty only when you set atagsslice — an empty query with no tag is rejected rather than returning the whole site.
Output
One dataset row per story, plus a SEARCH_SUMMARY record with the total number of matches on
Hacker News (which is almost always far larger than what you asked for), how many rows fell inside
the scoring window, the median score, and the ten most frequent domains.
Pacing
Requests are serialised with a minimum interval. Please do not lower minIntervalMs.
The search API is offered free and without an API key; keeping the load light is the reason it
stays that way.
Unofficial. Not affiliated with Y Combinator or Hacker News.