# Eastmoney Scraper — Stocks, Funds, Quotes & History (`logiover/eastmoney-scraper`) Actor

Eastmoney (东方财富) scraper: A-share, Hong Kong, US, ETF, bond, index and board quotes with full fields, K-line history, 24,000+ funds with NAV history, financial reports and announcements. Field codes mapped to English + Chinese names. No login, no API key.

- **URL**: https://apify.com/logiover/eastmoney-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Developer tools, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Eastmoney Scraper — Stocks, Funds, Quotes & History from 东方财富

> **Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by or sponsored by Eastmoney (东方财富) or any company of its group. "Eastmoney" and "东方财富" are trademarks of their owners and are used only to describe which public data the Actor reads. It collects public market data that the Eastmoney website shows to every visitor, without a login. You are responsible for using the data lawfully.

**Eastmoney Scraper** is a ready-made 东方财富数据采集 tool and an Eastmoney API alternative. It scrapes eastmoney.com for A-share, Hong Kong and US stock quotes (股票行情, A股行情, 港股行情, 美股行情), ETF, LOF, REIT, convertible bond (可转债), bond and index quotes, industry, concept and region boards (板块), K-line history from one-minute to yearly bars (K线数据), the whole fund catalogue with returns and fees (基金净值, 基金排行), the complete NAV history of any fund, the financial data centre (业绩报表, 资产负债表, 利润表, 现金流量表, 估值分析) and company announcements (公告). No login, no API key, no browser: pick a mode, press Start and export CSV, Excel, JSON, XML or HTML, or call it from the Apify API, Python, Node.js, Google Sheets, Make, Zapier or n8n.

Eastmoney's pages speak in field codes — `f2`, `f3`, `f62`, `f184` — and Chinese labels. This 东方财富爬虫 turns every code into a readable English column, normalises units (lots of 100 shares in mainland China, single shares in Hong Kong and the US, 10-bond lots for bonds), turns Eastmoney's placeholder zeros into real empty values, and returns numbers as numbers and dates as ISO dates. Typical searches it answers: scrape Eastmoney stock list to Excel, download A-share daily prices as CSV, Eastmoney fund NAV history export, AH premium table, Chinese stock market data API, 沪深京A股 全部行情, 东方财富 K线 历史数据, 基金净值 历史 导出.

### Table of contents

1. [At a glance](#at-a-glance)
2. [What you get](#what-you-get)
3. [Who uses this](#who-uses-this)
4. [Quick start](#quick-start)
5. [Recipes](#recipes)
6. [Input reference](#input-reference)
7. [Market lists](#market-lists)
8. [Data dictionary](#data-dictionary)
9. [Sample output](#sample-output)
10. [Scale and speed](#scale-and-speed)
11. [Data quality checks](#data-quality-checks)
12. [What you pay](#what-you-pay)
13. [Integrations](#integrations)
14. [Performance tips](#performance-tips)
15. [Troubleshooting](#troubleshooting)
16. [Honest limits](#honest-limits)
17. [Comparison with other options](#comparison-with-other-options)
18. [FAQ](#faq)
19. [Glossary](#glossary)
20. [Legality and data protection](#legality-and-data-protection)
21. [Changelog](#changelog)
22. [Support](#support)

### At a glance

| | |
|---|---|
| **Source** | eastmoney.com (东方财富网): quote centre, fund centre, financial data centre, announcement centre |
| **Modes** | Quotes · Price history · Funds · Fund NAV history · Financial reports · Announcements |
| **Market lists** | 51: A-shares (all boards), Hong Kong, US, ETF, LOF, REIT, bonds, repos, indices, boards, forex |
| **History** | daily to yearly bars back to listing (6,027 bars of 600519 in one request), 5- to 60-minute bars for 31 trading days, 1-minute for the latest day |
| **Depth proven** | 10,322 unique quote rows in one run (103.7 s, 0 duplicates); 24,699 unique funds in one run (34.0 s); measured 2026-10-25 |
| **Price** | pay per result: $1.50 per 1,000 on the Free plan, down to $1.00 on higher Apify tiers; you set a maximum cost per run |

### What you get

- **Quotes** in blocks: identity, price, trading, order book, valuation, fundamentals, money flow by order size (主力资金), classification, A+H pair, convertible-bond data, board breadth.
- **Price history** (raw, forward or backward adjusted), **funds** (NAV, returns from 1 week to 5 years, fees, money-fund yields), **fund NAV history** (daily return, dividends, splits, managers).
- **Financial reports** (results summary, forecast, express, balance sheet, income, cash flow, daily valuation) and **announcements** (date, company, categories, title, link).

### Who uses this

- **Quant researchers**: history mode with `adjustment: "backward"`, joined with the daily `valuation` report.
- **Spreadsheet investors**: quotes with `symbols` such as `600519`, `00700`, `510300`, scheduled into Google Sheets.
- **Fund analysts**: funds mode to screen 24,000+ funds, then fund NAV mode for the shortlist.
- **Convertible-bond traders**: list `convertible-bonds`, filter on conversion and pure-bond premium.
- **Cross-border strategists**: `hk-ah` for the 210 A+H pairs, `us-china` for US-listed Chinese companies.
- **Equity research and journalists**: financials mode with several `reportKinds`; top gainers and money-flow rankings through `sortBy`.
- **Fintech developers**: `run-sync-get-dataset-items` as a China-market back end, cached by `secId`.
- **Academics and compliance teams**: announcements by day, then history around the events; filter on `category`.
- **Credit and rates analysts**: `bonds-sh`, `bonds-sz`, `bond-index`, `bond-repo-sh` and `bond-repo-sz`.
- **FX desks**: `forex-all` or `forex-cnh` with 3-, 5-, 10-day change.
- **AI-agent builders**: the Apify MCP server returns labelled, unit-explicit rows.

### Quick start

**In the Console.** Open the Actor and press **Start**: the prefilled input reads 100 A-shares in about 8 seconds. Pick **Market lists**, or clear them and type codes, names or Eastmoney links into **Codes / names** (a bare `000001` is both Ping An Bank and the Shanghai Composite: use `1.000001` or a link for the index). Set **Max results** (0 = everything) and switch off column blocks you do not need. The **Output** tab has one view per mode; export as CSV, Excel, JSON, XML or HTML. Other modes: change **What to collect**.

**With the API.**

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~eastmoney-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"mode":"quotes","markets":[],"symbols":["600519","00700","AAPL"],"maxItems":0}'
```

The synchronous call must finish within five minutes. For big jobs start a run (`POST .../acts/logiover~eastmoney-scraper/runs?token=<APIFY_TOKEN>&maxTotalChargeUsd=5`), read `data.defaultDatasetId` from the answer and fetch `.../datasets/<ID>/items?format=csv&clean=true`. Every run's key-value store holds a `SUMMARY` record: outcome, request and route counts, notes.

### Recipes

Exact inputs, validated against the input schema; dates are examples.

**1. Every A-share with the full quote row.** 沪深京A股; `maxItems: 0` = no limit.

```json
{"mode":"quotes","markets":["cn-a-shares"],"maxItems":0}
```

**2. Top 100 gainers.** Sorted by Eastmoney, so one page is fetched.

```json
{"mode":"quotes","markets":["cn-a-shares"],"sortBy":"changePercent","sortDescending":true,"maxItems":100}
```

**3. Hong Kong by turnover.** Rows carry `quotesDelayed: true`.

```json
{"mode":"quotes","markets":["hk-main"],"sortBy":"amount","sortDescending":true,"maxItems":300}
```

**4. A+H premium table.** 210 pairs with `ahPriceRatio`, `ahPremiumPercent`.

```json
{"mode":"quotes","markets":["hk-ah"],"maxItems":0}
```

**5. Convertible bond screener.** Conversion data and the underlying stock.

```json
{"mode":"quotes","markets":["convertible-bonds"],"maxItems":0}
```

**6. Look up codes, names and links.** Codes, ids, names, links; `markets` cleared.

```json
{"mode":"quotes","markets":[],"symbols":["600519","00700","AAPL","贵州茅台","https://quote.eastmoney.com/sz000001.html"],"maxItems":0}
```

**7. Whole daily history of a few stocks.** `backward` stays positive; the default is raw.

```json
{"mode":"history","symbols":["600519","000001","00700"],"period":"daily","adjustment":"backward","maxItems":0}
```

**8. One trading day of the 50 largest A-shares.** Codes come from the sorted list; ran in 45 s on 2026-10-25.

```json
{"mode":"history","markets":["cn-a-shares"],"sortBy":"marketCap","sortDescending":true,"maxSymbols":50,"period":"daily","fromDate":"2026-10-23","toDate":"2026-10-23","maxItems":0}
```

**9. Whole open-end fund catalogue.** One request.

```json
{"mode":"funds","fundTypes":["open-end"],"maxItems":0}
```

**10. NAV history of chosen funds.** Unit and accumulated NAV, dividends, splits.

```json
{"mode":"fundNav","fundCodes":["000001","110011","161725","510300","000198"],"maxItems":0}
```

**11. Latest results summary of all A-shares.** Empty `reportPeriods` = latest quarter with rows.

```json
{"mode":"financials","reportKinds":["performance"],"reportMarket":"cn-a-shares","maxItems":0}
```

**12. Balance sheet, income and cash flow of a quarter.** Joinable on `code`.

```json
{"mode":"financials","reportKinds":["balance","income","cashflow"],"reportPeriods":["2026-06-30"],"reportMarket":"cn-a-shares","maxItems":0}
```

**13. Filings of one day.** Date ranges are read day by day.

```json
{"mode":"announcements","announcementScopes":["cn-a-shares","us-all"],"fromDate":"2026-10-23","toDate":"2026-10-23","maxItems":0}
```

### Input reference

| Field | Type | Default | Meaning |
|---|---|---|---|
| `mode` | string | `quotes` | `quotes`, `history`, `funds`, `fundNav`, `financials` or `announcements`. |
| `markets` | array | prefill `["cn-a-shares"]`, no default | Market list keys (below). Quotes reads them; History takes codes from them when you give none. Clear it to read only typed codes or boards; left out of an API call with no codes, A-shares are read. |
| `symbols` | array | `[]` | Codes (`600519`), quote ids (`1.600519`), HK or US tickers (`00700`, `AAPL`), Eastmoney links, Chinese or English names. |
| `searchTerms` | array | `[]` | Names always resolved by Eastmoney's search (茅台, 比亚迪). |
| `boards` | array | `[]` | Board codes (`BK0475`, `MK0021`); adds every constituent. Quotes. |
| `maxItems` | integer 0–1,000,000 | 1000 (prefill 100) | Stop after N rows; 0 = no limit. |
| `sortBy` | string | `code` | `code`, `amount`, `volume`, `changePercent`, `price`, `marketCap`, `floatMarketCap`, `turnoverRate`, `volumeRatio`, `amplitude`, `peDynamic`, `pb`, `mainNetInflow`, `listingDate` (sorted by Eastmoney). |
| `sortDescending` | boolean | false | Highest first. |
| `valuation`, `fundamentals`, `moneyFlow`, `classification`, `orderBook` | boolean | true | Quote column blocks; false drops the block. |
| `period` | string | `daily` | `1m`, `5m`, `15m`, `30m`, `60m`, `daily`, `weekly`, `monthly`, `quarterly`, `half-yearly`, `yearly`. 1-minute bars cover the latest trading day, 5- to 60-minute bars 31 trading days. |
| `adjustment` | string | `none` | `none` (raw), `forward` (前复权), `backward` (后复权). |
| `barsPerSymbol` | integer 0–100,000 | 0 | Newest N bars or NAV points per instrument; 0 = all. |
| `maxSymbols` | integer 1–20,000 | 200 | Instruments (History) or funds (NAV) taken from a list or type. |
| `fromDate`, `toDate` | string YYYY-MM-DD | `""` | Filter bars, NAV dates, announcements; in Funds mode they add a window return. |
| `fundTypes` | array | `["open-end"]` | `open-end`, `exchange-traded`, `money-market`. |
| `fundCodes` | array | `[]` | Six-digit fund codes for NAV mode; empty = codes from `fundTypes`. |
| `reportKinds` | array | `["performance"]` | `performance`, `forecast`, `express`, `balance`, `income`, `cashflow`, `valuation`. |
| `reportPeriods` | array | `[]` | Quarter ends (`2026-06-30`) or trading days (`valuation`); empty = latest. |
| `reportMarket` | string | `cn-a-shares` | `all`, `cn-a-shares`, `cn-sh-a`, `cn-sz-a`, `cn-chinext`, `cn-star`, `cn-bj-a`, `cn-b-shares`, `cn-neeq`, `cn-st-shares`. |
| `announcementScopes` | array | `["cn-a-shares"]` | `cn-a-shares`, `cn-sh-a`, `cn-sz-a`, `cn-chinext`, `cn-star`, `cn-bj-a`, `cn-b-shares`, `cn-neeq`, `hk-all`, `us-all`, `bonds`. |
| `proxyConfiguration` | object | Apify proxy | Leave the default (direct, then datacenter, then a capped residential rescue route). |

Names go through Eastmoney's search (first match wins); ids like `1.600519` and links skip the lookup. History mode takes codes from `symbols`, else from the market lists, up to `maxSymbols`.

### Market lists

Eastmoney's own lists of the quote centre, with the rows each held on 2026-10-25 (they change daily; every quote row also carries `listTotal`).

- **Mainland China**: `cn-a-shares` 沪深京A股 5,580 · `cn-sh-a` 沪市A股 2,319 · `cn-sz-a` 深市A股 2,907 · `cn-bj-a` 京市A股 354 · `cn-star` 科创板 619 · `cn-chinext` 创业板 1,412 · `cn-b-shares` B股 77 · `cn-new-shares` 新股 85 · `cn-st-shares` ST股 392 · `cn-delisting` 退市整理 2 · `cn-neeq` 新三板 6,431 · `cn-connect-sh` 沪股通 1,642 · `cn-connect-sz` 深股通 1,887
- **Hong Kong**: `hk-all` 全部港股 4,742 · `hk-main` 港股主板 2,621 · `hk-gem` 港股创业板 315 · `hk-connect-sh` 港股通(沪) 666 · `hk-connect-sz` 港股通(深) 666 · `hk-ah` AH股比价 210 · `hk-bluechips` 蓝筹股 95 · `hk-redchips` 红筹股 172 · `hk-stateowned` 国企股 218 · `hk-warrants` 港股窝轮 6,838 · `hk-cbbc` 港股牛熊证 5,527 · `hk-index` 港股指数 368
- **United States**: `us-all` 全部美股 13,906 · `us-wellknown` 知名美股 280 · `us-china` 中概股 382 · `us-china-internet` 互联网中国 23 · `us-technology` 美股科技类 29 · `us-financial` 美股金融类 20 · `us-pinksheet` 粉单市场 957 · `us-index` 美股指数 3
- **Funds, bonds, indices, boards, forex**: `etf` ETF基金 1,661 · `lof` LOF基金 390 · `reits` 公募REITs 103 · `convertible-bonds` 可转债 320 · `bonds-sh` 沪市债券 22,742 · `bonds-sz` 深市债券 20,006 · `bond-repo-sh` 沪市质押式回购 9 · `bond-repo-sz` 深市质押式回购 9 · `bond-index` 债券指数 6 · `index-sh` 上证系列指数 268 · `index-sz` 深证系列指数 957 · `index-csi` 中证系列指数 563 · `index-global` 全球主要指数 20 · `board-industry` 行业板块 496 · `board-concept` 概念板块 516 · `board-region` 地域板块 31 · `forex-all` 外汇行情 190 · `forex-cnh` 离岸人民币 20

### Data dictionary

#### Quotes

Fill % = share of rows with a non-empty value, measured on 5,580 A-share rows and 4,742 Hong Kong rows of the 2026-10-25 run (build 1.0.7); a dash means the column does not exist for that kind of row. Columns that cannot apply to an instrument are left out rather than null (a conversion price on a share), so no column is empty across a run. Identity, price and trading blocks are always on; the others are switchable.

| Fields | Eastmoney code · 中文 | Meaning | Fill % A-shares / Hong Kong |
|---|---|---|---|
| `secId` `code` `marketNum` `name` `url` | f12 代码 · f13 市场 · f14 名称 | **Identity.** Quote id `market.code` (input in every mode); code; market number (0 Shenzhen/Beijing, 1 Shanghai, 116 Hong Kong, 105/106/107 NASDAQ/NYSE/AMEX, 90 board, 2 CSI); name; quote link. | 100 / 100 |
| `nameTraditional` `nameEn` | f421 繁体名称 · f422 英文名称 | **Names.** Traditional and English name. | 99.9–100 / 72–100 |
| `securityTypeCode` | f19 证券类型 | **Board.** With `marketNum`: 1/2 Shanghai A, 1/23 STAR, 0/6 Shenzhen A, 0/80 ChiNext, 0/81 Beijing and NEEQ, 116/3 HK main, 116/4 GEM. | 100 / 100 |
| `tradingStatusCode` `tradingStatus` `tradingStatusCn` | f292 交易状态 | **Status.** Eastmoney status 1 to 19, English and Chinese. | 100 / 100 |
| `quoteTime` `tradeDate` | f124 交易时间 · f297 行情日期 | **Time.** ISO UTC time of the last update; ISO trading day. | 100 / 100 |
| `market` `marketCn` `exchange` `currency` `baseCurrency` `instrumentClass` `priceUnit` `volumeUnit` `quotesDelayed` | — | **Context.** Set by the Actor. `currency` per row (Shenzhen B-shares HKD, Shanghai B-shares USD); class: equity, fund, bond, cbond, repo, index, board, forex; units spelled out; `quotesDelayed` true for Hong Kong. | 100 / 100 |
| `listKey` `list` `listCn` `listTotal` `rank` `scrapedAt` `rowId` | — | **List.** List of origin, its size, position in Eastmoney's order, UTC read time, de-duplication key (= `secId`). | 100 / 100 |
| `price` `change` `changePercent` | f2 最新价 · f4 涨跌额 · f3 涨跌幅 | **Price.** In `priceUnit`; percent (1.25 = +1.25 %). Null if not traded. | 99.9 / 66.4 |
| `open` `high` `low` `previousClose` `amplitudePercent` | f17 今开 · f15 最高 · f16 最低 · f18 昨收 · f7 振幅 | **Session.** In `priceUnit`; amplitude in percent. | 99.9–100 / 66.4–71.1 |
| `speed3minPercent` `change5minPercent` `change3dPercent` `change5dPercent` `change10dPercent` `change60dPercent` `changeYtdPercent` | f22 涨速(3分钟) · f11 5分钟涨跌 · f127 3日涨跌幅 · f109 5日涨跌幅 · f160 10日涨跌幅 · f24 60日涨跌幅 · f25 年初至今涨跌幅 | **Momentum.** Percent change over 3 and 5 minutes, 3, 5, 10, 60 days, year to date. | 99.9–100 / 66.4–71 |
| `volume` `amount` | f5 成交量 · f6 成交额 | **Volume.** `volume` in `volumeUnit` (lots of 100 shares on the mainland, shares in Hong Kong and US, lots of 10 bonds); `amount` in `currency`. | 99.9 / 53.6–66.6 |
| `turnoverRatePercent` `volumeRatio` `buyVolume` `sellVolume` | f8 换手率 · f10 量比 · f34 外盘(买盘) · f35 内盘(卖盘) | **Activity.** Percent of float; vs 5-day average; outer and inner volume. | 99.8–100 / 48.7–90.3 |
| `bidPrice` `askPrice` `bidPrice2` `askPrice2` `bidVolume` `askVolume` `orderImbalancePercent` | f31 买一价 · f32 卖一价 · f142 买二价 · f143 卖二价 · f211 买量 · f212 卖量 · f33 委比 | **Order book.** Best two bids and asks, sizes, imbalance -100 to 100 (not on indices, boards, forex). | 98.4–100 / 60.7–100 |
| `marketCap` `floatMarketCap` `totalShares` `floatShares` | f20 总市值 · f21 流通市值 · f38 总股本 · f39 流通股本 | **Size.** In `currency`; share counts. | 100 / 59.7–59.8 |
| `peDynamic` `peStatic` `peTtm` `pb` | f9 市盈率(动态) · f114 市盈率(静态) · f115 市盈率(TTM) · f23 市净率 | **Valuation.** PE on annualised latest, last full-year, trailing-12-month earnings; price to book. No `peStatic` for US ADRs. | 100 / 59.3 |
| `revenue` `revenueYoyPercent` `netProfit` `netProfitYoyPercent` | f40 营业收入 · f41 营业收入同比 · f45 净利润 · f46 净利润同比 | **Fundamentals.** In `currency`, growth in percent, period in `reportDate`; mainland values cumulative for the fiscal year. No net profit for Hong Kong and US; Hong Kong amounts: see Data quality checks. | 99.9–100 / 58.9 |
| `roePercent` `bookValuePerShare` `grossMarginPercent` `debtRatioPercent` `reportDate` | f37 净资产收益率(加权) · f113 每股净资产 · f49 毛利率 · f57 资产负债率 · f221 报告期 | **Ratios.** Weighted ROE (not annualised); book value per share; gross margin (none for banks, Hong Kong, US); debt ratio (HK/US fractions x 100); report date. | 98.2–100 / 59.3–59.4 |
| `mainNetInflow` `mainNetInflowPercent` `superLargeNetInflow` `superLargeNetInflowPercent` `largeNetInflow` `largeNetInflowPercent` `mediumNetInflow` `mediumNetInflowPercent` `smallNetInflow` `smallNetInflowPercent` | f62 主力净流入 · f184 主力净占比 · f66 超大单净流入 · f69 超大单净占比 · f72 大单净流入 · f75 大单净占比 · f78 中单净流入 · f81 中单净占比 · f84 小单净流入 · f87 小单净占比 | **Money flow today.** Net inflow in `currency` and percent of turnover by order size; main force = super-large + large. | 99.9 / 53.5 |
| `mainNetInflow3d` `mainNetInflow3dPercent` `mainNetInflow5d` `mainNetInflow5dPercent` `mainNetInflow10d` `mainNetInflow10dPercent` | f267 3日主力净流入 · f268 3日主力净占比 · f164 5日主力净流入 · f165 5日主力净占比 · f174 10日主力净流入 · f175 10日主力净占比 | **Money flow 3, 5, 10 days.** Main-force net inflow and its share of turnover. | 99.9 / 61.3–64.8 |
| `mainNetInflowRank` `mainNetInflowRankChange` | f225 主力净占比排名 · f226 主力排名变化 | **Money-flow rank.** Eastmoney's rank by main-force share and its change (mainland). | 93.5–99.9 / — |
| `industryBoard` `industryBoardCode` `regionBoard` `conceptBoards` `listingDate` | f100 所属行业 · f265 行业板块代码 · f102 所属地域 · f103 所属概念 · f26 上市日期 | **Classification.** Boards of the stock (`industryBoardCode` BKnnnn feeds `boards`); listing date. | 98.7–100 / 58.9–97.1 |
| `hShareCode` `hShareMarketNum` `hShareName` `hSharePrice` `hShareChangePercent` `hShareSecId` | f191 A/H对应股代码 · f192 A/H对应股市场 · f193 A/H对应股名称 · f186 A/H对应股最新价 · f187 A/H对应股涨跌幅 | **A+H, A-share row.** The H-share of an A-share (A+H pairs only). | 3.8 / — |
| `aShareCode` `aShareMarketNum` `aShareName` `aSharePrice` `aShareChangePercent` `aShareSecId` | f191 A/H对应股代码 · f192 A/H对应股市场 · f193 A/H对应股名称 · f186 A/H对应股最新价 · f187 A/H对应股涨跌幅 | **A+H, Hong Kong row.** The A-share of a Hong Kong share. | — / 4.5 |
| `ahPriceRatio` `ahPremiumPercent` | f189 AH股比价 · f188 AH股溢价 | **A+H premium.** A price over H price in one currency; premium in percent. | 3.8 / 4.5 |
| `convertibleBondCode` `convertibleBondMarketNum` `convertibleBondName` `convertibleBondPrice` `convertibleBondChangePercent` `convertibleBondSecId` | f232 正股/转债代码 · f233 正股/转债市场 · f234 正股/转债名称 · f229 正股/转债最新价 · f230 正股/转债涨跌幅 | **Convertible link, share row.** The company's convertible bond. | 5.5–5.8 / — |

**Convertible-bond rows** (320) add `underlyingStockCode`, `Name`, `MarketNum`, `SecId`, `Price`, `ChangePercent` (f232 f234 f233 f229 f230 正股), `conversionPrice` (f235 转股价), `conversionValue` (f236 转股价值), `conversionPremiumPercent` (f237 转股溢价率), `pureBondValue` (f227 纯债价值), `pureBondPremiumPercent` (f238 纯债溢价率), `putTriggerPrice` (f239 回售触发价), `callTriggerPrice` (f240 强赎触发价), `maturityRedemptionPrice` (f241 到期赎回价), `conversionStartDate` (f242 开始转股日), `bondIssueDate` (f243 申购日). Filled on 96.6 to 100 % of the rows.

**Board and index rows** add `risingCount`, `fallingCount`, `unchangedCount` (f104 f105 f106 上涨 下跌 平盘家数), `leadingStockName`, `Code`, `MarketNum`, `SecId`, `Percent` (f128 f140 f141 f136 板块领涨股) and `laggingStockName`, `Code`, `MarketNum`, `SecId`, `Percent` (f207 f208 f209 f222 板块领跌股).

#### Price history

One row per bar; fill % from the 2,500-row run of 10 instruments (shares, index, board, ETF, bond, currency pair, US stock).

| Fields | Source | Meaning | Fill % |
|---|---|---|---|
| `secId` `code` `name` `market` `exchange` `currency` `instrumentClass` `url` | as quotes | Instrument identity (no `exchange` for currency pairs). | 90–100 |
| `period` `periodCn` `adjustment` `adjustmentCn` | klt, fqt | Bar size and adjustment, English and Chinese (日K, 不复权, 前复权, 后复权). | 100 |
| `date` `datetime` | f51 | ISO date; `datetime` (+08:00) on minute bars only. | 100 |
| `open` `high` `low` `close` | f52 开盘 · f54 最高 · f55 最低 · f53 收盘 | In `priceUnit`. | 100 |
| `previousClose` `change` `changePercent` `amplitudePercent` | f60 涨跌额 · f59 涨跌幅 · f58 振幅 | For an instrument's first bar these are empty, not 0. | 100 |
| `volume` `amount` `turnoverRatePercent` | f56 成交量 · f57 成交额 · f61 换手率 | Absent for currency pairs. | 90 |
| `volumeUnit` `priceUnit` `baseCurrency` `dailyBarsTotal` `scrapedAt` `rowId` | — | `dailyBarsTotal` = daily bars Eastmoney holds; `rowId` = `secId:period:adjustment:date`. | 10–100 |

#### Funds

Fill % from the 24,699-row run of all open-end funds (2026-10-25).

| Fields | Source | Meaning | Fill % |
|---|---|---|---|
| `fundCode` `fundName` `pinyinAbbr` `fundCategory` `fundType` `fundTypeCn` | ranking, fundcode_search | Code, name, pinyin (拼音缩写), category (混合型-偏股 …), ranking of origin. | 100 |
| `navDate` `nav` `accumulatedNav` `dayGrowthPercent` | 单位净值 · 累计净值 · 日增长率 | Unit NAV, accumulated NAV, daily growth (open-end). | 96.7–99.9 |
| `week1Percent` `month1Percent` `month3Percent` `month6Percent` `year1Percent` `year2Percent` `year3Percent` `year5Percent` `ytdPercent` `sinceInceptionPercent` | 近1周 … 近5年 · 今年来 · 成立来 | Return over 1 week, 1, 3, 6 months, 1, 2, 3, 5 years, year to date, since inception, percent. | 44–100 |
| `inceptionDate` | 成立日 | Inception date. | 100 |
| `originalFeePercent` `feePercent` `feeDiscount` `feeViaCashAccountPercent` | 原费率 · 现费率 · 折扣 | Subscription fee before and after discount, discount in 折 (1 = 10 %), fee via the broker cash account. | 49.4–99.7 |
| `purchaseStatus` `purchaseStatusCn` | 申购状态 | open, subscription period, redemption stopped, purchase stopped, closed period, trading stopped … | 92.2 |
| `currency` `fundsInList` `rank` `url` `scrapedAt` `rowId` | — | CNY; size of and position in the ranking; fund page; `rowId` = `fundType:fundCode`. | 100 |

Money-market funds (957 rows) add `yieldPer10kUnits` (万份收益), `annualised7dPercent` (七日年化), `annualised14dPercent`, `annualised28dPercent`; with `fromDate` or `toDate` every fund gets `rangeReturnPercent`, `rangeFrom`, `rangeTo`.

#### Fund NAV history

One row per NAV date; fill % from the 2,000-point run of 5 funds (one a money fund).

| Fields | Source | Meaning | Fill % |
|---|---|---|---|
| `fundCode` `fundName` `fundCategory` `navDate` | pingzhongdata | Fund and NAV date (Beijing day). | 100 |
| `nav` `accumulatedNav` `dailyReturnPercent` | Data_netWorthTrend, Data_ACWorthTrend | Unit NAV, accumulated NAV, daily return in percent. | 80 |
| `yieldPer10kUnits` `annualised7dPercent` | Data_millionCopiesIncome, Data_sevenDaysYearIncome | Money funds only: income per 10,000 units, 7-day annualised yield. | 20 |
| `navEvent` `navEventCn` `dividendPerUnit` `dividendText` `dividendRecordDate` `dividendPayDate` `splitType` `splitRatio` | NAV markers + 分红送配 page | `dividend`, `split` or `other` on event dates; cash per unit, Eastmoney's wording, record and payment dates; split type and ratio. | 0.1 |
| `fundManagers` `feePercent` `originalFeePercent` `minPurchaseAmount` | fund_Rate, fund_sourceRate, fund_minsg | Managers, fees, minimum purchase. | 80–100 |
| `currency` `url` `scrapedAt` `rowId` | — | CNY; fund page; `rowId` = `fundCode:navDate`. | 100 |

#### Financial reports

Seven report kinds of Eastmoney's financial data centre, one row per company and period, amounts in CNY. Every row carries `code`, `name`, `reportKind`, `reportDate`, `noticeDate`, `currency`, `url`, `reportPeriod` (the period you asked for) and `rowId`; lines a company type does not have (bank lines on an industrial) are left out. Fill % from 2,000 results-summary rows and 11 to 300 rows of the other kinds, 2026-10-25.

**Results summary (业绩报表)**, report `RPT_LICO_FN_CPD`:

| Fields | Eastmoney columns | Meaning | Fill % |
|---|---|---|---|
| `code` `secuCode` `name` `market` `securityType` `industry` `industryBoard` | SECURITY_CODE, SECUCODE, TRADE_MARKET, PUBLISHNAME | Code (600519.SH), name, board, A股, industry. | 100 |
| `reportDate` `reportPeriod` `reportType` `reportQuarter` `reportYear` `reportPeriodName` `noticeDate` `updatedAt` | REPORTDATE, DATATYPE, QDATE, NOTICE_DATE | Period end; period you asked for; labels (2026年 半年报, 2026Q2); notice and update dates. | 100 |
| `basicEps` `basicEpsExclNonRecurring` `bookValuePerShare` `operatingCashFlowPerShare` | BASIC_EPS, DEDUCT_BASIC_EPS, BPS, MGJYXJJE | Per share, CNY (扣非 excludes non-recurring items). | 99.8–100 |
| `revenue` `netProfitToParent` | TOTAL_OPERATE_INCOME, PARENT_NETPROFIT | CNY, cumulative for the fiscal year. | 100 |
| `revenueYoyPercent` `netProfitYoyPercent` `revenueQoqPercent` `netProfitQoqPercent` | YSTZ, SJLTZ, YSHZ, SJLHZ | Growth vs a year ago and vs the previous quarter, percent. | 100 |
| `roeWeightedPercent` `grossMarginPercent` | WEIGHTAVG_ROE, XSMLL | Weighted ROE; gross margin (none for banks). | 97–98.8 |
| `dividendPlan` `dividendYieldPercent` `dividendYear` | ASSIGNDSCRPT, ZXGXL, PAYYEAR | Proposed distribution (Eastmoney's wording), dividend yield, year. | 14.8–99.3 |
| `reportKind` `reportKindCn` `currency` `url` `scrapedAt` `rowId` | — | Report name, CNY, quote link, `rowId` = `kind:code:date`. | 100 |

The other six kinds (fields filled on at least 95 % of rows; each line `x` also has `xYoyPercent`, its change against the same period a year earlier, in percent; fill rates from the 2026-10-25 runs):

**Results forecast (业绩预告)** (`RPT_PUBLIC_OP_NEWPREDICT`, 172 rows): `forecastMetric`, `forecastAmountLower`, `forecastAmountUpper`, `forecastText`, `forecastReason`, `forecastType`, `priorYearSamePeriodAmount`, `forecastMidpointAmount`, `forecastDirection`, `forecastNetProfitChangeLowerPercent`, `forecastNetProfitChangeUpperPercent`, `forecastQoqMeanPercent`. Less filled: `forecastChangeLowerPercent` 68 %, `forecastChangeUpperPercent` 68 %, `forecastMidpointChangePercent` 68 %.

**Results express (业绩快报)** (`RPT_FCI_PERFORMANCEE`, 11 rows): `basicEps`, `revenue`, `revenuePriorYear`, `netProfitToParent`, `netProfitToParentPriorYear`, `bookValuePerShare`, `roeWeightedPercent`, `netProfitYoyPercent`, `revenueQoqPercent`, `netProfitQoqPercent`, `reportQuarter`, `reportType`.

**Balance sheet (资产负债表)** (`RPT_DMSK_FN_BALANCE`, 300 rows): `totalAssets`, `fixedAssets`, `cashAndEquivalents`, `cashYoyPercent`, `accountsReceivable`, `inventory`, `totalLiabilities`, `accountsPayable`, `totalEquity`, `currentRatioPercent`, `debtToAssetsPercent`. Less filled: `advancesFromCustomers` 31.7 %. Plus 8 bank, insurer and broker lines on under 5 % of rows.

**Income statement (利润表)** (`RPT_DMSK_FN_INCOME`, 300 rows): `netProfitToParent`, `revenue`, `totalOperatingCost`, `costOfSales`, `operatingExpenses`, `sellingExpenses`, `adminExpenses`, `financeExpenses`, `operatingProfit`, `profitBeforeTax`, `incomeTax`, `taxesAndSurcharges`, `netProfitYoyPercent`, `netProfitExclNonRecurring`. Plus 6 bank, insurer and broker lines on under 5 % of rows.

**Cash-flow statement (现金流量表)** (`RPT_DMSK_FN_CASHFLOW`, 300 rows): `netCashFromOperations`, `cashFromSales`, `cashPaidToEmployees`, `netCashFromInvesting`, `capitalExpenditure`, `netCashFromFinancing`, `netIncreaseInCash`. Less filled: `investmentIncomeReceived` 76 %. Plus 6 bank, insurer and broker lines on under 5 % of rows.

**Daily valuation of every A-share (估值分析)** (`RPT_VALUEANALYSIS_DET`, 300 rows): `marketCap`, `freeFloatMarketCap`, `closePrice`, `changePercent`, `totalShares`, `freeFloatShares`, `peTtm`, `peLatestAnnual`, `pbMrq`, `pcfLatestAnnual`, `pcfTtm`, `psTtm`, `peg`.

#### Announcements

One row per notice. Fill % from the 2,889-row run of one trading day (A-shares and US stocks); `titleEn` exists on US filings only and `announcementsInScope` only with a date range.

| Fields | Eastmoney field | Meaning | Fill % |
|---|---|---|---|
| `announcementId` `rowId` | art_code | Notice id (AN2026…), unique. | 100 |
| `title` `titleEn` `language` | title_ch, title_en, language | Chinese title (US filings: form name such as 8-K); English title on US filings; `Chinese`/`English`. | 37.5–100 |
| `noticeDate` `publishedAt` | notice_date, display_time | Filing date (after the close = next trading day); publication time +08:00. | 100 |
| `category` `categories` `annTypes` | columns, ann_type | First and all categories (三季度报告全文, 董事会决议公告 …), type codes. | 100 |
| `code` `name` `companies` `companyCount` `quoteUrl` | codes | First company, all companies, their count, quote page. | 100 |
| `url` `scope` `scopeCn` `announcementsInScope` `scrapedAt` | total_hits | Notice page; scope you asked for; with a date range, notices in the scope that day. | 100 |

### Sample output

Real rows from platform runs of build 1.0.7 on 2026-10-25 (last trading day: Friday 2026-10-23). Nothing is masked or edited; rows are wrapped.

**Quotes, a mainland A-share (selected columns of 110)**

```json
{
 "secId": "1.600519", "code": "600519", "marketNum": 1, "name": "贵州茅台", "nameTraditional": "貴州茅台", "nameEn": "KWEICHOW MOUTAI",
 "quoteTime": "2026-10-23T08:11:58.000Z", "tradeDate": "2026-10-23", "price": 1335, "changePercent": 1.25, "change": 16.51,
 "open": 1311.84, "high": 1343.88, "low": 1310, "previousClose": 1318.49, "amplitudePercent": 2.57, "change60dPercent": 3.33,
 "volume": 57686, "amount": 7677216283, "turnoverRatePercent": 0.46, "marketCap": 1668858937335,
 "floatMarketCap": 1668858937335, "peDynamic": 18.74, "peStatic": 20.27, "peTtm": 20.49, "pb": 6.64, "revenue": 92278072083.21,
 "revenueYoyPercent": 1.300099, "netProfit": 44516880421.86, "netProfitYoyPercent": -1.951595, "roePercent": 16.75,
 "bookValuePerShare": 200.989755, "grossMarginPercent": 89.555213, "debtRatioPercent": 15.193112, "reportDate": "2026-06-30",
 "mainNetInflow": 283257760, "mainNetInflowPercent": 3.69, "industryBoard": "白酒Ⅱ", "regionBoard": "贵州板块",
 "conceptBoards": ["酿酒概念", "西部大开发", "电商概念", "央国企改革", "超级品牌", "乡村振兴", "白酒", "味蕾经济"], "listingDate": "2001-08-27",
 "market": "Shanghai", "exchange": "SSE", "currency": "CNY", "instrumentClass": "equity", "priceUnit": "CNY per share",
 "volumeUnit": "lot (100 shares)", "tradingStatus": "market holiday", "quotesDelayed": false, "listTotal": 5580,
 "url": "https://quote.eastmoney.com/unify/r/1.600519", "scrapedAt": "2026-10-25T00:19:16.612Z"
}
```

**Price history, one daily bar**

```json
{
 "secId": "1.600519", "name": "贵州茅台", "currency": "CNY", "period": "daily", "adjustment": "raw prices as traded",
 "date": "2026-10-23", "open": 1311.84, "high": 1343.88, "low": 1310, "close": 1335, "previousClose": 1318.49, "change": 16.51,
 "changePercent": 1.25, "volume": 57686, "amount": 7677216283, "turnoverRatePercent": 0.46, "volumeUnit": "lot (100 shares)",
 "priceUnit": "CNY per share", "dailyBarsTotal": 6027, "rowId": "1.600519:daily:none:2026-10-23"
}
```

**Funds, one catalogue row**

```json
{
 "fundCode": "110011", "fundName": "易方达优质精选混合(QDII)", "fundCategory": "QDII-混合偏股", "navDate": "2026-10-23", "nav": 3.9095,
 "accumulatedNav": 5.6995, "dayGrowthPercent": 1.28, "week1Percent": -2.49, "month1Percent": -3.29, "month3Percent": -4.79,
 "month6Percent": -20.39, "year1Percent": -30.88, "year5Percent": -48.74, "ytdPercent": -26.36, "sinceInceptionPercent": 444.46,
 "inceptionDate": "2008-06-19", "originalFeePercent": 1.5, "feePercent": 0.15, "purchaseStatus": "open", "rank": 21096
}
```

**Fund NAV history, a dividend day of an ETF (selected columns)**

```json
{
 "fundCode": "510300", "fundName": "沪深300ETF华泰柏瑞", "navDate": "2025-06-18", "nav": 3.9043, "accumulatedNav": 1.7291,
 "dailyReturnPercent": 0.13, "navEvent": "dividend", "dividendPerUnit": 0.088, "dividendText": "每10份派现金0.8800元",
 "dividendRecordDate": "2025-06-17", "dividendPayDate": "2025-06-27"
}
```

**Announcement (selected columns)**

```json
{
 "announcementId": "AN202610221830798278", "title": "兴发集团:湖北兴发化工集团股份有限公司关于董事、高级管理人员增持股份进展公告", "language": "Chinese",
 "noticeDate": "2026-10-23", "publishedAt": "2026-10-22T16:07:40+08:00", "categories": ["高管人员持股变动", "股东/实际控制人股份增持"],
 "code": "600141", "name": "兴发集团", "url": "https://data.eastmoney.com/notices/detail/600141/AN202610221830798278.html",
 "scope": "Shanghai + Shenzhen + Beijing A-shares", "announcementsInScope": 1808
}
```

**CSV columns.** Exports contain every column of the mode; the *Quotes* view of the Output tab (`code, name, nameEn, market, exchange, currency, price, changePercent, volume, amount, turnoverRatePercent, marketCap, peTtm, pb, revenue, netProfit, roePercent, mainNetInflow, industryBoard, tradingStatus, list, url`) is a good spreadsheet header. Arrays are comma-joined in CSV.

### Scale and speed

Measured on the Apify platform on 2026-10-25, build 1.0.7, 2,048 MB, default settings; duration is the run's own. Eastmoney answers differently by hour, so read these as typical.

| Mode | Input | Rows | Seconds |
|---|---|---|---|
| Quotes, the prefilled input | 100 A-shares | 100 | 8.0 |
| Quotes | 1,000 A-shares, default settings | 1,000 | 19.8 |
| Quotes | all A-shares + all Hong Kong, no limit | 10,322 | 103.7 |
| Quotes, 8 lists in one run | A+H, US-listed Chinese, convertible bonds, boards, forex, indices, REITs, B-shares | 2,046 | 73.4 |
| Funds | all open-end funds | 24,699 | 34.0 |
| Price history | whole daily history of Kweichow Moutai (2001-08-27 to 2026-10-23) | 6,027 | 7.7 |
| Price history | 10 instruments x 250 daily bars (shares, index, board, ETF, bond, currency pair, US) | 2,500 | 34.4 |
| Price history | 5-minute bars of Kweichow Moutai (31 trading days) | 1,488 | 14.6 |
| Fund NAV history | 5 funds, newest 400 points each | 2,000 | 5.7 |
| Financial reports | results summary 2026-06-30, capped at 2,000 | 2,000 | 9.4 |
| Financial reports | forecast and express 2026-09-30; balance, income, cash flow 2026-06-30 (300 each); valuation 2026-10-23 (300) | 172 / 11 / 300 | 3.6 to 10.5 each |
| Announcements | one trading day, A-shares + US stocks | 2,889 | 21.4 |

The largest proofs: **10,322 unique quote rows in one run with 0 duplicates** (5,580 A-shares and 4,742 Hong Kong rows) and **24,699 unique funds in one run with 0 duplicates**, both on build 1.0.7. Page counts and totals change every day as stocks list and funds launch.

- **The market-list endpoint is the slow part:** 100 rows a page, and an exit address is refused after a handful of requests. The Actor gives each address a strict budget, rotates through fresh datacenter sessions and then a small capped residential rescue route, and hedges the first request so first rows arrive in seconds. In the 10,322-row run 100 of the 104 list pages came through the rescue route.
- **Everything else is fast:** history, the fund ranking, NAV files, the data centre and announcements tolerate bursts from one address; one request returns a stock's whole daily history or the whole open-end fund ranking.
- **Time limit:** the Actor keeps a reserve of 12 % of the timeout (8 to 30 s) and stops cleanly before it.

### Data quality checks

The numbers were checked against Eastmoney's own pages on 2026-10-25, using data from the same runs as the samples.

**Quote rows against the K-line chart.** For 24 instruments in 14 kinds of market (Shanghai, Shenzhen, STAR, ChiNext, Beijing, Hong Kong x4, both B-share markets, 2 convertible bonds, a REIT, an index, a board, 2 currency pairs, 5 US-listed names) price, volume, turnover and percentage change equal the daily bar of Eastmoney's chart API for the same day: 24 of 24 (Kweichow Moutai: close 1,335, 57,686 lots, +1.25 % in both).

**Valuation and fundamentals.** For Kweichow Moutai, Ping An Bank, CATL and SMIC, price and market cap equal (TTM PE and PB match to Eastmoney's rounding) the data centre's 估值分析 row, and revenue and net profit equal its 业绩报表 row (4 of 4). **Funds and notices.** The 20 newest NAV points of three funds equal the fund page's list (60 of 60); catalogue returns of four funds and the yields of two money funds equal the fund pages; five announcements equal Eastmoney's notice API.

What the checks found:

- **Hong Kong amounts carry one conversion rate.** For eight Hong Kong companies with a 2026-06-30 report (Tencent, CCB, Xiaomi, Meituan, HSBC, AIA, CK Hutchison, Ping An) revenue and book value per share in the quote row are exactly 1.1513 times the figures on Eastmoney's Hong Kong F10 page, whatever currency the company reports in (China Mobile, 2026-09-30: 1.1649); ROE and debt ratio are identical. Eastmoney's two sources thus use different currencies with one rate per report date. The Actor passes the quote feed through and labels the row `currency: HKD`; compare Hong Kong companies with each other, not with a filing. Alibaba, with a March fiscal year, does not follow the pattern (its quote-feed revenue is about 30 % of the F10 fiscal-year figure).
- **Eastmoney writes 0 where it has no figure** (net profit and gross margin of Hong Kong and US listings, a bank's gross margin, a currency pair's volume). These become missing values, never numbers.
- **A third of the Hong Kong list has no price.** Of 4,742 rows, 1,595 had no last price: 1,318 Hong Kong bonds and notes (names like `PRC B2710`), 229 main-board and 22 GEM shares that were suspended, not yet listed or had not traded, and 26 others. They are in Eastmoney's list and are kept, with `tradingStatus`; filter on `price` for live quotes.
- **Forward-adjusted prices can be negative:** Kweichow Moutai's 2001 bars come out near -312 (raw 35.55). The default is raw; backward stays positive.

### What you pay

Pay per result: one dataset row is one result; you pay for rows saved, not for requests or run time. The price per result falls with your Apify subscription tier.

| Results | Free | Bronze | Silver | Gold, Platinum, Diamond |
|---|---|---|---|---|
| 1,000 | $1.50 | $1.33 | $1.17 | $1.00 |
| 10,000 | $15.00 | $13.33 | $11.67 | $10.00 |
| 100,000 | $150.00 | $133.33 | $116.67 | $100.00 |

At the Free price: all 5,580 A-shares is $8.37, the 24,699-fund catalogue $37.05, the 6,027 daily bars of Kweichow Moutai $9.04, one trading day of filings (2,889 notices) $4.33; at the lowest tier two thirds of that.

**Maximum cost per run.** Apify lets you cap what one run may spend (Console: *Run options*; API: `maxTotalChargeUsd`). The Actor reads the cap at start, works out how many results fit, never writes a row it cannot charge for and stops cleanly with a message such as *"Saved 33 quotes — this run's maximum cost ($0.05) covers 33 results at the current price. Raise "Maximum cost per run" to collect more."* The run still succeeds and keeps what it saved. A cap below one result ends the run with *Saved 0 rows*. (The 33 in the example is the Free price; the figure rises with your tier.)

### Integrations

```python
from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("logiover/eastmoney-scraper").call(run_input={
    "mode": "quotes", "markets": ["cn-a-shares"], "sortBy": "amount", "sortDescending": True, "maxItems": 100})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["code"], row["name"], row["price"], row["changePercent"], row["volumeUnit"])
```

- **Google Sheets:** `=IMPORTDATA("https://api.apify.com/v2/acts/logiover~eastmoney-scraper/runs/last/dataset/items?format=csv&clean=true&token=<APIFY_TOKEN>")` after a scheduled run (use a read-only token).
- **Make, Zapier, n8n:** the Apify app of each tool: *Run Actor* with a recipe's JSON, then *Get dataset items*; trigger by schedule or webhook.
- **Airtable and warehouses (BigQuery, Snowflake, Postgres):** export CSV or JSON Lines; `secId` + `tradeDate`, `rowId` or `announcementId` are stable upsert keys.
- **Webhooks and schedules:** an `ACTOR.RUN.SUCCEEDED` webhook in the Integrations tab; schedule e.g. 16:30 Beijing time on weekdays (a weekend run returns the last close).
- **AI agents:** add the Actor to the Apify MCP server; a code or Chinese name returns one labelled row.

### Performance tips

- Switch off blocks you do not need (`orderBook`, `moneyFlow`, `classification`, `fundamentals`, `valuation`): smaller rows, lighter exports.
- "Top N": use `maxItems` with a sort order; Eastmoney sorts on the server, so one page is fetched.
- In history mode give explicit codes for many symbols; a market list first needs the slow list pages.

### Troubleshooting

Every message the Actor can write (status line, log or `SUMMARY`):

| Message or outcome | Meaning and action |
|---|---|
| `Saved N <things> (everything requested was read) in S s.` | `COMPLETED`. Nothing to do. |
| `… (max results reached) …` | Stopped at `maxItems`. Raise it (0 = no limit). |
| `… (stopped at the run time limit) …` | Timeout reserve reached; rows so far are saved. Narrow the input or raise the timeout. |
| `… N request(s) could not be read.` / `PARTIAL` | Some pages failed on every route; the rest is saved. Run again for the missing part. |
| `Eastmoney answered but nothing matched — 0 <things>.` | `EMPTY_RESULT`. The notes after it name the list, fund type, period or dates that matched nothing. |
| `Saved N … — this run's maximum cost ($X) covers M results …` / `Saved 0 rows — … does not cover a single result …` | The cost cap ended the run cleanly (or is below one result). Raise the cap or lower `maxItems`. |
| `Nothing to scrape: choose at least one market list …` / `… give codes in "Codes / names" …` / `… give fund codes …` | `INVALID_INPUT` (Quotes, Price history, Fund NAV): no list, board, code or fund. |
| `No <things> collected: Eastmoney refused every route (…)` | `BLOCKED`. Try later; report with the run link if it persists. |
| `No <things> collected: not one request succeeded (…) after N attempt(s).` | `FETCH_FAILED`: network or timeouts on every route. Try again; see `SUMMARY.lastError`. |
| `No <things> collected and N request(s) could not be read, so an empty result cannot be confirmed.` | Nothing saved and pages failed, so "empty" is not proven. Run again. |
| `Crashed after saving N <things>: …` | Unexpected error; saved rows are kept. Report with the run link. |
| `Ignored the unknown market list "x".` (also fund type, report, scope) / `Ignored "x" — a board code looks like BK0475.` / `Ignored the start date "x" — use YYYY-MM-DD.` | A value is not an allowed key or date; use the keys of the input reference. |
| `Could not read the list "…"` / `Could not read the … ranking` | That list failed on every route; other lists of the run are unaffected. |
| `Could not look up "x".` / `Eastmoney has no instrument matching "x".` | Search failed or knows no such name; use `1.600519` or a link. |
| `<report> covers Shanghai and Shenzhen A-shares only — not <market>.` | The daily valuation report has no Beijing, B-share or NEEQ rows. |
| `Eastmoney refused the <report> query for <period>: …` / `<report>: Eastmoney has no rows for <date> yet.` / `no rows for <date>.` | The data centre rejected the filter, or the period is not published; pick an earlier one or leave periods empty. |
| `Without a date range Eastmoney serves at most the newest 50,000 announcements per scope …` / `No announcements found for <scope>.` | Set `fromDate` and `toDate`; windows are read day by day. |
| `<route>: every address it offered is used up on this endpoint — stepping aside for now.` | Normal: the list endpoint's per-address limit; the Actor moves down the ladder. |
| Log warnings: cost cap below `maxItems`; `Proxy configuration failed …`; `Skipped a row the dataset refused …`; missing fund categories | Informational: the Actor continued (default proxy, one dropped row, no category column). Report a dropped row. |

### Honest limits

- **Snapshots, not ticks;** Hong Kong is 15 minutes delayed (`quotesDelayed: true`).
- **The list endpoint is rate limited per address.** Large multi-list quote runs take minutes (10,322 rows: 103.7 s) and use the residential rescue route.
- **Minute-bar depth is Eastmoney's:** 1-minute bars cover the latest trading day, 5- to 60-minute bars 31 trading days.
- **Hong Kong and US fundamentals are thin:** revenue, ROE, book value, debt ratio, but no net profit or gross margin, and Hong Kong amounts use Eastmoney's rate.
- **Funds:** catalogue and NAV history are complete; holdings and manager biographies are not collected. 1,306 of 24,699 open-end rows have purchase status *trading stopped* and 1,933 none.
- **Announcements are metadata:** the text and PDF are not downloaded.
- **Not covered:** futures, options, commodities, the dragon-tiger list (龙虎榜), shareholder lists, research reports, news, the 股吧 forum.

### Comparison with other options

| | This Actor | Copying from the website | Own script on the site's JSON | Licensed terminal or vendor |
|---|---|---|---|---|
| Setup | press Start | none | write and maintain code | account and licence |
| Units, placeholder zeros | normalised, zeros that mean "no data" become empty | as displayed | raw, with `-` and fake zeros | vendor-defined |
| Volume | tens of thousands of rows per run | a page at a time | yours, incl. the per-address limit | high, licensed |
| Cost | per result, with a cap | your time | your time and servers | subscription |

A licensed vendor is the choice for a data licence, redistribution rights, tick or derivatives data.

### FAQ

#### Is there an official Eastmoney API?

The numbers on eastmoney.com load from JSON endpoints that are not a documented public API. This Actor calls them and names every `fNN` code.

#### How do I scrape Eastmoney stock data to Excel or CSV?

Run Quotes mode with a list such as `cn-a-shares` and press **Export** on the Output tab: CSV and Excel are built in, JSON, XML and HTML come through the API.

#### Do I need a login, cookies or an API key for Eastmoney?

No. The Actor reads only what Eastmoney shows anonymous visitors.

#### Which markets and instruments are covered?

A-shares (Shanghai, Shenzhen, Beijing, STAR, ChiNext, ST), B-shares, NEEQ, Hong Kong, US stocks, ETFs, LOFs, REITs, bonds, repos, indices, boards and forex (51 lists). No futures or options.

#### Are the quotes real time?

They are the quote centre's figures when the list page is read. Eastmoney names the markets it delays for visitors outside mainland China (financial futures, Shanghai options, Hong Kong), so only Hong Kong rows are 15 minutes late and carry `quotesDelayed: true`.

#### Why do some Hong Kong rows have no price?

The "all Hong Kong stocks" list also holds Hong Kong bonds and notes and shares that are suspended, not yet listed or did not trade: 1,595 of 4,742 rows on 2026-10-25. Filter on `price`; `tradingStatus` says why.

#### What do the f2, f3, f62 and f184 codes mean?

`f2` last price, `f3` percentage change, `f62` main-force net inflow, `f184` its share of turnover. The data dictionary maps every code to its English column and Chinese label.

#### What unit is the volume column in?

`volumeUnit` says: `lot (100 shares)` for mainland shares, B-shares, ETFs and REITs (Eastmoney counts mainland volume in 手; turnover over price times volume comes out near 100), `share` for Hong Kong and US, `lot (10 bonds of 100 CNY face)` for bonds.

#### What currency are prices and market caps in?

The row's `currency`: CNY for mainland shares, funds and bonds, HKD for Hong Kong, USD for US stocks; Shenzhen B-shares HKD, Shanghai B-shares USD.

#### Why do Hong Kong revenue figures differ from the company's report?

Eastmoney's quote feed and its Hong Kong F10 page use different currencies with one rate per report date (1.1513 for 2026-06-30). The Actor passes the quote feed through and labels the row HKD; see Data quality checks.

#### Why is net profit empty for Hong Kong and US stocks?

Eastmoney's quote feed writes 0 there, meaning "not available", so the column is left out instead of showing a fake zero. For A-shares see the financial reports mode.

#### How do I get the full price history of a stock?

Price history mode, `symbols` = the code, `barsPerSymbol` 0: Kweichow Moutai's 6,027 daily bars since 2001-08-27 took 7.7 seconds.

#### Which price adjustment should I use?

Raw (default) is what traded. Forward adjusted is Eastmoney's chart default but can go negative. Backward adjusted stays positive and suits long-run returns.

#### How far back do minute bars go?

Measured 2026-10-25: 1-minute bars cover the latest trading day (240 bars for a mainland share, 330 for a Hong Kong share), 5- to 60-minute bars the latest 31 trading days, daily and longer bars the listing date.

#### How do I download the whole fund catalogue?

Funds mode, `fundTypes: ["open-end"]`, `maxItems: 0`: 24,699 funds on 2026-10-25. Add `exchange-traded` and `money-market` for ETFs, LOFs and money funds.

#### What is the difference between unit NAV and accumulated NAV?

Unit NAV (单位净值, `nav`) is the price of one unit. Accumulated NAV (累计净值) adds back dividends paid since inception, so it shows total return.

#### What do the money-market fund columns mean?

`yieldPer10kUnits` is the income of 10,000 units on `navDate` (万份收益); `annualised7dPercent` the 7-day annualised yield (七日年化).

#### How do I find a board code like BK0475?

Take a row's `code` from `board-industry`, `board-concept` or `board-region`, or `industryBoardCode` from a stock row, and put it into `boards`.

#### How do I look up a stock by its Chinese name?

Put the name into `symbols` or `searchTerms` (贵州茅台, 茅台, Apple): Eastmoney's search resolves it and the first match wins. Exact codes are safer for scripts.

#### Why did my code lookup return thousands of rows?

A market list was still selected: the Console prefills `cn-a-shares`, so clear **Market lists**. API calls without `markets` that name codes read only those codes.

#### What is the A+H premium?

Companies listed in Shanghai or Shenzhen (A) and Hong Kong (H): `ahPriceRatio` is A price over H price in one currency, `ahPremiumPercent` the A-share's premium. The `hk-ah` list holds 210 pairs.

#### How do I read the convertible bond columns?

`conversionValue` is what the shares you would get are worth, `conversionPremiumPercent` how far the bond trades above it, `pureBondValue` its worth without the option; trigger prices are the underlying prices for put and call rights.

#### How are announcements dated?

`noticeDate` is the date Eastmoney files the notice under (after the close it counts for the next trading day), `publishedAt` the publication time in Beijing time. Date ranges are read day by day on `noticeDate`.

#### Can I get the text or PDF of an announcement?

No: rows carry title, categories, companies, dates and the notice-page link, where the PDF is attached.

#### How much does it cost and how does the maximum cost work?

$1.50 per 1,000 results on the Free plan, down to $1.00 on higher tiers. With *Maximum cost per run* set, the Actor stops cleanly when the budget is used and keeps what it saved.

#### Why does a multi-list quote run take minutes?

Eastmoney's list endpoint refuses an address after a handful of requests, so pages go through many addresses (10,322 rows: 103.7 s). Other modes are faster per row.

#### How are duplicates handled?

Every row has a stable `rowId` and the Actor keeps an id set per run, so one instrument, bar, NAV date, report row or notice is saved once.

#### What time zone do the timestamps use?

`quoteTime` and `scrapedAt` are ISO 8601 UTC; minute-bar `datetime` and `publishedAt` carry +08:00 (Beijing). Dates are calendar days of the exchange.

#### Is it legal to scrape Eastmoney?

The Actor reads public data without logging in. What you may do with market data depends on Eastmoney's terms, exchange rules and your jurisdiction; see Legality and data protection.

#### What happens if Eastmoney changes its website?

The Actor reads JSON endpoints, not layouts, and every run writes a `SUMMARY`. Report problems on the Issues tab; we reply within 24 hours.

### Glossary

- **沪深京A股 / 科创板 / 创业板 / 北交所**: A-shares of Shanghai, Shenzhen and Beijing; STAR Market, ChiNext, Beijing Stock Exchange.
- **新三板 / B股**: NEEQ over-the-counter market; B-shares (Shanghai USD, Shenzhen HKD).
- **中概股 / AH股**: US-listed Chinese companies; A+H dual listings (溢价 = A-share premium).
- **可转债**: Convertible bond; 转股价 / 转股价值 / 转股溢价率 conversion price, value, premium; 纯债价值 pure-bond value; 回售 / 强赎 put and forced call.
- **板块**: Board or sector: industry (行业), concept (概念), region (地域).
- **涨跌幅 / 振幅 / 换手率 / 量比 / 委比 / 手**: Change %, amplitude, turnover rate, volume ratio, order imbalance, lot (100 shares, 10 bonds); 外盘 / 内盘 = buyer- / seller-initiated volume.
- **主力资金 / 超大单 / 大单 / 中单 / 小单**: Main-force money and the order-size classes of money flow.
- **市盈率 (动态 / 静态 / TTM) / 市净率**: P/E on annualised latest, last full-year and trailing-12-month earnings; price to book.
- **不复权 / 前复权 / 后复权 / K线**: Raw, forward- and backward-adjusted prices; candlestick bar.
- **单位净值 / 累计净值 / 万份收益 / 七日年化**: Unit and accumulated NAV; money-fund income per 10,000 units and 7-day annualised yield.
- **业绩报表 / 业绩预告 / 业绩快报**: Results summary, forecast, express report.
- **资产负债表 / 利润表 / 现金流量表 / 估值分析**: Balance sheet, income statement, cash-flow statement, daily valuation table.
- **港股通 / 公告 / ST股**: Southbound Stock Connect; announcement; shares under special treatment.

### Legality and data protection

The Actor reads public market data that Eastmoney shows to every anonymous visitor; it does not log in or bypass access controls. The only personal data in the output are the names of fund managers on public fund pages (`fundManagers`); if you process them, China's PIPL, the GDPR and local law apply and you are the controller. Market data is also subject to Eastmoney's terms, exchange rules and, in some places, database rights: use it for your own analysis, and take legal advice before redistributing or reselling it. The Actor keeps to per-address request budgets so it does not load Eastmoney beyond what a run needs. This is general information, not legal advice.

### Changelog

**1.0 (2026-10-25), first release.** Six modes over 51 market lists, board constituents and code or name lookups; every `fNN` code mapped to an English column; explicit units; placeholder zeros turned into missing values; route ladder (direct, datacenter, capped residential rescue) for the list endpoint's per-address limit; outcomes `COMPLETED`, `PARTIAL`, `EMPTY_RESULT` succeed, `BLOCKED`, `FETCH_FAILED`, `INVALID_INPUT` fail with the reason; a `SUMMARY` record in every run; clean stop at the maximum cost. In the latest build `markets` has no schema default, so API lookups of codes and boards read only what they name.

### Support

Questions, a missing field or a problem? Open an issue on the Actor's page (the **Issues** tab) with the run link. We reply within 24 hours. Requests for more lists, report tables or columns are welcome.

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/eastmoney-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Quotes = one row per instrument from Eastmoney's own market lists. Price history = K-line bars per instrument. Funds = Eastmoney's fund catalogue. Fund NAV history = the full net-asset-value series of a fund. Financial reports = the data centre's results, balance sheet, income statement, cash flow and daily valuation tables. Announcements = company filings.

## `markets` (type: `array`):

Eastmoney's own lists, exactly as the quote centre shows them. Used by Quotes mode; in Price history mode the codes are taken from these lists when you give no codes of your own. Clear the selection to read only the codes, names or boards you type below. If you leave this field out of an API call and give no codes either, the A-share list is read.

## `symbols` (type: `array`):

Any mix of Eastmoney codes (600519, 000001), quote ids (1.600519), Hong Kong or US tickers (00700, AAPL), Eastmoney links (https://quote.eastmoney.com/sh600519.html) or Chinese and English names (贵州茅台, Apple) — names are resolved through Eastmoney's own search. Used by Quotes and Price history modes.

## `searchTerms` (type: `array`):

Same as above but always resolved through Eastmoney's search box API — handy for partial Chinese names (茅台, 比亚迪).

## `boards` (type: `array`):

Eastmoney board codes (BK0475 banks, BK1036 semiconductors, MK0021 ETF group …). Each one adds every constituent of that board to a Quotes run. Board codes appear as industryBoardCode in the output.

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

Stop after this many rows (0 = no limit). One row is one instrument in Quotes mode, one bar in Price history, one fund, one NAV date, one report row or one announcement.

## `sortBy` (type: `string`):

Eastmoney's own sort keys. Code order is the most stable one for deep pagination; turnover or market cap are the usual ways to read the top of a market.

## `sortDescending` (type: `boolean`):

Turn on for descending order (biggest turnover, biggest gainers, largest market cap first).

## `valuation` (type: `boolean`):

Market cap, float market cap, share counts and the three PE ratios Eastmoney shows (dynamic, static, TTM) plus PB.

## `fundamentals` (type: `boolean`):

Revenue and net profit with year-on-year growth, weighted ROE, book value per share, gross margin, debt ratio and the report period they come from.

## `moneyFlow` (type: `boolean`):

Net inflow and share of turnover by order size (super-large, large, medium, small) for today, 3, 5 and 10 days, with Eastmoney's rank.

## `classification` (type: `boolean`):

The industry, region and concept boards the instrument belongs to, listing date, AH pair with premium, convertible-bond conversion data and board breadth (rising/falling counts, leading and lagging constituents).

## `orderBook` (type: `boolean`):

Best two bid and ask prices, bid and ask volume, order imbalance (委比), inner and outer volume.

## `period` (type: `string`):

K-line period. Measured 2026-10-25: 1-minute bars cover only the latest trading day (240 bars for a mainland share, 330 for a Hong Kong share), 5-, 15-, 30- and 60-minute bars cover the latest 31 trading days, daily and longer bars go back to the listing date.

## `adjustment` (type: `string`):

Raw prices (不复权) are the prices actually traded that day — the default. Forward adjusted (前复权) is what Eastmoney's charts show by default, but Eastmoney builds it by subtracting every later dividend from the old prices, so the early history of a heavy dividend payer goes negative (Kweichow Moutai's 2001 bars come out around −312). Backward adjusted (后复权) stays positive and is the one to use for long-run return series.

## `barsPerSymbol` (type: `integer`):

Keep only the newest N bars per instrument (0 = the whole history Eastmoney has). Also applies to NAV points per fund.

## `maxSymbols` (type: `integer`):

How many instruments (Price history) or funds (Fund NAV history) one run may read when the codes come from a market list or fund type.

## `fromDate` (type: `string`):

YYYY-MM-DD. Filters price bars, NAV dates and announcements.

## `toDate` (type: `string`):

YYYY-MM-DD. Filters price bars, NAV dates and announcements.

## `fundTypes` (type: `array`):

Which of Eastmoney's fund rankings to read. Open-end covers equity, bond, mixed, index, QDII and FOF funds; exchange-traded covers ETFs, LOFs and closed-end funds; money-market funds have their own yield columns.

## `fundCodes` (type: `array`):

Six-digit fund codes (000001, 110011 …) for Fund NAV history mode. Leave empty to take the codes from the chosen fund types.

## `reportKinds` (type: `array`):

Which tables of Eastmoney's financial data centre to read. Each row is one company for one report period, with Eastmoney's own figures.

## `reportPeriods` (type: `array`):

Quarter ends as YYYY-MM-DD (2026-06-30, 2025-12-31 …), or trading days for the daily valuation table. Leave empty and the Actor uses the most recent period Eastmoney has data for.

## `reportMarket` (type: `string`):

Which listed companies the report rows should cover, using the data centre's own market filters.

## `announcementScopes` (type: `array`):

Which markets' filings to list, using Eastmoney's own announcement scopes.

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

Leave the default on. Eastmoney's market-list endpoint answers only a couple of requests per address before refusing that address for minutes, so the Actor rotates addresses by itself: direct connection first, then datacenter sessions, then a small capped residential rescue route.

## Actor input object example

```json
{
  "mode": "quotes",
  "markets": [
    "cn-a-shares"
  ],
  "symbols": [],
  "searchTerms": [],
  "boards": [],
  "maxItems": 100,
  "sortBy": "code",
  "sortDescending": false,
  "valuation": true,
  "fundamentals": true,
  "moneyFlow": true,
  "classification": true,
  "orderBook": true,
  "period": "daily",
  "adjustment": "none",
  "barsPerSymbol": 0,
  "maxSymbols": 200,
  "fromDate": "",
  "toDate": "",
  "fundTypes": [
    "open-end"
  ],
  "fundCodes": [],
  "reportKinds": [
    "performance"
  ],
  "reportPeriods": [],
  "reportMarket": "cn-a-shares",
  "announcementScopes": [
    "cn-a-shares"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All rows collected in this run.

# 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 = {
    "mode": "quotes",
    "markets": [
        "cn-a-shares"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/eastmoney-scraper").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 = {
    "mode": "quotes",
    "markets": ["cn-a-shares"],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/eastmoney-scraper").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 '{
  "mode": "quotes",
  "markets": [
    "cn-a-shares"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/eastmoney-scraper --silent --output-dataset

```

## MCP server setup

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

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/zSDFsquvRUg8jsvc1/builds/pQFQzNrAPoB2KQ1GM/openapi.json
