# CNINFO A-Share Disclosure Scraper (`maximedupre/cninfo`) Actor

Search Shanghai and Shenzhen A-share filings on CNINFO. Filter by exchange, dates, stock codes, keywords, or announcement categories. Get structured records with CNINFO pages and public PDF links.

- **URL**: https://apify.com/maximedupre/cninfo.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.80 / 1,000 filings

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🔎 Search CNINFO A-Share Filings

For analysts, researchers, and data teams, CNINFO A-Share Disclosure Scraper searches public CNINFO announcements for Shanghai and Shenzhen listed companies. It returns structured filing rows with company, exchange, dates, categories, document details, and direct CNINFO and PDF links, so you can review Chinese stock disclosures in a dataset.

**Use cases**

- Review [**Chinese Stock Announcements**](https://apify.com/maximedupre/cninfo/examples/chinese-stock-announcements) as structured rows with company names, dates, categories, and source links.
- Find [**China Annual Reports**](https://apify.com/maximedupre/cninfo/examples/china-annual-reports) with filing details and direct public PDF links.
- Check [**China Quarterly Reports**](https://apify.com/maximedupre/cninfo/examples/china-quarterly-reports) by exchange, date, stock code, or title keyword.
- Collect [**China Stock Prospectuses**](https://apify.com/maximedupre/cninfo/examples/china-stock-prospectuses) with CNINFO detail pages and document links.
- Search [**China Stock Acquisitions**](https://apify.com/maximedupre/cninfo/examples/china-stock-acquisitions) for acquisition-related filing announcements.
- Review [**China Related Party Transactions**](https://apify.com/maximedupre/cninfo/examples/china-related-party-transactions) with the same filing fields and source links.

#### 📄 CNINFO filing rows

**What you get**

Each dataset row is one filing found on CNINFO. Rows include company identity, exchange, filing details, publication time, language, importance, document size, and links to the CNINFO page and public PDF.

| Field | Type | What it does |
| --- | --- | --- |
| `filingId` | string | CNINFO announcement ID. Use it to join or check records. |
| `stockCode` | string | Six-digit A-share stock code for the company. |
| `companyName` | string | Company name shown by CNINFO. |
| `exchange` | string | Exchange where the company is listed: `Shanghai` or `Shenzhen`. |
| `title` | string | Filing title shown by CNINFO. |
| `filingType` | string | Filing type shown by CNINFO. |
| `category` | string | Human-readable CNINFO category for the filing. |
| `publishedAt` | date-time string | Time when CNINFO published the filing. |
| `language` | string | Language found in the filing PDF: `zh` or `en`. |
| `importance` | string | CNINFO importance status: `important`, `not-important`, or `unavailable`. |
| `documentSizeBytes` | integer | PDF size in bytes. |
| `sourceUrl` | URL | CNINFO detail page for the filing. |
| `pdfUrl` | URL | Direct public PDF link for the filing. |

#### ▶️ Search CNINFO your way

**How to run**

1. Choose Shanghai, Shenzhen / STAR / ChiNext, or both.
2. Add optional dates, stock codes, announcement keywords, or announcement categories.
3. Set a maximum result count when you want a cap. Leave it empty to return all available results until the source is exhausted.
4. Start the Actor and open the default dataset.

Each run uses one search setup. The filters apply together; they do not create separate searches in one run. CNINFO is a public source, so the Actor does not ask for CNINFO credentials or an API key.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | string | Selects `shanghai`, `shenzhen`, or `combined`: Shanghai; Shenzhen / STAR / ChiNext; or both. |
| `publishedFrom` | date string | Optional first publication date in `YYYY-MM-DD` form. |
| `publishedTo` | date string | Optional last publication date in `YYYY-MM-DD` form. |
| `stockCodes` | string\[] | Optional six-digit A-share stock codes. Leave empty to include all codes in the selected scope. |
| `keywords` | string\[] | Optional Chinese or English words matched against announcement titles. Leave empty to use no keyword filter. |
| `announcementCategories` | string\[] | Optional official CNINFO announcement category names or codes, such as reports, prospectuses, acquisitions, related-party transactions, or restated-financial disclosures. |
| `maxItems` | integer | Optional Actor Work Limit. Stops after this many matched filings. Leave empty to return all available results until the source is exhausted. |

**Example input**

This is the public input from a successful current-beta run:

```json
{
  "target": "combined",
  "maxItems": 2
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | URL string | Links to the filing rows saved in this run's default dataset. |

**Dataset row**

| Field | Type | What it does |
| --- | --- | --- |
| `filingId` | string | CNINFO announcement ID. Use it to join or check records. |
| `stockCode` | string | Six-digit A-share stock code for the company. |
| `companyName` | string | Company name shown by CNINFO. |
| `exchange` | string | Exchange where the company is listed: `Shanghai` or `Shenzhen`. |
| `title` | string | Filing title shown by CNINFO. |
| `filingType` | string | Filing type shown by CNINFO. |
| `category` | string | Human-readable CNINFO category for the filing. |
| `publishedAt` | date-time string | Time when CNINFO published the filing. |
| `language` | string | Language found in the filing PDF: `zh` or `en`. |
| `importance` | string | CNINFO importance status: `important`, `not-important`, or `unavailable`. |
| `documentSizeBytes` | integer | PDF size in bytes. |
| `sourceUrl` | URL | CNINFO detail page for the filing. |
| `pdfUrl` | URL | Direct public PDF link for the filing. |

**Example filing row**

This complete row is from a successful current-beta run:

```json
{
  "filingId": "1225493805",
  "stockCode": "002552",
  "companyName": "宝鼎科技",
  "exchange": "Shenzhen",
  "title": "2026年半年度报告摘要",
  "filingType": "01010503||010112||010303",
  "category": "Semi-annual reports",
  "publishedAt": "2026-08-21T16:00:00.000Z",
  "language": "zh",
  "importance": "not-important",
  "documentSizeBytes": 134080,
  "sourceUrl": "https://www.cninfo.com.cn/new/disclosure/detail?stockCode=002552&announcementId=1225493805&orgId=9900018064&announcementTime=2026-08-22",
  "pdfUrl": "https://static.cninfo.com.cn/finalpage/2026-08-22/1225493805.pdf"
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. Each matched CNINFO filing saved to the dataset is one billable event. Check the pricing panel for the current rate.

#### 🔌 Integrations

Open the default dataset in Apify, read it through the standard dataset API, or export it for spreadsheets and analysis. You can also schedule repeat runs in Apify.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Which exchange groups can I search?

Choose Shanghai, Shenzhen / STAR / ChiNext, or both. The Actor searches the public CNINFO disclosure scope for those Shanghai and Shenzhen A-share groups.

##### Can I search several stock codes, keywords, or categories?

Yes. Add one or more stock codes, title keywords, or announcement category names or codes. The values work together in one search setup.

##### Are keywords matched in filing titles?

Yes. `keywords` accepts Chinese or English words for the announcement-title search.

##### What happens if I leave Maximum results empty?

The Actor returns all available results until the source is exhausted. Add a number when you want to stop after a smaller count.

##### Do I get the filing PDFs?

The dataset gives a direct public PDF link and a CNINFO detail-page link when the filing is returned. The Actor does not download, transform, or store the PDF file.

##### Do I need CNINFO credentials or an API key?

No. The Actor reads public CNINFO disclosure and PDF pages without source credentials. You still need your normal Apify account to run an Actor.

##### Does this provide stock prices or financial analysis?

No. It returns CNINFO disclosure records and source links. It does not provide market prices, ratios, issuer fundamentals, or broader China-market intelligence.

##### Can a run return partial results?

Yes. If source instability or a run interruption stops later filings, earlier saved rows can remain available in the dataset.

##### Can one run use separate filters for separate searches?

No. One run uses one shared search setup. Start separate runs when you need separate configurations.

### 📝 Changelog

**0.0: Initial release**

- Initial release

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~cninfo/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [SEC 13F Manager Quarterly Report Scraper](https://apify.com/maximedupre/sec-13f-manager-quarterly-report-scraper). Review one investment manager's quarterly holdings with filing and report links.
- [OpenInsider](https://apify.com/maximedupre/openinsider). Search public SEC Form 4 insider-trade rows with transaction details and source links.
- [FCC ECFS Filings](https://apify.com/maximedupre/fcc-ecfs). Search public FCC proceedings and review filing rows with document links.
- [FDA 510(k) Device Clearance Search](https://apify.com/maximedupre/fda-510k). Find official FDA clearance records with device, decision, and source data.
- [CNINFO China Listed-Company Disclosure Scraper](https://apify.com/jungle_synthesizer/cninfo-china-listed-disclosure-scraper). Compare another CNINFO disclosure workflow when reviewing Store options.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose the exchange scope to search on CNINFO's official public disclosure service.

## `publishedFrom` (type: `string`):

Optional first publication date. Use YYYY-MM-DD, or leave empty for no start date.

## `publishedTo` (type: `string`):

Optional last publication date. Use YYYY-MM-DD, or leave empty for no end date.

## `stockCodes` (type: `array`):

Optional six-digit A-share stock codes. Add one or more, or leave empty to include all codes in the selected scope.

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

Optional Chinese or English keywords for announcement titles. Add one or more, or leave empty to use no keyword filter.

## `announcementCategories` (type: `array`):

Optional official CNINFO announcement category names or codes. Add one or more, such as reports, prospectuses, acquisitions, related-party transactions, or restated-financial disclosures.

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

Optional Actor Work Limit. Stop after this many matched filings. Leave empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "target": "combined",
  "maxItems": 2
}
```

# Actor output Schema

## `dataset` (type: `string`):

Filing rows from this run in the default dataset.

# 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 = {
    "target": "combined",
    "maxItems": 2
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/cninfo").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 = {
    "target": "combined",
    "maxItems": 2,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/cninfo").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 '{
  "target": "combined",
  "maxItems": 2
}' |
apify call maximedupre/cninfo --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/cninfo"
        }
    }
}

```

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/rYRlG7AjBFzqbpUm8/builds/D5xERECb3aJQ0ybNP/openapi.json
