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

- **URL**: https://apify.com/logiover/eastmoney-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/logiover/eastmoney-scraper.md

## Changelog

### 1.0 (2026-10-25)

- First release.
- Reads Eastmoney (东方财富) without login or API key, from the public JSON endpoints the site itself calls.
- Six modes: quotes (51 of Eastmoney's own market lists, board constituents, code and name lookups), price history (minute to yearly K-lines, raw or adjusted), funds (the whole fund catalogue with returns and fees), fund NAV history (the complete unit and accumulated NAV series), financial reports (results, forecasts, express reports, balance sheet, income statement, cash-flow statement, daily valuation of every A-share) and announcements.
- Every `fNN` quote code is mapped to a readable English name with Eastmoney's own Chinese label kept beside it; the mapping comes from Eastmoney's own front-end code and was cross-checked field by field against its financial data centre.
- Units are explicit per instrument class: lots of 100 shares in mainland China, single shares in Hong Kong and the US, 10-bond lots and "per 100 of face value" for bonds, index points for indices and boards, annualised rates for exchange repos.
- Missing figures stay missing: Eastmoney writes `0` where it has no fundamental (the profit lines of Hong Kong and US listings, the gross margin of a bank) and `-1` in its market-number fields, and both become `null` instead of a fake zero.
- Route ladder built for Eastmoney's per-address limit on the market-list endpoint (a couple of requests per exit address, then 502 for minutes): direct connection, then fresh datacenter sessions, then a capped residential rescue route, with the first request of a run hedged across routes so the first rows arrive fast even when the shared addresses are spent.
- Announcement runs with a date range are read day by day, which has no depth ceiling; without one Eastmoney serves at most the newest 50,000 per scope and the run says so.
- Outcomes: COMPLETED / PARTIAL / EMPTY_RESULT succeed with an explanatory status message, BLOCKED / FETCH_FAILED / INVALID_INPUT fail with the reason, and every run writes a SUMMARY record with per-route counts, latencies and how many addresses were used up.
- Stops cleanly at the run's maximum cost (`stoppedBy: "MAX_COST"`), never writing a result it cannot charge for.
- Input: `markets` has no schema default (the Console still prefills `cn-a-shares`), so a code, name or board lookup through the API reads only what it names; a call that names nothing at all still reads the A-share list.
- Documented from measurement (2026-10-25): 1-minute bars cover the latest trading day, 5-, 15-, 30- and 60-minute bars the latest 31 trading days.
- Proofs on build 1.0.7: 10,322 unique quote rows in one run (A-shares and Hong Kong, 103.7 s, 0 duplicates) and 24,699 unique funds in one run (34.0 s, 0 duplicates); 100 rows in 8 s and 1,000 rows in 19.8 s. Quote rows were compared with Eastmoney's K-line chart for 24 instruments (24 of 24 equal), valuation and fundamentals with the data centre (4 of 4), NAV points with the fund pages (60 of 60).
