China A-Share Announcement Signal Monitor - CNINFO Alerts
Pricing
from $20.00 / 1,000 company monitoreds
China A-Share Announcement Signal Monitor - CNINFO Alerts
Monitor official A-share company announcements from CNINFO (Shanghai/Shenzhen/Beijing) and get instant classified alerts for insider selling, dividends, earnings, M&A, buybacks and more. Deterministic Chinese keyword engine, smart baseline diffing, Slack/Feishu/DingTalk/email delivery.
Pricing
from $20.00 / 1,000 company monitoreds
Rating
0.0
(0)
Developer
Yong Yu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
China A-Share Announcement Signal Monitor — CNINFO Alerts
Get a structured alert the moment a Chinese listed company files an official disclosure that matters — insider share-reduction plans, exchange inquiry letters, trading halts, earnings warnings, restructurings, investigations, dividend schedules and more. This Actor monitors the official disclosure source CNINFO (cninfo.com.cn) for the Shanghai, Shenzhen and Beijing stock exchanges, diffs new announcements by ID, and classifies each one into standardized research/risk events delivered to Slack, Feishu/Lark, DingTalk, a generic webhook, or email.
What problem does this solve?
Chinese listed companies publish every material disclosure on CNINFO, the official disclosure platform. The raw feed is high-volume and Chinese-only: hundreds of filings land each day across thousands of companies, and the important ones (a controlling shareholder reducing, a regulator asking questions, a halt before a restructuring) are easy to miss.
This Actor turns that feed into a clean, machine-readable event pipeline:
- You give it a list of 6-digit stock codes (or names / pinyin).
- It resolves each company, fetches its latest official announcements, and only pushes the ones it has not seen before.
- Every new announcement is classified into one or more of 20 standardized event types with a severity level, plus a direct link to the official PDF.
No browser, no proxies, no CAPTCHAs — it uses CNINFO's public JSON endpoints, so runs are fast, cheap and low-maintenance.
For research and risk monitoring only. This Actor provides data and event alerts; it does not provide investment advice or buy/sell recommendations.
Example use cases
- Risk monitoring — catch insider reductions, regulatory inquiry letters, trading halts, investigations and litigation across a watchlist instantly.
- Investment research — structured timelines of earnings forecasts, reports, dividends, buybacks, M&A and placements for covered companies.
- Corporate / IR tracking — monitor peers, suppliers, holdings or counterparties for material events.
- Data pipelines — push normalized announcement events into your own warehouse, spreadsheet or workflow via a webhook.
Event taxonomy
Each announcement is matched against a deterministic, rule-based Chinese keyword taxonomy (no LLM, so classification is instant and stable). One announcement can map to several events; severity is the maximum across hits.
| Event type | Typical disclosure | Default severity |
|---|---|---|
EARNINGS_FORECAST | 业绩预告 / 预增 / 预减 / 修正 | medium (pre-loss/downward → high) |
EARNINGS_REPORT | 年报 / 半年报 / 季报 / 业绩快报 | medium |
EARNINGS_RESTATED | 前期会计差错更正 / 追溯重述 | high |
DIVIDEND | 权益分派 / 利润分配 / 送转 | medium |
INSIDER_SELL | 减持 | high |
INSIDER_BUY | 增持 | medium |
SHAREHOLDER_CHANGE | 权益变动 / 控制权变更 | high |
EQUITY_INCENTIVE | 股权激励 / 限制性股票 / 员工持股 | medium |
SHARE_REPURCHASE | 回购 | medium |
TRADING_HALT | 停牌 / 复牌 | high |
REGULATORY_INQUIRY | 问询函 / 关注函 / 监管函 | high |
M&A_RESTRUCTURING | 重大资产重组 / 吸收合并 | high |
MANAGEMENT_CHANGE | 高管辞职 / 换届 / 聘任 | medium |
GUARANTEE | 对外担保 | medium |
LITIGATION_ARBITRATION | 诉讼 / 仲裁 | high |
INVESTIGATION_PENALTY | 立案调查 / 行政处罚 | high |
RELATED_PARTY_TX | 关联交易 | medium |
BOND_FINANCING | 公司债 / 可转债 / 中票 | medium |
PRIVATE_PLACEMENT | 非公开发行 / 定增 | medium |
IPO_LISTING | 招股说明书 / 上市公告书 | low |
OTHER_MATERIAL | any other unclassified disclosure | low |
The rules live in ./config/event_rules.json and can be extended without changing code.
Inputs
{"stocks": ["600519", "000001", "603291"],"lookbackDays": 7,"onlyNew": true,"severityMin": "all","eventTypes": [],"watchId": "default"}
| Field | Type | Default | Description |
|---|---|---|---|
stocks | array | ["600519","000001"] | 6-digit codes; names/pinyin also accepted |
lookbackDays | integer | 7 | How far back to look when no dates are given |
dateFrom / dateTo | string | auto | Explicit YYYY-MM-DD window |
onlyNew | boolean | true | Diff against the prior run; set false to return everything |
severityMin | enum | all | all / low / medium / high filter |
eventTypes | array | [] | Only keep announcements matching these events |
searchKeywords | array | [] | Only keep titles containing any keyword |
includeSummary | boolean | true | Emit a per-stock summary row |
watchId | string | default | Separate state namespace for independent watchlists |
snapshotsStoreName | string | cninfo-disclosure-snapshots | Named KVS holding seen-ID state |
requestDelay | number | 0.4 | Polite delay between requests (seconds) |
notify | object | – | Slack / webhook / email targets (see below) |
First-run behavior
On the first run for a stock there is no baseline, so the Actor records the
current announcement IDs and pushes nothing (a company.summary row with
baseline: true). This prevents a flood of historical alerts. Subsequent runs
push only newly-filed announcements.
Output
One dataset item is pushed per new announcement, plus a free per-stock summary row. Announcement item example:
{"signalType": "announcement.new","eventTypes": ["INSIDER_SELL"],"severity": "high","stockCode": "603291","stockName": "联合水务","orgId": "9900047645","exchange": "SSE","announcementId": "1225583131","title": "控股股东之一致行动人及持股5%以上股东减持股份计划公告","publishedAt": "2026-09-25T16:00:00Z","pdfUrl": "https://static.cninfo.com.cn/finalpage/2026-09-25/1225583131.PDF","matchedKeywords": ["减持"],"isNew": true,"baseline": false,"detectedAt": "2026-09-27T08:00:00Z"}
The full result set is available under the run's dataset, and a run report is
stored at the REPORT key-value store key.
Notifications
Provide a notify object. Slack uses Block Kit; the generic webhook
auto-detects Feishu/Lark and DingTalk formats.
{"notify": {"slack_webhook_url": "https://hooks.slack.com/services/XXX","webhook_url": "https://open.feishu.cn/open-apis/bot/v2/hook/XXX","email": {"smtp_host": "smtp.example.com","smtp_port": 465,"account": "you@example.com","to": ["you@example.com"],"password": "APP_PASSWORD","useSsl": true}}}
Notification delivery is best-effort; a notification failure never fails the
run, and delivery statuses are saved at NOTIFY_STATUSES.
Scheduling
Save the configured input as a Schedule (e.g. every weekday evening after the CNINFO feed settles) to receive a continuous alert stream. State persists in the named key-value store between runs, so each scheduled execution only emits genuinely new disclosures.
Running locally
pip install -r requirements.txtpython src/main.py --input examples/input_example.json
Local runs store seen-ID state in local_storage/cninfo_disclosure.db and
write the last report to local_storage/last_report.json.
Tests:
$python -m pytest tests/ -q
Notes & limitations
- Source is the official CNINFO feed for SSE / SZSE / BSE. Beijing stocks have
migrated to
920xxxcodes; older codes resolve automatically. - The Actor links to the official PDF but does not parse PDF bodies by default.
- Data is provided as-is for monitoring and research; coverage and timing depend on CNINFO availability. Not investment advice.