SFOLN

Catalogue / Compliance & public records

LEI Lookup – GLEIF Legal Entity Search

sfoln/lei-lookup · Automation, Developer tools, AI

Look up Legal Entity Identifiers (LEI) by code or company name in the official GLEIF database: legal name, status, legal form, addresses, registry id, BIC, renewal dates and direct and ultimate parent companies. $2 per 1,000 LEI records; no API key needed.

About

What it does

LEI Lookup – GLEIF Legal Entity Search looks up Legal Entity Identifiers (LEI) by code, or finds the LEI of a company by name, in the official GLEIF database and returns one record per lookup: legal name and other names, entity and registration status, jurisdiction, ISO 20275 legal form, legal and headquarters addresses, the company's id in its national register, BIC codes, renewal dates and the direct and ultimate parent companies. Built for onboarding and KYB checks, counterparty and vendor data, compliance tools and AI agents. $0.002 per LEI record found; no API key needed.

Price

Price per delivered record

EventPricePer 1,000Charged for
LEI record
lei-record
$0.002$2 / 1,000One LEI record found in the GLEIF database (by code, or the best match of a company name), with its parents.

Apify free plan: up to 10 items per run. Paid plans have no per-run cap; set maxTotalChargeUsd to cap spend.

Run

Call it from code, an agent or the Console

curl · synchronous run, rows in the response
curl -X POST "https://api.apify.com/v2/actors/sfoln~lei-lookup/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"leis":["HWUPKR0MPOU8FGXBT394"],"companyNames":["Siemens Healthineers AG"]}'
mcp.json · hosted Apify MCP server
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=sfoln/lei-lookup"
    }
  }
}
asynchronous run · for large batches
POST https://api.apify.com/v2/actors/sfoln~lei-lookup/runs?maxTotalChargeUsd=1
GET  https://api.apify.com/v2/actor-runs/{runId}            # until status is SUCCEEDED
GET  https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json

Authenticate with an Apify API token. MCP clients can instead sign in with OAuth when prompted. Example prompt for an agent: Look up the LEI HWUPKR0MPOU8FGXBT394 and find the LEI of Siemens Healthineers AG, including their parent companies.

Input

Input fields

LEI codes and/or company names to look up in the GLEIF LEI database. Each produces one dataset record.

FieldTypeDefaultMeaning
leisarray—LEI codes
20-character Legal Entity Identifiers, one per line (e.g. HWUPKR0MPOU8FGXBT394). Codes with wrong check digits are reported, not looked up. Accounts on the Apify free plan can process up to 10 LEIs or names per run.
companyNamesarray—Company names
Company names to search, one per line; the best-matching LEI record is returned with the next candidates. Via the API an element can also be {"name": "…", "country": "DE"}.
countrystring—Country (for names)
Limit name searches to companies whose legal address is in this country (ISO code like DE or a country name). Leave empty to search worldwide.
includeParentsbooleantrueInclude parent companies
Add the direct and ultimate accounting-consolidation parents (GLEIF level 2), or the reporting exception that explains why none is reported.
resolveCodesbooleantrueResolve legal form and registry names
Add the names of the ISO 20275 legal form and the registration authority (one extra GLEIF request per distinct code and run).
maxCandidatesinteger3Other candidates per name
How many other matching LEI records to list (LEI, name, country, status, score) under candidates for a name search; they are not charged. Range 0–10.
minNameScorenumber0.8Minimum name score
How close (0.5–1) a GLEIF name must be to the searched name to be returned as the match; below it the record is not_found with the candidates. Range 0.5–1.
maxItemsinteger1000Max lookups
Safety cap on LEIs plus names per run; further inputs are ignored and counted in the OUTPUT record. Range 1–10000.
concurrencyinteger3Concurrency
Lookups processed in parallel (GLEIF allows about 60 requests per minute; LEI codes are fetched 100 at a time). Range 1–5.
includeRawbooleanfalseInclude raw GLEIF records
Attach the unmodified GLEIF JSON:API records (with the parent records) under raw.
Example input
{
  "leis": [
    "HWUPKR0MPOU8FGXBT394"
  ],
  "companyNames": [
    "Siemens Healthineers AG"
  ]
}

Output

One record per input item

Records land in the run's dataset; a synchronous call returns them directly. Each has a status (ok is charged; everything else is free) and a charged flag. The run's OUTPUT record totals items and charges.

FieldTypeMeaning
inputstring | objectInput
The lookup this record corresponds to: { lei } or { name, country? }.
statusstringStatus
Record status (see above); the entity status is entityStatus.
chargedbooleanCharged
Whether this record incurred a pay-per-event charge.
chargedEventstringCharged event
Pay-per-event event charged for this record (present only when charged).
chargedCountintegerEvents charged
Events actually charged when the charge came back short of the requested count (present only then; a warning explains it).
sourcestringSource
Upstream data source.
fetchedAtstringFetched at
ISO timestamp.
errorobjectError
{ code, message, provider?, status? } when status is not ok. Codes set by the runtime: budget_exhausted, free_plan_limit, unmetered, aborted, charge_failed, record_too_large, invalid_record, dataset_push_failed; this Actor: invalid_lei, invalid_name, not_found, no_match; upstream: rate_limit, timeout, network, server, client, invalid_response.
warningsarrayWarnings
Notes about this record.
foundbooleanFound
Whether an LEI record was returned.
querystringQuery
The LEI code or company name looked up.
leistringLEI
Legal Entity Identifier (20 characters).
legalNamestringLegal name
Legal name as registered.
legalNameLanguagestring | nullLegal name language
Language of the legal name (ISO 639-1).
otherNamesarrayOther names
{ name, type (PREVIOUS_LEGAL_NAME, TRADING_OR_OPERATING_NAME …), language }.
transliteratedNamesarrayTransliterated names
Latin-script forms of the names.
registrationStatusstring | nullRegistration status
LEI registration status: ISSUED, LAPSED, RETIRED, ANNULLED, MERGED, DUPLICATE, PENDING_TRANSFER …
entityStatusstring | nullEntity status
ACTIVE or INACTIVE.
jurisdictionstring | nullJurisdiction
Legal jurisdiction (ISO 3166 country or subdivision, e.g. US-CA).
countrystring | nullCountry
Legal address country (ISO 3166-1 alpha-2).
categorystring | nullCategory
GENERAL, BRANCH, FUND, SOLE_PROPRIETOR, RESIDENT_GOVERNMENT_ENTITY …
subCategorystring | nullSubcategory
Subcategory (government entities).
legalFormobjectLegal form
{ code (ISO 20275 ELF), name }.
legalAddressobject | nullLegal address
{ lines, city, region, postalCode, country, formatted }.
headquartersAddressobject | nullHeadquarters address
{ lines, city, region, postalCode, country, formatted }.
registrationAuthorityobjectRegistration authority
{ id (GLEIF RA code), name, entityId (the entity's id in that register) }.
entityCreationDatestring | nullEntity created
When the legal entity was created.
initialRegistrationDatestring | nullLEI issued
When the LEI was first issued.
lastUpdateDatestring | nullLast update
Last update of the LEI record.
nextRenewalDatestring | nullNext renewal
When the LEI must be renewed.
renewalOverduebooleanRenewal overdue
The next renewal date has passed.
managingLoustring | nullManaging LOU
LEI of the issuer that manages the record.
corroborationLevelstring | nullCorroboration
FULLY_CORROBORATED, PARTIALLY_CORROBORATED, ENTITY_SUPPLIED_ONLY.
bicarrayBIC
SWIFT / BIC codes mapped to the LEI.
micarrayMIC
Market identifier codes mapped to the LEI.
ocidstring | nullOpenCorporates id
OpenCorporates id mapped to the LEI, when GLEIF has one.
successorEntityobject | nullSuccessor
{ lei, name } of the successor after a merger.
expirationobject | nullExpiration
{ date, reason } when the entity ceased.
directParentobject | nullDirect parent
{ lei, legalName, country, entityStatus, registrationStatus }.
directParentExceptionobject | nullDirect parent exception
{ category, reason } when no direct parent is reported (e.g. NATURAL_PERSONS).
ultimateParentobject | nullUltimate parent
{ lei, legalName, country, entityStatus, registrationStatus }.
ultimateParentExceptionobject | nullUltimate parent exception
{ category, reason } when no ultimate parent is reported.
gleifUrlstringGLEIF page
The record on search.gleif.org.
goldenCopyPublishedAtstring | nullData as of
Publication time of the GLEIF golden copy that answered.
matchobjectName match
For a name search: { query, country, matchedName, score }.
candidatesarrayOther candidates
For a name search: the next records { lei, legalName, country, entityStatus, registrationStatus, score } (not charged).
rawobjectRaw GLEIF record
The unmodified GLEIF records (only with includeRaw).
Example record
Example record
{
  "input": {
    "lei": "HWUPKR0MPOU8FGXBT394"
  },
  "status": "ok",
  "charged": true,
  "chargedEvent": "lei-record",
  "source": "gleif",
  "fetchedAt": "2026-10-14T23:17:00.296Z",
  "found": true,
  "query": "HWUPKR0MPOU8FGXBT394",
  "lei": "HWUPKR0MPOU8FGXBT394",
  "legalName": "Apple Inc.",
  "legalNameLanguage": "en",
  "otherNames": [
    {
      "name": "Apple Computer, Inc.",
      "type": "PREVIOUS_LEGAL_NAME",
      "language": "en"
    }
  ],
  "transliteratedNames": [],
  "entityStatus": "ACTIVE",
  "registrationStatus": "ISSUED",
  "jurisdiction": "US-CA",
  "country": "US",
  "category": "GENERAL",
  "subCategory": null,
  "legalForm": {
    "code": "H1UM",
    "name": "For-Profit Corporation General Stock"
  },
  "legalAddress": {
    "lines": [
      "C/O C T Corporation System",
      "330 N. Brand Blvd",
      "Suite 700"
    ],
    "city": "Glendale",
    "region": "US-CA",
    "postalCode": "91203",
    "country": "US",
    "formatted": "C/O C T Corporation System, 330 N. Brand Blvd, Suite 700, 91203 Glendale, US"
  },
  "headquartersAddress": {
    "lines": [
      "One Apple Park Way"
    ],
    "city": "Cupertino",
    "region": "US-CA",
    "postalCode": "95014",
    "country": "US",
    "formatted": "One Apple Park Way, 95014 Cupertino, US"
  },
  "registrationAuthority": {
    "id": "RA000598",
    "name": "Business Entity Records",
    "entityId": "806592"
  },
  "entityCreationDate": "1977-01-03T00:00:00Z",
  "initialRegistrationDate": "2012-06-06T15:53:00Z",
  "lastUpdateDate": "2026-03-03T16:34:33Z",
  "nextRenewalDate": "2027-03-08T17:27:20Z",
  "renewalOverdue": false,
  "managingLou": "5493001KJTIIGC8Y1R12",
  "corroborationLevel": "FULLY_CORROBORATED",
  "bic": [
    "APLEUS66XXX"
  ],
  "mic": [],
  "ocid": null,
  "successorEntity": null,
  "expiration": null,
  "directParent": null,
  "directParentException": {
    "category": "DIRECT_ACCOUNTING_CONSOLIDATION_PARENT",
    "reason": "NATURAL_PERSONS"
  },
  "ultimateParent": null,
  "ultimateParentException": {
    "category": "ULTIMATE_ACCOUNTING_CONSOLIDATION_PARENT",
    "reason": "NATURAL_PERSONS"
  },
  "gleifUrl": "https://search.gleif.org/#/record/HWUPKR0MPOU8FGXBT394",
  "goldenCopyPublishedAt": "2026-10-14T08:00:00Z"
}

FAQ

Questions

Where does the data come from?
From the GLEIF LEI database (api.gleif.org), the official global directory of Legal Entity Identifiers, published as open data (CC0). Every record carries the golden-copy publication time.
What are direct and ultimate parents?
GLEIF level-2 data: the companies that consolidate the entity in their accounts. When no parent is reported, the reporting exception (for example NATURAL_PERSONS or NON_CONSOLIDATING) is returned instead.
What does a LAPSED registration mean?
The LEI was not renewed on time (registrationStatus LAPSED, renewalOverdue true). The entity may still exist; many regulated counterparties require an ISSUED LEI.

Machine-readable

This page for agents