Checking our numbers three ways — how we catch mistakes on dual-listed UK companies
Pull HSBC's net income from one source and it looks fine. Plausible number, right order of magnitude, nothing obviously wrong. It can still be the wrong number — not because HSBC misreported anything, but because whoever built the parser picked up the wrong line from the filing.
That's a hard mistake to catch by looking at one filing at a time. So for companies that happen to file the same results in more than one place, we don't just extract the number and move on — we compare it against the other filings of the same company for the same year. If they don't match, something upstream needs fixing.
One company, three filings
A handful of large UK companies — HSBC, GSK, AstraZeneca among them — end up filing their annual results in three separate places, because they're regulated in more than one place at once:
- Companies House — the UK's own company registry
- The EU disclosure system — because they're also listed on European exchanges
- The US SEC, as a 20-F — because they also trade as American Depositary Receipts
Same company, same fiscal year, same real-world result. But three different documents, in three different formats, sometimes using slightly different labels for the same line item. That's normally a headache. For us, it's a free second and third opinion.
How the check works
We don't treat any of the three filings as more trustworthy by default. We extract revenue, net income, and the rest of the standard metrics from each one independently, then compare them for the same company and the same year.
- If they agree — good, that's the sanity check passing.
- If they don't — we don't shrug it off as "different accounting." We go find out why, and it's almost always one of a handful of things: a parser grabbed the wrong line, an amendment quietly wiped out a number that used to be there, or — as you'll see below — we didn't realize two filings belonged to the same company in the first place.
Below are four real cases from that process — not hypotheticals.
The HSBC case — whose profit is it?
HSBC owns subsidiaries that aren't 100% owned — other shareholders hold a slice of some of them. That means HSBC's total group profit and "profit that belongs to HSBC's own shareholders" are two different numbers. The gap between them is called minority interest (the slice that belongs to those other, outside shareholders).
One of our extraction paths picked up the bigger, group-wide number ($24.6 billion) instead of the smaller one that actually belongs to HSBC shareholders ($23.5 billion) — a ~4% gap on one of the most closely watched lines in the filing. Comparing that source against the other two filings — which correctly reported the shareholder-only figure — is exactly what surfaced the mistake. Without a second and third filing to compare against, that 4% error would have shipped quietly.
The GSK case — a missing label
Companies don't all use the exact same label for "revenue" in their official filings — some use a slightly different, but equally valid, standard tag. GSK's EU filing did exactly that: it skipped the tag our extractor was looking for first, and used a legitimate alternate one instead.
Look for only the first tag, and you'd conclude GSK reported no revenue at all for a real, multi-billion-pound pharmaceutical company — obviously wrong, and exactly the kind of error that's invisible until you check a filing against another source that got it right.
The amendment case — when a correction hides the number
Companies occasionally file an official correction to a previous year's paperwork. Most of the time that's exactly what it sounds like: a fix. But we hit a case where a correction filing for GSK's US listing turned out to be a formality — cover paperwork only, with none of the actual figures re-filed.
A simple rule like "always trust the newest document" would have taken that empty correction at face value and quietly erased a full year of otherwise-correct results. The fix: an amendment only overrides the original if it actually contains restated numbers — an empty correction never wins against a filing that has real figures.
The identity case — invisible to the check
This one wasn't about wrong numbers at all — it was about not finding the numbers in the first place.
For a period, HSBC's US listing was tracked as a separate company record from its UK and EU filings, because of how its US identifier had originally been set up in our system. The three-way check only saw two of the three filings and had no idea the third one existed. Once we merged HSBC's US record into the same company profile as its UK and EU listings, the missing filing appeared and the check could finally run properly.
A company you don't recognize as itself is a company you can't cross-check — this is arguably the most important lesson from the whole project: identity has to be solved before the numbers can be trusted.
No currency games
Some of these filings report in dollars, some in pounds, some in euros, depending on where they're filed. We never quietly convert between currencies to force two numbers to "agree." Each source is compared against another one reporting in the same currency and units — a genuine currency or scale mismatch gets flagged as something to investigate, not smoothed over with a spot exchange rate.
That distinction matters: silently converting currency behind the scenes is exactly how a lot of screener tools end up producing numbers that are wrong by an entire order of magnitude, with nothing on the page to warn you.
What we found, company by company
| Company | Result |
|---|---|
| AstraZeneca | All three sources agreed |
| GSK | Agreed, once we fixed the missing revenue label and the amendment issue above |
| HSBC | Agreed, once we fixed the profit-vs-minority-interest issue and the identity issue above |
| Shell | Revenue agreed across sources; a small (~2.5%) gap on profit is still under review |
| Toyota (US ADR filing) | A currency/scale mismatch on the US filing was flagged rather than resolved automatically |
"Agreed" here means the headline revenue and profit figures matched across every filing we have for that company and year — not that every single line item matches everywhere. Some filings simply disclose less detail than others; that's a difference in what's reported, not an error in how we read it.
What this catches, and what it doesn't
To be clear about what this check is and isn't:
- It's quality control, not a second accounting opinion. All three filings describe the same real result under the same accounting rules (IFRS). When two of them disagree, that's a parsing bug somewhere — not two legitimate ways of counting the same year.
- It doesn't apply everywhere. Most companies only file in one place, so there's nothing to cross-check against. This works specifically for the subset of companies — mostly large, dual- or triple-listed names — that happen to file the same results more than once.
- It doesn't silently "fix" numbers by picking a favorite source. A mismatch gets investigated and the extraction gets corrected at the source; the site never shows a blended or averaged figure to paper over a disagreement.
What you see on OpenFilings
For everyday use, none of this internal plumbing needs to matter — you just want the number to be right. In practice:
- Company pages show the metric with its source filing and currency clearly labeled — never a blend of the three.
- For dual-listed names like HSBC or GSK, we run this three-way check before treating the headline revenue and profit numbers as reliable.
- Comparing companies across countries still starts with making sure you've matched the right legal entity first — see Finding the right company across markets — this check happens after that, on the numbers themselves.
We're extending the same idea — comparing a company's own filings against each other — to other companies that file in more than one country, one region at a time.