LEI Lookup – GLEIF Legal Entity Search avatar

LEI Lookup – GLEIF Legal Entity Search

Pricing

from $1.80 / 1,000 lei records

Go to Apify Store
LEI Lookup – GLEIF Legal Entity Search

LEI Lookup – GLEIF Legal Entity Search

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.

Pricing

from $1.80 / 1,000 lei records

Rating

0.0

(0)

Developer

SFOLN LLC

SFOLN LLC

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Features

Limited permissions

Share

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.

  • What you get: lei, legalName, otherNames, entityStatus (ACTIVE / INACTIVE), registrationStatus (ISSUED, LAPSED, RETIRED …), jurisdiction, legalForm (code and name), legalAddress and headquartersAddress, registrationAuthority (register and the company's id in it), bic, nextRenewalDate and renewalOverdue, directParent and ultimateParent (or the reason none is reported), and a link to the record on search.gleif.org.
  • By code or by name: LEI codes are checked (ISO 17442 check digits) and fetched 100 at a time; a company name returns the best-matching record with its match score and the next candidates.
  • Price: $0.002 per record found (lei-record); unknown LEIs, names without a close match, invalid codes and errors are free.
  • Works everywhere: API, MCP for AI agents, Make, Zapier, n8n, schedules and webhooks.

Input

FieldTypeDefaultDescription
leisstring[]–20-character LEI codes, one per line; spaces and dashes are ignored. Codes with wrong check digits are returned as skipped_invalid without a lookup.
companyNamesstring[]–Company names to search, one per line (a plain string is split on line breaks and semicolons). Via the API an element can also be { "name": "…", "country": "DE" }. An LEI given here is looked up as a code.
countrystring–Limit name searches to companies whose legal address is in this country (ISO code like DE or a country name). Empty searches worldwide.
includeParentsbooleantrueAdd the direct and ultimate accounting-consolidation parents (GLEIF level 2), or the reporting exception that explains why none is reported.
resolveCodesbooleantrueAdd the names of the legal form and of the registration authority (one extra request per distinct code and run).
maxCandidatesinteger3Other matching records (LEI, name, country, status, score) listed under candidates for a name search (0–10); they are not charged.
minNameScorenumber0.8How 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.
maxItemsinteger1000Safety cap on LEIs plus names per run (up to 10,000); further inputs are ignored and counted as inputItemsDropped in the OUTPUT record.
concurrencyinteger3Lookups processed in parallel (1–5).
includeRawbooleanfalseAttach the unmodified GLEIF JSON:API records (with the parent records) under raw.
{
"leis": ["HWUPKR0MPOU8FGXBT394"],
"companyNames": ["Siemens Healthineers AG"],
"country": "DE"
}

Output

One dataset record per LEI or company name. An LEI lookup:

{
"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"
}

A name search adds the match and the next candidates (other fields as above, trimmed here):

{
"input": { "name": "Siemens Healthineers AG", "country": "DE" },
"status": "ok",
"charged": true,
"chargedEvent": "lei-record",
"source": "gleif",
"fetchedAt": "2026-10-14T23:17:00.954Z",
"found": true,
"query": "Siemens Healthineers AG",
"lei": "529900QBVWXMWANH7H45",
"legalName": "Siemens Healthineers AG",
"entityStatus": "ACTIVE",
"registrationStatus": "ISSUED",
"country": "DE",
"directParent": { "lei": "W38RGI023J3WT1HWRP32", "legalName": "Siemens Aktiengesellschaft", "country": "DE", "entityStatus": "ACTIVE", "registrationStatus": "ISSUED" },
"ultimateParent": { "lei": "W38RGI023J3WT1HWRP32", "legalName": "Siemens Aktiengesellschaft", "country": "DE", "entityStatus": "ACTIVE", "registrationStatus": "ISSUED" },
"match": { "query": "Siemens Healthineers AG", "country": "DE", "matchedName": "Siemens Healthineers AG", "score": 1 },
"candidates": []
}
FieldDescription
entityStatus / registrationStatusWhether the legal entity is ACTIVE or INACTIVE, and the state of its LEI: ISSUED, LAPSED (not renewed on time), RETIRED, ANNULLED, MERGED, DUPLICATE, PENDING_TRANSFER, PENDING_ARCHIVAL.
registrationAuthorityGLEIF code (id) and name of the business register, and the entity's id in it (entityId, e.g. a company number).
directParent / ultimateParent{ lei, legalName, country, entityStatus, registrationStatus } of the consolidating parents; when none is reported, directParentException / ultimateParentException give the reason (NATURAL_PERSONS, NON_CONSOLIDATING, NO_KNOWN_PERSON …).
match / candidatesName searches only: the matched name and its score (0–1), and the next records, best first (free).
goldenCopyPublishedAtPublication time of the GLEIF data that answered.

status is one of:

  • ok: an LEI record was found (charged);
  • not_found: GLEIF has no record for the LEI, or no name is close enough (error.code not_found or no_match, with candidates; not charged);
  • error: GLEIF could not be reached or answered with an error (not charged);
  • skipped_invalid: the LEI has the wrong length or check digits, or the name has no letters or digits (not charged);
  • skipped_budget: your Maximum cost per run was reached (not charged);
  • skipped_free_plan: beyond the free-plan limit below (not charged);
  • skipped_unmetered: the run is not pay-per-event (not charged).

Pricing

Store discounts: the FREE and BRONZE tiers use the list prices below. SILVER receives 5% off; GOLD, PLATINUM and DIAMOND receive 10% off billable result events. The platform start fee is unchanged. Check the Actor's Store pricing table for the prices currently in effect.

Pay-per-event. You are charged only for records found:

EventPriceWhen
lei-record$0.002once per LEI record returned (status: "ok"), by code or as the best match of a name, parents included

1,000 LEI records cost $2. Set Maximum cost per run on the run to cap spend; the Actor stops cleanly (records marked skipped_budget) when the cap is reached. Accounts on the Apify free plan can process up to 10 LEIs or names per run; further inputs are returned with status: "skipped_free_plan" and are not charged. Upgrade to any paid Apify plan for full batches.

Use with AI agents (MCP)

Use this Actor from Claude, ChatGPT, Cursor, VS Code or any other MCP client through the Apify MCP server. Add this server URL to your client and sign in with your Apify account when asked:

https://mcp.apify.com?tools=sfoln/lei-lookup

To run the MCP server locally instead, start npx -y @apify/actors-mcp-server --tools sfoln/lei-lookup with your APIFY_TOKEN in the environment.

Example prompt:

Look up the LEI HWUPKR0MPOU8FGXBT394 and find the LEI of Siemens Healthineers AG, including their parent companies.

Runs started by an agent are billed like any other run (see Pricing). Agents can cap what a run may spend with maxTotalChargeUsd.

API usage

Run the Actor and get its dataset items in one call (the call waits up to 5 minutes for the run to finish):

curl -X POST "https://api.apify.com/v2/acts/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"]}'

For large inputs, start the run asynchronously and download the dataset when it has finished:

# 1. Start a run: the response holds the run ID (data.id) and its dataset ID (data.defaultDatasetId)
curl -X POST "https://api.apify.com/v2/acts/sfoln~lei-lookup/runs" \
-H "Authorization: Bearer <APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"leis": ["HWUPKR0MPOU8FGXBT394"], "companyNames": ["Siemens Healthineers AG"]}'
# 2. Repeat until data.status is SUCCEEDED (each call waits up to 60 s)
curl "https://api.apify.com/v2/actor-runs/<runId>?waitForFinish=60" -H "Authorization: Bearer <APIFY_TOKEN>"
# 3. Download the results (format=json, csv or xlsx)
curl "https://api.apify.com/v2/datasets/<defaultDatasetId>/items?format=json" -H "Authorization: Bearer <APIFY_TOKEN>"

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("sfoln/lei-lookup").call(run_input={"leis": ["HWUPKR0MPOU8FGXBT394"], "companyNames": ["Siemens Healthineers AG"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Instead of polling, you can attach a webhook to the run (see Integrations). The API tab of this page shows the same calls for JavaScript and the Apify CLI.

Integrations

  • Make, Zapier and n8n: run sfoln/lei-lookup with the Apify app (in n8n, the Apify node) and pass the dataset items to the next step of your workflow.
  • Google Sheets: add the items to a sheet with the Google Sheets step of Make, Zapier or n8n, or download them as CSV or Excel from the run's Storage tab or the API (format=csv or format=xlsx).
  • Webhooks: get a POST request when a run succeeds or fails: add a webhook in the Actor's Integrations tab, or pass webhooks when you start a run through the API.
  • Schedules: run it hourly, daily or weekly with the same input from Apify Schedules; every run keeps its results in its own dataset.
  • More: Slack, Google Drive, GitHub, LangChain, LlamaIndex and other Apify integrations.

See all our Actors on Apify Store.

FAQ

How much does it cost, and am I charged for failed items?

You pay per event at the prices under Pricing above, plus a run start fee of $0.00005 per GB of memory, with no subscription; platform usage is included. Errors and skipped items (skipped_… statuses) are never charged; a lookup that finds nothing is charged only where Pricing says so, and every record's charged field shows whether it was billed. Set Maximum cost per run to cap what a single run can spend.

How fresh is the data?

Each run queries its source while it runs, so you get what the source returns at that moment. Source-specific details, such as how often a provider refreshes its own database, are under Limits & notes.

What are the limits?

Per-run caps (for example the maximum number of items) are listed under Input, source limits under Limits & notes, and the free-plan limit under Pricing. For big batches, start the run asynchronously (see API usage) and read the dataset when it has finished.

Can I schedule runs or get results by webhook?

Yes. Create a schedule in Apify Console to run it hourly, daily or weekly with the same input, and add a webhook to get a POST request when a run finishes (see Integrations).

What does this Actor record about my runs?

This Actor records operational metrics about each run (item counts, duration, charges, error codes and a pseudonymous hash of your Apify user ID) to monitor reliability and costs. It never stores your input or results.

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.

How do I get help?

Open an issue in the Actor's Issues tab and include the link to the run, so we can reproduce the problem. Feature requests are welcome there too.

Limits & notes

  • Data: the GLEIF LEI database (api.gleif.org), more than 2.5 million LEI records with level-2 parent data. Only entities that applied for an LEI are listed (banks, issuers, funds, many large and mid-size companies); most small businesses have none.
  • Name search covers legal, previous, trading and transliterated names; scores below minNameScore return not_found with the closest candidates so you can pick one by LEI.
  • GLEIF allows about 60 requests per minute; the Actor paces itself, fetches LEI codes 100 per request, resolves all parents of a batch in one more request and looks up each legal form and register name once per run. A name search takes one or two requests.
  • Up to 10,000 lookups per run (maxItems).