# Hacker News Monitor: Keywords, Domains, Show HN + Chinese (`dafei-data/hacker-news-monitor-chinese`) Actor

Monitor Hacker News for keywords, domains and Show HN posts via the official HN API. Only-new (incremental) mode, unofficial Chinese machine translation of titles (offline OPUS-MT), free bilingual Excel report. No usernames output.

- **URL**: https://apify.com/dafei-data/hacker-news-monitor-chinese.md
- **Developed by:** [dafei-data](https://apify.com/dafei-data) (community)
- **Categories:** News, Developer tools, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Hacker News Monitor: Keywords, Domains, Show HN + Chinese

> **Disclaimer / 免责声明:** Unofficial tool, not affiliated with or endorsed by Hacker News or Y Combinator. Data comes from the [official Hacker News API](https://github.com/HackerNews/API) (`hacker-news.firebaseio.com`). 本工具为非官方工具，与 Hacker News / Y Combinator 无关联。
>
> **Translation notice / 译文说明:** All Chinese text is an **unofficial machine translation** produced offline by the open-source [OPUS-MT](https://github.com/Helsinki-NLP/Tatoeba-Challenge) English→Chinese model (Helsinki-NLP, CC BY 4.0). It can be wrong — especially product names, slang and puns. Only the English original is authoritative. 所有中文均为**非官方机器翻译**（离线开源模型），可能有误，以英文原文为准。

Watch Hacker News for **your keywords, your domains and new Show HN launches** — and get **only the new posts** on every scheduled run, with a Chinese title + short Chinese summary and a free bilingual Excel report.

### Try it now

Open the **Input** tab, paste this and press **Start**:

```json
{
  "keywords": ["AI", "open source", "Rust"],
  "domains": ["github.com"],
  "feeds": ["top", "new", "show"],
  "maxItemsToScan": 100,
  "incremental": true,
  "stateStoreName": "my-hn-monitor"
}
```

Then add a **Schedule** (e.g. every hour). Thanks to `incremental`, each run returns only posts you have not received before.

### What you get (one row per post)

| Field | Example |
|---|---|
| `title` / `titleZh` | `Show HN: Make your AI agent think before it codes` / `让你的人工智能代理商在代码之前想清楚` |
| `summaryZh` | `【Show HN（作品展示）】…；来源 github.com；88 分 · 12 条评论；命中关键词：AI（非官方机器翻译）` |
| `kind` | `story`, `show`, `launch`, `ask`, `tell`, `job`, `poll` |
| `url`, `domain`, `hnUrl` | linked article + HN discussion |
| `score`, `comments`, `postedAt`, `ageHours` | points, comment count, UTC time |
| `matchedKeywords`, `matchedDomain`, `feeds` | why the post was selected and in which HN lists it appeared |

Plus **REPORT.xlsx** (English + Chinese headers, clickable links, About sheet) and **SUMMARY** in the run's key-value store. Excel is free.

### Sample output (real run)

![Sample output: Hacker News posts with Chinese machine-translated titles](https://api.apify.com/v2/key-value-stores/rZAPAMH2laMhiHfpr/records/hn-monitor-sample-output.png)

*Real cloud run on 2026-10-27 23:48 UTC: keywords AI / open source / Rust + domain github.com, 289 posts scanned from top/new/show, 78 matches (top 14 by points shown), 155 s. A second run 10 minutes later with the same `stateStoreName` skipped the 77 already-delivered posts and returned 1 new post.*

### Use cases

#### 1. Brand / product mention alerts

You run a developer tool. Put your product name in `keywords` and your site in `domains`, schedule hourly with `incremental: true`, and connect the run to Slack/e-mail via Apify integrations. You hear about every HN post linking to you — before the comment thread blows up.

#### 2. Show HN launch radar for indie hackers

Set `showHnOnly: true`, `feeds: ["show", "new"]`, `minScore: 20`. You get a daily list of Show HN launches that got traction — great for competitor research and "what are people building" newsletters.

#### 3. Technology trend digest in Chinese

For Chinese-speaking teams and creators: keywords like `LLM`, `Rust`, `Postgres`, `open source`, a daily schedule, and the Excel report gives you a bilingual digest ready to skim or share (always check the English original before quoting).

#### 4. Competitor and domain watch

Put competitor domains (`competitor.com`, `blog.competitor.com` is matched automatically) in `domains` to see when they hit the front page and how many points/comments they get.

### Input notes

- `keywords` match the title, case-insensitive; simple words match whole words (`go` ≠ `Google`). `keywords` and `domains` are OR-ed. Leave both empty to get everything from the selected feeds.
- `feeds`: official HN lists (`top` and `new` hold up to 500 ids, `show`/`ask`/`job` up to 200). `maxItemsToScan` = how many ids per feed.
- `incremental` + `stateStoreName`: ids already delivered are stored in a named key-value store; only posts actually delivered are remembered, so a post that later passes `minScore` is still delivered once.
- `translate: false` disables Chinese and makes runs faster.

### Pricing (pay per event)

- **$0.005** per run start
- **$0.0002** per post delivered (1,000 posts = $0.20)
- Excel report: free. Compute for the offline translation model runs inside the Actor — no third-party AI API is called.

### How the Chinese translation works (and its limits)

- Offline [OPUS-MT](https://github.com/Helsinki-NLP/Tatoeba-Challenge) model `eng-zho opus-2020-07-17` (Helsinki-NLP / Tatoeba Challenge, **CC BY 4.0**), converted with [CTranslate2](https://github.com/OpenNMT/CTranslate2). Runs on CPU inside the container; your titles never leave Apify.
- "Show HN:", "Ask HN:" etc. are translated as labels; short product names before `:` or `–` are kept in English.
- Limits: it is a small 2020 model — new product names, jargon, puns and slang are often mistranslated or dropped. Treat `titleZh` as a skim aid. `translationMethod` tells you which method was used for each row.

### Privacy & fair use

- Only `.json` endpoints of the official API are requested (as allowed by its robots.txt), at most 5 requests per second, with retries and back-off.
- **No usernames (`by`)**, comment trees, post bodies (`text`) or other personal fields are output; e-mail addresses in titles are masked. No per-user scraping is offered.

### Related tools by dafei-data

- [EU Safety Gate Product Matcher](https://apify.com/dafei-data/eu-safety-gate-product-matcher) — match your catalog against EU Safety Gate (RAPEX) dangerous-product alerts.
- [UK Product Recall Matcher](https://apify.com/dafei-data/uk-product-recall-matcher) — match ASINs, EANs and models against UK OPSS product safety reports and recalls.
- [Canada Recalls & Safety Alerts Product Matcher](https://apify.com/dafei-data/canada-recalls-product-matcher) — match products against Health Canada, CFIA and Transport Canada recalls.

### 中文说明（简要）

按关键词、域名、Show HN 监控 Hacker News，定时运行时只推送新帖；每条带中文标题与摘要（**非官方机器翻译**，离线开源模型，可能有误），附中英双语 Excel（免费）。不输出用户名等个人字段。

### Free plan limit & upgrade

- **Apify free plan:** up to **50 results per run** (the run finishes normally and the status message says when the limit was applied).
- **Paid Apify plan:** the full `maxItems`, same per-result price.
- Upgrade your Apify plan: https://apify.com/pricing

# Actor input Schema

## `keywords` (type: `array`):

Match in the story title, case-insensitive. Simple words match whole words only ("go" does not match "Google"). Keywords and domains are combined with OR. Leave empty together with domains to get every story.

## `domains` (type: `array`):

Linked site, e.g. github.com (subdomains included). Full URLs are accepted.

## `showHnOnly` (type: `boolean`):

Only output Show HN posts.

## `feeds` (type: `array`):

Official HN lists to scan.

## `types` (type: `array`):

Optional filter by post type (empty = all).

## `minScore` (type: `integer`):

Skip posts with fewer points (0 = no limit).

## `maxAgeHours` (type: `integer`):

Skip posts older than this. 0 = no limit.

## `maxItemsToScan` (type: `integer`):

First N ids of each feed (HN lists hold up to 500; 200 for show/ask/job).

## `maxItems` (type: `integer`):

Upper bound of results (charged per result). Free Apify plan: capped at 50 results per run; paid plans use the full value.

## `translate` (type: `boolean`):

Add unofficial Chinese machine translation of titles (offline open-source model, no external API).

## `incremental` (type: `boolean`):

Skip posts already output by earlier runs that used the same state store. Ideal for scheduled runs.

## `stateStoreName` (type: `string`):

Named key-value store holding already-seen ids. Use a different name per monitor.

## `excelReport` (type: `boolean`):

Save bilingual REPORT.xlsx to the key-value store.

## Actor input object example

```json
{
  "keywords": [
    "AI",
    "open source",
    "Rust"
  ],
  "domains": [
    "github.com"
  ],
  "showHnOnly": false,
  "feeds": [
    "top",
    "new",
    "show"
  ],
  "minScore": 0,
  "maxAgeHours": 0,
  "maxItemsToScan": 300,
  "maxItems": 200,
  "translate": true,
  "incremental": false,
  "stateStoreName": "hn-monitor-seen",
  "excelReport": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `overview` (type: `string`):

No description

## `report` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "AI",
        "open source",
        "Rust"
    ],
    "domains": [
        "github.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("dafei-data/hacker-news-monitor-chinese").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": [
        "AI",
        "open source",
        "Rust",
    ],
    "domains": ["github.com"],
}

# Run the Actor and wait for it to finish
run = client.actor("dafei-data/hacker-news-monitor-chinese").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "AI",
    "open source",
    "Rust"
  ],
  "domains": [
    "github.com"
  ]
}' |
apify call dafei-data/hacker-news-monitor-chinese --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dafei-data/hacker-news-monitor-chinese"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mcFhwTLs9F8XyU2rR/builds/dXL5oSIWPPtZti9ES/openapi.json
