China A-Share Announcement Signal Monitor - CNINFO Alerts avatar

China A-Share Announcement Signal Monitor - CNINFO Alerts

Pricing

from $20.00 / 1,000 company monitoreds

Go to Apify Store
China A-Share Announcement Signal Monitor - CNINFO Alerts

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

Yong Yu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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.

Apify Actor Python


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 typeTypical disclosureDefault 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_MATERIALany other unclassified disclosurelow

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"
}
FieldTypeDefaultDescription
stocksarray["600519","000001"]6-digit codes; names/pinyin also accepted
lookbackDaysinteger7How far back to look when no dates are given
dateFrom / dateTostringautoExplicit YYYY-MM-DD window
onlyNewbooleantrueDiff against the prior run; set false to return everything
severityMinenumallall / low / medium / high filter
eventTypesarray[]Only keep announcements matching these events
searchKeywordsarray[]Only keep titles containing any keyword
includeSummarybooleantrueEmit a per-stock summary row
watchIdstringdefaultSeparate state namespace for independent watchlists
snapshotsStoreNamestringcninfo-disclosure-snapshotsNamed KVS holding seen-ID state
requestDelaynumber0.4Polite delay between requests (seconds)
notifyobject–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.txt
python 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 920xxx codes; 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.