Finance and banking
We went looking for a signal and found an address
A company gets an LEI, and a register confirms where it actually is
What we were looking for
We went in expecting an expansion signal. A Legal Entity Identifier is a code a company needs before it can trade in most financial instruments, and getting one is a public act. If a foreign parent registered a local subsidiary, it should show up as a new record with a parent in another country.
It does, about four times a week in Germany. That is not a channel.
The hypothesis is mostly wrong. What sits underneath it is more useful.
Why the parent signal fails
The ownership half of the system is nearly empty for the companies you would want to contact. We took the hundred most recently issued German LEIs and asked the API for a parent on every one.
Two had a parent. One of those two had a foreign parent.
The global figures say the same thing: 485,994 relationship records against 3,416,159 entities. The reasons are recorded in the data itself, as reporting exceptions: no known person, natural persons, non-consolidating. Most companies are not owned by another company, and where they are, the exception is filed rather than the relationship.
The signal is real when it fires. A German company registered on 27 August 2026 resolves to a Swiss parent, exactly the pattern we were hunting. It just does not fire often enough to build on.
What we found instead
Every recent German record we pulled carried two things worth more than the parent link: a corroborationLevel of FULLY_CORROBORATED, and the literal commercial register number, in the form HRB 50517.
That is a postal address a register has confirmed, cross-referenced to the register entry, available free, with no key and no account. For anyone who posts physical mail to companies, that is the expensive problem solved by somebody else.
So the use inverts. LEI is a poor way to find a prospect and an excellent way to verify one you found elsewhere. It is a layer, not a source.
Where it is published
The API is at api.gleif.org/api/v1/. No authentication, no key, no account. We sent 105 sequential requests and every one returned 200.
Bulk files live at goldencopy.gleif.org, published three times a day, with a machine-readable index of direct download URLs. The full entity file is 477 MB, which you do not want. The eight-hour delta is 551 KB and held 3,846 changed records. That is the change feed, and it is small enough to poll.
The licence is CC0, public domain, commercial redistribution permitted. That is the cleanest licence position of any register in this collection.
The two filters that stop it being worthless
Filter on registration.status, and note it is not entity.status. The two fields disagree constantly. Globally, 1,962,291 records are issued and 1,193,741 are lapsed: about 35% of the index is an address nobody has revalidated. A lapsed record failed its annual renewal, so its address is exactly as stale as a scrape, and the whole advantage evaporates. In Germany, 184,408 of 254,901 records are issued.
Check entity.category before you trust an address. Searching for a well-known Swedish bank by name returns five records, and the top hit is a branch whose legal address is in Paris while its headquarters address is in Stockholm. Take legalAddress blindly on a branch record and you will post to the wrong country with total confidence.
What cost us a day
There is no collection endpoint for relationships. We assumed a JSON:API service exposing entities as a queryable collection would expose relationships the same way. It does not: /api/v1/relationship-records returns a 404 page. Relationships are reachable only one entity at a time.
So any graph-wide question, of the form “which foreign parents registered a subsidiary here this month”, has to be answered from the 23 MB relationship bulk file joined against the entity file. Not from the API. The per-entity approach does not survive past a few hundred lookups.
Worth recording: GLEIF's own documentation was the weakest source in the probe. The page describing the API gives no base URL, no version and no auth statement, and the page it links to for the documentation itself returns 404. Everything useful here came from calling the API, not from reading about it.
Honest limits
Coverage is driven by regulatory obligation, not by business activity. A company holds an LEI because it trades in financial instruments or is required to report. Most small and mid-sized businesses have none, and never will, so absence tells you nothing at all.
We could not verify the rate limit. A search result asserted sixty requests a minute, but that number appears on no GLEIF page we fetched, and the responses carry no rate-limit headers. What we can report is what we saw: 105 sequential requests, no rejections. Plan for a limit anyway. A missing header is not a missing limit.
A row from the run
Pulled live from the API on 29 August 2026. Each URL returned 200 when fetched.
Heilpflanzenwohl GmbH, Berlin
LEI issued 27 August 2026. Register number HRB 171162, address corroborated in full. Its parent resolves to a company registered in Switzerland.
The foreign-parent expansion signal, working exactly as hoped. It is also one of only two parents in a hundred.
The register publicationDogan Logistik GmbH, Dreieich
LEI issued 28 August 2026. Register number HRB 50517, status issued, address fully corroborated. No parent recorded.
The ordinary case, and the useful one: a register-confirmed postal address, free, the day after it appeared.
The register publicationSources
- GLEIF API · Free, no key, no account. Rate limit undocumented
- GLEIF Golden Copy bulk files and deltas · Free, unauthenticated downloads, three publishes a day, CC0 licence
Who buys this signal
Banks and corporate finance advisers, fund administrators, audit and compliance firms, anyone who has to post something to a regulated entity.
This is a working note, not a product claim. It describes research we ran on the date above and what it did and did not produce. Sources move and registers change their access terms; check before you build on one.
