Hacker News Monitor & Keyword Alerts avatar

Hacker News Monitor & Keyword Alerts

Under maintenance

Pricing

$0.50 / 1,000 item results

Go to Apify Store
Hacker News Monitor & Keyword Alerts

Hacker News Monitor & Keyword Alerts

Under maintenance

Monitor Hacker News stories, Ask/Show HN, jobs and comments via the official Firebase API and Algolia HN Search. Keyword alerts on title, text or comments, type filters, onlyNew mode. Unofficial; not affiliated with Y Combinator.

Pricing

$0.50 / 1,000 item results

Rating

0.0

(0)

Developer

Chee Chiaw Lim

Chee Chiaw Lim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

What it does

Monitor public Hacker News items for keywords. Search mode queries Algolia by date. Latest mode reads the official Firebase lists and items. Each run writes matching items to the dataset. Schedule repeated runs with onlyNew to collect alerts as new dataset rows. This Actor does not send notifications.

Input example

{
"mode": "search",
"keywords": ["apify", "web scraping"],
"matchIn": ["title", "text"],
"lookbackHours": 168,
"maxItems": 20,
"onlyNew": false
}

Input fields

FieldDefaultMeaning
modesearchsearch uses Algolia. latest uses Firebase.
keywords[]Match any keyword, case-insensitively. Empty means everything.
matchIn["title","text"]Select title, text, or comments. Comment text matches text or comments.
typesAll five typesSelect story, comment, ask, show, or job.
minPoints0Minimum points for non-comment items.
lookbackHours24Include items within this age window.
maxItems200Maximum matching items per run, from 1 to 10000.
onlyNewtrueSkip IDs saved after successful earlier pushes.
includeCommentsForStoriesfalseFetch up to 100 descendants per story. A story can match their text when matchIn includes comments.
stateStoreNamehacker-news-monitor-stateNamed key-value store holding the SEEN array of string IDs.

Output sample

{
"id": 1,
"type": "story",
"title": "Apify web scraping & tools",
"url": "https://example.org/1",
"text": "Public APIs",
"author": "alice",
"points": 42,
"numComments": 1,
"createdAt": "2026-10-20T00:00:00.000Z",
"hnUrl": "https://news.ycombinator.com/item?id=1",
"parentId": null,
"storyId": null,
"matchedKeywords": ["apify", "web scraping"],
"matchedIn": ["title"],
"source": "algolia",
"checkedAt": "2026-10-20T00:01:00.000Z"
}

Text has HTML removed and entities decoded. Missing text fields are empty strings. Missing counts are zero. parentId and storyId can be null. The default key-value store contains RUN_SUMMARY, including timestamps, counts, charging-limit status, and any run error.

How only new works

The Actor deduplicates IDs within each run. With onlyNew, it also skips IDs from earlier successful pushes. Updates to an existing item do not make its ID new. Use a separate state store for each independent monitor.

IDs are saved after a successful dataset push. Failed pushes remain eligible. Dataset writes and state writes are separate operations, so a crash between them can produce duplicates on retry. Avoid overlapping runs that share the same state store. Seen history grows with unique pushed IDs.

Pricing

The pay-per-event price is $0.0005 per item, or $0.50 per 1,000 items, with no run fee. The charging event is item. Skipped records have no item event charge. Local runs do not bill events. Store pricing must be configured separately as described in PUBLISHING.md.

Limits

  • Algolia's index can lag behind Hacker News. Search queries use Algolia's search semantics before local keyword filtering. Local matching can reject candidates but cannot recover candidates omitted by Algolia.
  • Firebase has no search API. Latest mode scans the current new, ask, show, and job lists. Comments come from those stories, so this is not a complete comment firehose.
  • Comment inspection is bounded to 100 descendants per story. Matches beyond that bound can be missed. Comment enrichment uses Firebase even for Algolia stories.
  • Keyword matching uses word boundaries around substring phrases. It is case-insensitive and does not perform stemming or semantic matching.
  • Requests start at least 100 milliseconds apart per host. API rate limits still apply. HTTP 429 and 5xx responses retry up to three times with backoff and Retry-After. Requests time out after 30 seconds.
  • Runs stop at maxItems, exhausted source pages or lists, or the remaining charging allowance. Algolia also limits accessible search pages.

Disclaimer

This Actor is unofficial and is not affiliated with or endorsed by Y Combinator, Hacker News, or Algolia. It uses public documented APIs only. It uses no logos and requires no login.

Local development

Node 20 or newer is required. Tests stub fetch and use local storage.

npm test
NODE_OPTIONS="--import=./test/offline-preload.js" npm start

The second command runs the real Actor with fixture responses and the sample input. Read storage/datasets/default/ and storage/key_value_stores/default/RUN_SUMMARY.json. Normal npm start uses the public APIs.