
GLEIF, global register of LEI codes
A LEI (Legal Entity Identifier) is a twenty-character code every legal entity needs to trade on financial markets. The Global LEI Foundation (GLEIF) publishes the whole register openly: name, address, legal form, Chamber of Commerce number, status and who the direct and ultimate parent is. On 16 October 2026, 198,915 LEIs had a legal address in the Netherlands, out of more than 3.4 million worldwide.

New LEIs of Dutch legal entities: 18,289 LEIs in 2025, 60% more than in 2014
New LEIs of Dutch legal entities, 2014 – 2025, in LEIs. The highest point was 2017 (62,364).
Dutch LEIs by status: valid (ISSUED) is the largest part, 65% in oktober 2026
Breakdown in oktober 2026: valid (ISSUED) 65%, lapsed, not renewed (LAPSED) 23%, retired (RETIRED) 12%, other (incl. annulled, duplicate) 0.2%. Total: 199,545 LEIs.
What you can build with it1
What can you do with it?4 ideas
From Chamber of Commerce number to LEI
Filter on entity.registeredAs and you get the LEI for a Chamber of Commerce number. ING Groep N.V. (KvK 33231073) has LEI 549300NYKK9MWM7GGW15.
Who owns whom?
The direct-parent and ultimate-parent relations show which group is behind a company, also across borders. ING Groep has 6 direct and 71 ultimate subsidiaries with a LEI.
Mapping letterbox companies
Find Dutch LEIs whose ultimate parent is in another country and count per country. You see which foreign groups use the Netherlands as a base.
Lapsed registrations
A LEI must be renewed every year. Almost a quarter of Dutch LEIs had the status LAPSED in October 2026: not renewed, so the data may be out of date.
How to process it5 steps
Count per country
With page[size]=1 you fetch one record; the total is in meta.pagination.total. Use curl -g, otherwise it trips over the square brackets.
https://api.gleif.org/api/v1/lei-records?filter[entity.legalAddress.country]=NL&page[size]=1
Look up by KvK number
registeredAs is the number in the trade register; registration authority RA000463 is the Netherlands Chamber of Commerce.
https://api.gleif.org/api/v1/lei-records?filter[entity.registeredAs]=33231073&filter[entity.legalAddress.country]=NL
Follow the group structure
Each LEI has relationship links. direct-children gives the subsidiaries, ultimate-parent the top of the group.
https://api.gleif.org/api/v1/lei-records/549300NYKK9MWM7GGW15/direct-children
New since a date
Date fields accept > for 'after'. This counts all Dutch LEIs issued since 1 January 2025 (37,662 on 16 October 2026).
https://api.gleif.org/api/v1/lei-records?filter[entity.legalAddress.country]=NL&filter[registration.initialRegistrationDate]=%3E2025-01-01&page[size]=1
Everything at once
The golden copy is the whole register as CSV, JSON or XML, three times a day. On 16 October 2026: 3,463,900 records, 481 MB as a CSV zip.
https://goldencopy.gleif.org/api/v2/golden-copies/publishes/latest
Interesting combinations


Which Dutch companies belong to a foreign group?
Join the KvK number from GLEIF to the trade register and add establishment address and SBI code.


Who wins European tenders?
TED names the winner. Look up that name in GLEIF and see which group is ultimately behind it.
Similar sources
Chamber of Commerce business registerThe trade register has all Dutch businesses, including sole traders, but the API is paid. GLEIF only has legal entities with a LEI, but openly and with group relations.
- OOpenCorporates not in the index yet
Collects trade registers from many countries, but the API needs a token (HTTP 401 without one, 16 Oct 2026). Read the reuse terms before you publish.
What to watch out for
- Only those who need a LEI
A LEI is mandatory for parties on financial markets (among other things since MiFID II in 2018). Most small businesses have none.
- Lapsed is not dissolved
LAPSED means the LEI was not renewed. The company may still exist; the data just are no longer checked.
- Country is the current address
The country filter looks at the current legal address. A company that moved abroad no longer counts for the Netherlands.
- Parent only if known
Group relations are only included if the parent has a LEI and the relation was reported. Otherwise an exception is given (for example 'natural persons').
- Not every field can be filtered
Filtering on legal form (entity.legalForm.id) returned an error on 16 October 2026. Count legal forms from the golden copy instead.
APIJSON:API (REST) · read 16 Oct 2026
No key or account. tested
LEI records worldwide, of which 198,993 with a legal address in the Netherlands (16 Oct 2026) tested
json
Base URL
https://api.gleif.org/api/v1
Endpoints 12
- GET
/lei-recordsSearch and filter all LEI records; the total is in meta.pagination.total. - GET
/lei-records/{lei}One record: entity (name, addresses, legal form, registration number, status) and registration (dates, status, issuer). - GET
/lei-records/{lei}/{direct-parent|ultimate-parent|direct-children|ultimate-children}Group relations. Without a reported parent 404; then …/direct-parent-reporting-exception gives the reason (e.g. NATURAL_PERSONS). - GET
/lei-records/{lei}/isinsISIN codes of securities linked to this LEI (ING Groep: 41). - GET
/lei-records/{lei}/lei-issuerThe issuing organisation (LOU) of this LEI. - GET
/fuzzycompletions?field=entity.legalName&q={naam}Fuzzy search by name, with the LEI in relationships. - GET
/autocompletions?field=fulltext&q={tekst}Suggestions while typing, with highlighting. - GET
/entity-legal-forms/{code}Legal form from the ISO 20275 list (54M6 = private limited company, B5PM = public limited company). - GET
/registration-authorities/{code}Registers (RA000463 = the KvK business register). - GET
/lei-issuersAll 41 issuing organisations. - GET
/countriesCountries (250) with code and name; also /regions and /jurisdictions. - GET
/fieldsDescription of all fields and filter operators.
Filtering tested
JSON:API filters filter[field]=value. Several values with a comma (filter[entity.legalAddress.country]=NL,BE), exclude with ! (filter[registration.status]=!ISSUED), dates with > or >= (=>2025-01-01) and a range with .. (2025-01-01..2025-12-31), * as wildcard in names (ING*). Use curl -g, otherwise the brackets trip it up.
Parameters 6
filter[<veld>] | Filter on a field from /fields with context FILTER_LEIREC, e.g. filter[entity.legalAddress.country]=NL, filter[entity.registeredAs]=33231073, filter[entity.legalForm]=54M6, filter[entity.addresses.city]=Amsterdam. | tested |
filter[fulltext] | Free search in all names (rabobank: 150). | tested |
page[size] | 1 to 200 per page (201 returns 400). | tested |
page[number] | Page number; page[number] × page[size] must not exceed 10,000. | tested |
page[cursor] | page[cursor]=* starts cursor paging for larger sets; then follow links.next. | tested |
sort | Sort field, - for descending (sort=-registration.initialRegistrationDate). Only fields with sortable=true in /fields. Without sort the newest registration came first. | tested |
Fields of a LEI record (attributes, selection) 14
| Name | Type | Meaning |
|---|---|---|
lei | string | De LEI (20 tekens) |
entity.legalName.name | string | Juridische naam |
entity.legalAddress | object | Juridisch adres (country, city, postalCode, addressLines) |
entity.headquartersAddress | object | Adres van het hoofdkantoor |
entity.registeredAt.id | string | Register (RA000463 = KvK) |
entity.registeredAs | string | Nummer in dat register: het KvK-nummer |
entity.legalForm.id | string | Rechtsvormcode ISO 20275 (54M6 bv, B5PM nv) |
entity.category | string | GENERAL, FUND, BRANCH, SOLE_PROPRIETOR … |
entity.status | string | ACTIVE of INACTIVE (het bedrijf) |
registration.status | string | ISSUED, LAPSED, RETIRED, ANNULLED, DUPLICATE, PENDING_TRANSFER, PENDING_ARCHIVAL, MERGED (de LEI) |
registration.initialRegistrationDate | datetime | Eerste uitgifte van de LEI |
registration.nextRenewalDate | datetime | Volgende verlenging |
Show all 14
| Name | Type | Meaning |
|---|---|---|
registration.corroborationLevel | string | In hoeverre de gegevens gecontroleerd zijn |
bic | lijst | Gekoppelde BIC-codes |
Limits and pitfalls
- page[size] at most 200 and page numbering at most 10,000 records deep; beyond that cursor paging (page[cursor]=*). No rate limit headers seen. tested
- Filter on legal form with filter[entity.legalForm]=54M6 (164,791 Dutch private companies). filter[entity.legalForm.id] returns "Filter should contain only allowed values", as does entity.legalAddress.city (use entity.addresses.city). tested
- > and >= gave the same count for dates (37,749 Dutch LEIs from 2025). Counting per year works directly with a range: 2025-01-01..2025-12-31 gave 18,246. tested
- entity-legal-forms ignored filter[country]=NL (all 3,599 legal forms came back). Fetch a code directly or filter on countryCode yourself. tested
- The API follows the golden copy, published three times a day (00, 08, 16 UTC); meta.goldenCopy.publishDate tells which. The API ran one publication behind (08:00 while 16:00 was out). The full register: goldencopy.gleif.org/api/v2/golden-copies/publishes/latest (CSV zip 481 MB, 3,464,825 records). tested
- LAPSED means the LEI wasn't renewed, not that the company is gone. For the company, look at entity.status. experience
- api.gleif.org's robots.txt allows everything; goldencopy.gleif.org/robots.txt returned 403 (the API there works). tested
Try it HTTP 200 · 807 ms · 16 Oct
https://api.gleif.org/api/v1/lei-records?filter[entity.legalAddress.country]=NL&filter[entity.registeredAs]=33231073&page[size]=1
{
"meta": {
"goldenCopy": {
"publishDate": "2026-10-16T08:00:00Z"
},
"pagination": {
"currentPage": 1,
"perPage": 1,
"from": 1,
"to": 1,
"total": 1,
"lastPage": 1
}
},
"links": {
"first": "https://api.gleif.org/api/v1/lei-records?filter%5Bentity.legalAddress.country%5D=NL&filter%5Bentity.registeredAs%5D=3…",
"last": "https://api.gleif.org/api/v1/lei-records?filter%5Bentity.legalAddress.country%5D=NL&filter%5Bentity.registeredAs%5D=3…"
},
"data": [
{
"type": "lei-records",
"id": "549300NYKK9MWM7GGW15",
"attributes": {
"lei": "549300NYKK9MWM7GGW15",
"entity": {
"legalName": {
"name": "ING GROEP N.V.",
"language": "en"
},
"otherNames": [
{
"name": "INTERNATIONALE NEDERLANDEN GROEP N.V.",
"language": "nl",
"type": "PREVIOUS_LEGAL_NAME"
}
],
"transliteratedOtherNames": [],
"legalAddress": {
"language": "nl",
"addressLines": [Shortened response, saved at harvest time. Click the URL for the real, current response.
Read from GLEIF API documentation (Postman) · /fields: all 336 fields with type, operators, sortability and the filter context they work in · GLEIF: explanation of the API and the golden copy. Labels: from the description stated in what the api itself publishes. tested from our own small call. platform applies to every api on this platform, per its documentation. experience learned while building open data index.
How to fetch it
curl -g "https://api.gleif.org/api/v1/lei-records?filter[entity.registeredAs]=33231073&filter[entity.legalAddress.country]=NL"
More in this topic
See how this page is built
bron: gleif-lei blokken: [] secties: - ideeen - verwerken - koppelingen - vergelijkbaar - beperkingen - code cache: tag: bron:gleif-lei ververs: na statuscheck, als de bron nieuwer is statuscheck: methode: publicatiemoment van de golden copy in de API (meta.goldenCopy.publishDate) verwacht: dagelijks
Source: content/bronnen/gleif-lei.yaml · Markdown



