Company LEI Lookup API (GLEIF Data)
Pricing
from $2.40 / 1,000 lei records
Company LEI Lookup API (GLEIF Data)
Unofficial LEI lookup API: find companies in the public Global LEI Index (GLEIF) by name or LEI code and get the legal name, status, jurisdiction, registration number and registered address.
Pricing
from $2.40 / 1,000 lei records
Rating
0.0
(0)
Developer
Sourcing Data Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 days ago
Last modified
Categories
Share
Verify that a supplier or buyer is a registered legal entity before you sign or pay. Company LEI Lookup API (GLEIF Data) searches the Global LEI Index by company name, including English names of Chinese companies, or by LEI code, and returns legal name, LEI status, company status, jurisdiction, registration number and registered address. Mostly larger companies hold an LEI. You pay per record saved: $0.003 per LEI record on the Free tier, so a typical query (one company name, up to 10 matching records) costs $0.03.
Unofficial: not affiliated with or endorsed by GLEIF.
Source: Global Legal Entity Identifier Foundation (GLEIF), LEI data under CC0 1.0. See the CC0 1.0 text.
Importers use this LEI lookup API for supplier verification. Check that a larger supplier or buyer is a registered legal entity, look up the LEI code of a company before a contract, a credit check or a customs form, or check company LEI codes for a whole list at once. It works as an LEI search for a single name, as a legal entity identifier lookup and as a company registration check for larger companies. The data comes from the public GLEIF API, returned as clean rows that you can use in a spreadsheet, a database or an AI agent.
What does Company LEI Lookup API (GLEIF Data) do?
- Searches the Global LEI Index by company name. A name is matched against legal names, other names and transliterated names, so a Chinese company is usually found by its English name too.
- Does an LEI code lookup: give known 20-character codes and get the matching records. Spaces and dashes in a code are ignored.
- Can limit a name search to one country with a two-letter code such as CN, DE or AE.
- Keeps the Maximum results per company name you set, from 1 to 50, so a broad name does not fill the run.
- Removes duplicates. The same LEI found twice is saved and charged once.
- Charges one event per saved record. Failed requests, duplicates and names with no record are never charged.
- Writes a run summary to the key-value store: totals, your feedback, one status for every name and code you entered (found, no record, left out, failed, blocked or not looked up), and a count of what was held back to protect private persons.
- Works from Apify Console, the Apify API, n8n, Make and AI agents through the Apify MCP server.
Output example
These rows come from a real run.
[{"lei": "213800WR1OWEFQFT2F37","legalName": "HUAWEI TECHNOLOGIES SRL","otherNames": [],"entityStatus": "ACTIVE","registrationStatus": "ISSUED","jurisdiction": "RO","legalForm": "XHN1","category": "GENERAL","registrationAuthorityId": "RA000497","registrationNumber": "20567140","legalAddress": {"lines": ["NR. 201, STRADA BARBU VACARESCU","ETAJ 14, 15, 16, 23, 24 SI 25","București Sectorul 2"],"city": "BUCUREșTI","region": "RO-B","country": "RO","postalCode": "020271"},"headquartersAddress": {"lines": ["NR. 201, STRADA BARBU VACARESCU","ETAJ 14, 15, 16, 23, 24 SI 25","București Sectorul 2"],"city": "BUCUREșTI","region": "RO-B","country": "RO","postalCode": "020271"},"entityCreationDate": "2007-01-15T00:00:00Z","initialRegistrationDate": "2026-07-14T00:00:00Z","lastUpdateDate": "2026-07-14T12:26:14Z","nextRenewalDate": "2027-07-14T00:00:00Z","managingLou": "213800WAVVOPS85N2205","searchQuery": "Huawei","source": "GLEIF","retrievedAt": "2026-10-05T15:03:44.350Z"},{"lei": "2138009CFZKTZYV4QV61","legalName": "HUAWEI (CHILE) S.A.","otherNames": [],"entityStatus": "ACTIVE","registrationStatus": "ISSUED","jurisdiction": "CL","legalForm": "OA6N","category": "GENERAL","registrationAuthorityId": "RA000787","registrationNumber": "99535120-K","legalAddress": {"lines": ["ROSARIO NORTE 532","17 LAS CONDES"],"city": "SANTIAGO","region": "CL-RM","country": "CL","postalCode": "7561185"},"headquartersAddress": {"lines": ["ROSARIO NORTE 532","17 LAS CONDES"],"city": "SANTIAGO","region": "CL-RM","country": "CL","postalCode": "7561185"},"entityCreationDate": "2019-09-04T00:00:00Z","initialRegistrationDate": "2019-09-18T00:00:00Z","lastUpdateDate": "2026-08-13T16:06:31Z","nextRenewalDate": "2027-09-18T00:00:00Z","managingLou": "213800WAVVOPS85N2205","searchQuery": "Huawei","source": "GLEIF","retrievedAt": "2026-10-05T15:03:44.350Z"},{"lei": "213800CUYLHCD3Y53406","legalName": "HUAWEI DEL PERU SAC","otherNames": [],"entityStatus": "ACTIVE","registrationStatus": "ISSUED","jurisdiction": "PE","legalForm": "CHX6","category": "GENERAL","registrationAuthorityId": "RA000689","registrationNumber": "20507646728","legalAddress": {"lines": ["415 CAL. LAS BEGONIAS","SAN ISIDRO"],"city": "LIMA","region": "PE-LIM","country": "PE","postalCode": "15046"},"headquartersAddress": {"lines": ["415 CAL. LAS BEGONIAS","SAN ISIDRO"],"city": "LIMA","region": "PE-LIM","country": "PE","postalCode": "15046"},"entityCreationDate": "2003-11-14T00:00:00Z","initialRegistrationDate": "2026-07-10T00:00:00Z","lastUpdateDate": "2026-07-10T11:26:36Z","nextRenewalDate": "2027-07-10T00:00:00Z","managingLou": "213800WAVVOPS85N2205","searchQuery": "Huawei","source": "GLEIF","retrievedAt": "2026-10-05T15:03:44.350Z"}]
What data can you get with Company LEI Lookup API (GLEIF Data)?
| Field | Type | Description |
|---|---|---|
lei | string | The 20-character Legal Entity Identifier (LEI) of the company. |
legalName | string | Legal name of the entity as registered with GLEIF. |
otherNames | array | Other names of the entity, including transliterated names (for example English names of Chinese companies). Empty list when there are none. |
entityStatus | string, optional | Status of the legal entity, for example ACTIVE or INACTIVE. Null when GLEIF gives no status. |
registrationStatus | string | Status of the LEI itself, for example ISSUED, LAPSED, RETIRED or DUPLICATE. ISSUED means the code is current. LAPSED means the yearly renewal is overdue. |
jurisdiction | string, optional | Legal jurisdiction of the entity as a country or region code, for example CN, DE or US-DE. |
legalForm | string, optional | Legal form of the entity: the free text GLEIF holds, otherwise the ISO 20275 legal form code. Null when unknown. |
category | string | Entity category: GENERAL, BRANCH, FUND, RESIDENT_GOVERNMENT_ENTITY or INTERNATIONAL_ORGANIZATION. Records that the category, the legal form or the legal name marks as a sole proprietor, a personal trust, an estate or a personal pension account are left out; a private person that an LEI issuer filed as an ordinary company or fund without such a marker can remain. |
registrationAuthorityId | string, optional | GLEIF code of the business register where the entity is registered, for example RA000497. |
registrationNumber | string, optional | Registration number of the entity in that business register. |
legalAddress | object | Registered (legal) address of the entity. |
headquartersAddress | object | Headquarters address of the entity. Same shape as the legal address. |
entityCreationDate | string, optional | ISO 8601 time the legal entity was created, as given by GLEIF (usually midnight UTC). |
initialRegistrationDate | string, optional | ISO 8601 time the LEI was first registered. |
lastUpdateDate | string, optional | ISO 8601 time the LEI record was last updated at GLEIF. |
nextRenewalDate | string, optional | ISO 8601 time by which the LEI must be renewed next. |
managingLou | string, optional | LEI of the Local Operating Unit that manages this record. |
searchQuery | string, optional | Company name that found the record. Null when the record was found by LEI code. |
source | string | Data source. Always GLEIF. |
retrievedAt | string | ISO 8601 time when the record was retrieved. |
How to read the two status fields:
registrationStatusis the status of the LEI code.ISSUEDmeans the code is current.LAPSEDmeans the yearly renewal is overdue.RETIREDmeans the code is no longer in use.DUPLICATEmeans GLEIF holds another LEI for the same company.entityStatusis the status of the company itself, for exampleACTIVEorINACTIVE. It is null when GLEIF gives none.- Lapsed, retired and duplicate records are kept in the results, so you can see the status. Check both fields before you rely on a record.
How to use Company LEI Lookup API (GLEIF Data)
- Click Try for free on this page.
- Enter one or more Company names, or paste LEI codes. You need at least one of the two.
- Optionally set a Country filter and the Maximum results per company name.
- Set Maximum records. The run stops as soon as that many records are saved.
- Click Start. Results appear in the Output tab while the run is going.
- Download the results as JSON, CSV or Excel, or read them through the API.
Input examples
Check company names
{"searchQueries": ["Haier","Midea"],"maxResultsPerQuery": 5,"maxItems": 10}
Verify lei codes
{"leis": ["213800WR1OWEFQFT2F37","2138009CFZKTZYV4QV61"],"maxItems": 10}
Names in one country
{"searchQueries": ["Emirates","Gulf Trading"],"country": "AE","maxResultsPerQuery": 10,"maxItems": 50,"feedback": "Example: please add parent company links."}
How much does Company LEI Lookup API (GLEIF Data) cost?
| Event | You pay for | Free | Bronze | Silver | Gold |
|---|---|---|---|---|---|
| LEI record | One legal entity record saved to the dataset. Failed requests, duplicates and names with no record are never charged. | $0.003 | $0.003 | $0.0027 | $0.0024 |
Prices are per event. Your tier follows your Apify subscription plan.
On the Free tier, $0.003 per LEI record means:
- 100 LEI records cost $0.30.
- 1,000 LEI records cost $3.00.
- A typical query (one company name, up to 10 matching records) is 10 LEI records and costs $0.03.
Apify also charges a tiny start fee per run (apify-actor-start, $0.00005 per GB of memory). Failed requests, duplicates and names with no record are never charged. To cap your spending, set Maximum cost per run in the run options; the run stops cleanly when that budget is used.
Use Company LEI Lookup API (GLEIF Data) from the API, n8n, Make or an AI agent
Apify API
Run the Actor and get the records in one call:
curl
curl -X POST "https://api.apify.com/v2/acts/sourcing-data-studio~lei-lookup-api/run-sync-get-dataset-items" \-H "Authorization: Bearer YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQueries":["Haier","Midea"],"maxResultsPerQuery":5,"maxItems":10}'
JavaScript (Node.js, npm install apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const input = {"searchQueries": ["Haier","Midea"],"maxResultsPerQuery": 5,"maxItems": 10};const run = await client.actor('sourcing-data-studio/lei-lookup-api').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python (pip install "apify-client>=3", Python 3.11 or later)
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run_input = {"searchQueries": ["Haier","Midea"],"maxResultsPerQuery": 5,"maxItems": 10}run = client.actor("sourcing-data-studio/lei-lookup-api").call(run_input=run_input)for item in client.dataset(run.default_dataset_id).iterate_items():print(item)
That call returns the saved records and nothing else. An input without a row can mean that GLEIF holds no record for it, that the record was left out, that the request failed or that the run stopped before it got there. To see which, start the run and read its RUN_SUMMARY record. The first call below returns the run object, with its id, its status and its statusMessage, the one-line result of the run. The second call reads RUN_SUMMARY from the key-value store of that run:
curl -X POST "https://api.apify.com/v2/acts/sourcing-data-studio~lei-lookup-api/runs?waitForFinish=60" \-H "Authorization: Bearer YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"leis":["213800WR1OWEFQFT2F37","ZZZZZZZZZZZZZZZZZZ00"],"maxItems":10}'curl "https://api.apify.com/v2/actor-runs/RUN_ID/key-value-store/records/RUN_SUMMARY" \-H "Authorization: Bearer YOUR_APIFY_TOKEN"
Replace RUN_ID with the id from the first answer. If status is still RUNNING after 60 seconds, ask for the run again at https://api.apify.com/v2/actor-runs/RUN_ID until its status is SUCCEEDED or FAILED. The saved records are in the dataset named by defaultDatasetId. The same RUN_SUMMARY record is also at https://api.apify.com/v2/key-value-stores/STORE_ID/records/RUN_SUMMARY, where STORE_ID is the defaultKeyValueStoreId of the run.
RUN_SUMMARY has the same one-line result in message, and a listings part with one entry for every company name (name:...) and every LEI code (lei:...) you entered. For the call above, the relevant parts read:
{"status": "SUCCEEDED","message": "Saved 1 LEI record.","listings": {"lei:213800WR1OWEFQFT2F37": { "status": "ok", "items": 1 },"lei:ZZZZZZZZZZZZZZZZZZ00": { "status": "no-match", "items": 0 }}}
The status of a listing is ok, no-match, excluded, failed, blocked or stopped. The FAQ below says what each one means. Check the listing before you read a missing row as "no record or withheld": that is what no-match and excluded mean. For failed, blocked and stopped the input was not answered, so run it again. A name search can also carry matches, the number of records GLEIF holds for that name, which can be more than items, the number saved.
n8n and Make
Use an HTTP request module with the same URL, method POST and a JSON body like the input examples above. Store your Apify API token as a credential, never in the workflow itself.
AI agents through the Apify MCP server
Connect your agent to the Apify MCP server and call sourcing-data-studio/lei-lookup-api with the same input. Agents can use the Feedback for the developer field to report missing fields or problems.
For AI agents
- Minimal input:
{"searchQueries":["Huawei"],"maxItems":10}. At the Free price of $0.003 per record, 10 records cost $0.03 plus the platform's start fee. - Read these fields first:
lei,legalName,registrationStatus,entityStatusandjurisdiction. - Outcomes are in the status message of the run (one line) and in the
RUN_SUMMARYrecord of the run's key-value store, with one status per input:ok,no-match,excluded,failed,blockedorstopped. Check the status before you read a missing row as "no record". - Do not use it to prove that a company is trustworthy, to find a company that has no LEI (most small firms have none) or to look up a private person: it returns LEI records of legal entities only.
- It is callable through the Apify MCP server as the tool
sourcing-data-studio/lei-lookup-apiand through the Apify API.
Limits
- At most 1,000 records per run, 100 company names and 1,000 LEI codes. For more, run the Actor several times.
- A name search returns the first page only: up to 50 records per name. A broad name such as a group brand can match more companies than that.
- The name match is a text match, not a fuzzy match. A misspelled name can return nothing. Try a shorter or alternative spelling.
- The Actor sends one request at a time and at most 30 requests per minute, to stay polite to the source. A name search takes a few seconds.
- Records are de-duplicated within a run, not across runs.
- If the source refuses a request (HTTP 401, 403 or 407), the Actor does not try again and does not look for another way in: the name or code gets the status
blocked. After HTTP 429 (too many requests) it waits as long as the source asks, at most 60 seconds (at least 10 seconds when the source does not say), and tries again from the same address, up to Retries per request times. If the source asks for a longer wait, or says that its allowance is used up, the request ends asblockedat once. The Actor never takes another address or another proxy to get around a refusal. - If three requests in a row fail or are refused, the run stops instead of sending the rest to a source that is down or does not want them. A request that the source rejects (HTTP 400 or 404) does not count for this. The names and codes that were not looked up have the status
stoppedin the run summary. - Records of private persons are not returned: sole proprietors, personal trusts, estates of deceased persons and personal pension accounts. See the FAQ.
- The data is as current as the Global LEI Index. Check
lastUpdateDateandnextRenewalDatein each record.
FAQ
Which data does Company LEI Lookup API (GLEIF Data) collect?
Only public legal entity data from the Global LEI Index: names, status, jurisdiction, legal form, registration number, registered and headquarters address, and registration dates. It does not log in and needs no key.
Which data is NOT collected?
- No contact fields. The Actor copies only the fields in the table above, so phone numbers, email addresses and contact persons are never read or output.
- No sole proprietor records. A sole proprietor is a private person who trades in their own name. A record is left out when GLEIF's entity category says sole proprietor, when its legal form says so (for example the German "eingetragener Kaufmann" or the Indian "Sole Proprietorship"), or when its legal name ends in "e.K." or names a proprietor ("Prop."). Any category the Actor does not know is left out too.
- No personal trusts, estates or personal pension accounts. The Global LEI Index holds many records such as "(name) Revocable Living Trust", "(name) Family Trust", "(name) Discretionary Settlement", "Estate of (name), deceased" or "(name) SIPP". They are named after a private person and are often registered at a home address. A record is left out when its legal name or legal form carries such a marker. Trust companies, investment trusts and funds are kept.
- No care-of or attention lines. An address line is dropped when it repeats GLEIF's mail-routing field or carries a marker such as "c/o", "care of", "attn", "s/o" or a personal title such as "Mr" or "Shri". The whole line goes, also when it names a company ("c/o Example Ltd"), because the Actor does not guess. The rest of the address is kept.
- No ownership or parent company data.
Nothing is held back silently. The run summary (key RUN_SUMMARY) has a withheld block: the number of sole proprietor, personal trust and estate records that were left out, the number of address lines that were dropped, the reason for each, and the LEI codes of the saved records that lost an address line. If you need the full address of such a company, look up its LEI code on the GLEIF website.
What these rules cannot do: they work on markers. A private person whom an LEI issuer filed as an ordinary company, with a company-like name and legal form, can remain in the results. So can an address line that names a person without any marker, and a trust whose name has no marker, such as "(name) Trust" filed as a fund. If you find such a record, tell us in the Feedback for the developer field.
My supplier has no LEI. Is that a warning sign?
No. Most companies are not required to have an LEI, and many small factories and traders do not have one. The status no-match only means GLEIF holds no record for that name or code. It says nothing about whether the company is trustworthy. A record that exists shows that the company is registered, not that it is reliable or that its goods are good.
My supplier gave me an LEI, but the Actor returns nothing for it. Why?
Look at the run summary (key RUN_SUMMARY in the Storage tab). Every name and LEI code you entered is listed there with a status:
| Status | Meaning |
|---|---|
ok | Looked up, and at least one record was saved for it (or was already saved earlier in the run). |
no-match | Looked up. GLEIF holds no record for this name or code. |
excluded | GLEIF holds a record, so the LEI code is real, but it is a record of a private person (a sole proprietor, or a personal trust, estate or pension account) and this Actor does not return those. Nothing is saved or charged. Check the code on the GLEIF website. |
failed | The request failed after all retries, or the record that came back for an LEI code was incomplete. Nothing is charged. Run it again later. |
blocked | The source refused the request (HTTP 401, 403, 407 or 429). A refusal (401, 403, 407) is never retried, and a rate limit (429) is retried from the same address only. Nothing is charged. Run it again later. |
stopped | Not looked up, or found but not saved, because the run ended first: Maximum records or your maximum cost per run was reached, the run timed out, or three requests in a row failed or were refused. |
An LEI code with the status excluded is in most cases a valid code of a sole proprietor, which is common for small exporters. For company names it is different: sole proprietor records are not searched at all, so a sole proprietor's name usually ends as no-match. About 4 in 100 LEI records are filed as sole proprietors (130,065 of 3,457,357 in GLEIF's data of 9 October 2026).
Why did my run return 0 records?
No record matched your names or codes, the filters were too narrow, or the records were left out as records of private persons (sole proprietors, personal trusts and estates). The final status message and the run summary say which. Nothing is charged in any of these cases.
A name search keeps only records whose legal name or other names contain at least one distinctive word of the name you typed. Characters that the source reads as search operators (, ! * < > = and ..) are removed from a name before it is sent, so a typo cannot return unrelated companies.
Why do I get several companies for one name?
Large groups register many subsidiaries, and each has its own LEI. Use searchQuery, legalName, jurisdiction and the address to pick the entity you mean, or set a Country filter.
Can I schedule Company LEI Lookup API (GLEIF Data)?
Yes. Save your input as a task and add a schedule in Apify Console, for example a monthly check of your supplier list.
Feedback
Tell us what to add next in the Feedback for the developer input field, or open an issue in the Issues tab. Feedback is saved with the run summary.