Playbook › Playbook
ADR feeds divide USD ADR price by ordinary-share book value, inflating P/B by the ADR ratio
Claim
fin.py / Yahoo reported TSM price-to-book of 87.00 on a BVPS of $4.80 against a
$417.17 ADR price. That is not a valuation signal; it is a unit mismatch.
Rebuilt from the statements:
| step | figure |
|---|---|
| Total equity (FY2025) | NT$5.36T |
ADRs outstanding (the Shares(dil) field) |
5.19B |
| Book value per ADR | NT$1,033 |
| ÷ ~31.5 TWD/USD | ~$32.80 |
| True P/B | 417.17 / 32.80 ≈ 12.7x |
The reported $4.80 is what you get by dividing equity by the 25.93B ordinary share count
(the Shares(out) field) and skipping the FX conversion entirely. Note that the same file
carries both share counts — Shares(dil) 5.19B (ADRs) and Shares(out) 25.93B (ordinaries) —
and the ratio between them (5.0) is the ADR ratio. That discrepancy is the tell.
What breaks
- P/B is wrong by the ADR ratio times the FX rate. For TSM that is ~18x too high.
- Graham intrinsic value collapses, because BVPS enters under the square root: reported $35.44 vs rebuilt √(22.5 × 11.64 × 32.80) ≈ $93. Both are far below the $417 price, so the verdict survived here — but on a cheaper ADR this error is large enough to flip a name from "trades below Graham IV" to "trades at 3x it".
- EV and EV/EBITDA go negative on some ADRs — the same class of failure applied to the net-debt bridge. TOELY showed EV −$238.56B, P/S 0.07, EV/EBITDA −0.31, and UMC showed EV −$32.05B. Negative EV on a profitable company is never real; it means the feed is mixing share counts or currencies.
- P/S is deflated by the same mechanism where revenue stays in local currency against a USD market cap (TOELY 0.07; UMC 0.21).
Extension — roic.ai uses a third share count, different from both (added 2026-08-04)
The full /analyze on TSM later the same day found the same class of failure in the second
vendor, with a different wrong divisor:
| source | share count used for per-share metrics | correct? |
|---|---|---|
| TSMC ordinary shares outstanding | 25.93B | ✅ the real count |
| ADR-equivalents (ratio 1:5) | 5.186B | ✅ the right divisor for an ADR |
Yahoo Shares(dil) / market-cap basis |
5.19B | ✅ correct |
Yahoo BVPS divisor |
25.93B (against a USD price) | ❌ mismatched |
roic.ai bs_sh_out / all per-share fields |
4.669B | ❌ matches neither |
roic.ai's aggregates are right — revenue NT$3.81T, equity NT$5.36T and total dividends
NT$466.78B all reconcile — but every *_per_sh field is divided by 4.669B, which is 5.55x
the ordinary count and 0.90x the ADR count. It is not the ADR ratio and not the ordinary count.
Consequence: roic.ai's book_val_per_sh of NT$1,146.91 overstates the true per-ADR figure
(NT$1,033.6) by 11%, and free_cash_flow_per_sh, eps and div_per_shr are all off by the
same factor.
So the two vendors are wrong in different directions on the same ticker, and cross-checking one against the other does not surface it — only rebuilding from aggregates does.
How to apply
- Tripwire: an impossible sign or magnitude. Negative enterprise value on a profitable company, price-to-sales below ~0.15 on a high-margin business, or price-to-book above ~20x outside of a buyback-hollowed balance sheet. Any of these on a foreign issuer means stop.
- Confirm by comparing the two share-count fields. If
Shares(out) / Shares(dil)is a clean small integer (2, 4, 5, 10), that is the ADR ratio, and every per-share metric in the file needs checking against which count it used. - Rebuild before quoting. BVPS = total equity ÷ true ADR count ÷ spot FX. EPS is usually correct because it is derived from the same ADR count as the price — verify it against net income ÷ ADR count anyway.
- Derive the FX rate from the company's own print, not a spot quote. TSMC's Q2 2026 release gave both NT$27.25 ordinary EPS and US$4.31 per ADR: 27.25 × 5 ÷ 4.31 = 31.61 TWD/USD, the exact rate embedded in the reported figures. Deriving it from dividends instead gave 28.8 and was wrong, because declaration and payment fall in different periods.
- Do not cross-check one vendor against another on an ADR — see the extension above; they fail differently on the same ticker. Rebuild from aggregates or go to the local listing.
- Cross-check against the local listing (2330.TW for TSM, 8035.T for Tokyo Electron) or roic.ai rather than trusting a repaired number.
- Related: [[pitfall-yahoo-mixes-cad-usd-on-cross-listed-issuers]] is the same failure across a CAD/USD pair · [[pitfall-adr-ticker-resolution]] covers picking the wrong ADR line entirely · [[principle-currency-consistency-roe-vs-coe]] · [[principle-primary-source-beats-vendor]].