One company, many securities: why A-share company counts come out too high
Short answer: a company's facts attach to each of its listed securities, so a company with two listings shows up twice in every period. Group on the company key and not the ticker. The error does not raise an exception, it just makes every company-level total slightly too large, weighted toward exactly the large dual-listed names that move an index.
Group on the company, not the security
About 4,800 companies have more than one listed security. Company-level analysis
must group on csfid or company_id, or a multi-listed company is counted
several times. (ChinaScope Reference, as described in the July 2026 profile,
measured across the full security master of roughly 40,100 securities issued by
roughly 32,700 companies.)
Within SAM's A-share segment coverage the figure is about 301 companies with
more than one listing, whose segment facts attach to each of their listed
securities and so appear multiple times per period. Aggregate or dedupe on
company_id2, the company key, and not on secu. (Data cut 2026-02-26.)
The two counts are measured over different populations, which is worth knowing before you reconcile them against each other. Neither is the other's error.
The same key, by a different name, in every dataset
| dataset | group on | not on |
|---|---|---|
| ChinaScope Reference | csfid / company_id | the security's own id |
| SAM | company_id2 | secu |
| Affiliate | company_id | secu |
| C2C Disclosed | company_id | secu |
| SmarTag | companyid | stockcode |
In Affiliate, structure attaches to each listed security. In C2C Disclosed, a
company's disclosures attach to each of its listed securities. The instruction
is identical in both profiles: aggregate or dedupe on company_id, not on
secu, for company-level work. (Both data cut 2026-05-16.)
The security ID is not a company ID
To go from a security to its company, join base_stock.csfid to
base_company.company_id. The security's own id, the S-prefixed one,
identifies the instrument rather than the company. Using it as a company key
does not fail loudly. It simply produces one "company" per instrument.
(ChinaScope Reference, July 2026 profile.)
Most companies in the news have no ticker at all
SmarTag tags 1,914,479 distinct companies and most of them are private or
unlisted. Of the listed side, 27,537 distinct securities appear, spanning
A-shares and a large body of foreign and Hong Kong listings. Companies with no
listing carry a csf placeholder in stockcode.
So join on companyid to reach all companies, and filter stockcode to real
exchange codes when you want listed names only, dropping the csf placeholder.
A-share codes there match SAM's secu. (Data cut 2026-09-16.)
If you go the other way and start from tickers, you are not sampling the company universe. You are sampling the listed sliver of it.
One more place the count inflates
In Fundamentals, the line-item fact carries no dates and no entity. You join it
to filing on report_id to attach publish_date, report_date,
company_id, secu, currency and the schedule. A standardized line appearing
under two schedules has two report_id values with possibly different figures,
and keying on report_id is what keeps them apart. Collapse them and you have
merged two real disclosures. (Data cut 2026-04-14.)