BYTETOOLS

Hacker News Search (Algolia) API

Free Algolia-powered Hacker News search API with no key: full-text search across all stories and comments with filtering by points, date and author. Tested.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-20

What is the Hacker News Search (Algolia) API?

The Hacker News Search API, powered by Algolia, is a free key-free API providing full-text search across every Hacker News story and comment, with filtering by points, comment count, date range and author.

The official Hacker News Firebase API can fetch items by id but cannot search at all. This Algolia-backed API fills that gap with genuine full-text search across the entire history of stories and comments.

The numeric filters are what make it powerful: `numericFilters=points>100,created_at_i>1700000000` narrows to high-scoring recent items in one request. That is how you build a useful topic monitor rather than a firehose.

Quick facts

Base URL
https://hn.algolia.com/api/v1
Authentication
No API key required.
Rate limit
10,000 requests per hour per IP.
Pricing
Free, provided by Algolia.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Hacker News Search (Algolia) API

Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.

1. Search Hacker News stories

GET https://hn.algolia.com/api/v1/search?query=typescript&hitsPerPage=1

curl
curl 'https://hn.algolia.com/api/v1/search?query=typescript&hitsPerPage=1'
JavaScript (fetch)
const res = await fetch("https://hn.algolia.com/api/v1/search?query=typescript&hitsPerPage=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://hn.algolia.com/api/v1/search?query=typescript&hitsPerPage=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "exhaustive": {
    "nbHits": false,
    "typo": false
  },
  "exhaustiveNbHits": false,
  "exhaustiveTypo": false,
  "hits": [
    {
      "_highlightResult": {
        "author": {
          "matchLevel": "none",
          "matchedWords": [],
          "value": "DanRosenwasser"
        },
        "title": {
          "fullyHighlighted": false,
          "matchLevel": "full",
          "matchedWords": [
            "typescript"
          ],
          "value": "A 10x Faster <em>TypeScript</em>"
        },
        "url": {
          "fullyHighlighted": false,
          "matchLevel": "full",
          "matchedWords": [
            "typescript"
          ],
          "value": "https://devblogs.microsoft.com/<em>typescript</em>/<em>typescript</em>-native-port/"
        }
      },
      "_tags": [
        "story",
        "author_DanRosenwasser",
        "story_43332830"
      ],
      "author": "DanRosenwasser",
      "children": [
        43332890,
        43332903,
        43332959,
        43332974,
        43332979,
        43333009,
        43333016,
        43333040,
        43333047,
        43333053,
        43333067,
        43333080,
        43333085,
        43333093,
        43333095,
        43333117,
        43333156,
        43333238,
        43333254,
        43333261,
        43333321,
        43333408,
        43333461,
        43333479,
        43333483,
        43333498,
        43333518,
        43333533,
        43333605,
        43333606,
        43333838,
        43333851,
        43333906,
        43333914,
        43333984,
        43334009,

Parameters

ParameterTypeRequiredDescription
querystringOptionalFull-text search term. typescript
tagsstringOptionalstory, comment, poll, show_hn, ask_hn or author_x. story
numericFiltersstringOptionalFilters such as points>100 or created_at_i>timestamp. points>100
hitsPerPageintegerOptionalResults per page, max 1000. 20
search_by_datepathOptionalUse /search_by_date for chronological rather than relevance order. search_by_date

Response fields

nbHitsinteger
Total matching items.
hits[].titlestring
Story title, or null for comments.
hits[].urlstring
Linked URL, null for text posts.
hits[].pointsinteger
Score at index time.
hits[].authorstring
Username of the submitter.
hits[].created_at_iinteger
Unix timestamp, used for numeric date filtering.
hits[].objectIDstring
HN item id — use it with the official Firebase API for live data.

What you can build with the Hacker News Search (Algolia) API

  • Monitor Hacker News for mentions of a product or topic
  • Build a search interface over HN history
  • Find the highest-scoring discussions on a subject
  • Analyse trends in what the HN community discusses

Common errors and how to fix them

Stale points and comment counts

Values are from index time, not live.

Fix: Use objectID with the official Firebase API when you need current scores.

Comments returned when you wanted stories

No tags filter was applied.

Fix: Pass tags=story to restrict results.

429

Exceeded 10,000 requests per hour.

Fix: Cache searches; results for historical queries do not change.

Hacker News Search (Algolia) API — frequently asked questions

Is the Hacker News search API free?

Yes, free with no API key, at 10,000 requests per hour. It is provided by Algolia.

Why can't I search with the official HN API?

The official Firebase API only fetches items by id — it has no search capability at all. This Algolia API exists specifically to provide search.

How do I find only high-scoring stories?

Use numericFilters, for example numericFilters=points>100, combined with tags=story. You can add date filters with created_at_i.

Are the point counts current?

No, they reflect the value when the item was indexed. For live scores, take the objectID and query the official Firebase API.

Tools that pair with this API

Hacker News Search (Algolia) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.