# China A-Share Insider Trades Tracker — 高管增减持 (`nexgendata/china-ashare-insider-trades`) Actor

Director / supervisor / senior officer share-holding changes (董监高持股变动) for Shanghai (SSE) + Shenzhen (SZSE) A-share listed companies. CSRC executive disclosures: name, position, transaction date, shares, CNY price, pre/post holding, filing URL. Bloomberg China terminal alternative.

- **URL**: https://apify.com/nexgendata/china-ashare-insider-trades.md
- **Developed by:** [Stephan Corbeil](https://apify.com/nexgendata) (community)
- **Categories:** Business, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $200.00 / 1,000 insider trades

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## China A-Share Insider Trades — Director Holdings Changes

Track every director, supervisor, and senior-officer share-holding change disclosed under Chinese Securities Regulatory Commission (CSRC) rules for companies listed on the Shanghai Stock Exchange (SSE / 上交所), the Shenzhen Stock Exchange (SZSE / 深交所), and the Beijing Stock Exchange (BSE / 北交所).

Each row in the dataset is one insider transaction: a single director, supervisor, or senior officer (董监高 — `dǒng jiān gāo`, the CSRC abbreviation for *Directors, Supervisors, and Senior Officers*), one transaction date, one transaction code (买入 buy / 卖出 sell), with name, position, shares changed, average transacted price in CNY, pre- and post-transaction holding, and a link to the canonical disclosure on the issuing exchange's portal.

This actor is the China A-share analog of the SEC Form 4 universe in the United States — but covers a market that, by daily turnover, is the second-largest equity venue on Earth, with insider-trading regulation that has evolved aggressively since the 2019 Securities Law amendment, the 2021 Article 65 amendments, and the 2024 STAR Market and ChiNext disclosure-tightening reforms.

### Why this data matters

Mainland-China insider flow is one of the most under-utilized institutional alpha sources outside of mainland-funded sell-side desks. The CSRC's executive-disclosure regime (in force since 2007, materially strengthened in 2017 and 2021) requires every director, supervisor, and senior officer of an A-share listed issuer to disclose any change in their beneficial ownership of the issuer's shares within **two trading days** of execution — a tighter window than the US SEC's two-business-day Form 4 requirement and substantially tighter than HKEX's three-business-day Listing Rule disclosure.

The CSRC framework covers:

- **Article 44 of the Securities Law (2019 revision)** — the basic six-month short-swing-profit disgorgement rule for insiders (substantially identical to US Section 16(b)).
- **Article 63 + 65 of the Securities Law (2019, amended 2021)** — the disclosure-of-changes-in-shareholding regime; mandates two-trading-day filing for every transaction by any 董监高 or any holder of 5%+ of issued capital.
- **CSRC Order No. 156 (2017)** — refined "pre-disclosure" rules requiring directors and 5%+ holders to file a 减持计划 (sell-down plan) at least 15 trading days *before* any open-market sale exceeding 1% of issued capital.
- **CSRC Order No. 198 (2024)** — STAR Market and ChiNext-specific tightening; lock-up extensions for major shareholders of unprofitable issuers, additional pre-trade disclosure on insider sells above 250 lakh CNY.

Academic and sell-side research on A-share insider flow consistently finds:

- **Cluster buys** — three or more directors of the same issuer buying within a rolling 30-day window — produce 12-month forward excess returns of **+8% to +15% relative to the CSI 300** (Tsinghua PBCSF working papers 2019–2023, CICC China-Strategy desk note 2024).
- **Chairman / CEO buys** are the single most-predictive subset — average forward 12m excess return of **+11.4% vs CSI 300** (Wind 2022 sample, n ≈ 4,200).
- **Insider sells within 30 days of a positive earnings pre-announcement** are a documented Article 65 violation pattern; CSRC fines for the same totalled CNY 4.2 billion across 2022–2024.

In short: this dataset is the high-signal raw input behind a class of strategies that mainland desks have institutionalized for over a decade and that offshore funds are only beginning to integrate.

### What you get back

Per insider transaction line, the dataset returns:

- `stock_code` — 6-digit A-share code (e.g. `600519`, `000001`, `300750`, `688981`).
- `exchange` — `SSE` (Shanghai), `SZSE` (Shenzhen), or `BSE` (Beijing).
- `board` — `Main Board`, `STAR Market` (科创板), `ChiNext` (创业板), `SME Board`, `Beijing`, or `B-Share`.
- `company_name_cn` — Chinese abbreviated name as filed (e.g. `贵州茅台`).
- `company_name_en` — Latin name when published by the issuer.
- `insider_name` — director / supervisor / officer name (Chinese characters as filed).
- `position` — Chinese position title (`董事长`, `总经理`, `独立董事`, `监事`, `财务总监`, etc.).
- `position_en` — English-language approximation (`Chairman of the Board`, `General Manager (CEO)`, `Independent Director`, `Supervisor`, `CFO`).
- `relationship_cn` / `relationship_en` — declared relationship of the trader to the disclosing officer (本人 self, 配偶 spouse, 子女 child, 实际控制人 actual controller, etc.). CSRC rules deem trades by an officer's immediate family and any controlled vehicle to be the officer's own trades for disclosure purposes.
- `transaction_date` — execution date (YYYY-MM-DD).
- `announcement_date` — disclosure date (YYYY-MM-DD). Difference between the two is regulatory `T+1` to `T+2`.
- `transaction_type` — normalized `buy` or `sell`.
- `shares_changed` — signed integer (positive = buy, negative = sell).
- `shares_changed_abs` — absolute value, useful for sorting by trade size.
- `price_cny_per_share` — average transacted price in CNY.
- `total_value_cny` — `shares_changed_abs * price_cny_per_share`, in CNY.
- `holding_before` / `holding_after` — pre- and post-transaction beneficial ownership in shares.
- `pct_of_shares_outstanding_after` — the insider's stake after the trade, as a percentage of total issued capital.
- `change_reason_cn` — Chinese-language transaction reason as filed (`二级市场买入`, `集中竞价交易`, `大宗交易`, `司法划转`, `继承`, etc.).
- `filing_url` — canonical disclosure URL on the issuing exchange's official portal (SSE / SZSE / BSE).
- `eastmoney_filing_url` — Eastmoney aggregator page that lists every executive filing for the same stock code.
- `data_source` — provenance string.

### Data source

The actor primarily reads from Eastmoney's (东方财富) datacenter v1 endpoint (`datacenter-web.eastmoney.com/api/data/v1/get`, `reportName=RPT_EXECUTIVE_HOLD_DETAILS`). Eastmoney aggregates every CSRC-mandated executive shareholding-change filing across SSE, SZSE, and BSE, normalizes the fields into structured JSON, and refreshes within roughly 30 minutes of the underlying exchange portal posting.

Eastmoney is the dominant retail and quant-friendly data source for mainland-China equities: founded 2005, market-leading mainland retail brokerage and data portal, and the de facto reference source for every quant-research desk that does not subscribe to Wind or CHOICE. The underlying filings are the same disclosures published by the issuing exchange — Eastmoney's role is normalization and aggregation, not primary creation of records.

Per row, the actor also synthesizes the canonical filing URL on the issuing exchange's own disclosure portal:

- SSE: `http://www.sse.com.cn/assortment/stock/list/info/announcement/`
- SZSE: `http://www.szse.cn/disclosure/listed/notice/`
- BSE: `http://www.bse.cn/disclosure/stockindex/`

Use these URLs to retrieve the original Chinese-language filing PDF and the company-stamped seal when you need legal-grade evidence.

### Common workflows

#### 1. Single-issuer monitor — Kweichow Moutai (`600519`) executive flow

```json
{
  "stockCodes": ["600519"],
  "dateRange": "last_90d",
  "transactionType": "all",
  "maxRecords": 100
}
````

Returns every 董监高 transaction filed against Moutai over the past quarter. Useful for the "is the CEO/Chairman buying or selling Moutai right now?" question — Moutai's tightly-held insider base (Guizhou state-owned holding company) means filings are rare but high-information.

#### 2. Cluster-buy screener — STAR Market semiconductors

```json
{
  "stockCodes": ["688981", "688041", "688008", "688012", "688256"],
  "dateRange": "last_30d",
  "transactionType": "buy",
  "maxRecords": 200
}
```

Returns every insider buy across SMIC, Hygon, Montage Technology, AMEC, and Cambricon in the past 30 days. Cross-reference the resulting roster of buyers — three or more director buys across the cluster signals shared sector conviction.

#### 3. Market-wide breaking insider flow

```json
{
  "stockCodes": [],
  "dateRange": "last_7d",
  "transactionType": "all",
  "maxRecords": 500
}
```

Empty `stockCodes` triggers a market-wide pull across all SSE + SZSE + BSE filings over the requested window. Sort the resulting dataset by `total_value_cny` descending to surface the largest insider moves of the week.

#### 4. Year-to-date backtest cohort

```json
{
  "stockCodes": [],
  "dateRange": "ytd",
  "transactionType": "buy",
  "maxRecords": 2000
}
```

Builds a year-to-date cohort of insider buys for backtesting. Combine with daily total-return data (the sister actor `eastmoney-china-stock-screener` exposes the same Eastmoney quote spine) to reproduce the +8%-to-+15% cluster-buy excess-return result.

### Pricing

This actor uses Apify's pay-per-event billing. You pay only for the data you receive:

- **Actor start** — $0.00005 per run (effectively free; covers orchestration cost).
- **Trade record** — $0.10 per dataset row.

A typical institutional-monitor query (single issuer, last 30 days, all transactions) returns 5–25 rows for ~$0.50–$2.50. A market-wide last-7-days pull returns 100–500 rows for ~$10–$50. A full-year backtest cohort of 2,000 rows is $200, a tiny fraction of a Bloomberg China terminal seat (USD ~2,400/month) or a Wind Information Pro license (CNY ~150,000–500,000/year).

Pay-per-event means you never pay for compute on empty results — if the requested window yields no filings, you pay $0.00005 (one actor-start charge) and receive a single `_type: no_results` placeholder explaining why.

### Sister actors in the NexGenData fleet

If you build research workflows on top of A-share insider flow, the following actors compose naturally with this one:

- **`sec-form4-insider-tracker`** — the US analog. SEC Form 4 filings for every US-listed common stock with role-based filtering, cluster-buy detection, and OpenInsider integration. Use the two side-by-side to compare CSRC vs SEC insider patterns and quantify the cross-Pacific signal correlation. ([Apify](https://apify.com/nexgendata/sec-form4-insider-tracker?fpr=2ayu9b))
- **`eastmoney-china-stock-screener`** — the broad A-share equity screener built on the same Eastmoney push2 quote API. Use it to enrich insider-trade rows with current price, market cap, sector classification, and CSI 300 / 500 / 1000 membership. ([Apify](https://apify.com/nexgendata/eastmoney-china-stock-screener?fpr=2ayu9b))
- **`china-trends-tracker`** — Baidu Index, Weibo trending topics, and Douyin-search signals normalized to the same A-share universe. Pair with insider flow to test whether retail attention precedes or follows executive transactions on a given name. ([Apify](https://apify.com/nexgendata/china-trends-tracker?fpr=2ayu9b))
- **`hkex-insider-short-tracker`** — the Hong Kong parallel. HKEX SFC Part XV Disclosure of Interests forms plus the SFC short-position weekly report. CATL, BYD, SMIC and other A+H names file separately on each leg — track both for the full picture. ([Apify](https://apify.com/nexgendata/hkex-insider-short-tracker?fpr=2ayu9b))
- **`star-market-china-stock-screener`** — the STAR Market (科创板, Shanghai 688xxx) screener. Restricted insider flow on STAR Market issuers is a known alpha bucket given the heavier CSRC Order No. 198 (2024) disclosure obligations on unprofitable issuers. ([Apify](https://apify.com/nexgendata/star-market-china-stock-screener?fpr=2ayu9b))
- **`chinext-china-stock-screener`** — the ChiNext (创业板, Shenzhen 300xxx / 301xxx) screener. ChiNext is the highest-beta retail-favorite venue in mainland China, and insider-flow signals tend to lead price moves by a wider window here than on the Main Board. ([Apify](https://apify.com/nexgendata/chinext-china-stock-screener?fpr=2ayu9b))
- **`france-amf-insider-trades`** — the European Union analog under MAR Article 19 / French Code monétaire et financier L621-18-2. Covers CAC40 + SBF120 dirigeants declarations.

### FAQ

**Does this cover all three exchanges (SSE / SZSE / BSE)?**

Yes. The Eastmoney datacenter feed aggregates filings from all three. The `exchange` and `board` fields on each row classify the issue. STAR Market (688xxx) and ChiNext (300xxx / 301xxx) filings carry the same disclosure obligations as Main Board — the regulatory tightening of CSRC Order No. 198 (2024) is reflected in the underlying disclosures.

**What about Hong Kong H-shares and the Hong Kong–listed leg of A+H names?**

H-share insider disclosure is governed by HKEX Listing Rule 5.6, not by CSRC. This actor does not cover H-share filings. Use HKEX's own DI (Disclosure of Interests) feed for that. CATL, S.F. Holding, Hengrui Pharma and other A+H names file separately on each leg.

**How current is the data?**

CSRC rules require disclosure within 2 trading days of execution. Eastmoney typically reflects new filings within 30 minutes of the issuing exchange posting. The `announcement_date` field reflects the exchange's posting date.

**What about the 减持计划 (pre-announced sell-down plan) filings?**

This actor returns executed transactions, not pre-announcement intentions. A separate Eastmoney report — `RPT_REDUCED_HOLD_LISTNEW` — tracks the 15-trading-day-ahead sell-down plan filings. A future NexGenData actor will cover that report separately; contact `support@thenextgennexus.com` if you need this data sooner.

**What's the difference between 增持 and 买入?**

Both translate roughly to "increase holding" / "buy", but in CSRC vocabulary 增持 is the formal regulatory term used in 公告 (announcements) and is normalized to `buy` in `transaction_type`. The `change_reason_cn` field preserves the original filed reason (`二级市场买入` = secondary-market open buy; `集中竞价交易` = competitive bidding; `大宗交易` = block trade; `继承` = inheritance).

**Can I run this against the entire A-share universe at once?**

Yes — leave `stockCodes` empty and pick a date window. A market-wide last-7-days pull typically yields 100–500 rows; a full year of buys across the whole market typically yields 8,000–15,000 rows. The actor paginates Eastmoney's response in pages of 100; for very large pulls, raise `maxRecords` to your true target.

**Does Eastmoney rate-limit?**

Lightly. The datacenter API tolerates the ~3 requests/second pacing this actor uses without issue for queries of a few hundred rows. Very large market-wide pulls (1,000+ rows) may see occasional HTTP 429s; the actor backs off gracefully. For sustained heavy use, attach an Apify RESIDENTIAL proxy via the `proxyConfiguration` input.

**What does the data cost compared to terminals?**

A single Bloomberg terminal seat with China-equities entitlement runs USD ~2,400/month — USD ~28,800/year — and the entitlement does not include bulk JSON export. Wind Information Pro (the mainland-China institutional standard) is CNY 150,000–500,000/year per seat, also seat-bound. CHOICE (东方财富's own institutional product) is CNY 50,000–120,000/year. This actor charges $0.10 per executive-filing row with no minimum and no commit. A full-year all-A-shares insider-buy cohort at ~10,000 rows costs $1,000 — roughly 3% of one Bloomberg seat-year, with the advantage of clean JSON output that goes directly into Pandas, kdb+, ClickHouse, or any modern data stack.

### Quick start — Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_API_TOKEN")
run = client.actor("nexgendata/china-ashare-insider-trades").call(run_input={
    "stockCodes": ["600519", "000001", "300750"],
    "dateRange": "last_90d",
    "transactionType": "all",
    "maxRecords": 200,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["transaction_date"], row["stock_code"], row["insider_name"],
          row["position_en"], row["transaction_type"],
          row["shares_changed_abs"], "@", row["price_cny_per_share"], "CNY")
```

### Quick start — cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/nexgendata~china-ashare-insider-trades/runs?token=YOUR_APIFY_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "stockCodes": ["688981"],
    "dateRange": "last_30d",
    "transactionType": "buy",
    "maxRecords": 50
  }'
```

### Built on Apify

This actor runs on the [Apify platform](https://apify.com/?fpr=2ayu9b) — managed Python runtime, dataset storage, scheduling, webhooks, residential-proxy network, and API access. The full NexGenData fleet of 280+ commercial-grade scrapers and MCP servers is at [apify.com/nexgendata](https://apify.com/nexgendata?fpr=2ayu9b).

For integration help, custom-schema requests, or volume-licensing inquiries, contact `support@thenextgennexus.com`.

# Actor input Schema

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

List of 6-digit A-share codes to query. Shanghai (SSE) codes start 600/601/603/605 (Main Board) or 688 (STAR Market / 科创板). Shenzhen (SZSE) codes start 000/001 (Main Board), 002/003 (SME Board), or 300/301 (ChiNext / 创业板). Beijing (BSE / 北交所) codes start 8. Accepts suffix-tagged inputs too (e.g. '600519.SH', '000001.SZ', 'sh600036'). Leave EMPTY to scan the full A-share market over the requested date window — useful for cross-issuer aggregate insider-flow surveillance.

## `dateRange` (type: `string`):

Filing-date window for executive shareholding-change disclosures. CSRC rules require disclosure within 2 trading days of the transaction, so 'last\_7d' captures essentially all breaking insider flow; 'last\_30d' is the standard institutional-monitor window; 'last\_90d' covers a full quarter. Use 'custom' with `startDate` + `endDate` for precise backtesting windows.

## `startDate` (type: `string`):

Used only when `dateRange = custom`. Filing-date lower bound (inclusive). Eastmoney datacenter holds roughly 10+ years of executive-disclosure history, but Eastmoney response sizes degrade beyond ~2 years per query — for long-horizon studies, run multiple windowed queries.

## `endDate` (type: `string`):

Used only when `dateRange = custom`. Filing-date upper bound (inclusive). Leave blank to default to today (UTC).

## `transactionType` (type: `string`):

Filter to insider buys (增持 — open-market purchases by directors/officers from their own capital), insider sells (减持 — open-market sales), or all transactions. Academic evidence on A-share insider flow (CSRC research papers, CFA Institute mainland-China studies) finds cluster-buy events outperform the CSI 300 by 8-15% in the following 12 months. Conversely, executive sells within 30 days of a major announcement are a documented Section 65 violation signal.

## `maxRecords` (type: `integer`):

Hard cap on dataset rows pushed. Each row is one insider transaction line (one director, one trade date, one transaction code) — corporates with multi-director cluster moves produce 3-10 rows per filing. Mid-cap A-share names average 10-30 executive-shareholding events per year; large caps with concentrated insider ownership (Kweichow Moutai 600519, BYD 002594, CATL 300750) average 30-100+ events/year.

## `proxyConfiguration` (type: `object`):

Optional. Eastmoney's datacenter API is normally reachable from any IP, but if you see HTTP 429 / 451 / 500 errors during peak Shenzhen open or after a high-profile disclosure event, enable Apify proxy. RESIDENTIAL with country=CN improves stability against any future Eastmoney geofencing; SHADER / BUYPROXIES94952 work for low-volume scans.

## Actor input object example

```json
{
  "stockCodes": [
    "600519"
  ],
  "dateRange": "last_30d",
  "startDate": "",
  "endDate": "",
  "transactionType": "all",
  "maxRecords": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "stockCodes": [
        "600519"
    ],
    "dateRange": "last_30d",
    "startDate": "",
    "endDate": "",
    "transactionType": "all",
    "maxRecords": 25,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/china-ashare-insider-trades").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 = {
    "stockCodes": ["600519"],
    "dateRange": "last_30d",
    "startDate": "",
    "endDate": "",
    "transactionType": "all",
    "maxRecords": 25,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/china-ashare-insider-trades").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "stockCodes": [
    "600519"
  ],
  "dateRange": "last_30d",
  "startDate": "",
  "endDate": "",
  "transactionType": "all",
  "maxRecords": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call nexgendata/china-ashare-insider-trades --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/china-ashare-insider-trades",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "China A-Share Insider Trades Tracker — 高管增减持",
        "description": "Director / supervisor / senior officer share-holding changes (董监高持股变动) for Shanghai (SSE) + Shenzhen (SZSE) A-share listed companies. CSRC executive disclosures: name, position, transaction date, shares, CNY price, pre/post holding, filing URL. Bloomberg China terminal alternative.",
        "version": "0.0",
        "x-build-id": "2EW7Agdh0UuZtH6nR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~china-ashare-insider-trades/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-china-ashare-insider-trades",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/nexgendata~china-ashare-insider-trades/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-china-ashare-insider-trades",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/nexgendata~china-ashare-insider-trades/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-china-ashare-insider-trades",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "stockCodes": {
                        "title": "Stock code(s)",
                        "type": "array",
                        "description": "List of 6-digit A-share codes to query. Shanghai (SSE) codes start 600/601/603/605 (Main Board) or 688 (STAR Market / 科创板). Shenzhen (SZSE) codes start 000/001 (Main Board), 002/003 (SME Board), or 300/301 (ChiNext / 创业板). Beijing (BSE / 北交所) codes start 8. Accepts suffix-tagged inputs too (e.g. '600519.SH', '000001.SZ', 'sh600036'). Leave EMPTY to scan the full A-share market over the requested date window — useful for cross-issuer aggregate insider-flow surveillance.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "dateRange": {
                        "title": "Date range preset",
                        "enum": [
                            "last_7d",
                            "last_30d",
                            "last_90d",
                            "last_180d",
                            "last_365d",
                            "ytd",
                            "all",
                            "custom"
                        ],
                        "type": "string",
                        "description": "Filing-date window for executive shareholding-change disclosures. CSRC rules require disclosure within 2 trading days of the transaction, so 'last_7d' captures essentially all breaking insider flow; 'last_30d' is the standard institutional-monitor window; 'last_90d' covers a full quarter. Use 'custom' with `startDate` + `endDate` for precise backtesting windows.",
                        "default": "last_30d"
                    },
                    "startDate": {
                        "title": "Custom start date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Used only when `dateRange = custom`. Filing-date lower bound (inclusive). Eastmoney datacenter holds roughly 10+ years of executive-disclosure history, but Eastmoney response sizes degrade beyond ~2 years per query — for long-horizon studies, run multiple windowed queries.",
                        "default": ""
                    },
                    "endDate": {
                        "title": "Custom end date (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Used only when `dateRange = custom`. Filing-date upper bound (inclusive). Leave blank to default to today (UTC).",
                        "default": ""
                    },
                    "transactionType": {
                        "title": "Transaction type filter",
                        "enum": [
                            "buy",
                            "sell",
                            "all"
                        ],
                        "type": "string",
                        "description": "Filter to insider buys (增持 — open-market purchases by directors/officers from their own capital), insider sells (减持 — open-market sales), or all transactions. Academic evidence on A-share insider flow (CSRC research papers, CFA Institute mainland-China studies) finds cluster-buy events outperform the CSI 300 by 8-15% in the following 12 months. Conversely, executive sells within 30 days of a major announcement are a documented Section 65 violation signal.",
                        "default": "all"
                    },
                    "maxRecords": {
                        "title": "Max trade records returned",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Hard cap on dataset rows pushed. Each row is one insider transaction line (one director, one trade date, one transaction code) — corporates with multi-director cluster moves produce 3-10 rows per filing. Mid-cap A-share names average 10-30 executive-shareholding events per year; large caps with concentrated insider ownership (Kweichow Moutai 600519, BYD 002594, CATL 300750) average 30-100+ events/year.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration (optional)",
                        "type": "object",
                        "description": "Optional. Eastmoney's datacenter API is normally reachable from any IP, but if you see HTTP 429 / 451 / 500 errors during peak Shenzhen open or after a high-profile disclosure event, enable Apify proxy. RESIDENTIAL with country=CN improves stability against any future Eastmoney geofencing; SHADER / BUYPROXIES94952 work for low-volume scans.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
