Hacker News Scraper - Stories, Ask/Show HN, Comments avatar

Hacker News Scraper - Stories, Ask/Show HN, Comments

Pricing

$1.00 / 1,000 item returneds

Go to Apify Store
Hacker News Scraper - Stories, Ask/Show HN, Comments

Hacker News Scraper - Stories, Ask/Show HN, Comments

Hacker News hands its search off to Algolia. The box at the bottom of the page posts to hn.algolia.com, keyless and public, and that is what this reads. Stories, Show HN, Ask HN, comments or the live front page, with points, author, comment count and both links. $1.00 per 1,000.

Pricing

$1.00 / 1,000 item returneds

Rating

5.0

(1)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

2 days ago

Last modified

Share

Hacker News Scraper

Hacker News hands its search off to Algolia. The box at the foot of every HN page posts straight to hn.algolia.com, and HN's own API is a Firebase read of items by id plus a few curated id lists with no search endpoint anywhere in it. So hn.algolia.com/api/v1 is where HN search actually lives. It is keyless and public, and it is what this actor reads, handing back flat JSON. Stories, Show HN, Ask HN, comments, or the current front page. No API key, nothing to sign up for.

What you get back

One row per item:

{
"ok": true,
"objectId": "44159823",
"type": "story",
"title": "Show HN: I rewrote my build system in Zig",
"url": "https://example.com/post",
"author": "someuser",
"points": 412,
"numComments": 188,
"createdAt": "2026-06-01T12:34:56.000Z",
"text": "",
"hnUrl": "https://news.ycombinator.com/item?id=44159823"
}

type is one of story, show_hn, ask_hn, poll or comment. On a comment row, title and url are the parent story's, and text holds the comment body with the HTML stripped out. On a link story text is empty; on an Ask HN post it's the post body.

points and numComments are often null on comments — Algolia just doesn't carry them there. url is null for text posts that have no outbound link.

Input

{
"query": "rust async",
"tags": "story",
"sortBy": "date",
"minPoints": 50,
"maxItems": 200
}
FieldDefaultNotes
queryemptyKeywords. Leave it empty and you get the newest items for the chosen type. The Console prefills openai so the form runs out of the box; the API sends nothing unless you do.
tagsstorystory, show_hn, ask_hn, comment or front_page.
sortByrelevancerelevance or date (newest first).
minPointsScore floor. Applied as a numeric filter before you're billed for the row.
maxItems501 to 1,000 per run.
proxyConfigurationoffThe API is public and has no anti-bot. Leave it off unless you're running enough volume to hit an IP rate limit.

Limits

  • 1,000 items is the ceiling for a single run. Split a bigger job across queries or date ranges.
  • front_page ignores your query. It returns the roughly 30 items sitting on the HN front page right now, and nothing else.
  • minPoints really only bites on stories. Comments mostly don't carry a score.
  • Results are deduplicated on objectId within a run, so overlapping pages won't double-charge you.
  • If a run finds nothing, or the API errors out, you get one row with ok: false and an errorCode (NO_RESULTS, RATE_LIMITED, NETWORK) instead of an empty dataset. That row is not billed.

Billing

$1.00 per 1,000 items, which is $0.001 each, with no run-start fee. Diagnostic rows cost nothing, so a query that matches nothing costs nothing at all.

You pay per row, so maxItems is your budget dial. The default of 50 is deliberately small.

Delivery

Everything lands in the run's dataset: JSON, CSV, Excel, XML, through the API or the Console. If you'd rather it went into Notion, set notionConnector and notionParentId and each item is written as a page when the run finishes. Authorize the connector once under Settings → API & Integrations → MCP connectors. Leave both empty to skip it; the dataset is written either way.

A few things it's good for

Mention tracking, first. Put your product name in query, set tags to comment, sort by date, and run it every few hours. HN threads move fast and you'd rather not hear about yours from a customer.

show_hn sorted by date gives you every new launch. If you want the monthly "Who is hiring" listings, note that those are comments rather than the post itself, so query hiring with tags set to comment. And front_page on a schedule is a daily digest that needs no query at all.