LEI Lookup & Watch: Legal Entity Identifier Status & Renewals avatar

LEI Lookup & Watch: Legal Entity Identifier Status & Renewals

Pricing

from $1.00 / 1,000 lei record returneds

Go to Apify Store
LEI Lookup & Watch: Legal Entity Identifier Status & Renewals

LEI Lookup & Watch: Legal Entity Identifier Status & Renewals

Look up or watch Legal Entity Identifier (LEI) records from the free public GLEIF API: status, renewal date, name, address and parents. Watch mode returns only new, changed or soon-to-renew LEIs. Never charged for failed or unchanged rows. Not affiliated with or endorsed by GLEIF.

Pricing

from $1.00 / 1,000 lei record returneds

Rating

0.0

(0)

Developer

COMPASS DEV

COMPASS DEV

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Returns Legal Entity Identifier (LEI) records from the free public GLEIF API (status, next renewal date, legal name, addresses without street lines, BIC and optional parent companies) and, in watch mode, only the LEIs that are new to your list, changed, or due for renewal soon. Never charged for failed or unchanged rows.

Give it LEI codes (or company names) and get one clean, flat row per company: is the LEI still ISSUED or has it LAPSED, when must it be renewed, what is the registered legal name and address, which register and number, who is the parent. Run it on a schedule in watch mode and it tells you only what changed since the last run: a lapsed LEI, a renewal date that is 30 days away, a new name or address, a merger (successor LEI). Built for KYC / KYB, counterparty and vendor monitoring, MiFIR / EMIR reporting teams, and AI agents that need a reliable company identifier.

Data: LEI data from GLEIF (the Global Legal Entity Identifier Foundation) under CC0. Not affiliated with or endorsed by GLEIF.

Quick start

  • Look up two LEIs (export: every record, every run):
{ "companies": ["7LTWFZYICNSX8D621K86", "529900EXG2PM316ISO63"] }
  • Watch the same LEIs for changes and renewals (the first run is the baseline; later runs return only changes):
{ "companies": ["7LTWFZYICNSX8D621K86", "529900EXG2PM316ISO63"], "stateName": "my-counterparties" }
  • Find a company by name (best match; use the LEI for watching):
{ "companies": ["Deutsche Bank"], "country": "DE" }

What it does

  • LEI codes: looked up in batches of 100 per request; one row per LEI. An unknown LEI gives a free no_data row, an LEI with wrong check digits a free failed row (no request).
  • Company names: searched on the legal name (GLEIF's search needs every word of the legal name; a trailing legal form such as "AG", "Inc" or "Ltd" is left out of the search). Candidates are ranked: the same name (legal forms spelled out: "AG" = "Aktiengesellschaft") first, then active and issued records, then main entities before branches and funds. matchesPerName sets how many are returned (default 1). matchType and nameCandidates say how sure the match is.
  • Watch mode: remembers each LEI's legal name, entity and registration status, next renewal date, legal and headquarters address, legal form, jurisdiction, successor, expiration and parents under your watch list name, and returns only:
    • baseline: the first time an LEI is on the list;
    • changed: a tracked field changed (changedFields and the previous name, statuses and renewal date are in the row);
    • renewal_due: nothing changed, but the next renewal date is now within renewalWarningDays (sent once per renewal);
    • unchanged LEIs are free and left out (includeUnchanged: true returns them as free rows).
    • A watch run with nothing new or changed returns exactly one free no_data row that says so, so a scheduled run never looks empty or broken.
  • Parents (includeParents: true): direct and ultimate accounting parent (LEI and legal name), from GLEIF's relationship records.
  • No personal data (when in doubt, a record is left out whole): only records whose legal form (ISO 20275 ELF code) is on a reviewed list of forms that can't be a person are returned, so sole traders, "other" (8888) and "not listed" (9999) forms never are; also left out: GLEIF's sole-proprietor category, a person's name (or a sole-trader form or an owner) in any name field (legal, other, successor, parent or related-entity names), a parent or successor that is a person, and an address line that is a person's name or names an owner. An LEI left out gives a free no_data row with dropReason: "person" that says why, without the name.
  • Addresses carry no street line: legalAddress and headquartersAddress hold only the postal code, city, region and country (a free-text address line can name a person).
  • You are never charged for failed results: failed, no_data and unchanged rows are free.

Input

FieldTypeDefaultDescription
companieslist of strings— (prefilled with 2 LEIs)LEI codes and/or company legal names, one per line
modewatch or export—Empty: watch when stateName is given, otherwise export. An explicit mode wins
stateNamestring— (prefilled example-watchlist)Watch list name. Watch mode without a name uses the list default
renewalWarningDaysinteger 0–36530Watch: return a record once as renewal_due when its renewal date is this close
includeParentsbooleanfalseAdd direct and ultimate parent (2 more requests per record)
matchesPerNameinteger 1–101Company names: how many best matches to return
countrystring—Two-letter country code of the legal address, to narrow name searches
includeUnchangedbooleanfalseWatch: also return unchanged records (free)
maxItemsinteger 1–10,000100Most charged rows per run; in watch mode the rest comes next run

Field names from other tools: leis, names (→ companies). They work in the input but are not listed in the input schema (charter 5.4); companies wins when both are given.

Output

One row per LEI record (flat; exports cleanly to CSV, JSON and Excel):

{
"status": "ok",
"attempts": 1,
"error": null,
"input": "7LTWFZYICNSX8D621K86",
"mode": "watch",
"watchList": "my-counterparties",
"lei": "7LTWFZYICNSX8D621K86",
"legalName": "DEUTSCHE BANK AKTIENGESELLSCHAFT",
"entityStatus": "ACTIVE",
"registrationStatus": "ISSUED",
"category": "GENERAL",
"legalFormId": "6QQB",
"jurisdiction": "DE",
"legalAddress": "60325, Frankfurt am Main, DE-HE, DE",
"legalCountry": "DE",
"registeredAs": "HRB 30000",
"nextRenewalDate": "2027-06-05",
"daysToRenewal": 248,
"renewalDueSoon": false,
"bic": "DEUTDEFFXXX",
"directParentLei": null,
"matchType": "lei",
"changeType": "changed",
"changedFields": "registrationStatus",
"previousRegistrationStatus": "LAPSED",
"url": "https://search.gleif.org/#/record/7LTWFZYICNSX8D621K86",
"source": "GLEIF LEI data (Global Legal Entity Identifier Foundation), via the public GLEIF API",
"license": "CC0 1.0 (GLEIF LEI Data Terms of Use); not affiliated with or endorsed by GLEIF",
"dataUpdatedAt": "2026-09-30",
"scrapedAt": "2026-09-30T10:00:00.000Z"
}

Every row also has the headquarters address, register code, creation and registration dates, last update, expiration, successor, managing LOU, corroboration level, conformity flag and parent names (see the dataset schema).

StatusMeaningCharged?
okLEI record returnedExport: yes. Watch: baseline, changed and renewal_due yes; unchanged no
no_dataUnknown LEI, no name match, a record left out because it is or names a person, or no changes since the last runNo
failedInvalid input, or no answer after retries (error says why)No

The key-value store holds RUN_REPORT (counts, charged and free rows, stop reason) and, when something fails, the raw response (SNAPSHOT_*).

Use it from AI agents

  • One clear main input: {"companies": ["<LEI or company name>"]}. The same call returns data every time (export).
  • Add "stateName": "<list>" to get only changes and renewal alerts on later calls; a call with nothing new returns one no_data row that says "No new or changed LEI records since the last run".
  • Every row has status, error, url (the record on GLEIF's public LEI search) and scrapedAt.
  • Via the Apify MCP server or API: mouadapi/lei-watch. Pay per returned record; x402 agentic payments supported.

Copy-paste call (your Apify token in APIFY_TOKEN):

curl -s -X POST "https://api.apify.com/v2/acts/mouadapi~lei-watch/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companies": ["7LTWFZYICNSX8D621K86"]}'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('mouadapi/lei-watch').call({ companies: ['7LTWFZYICNSX8D621K86'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Pricing

Pay per event, one lei-record event per returned record (export: every record; watch: baseline, changed and renewal_due rows). no_data, failed and unchanged rows are free.

PlanPrice per 1,000 records
Free$1.50
Bronze$1.30
Silver$1.15
Gold (and higher)$1.00

Apify also charges its small per-run start event. There are no usage fees on top.

Limits

  • One request at a time, at most one a second (GLEIF publishes no per-minute limit; we stay well under the usual 60 a minute). 100 LEIs take about 1 request; with parents, 2 more requests per LEI (about 3 minutes for 100).
  • If GLEIF answers HTTP 429 (rate limit), the run pauses 60, 120 and 240 seconds on the same connection, then stops with free failed rows. No other IP or proxy is ever tried.

Known issues

  • Name search is best effort: GLEIF's legal-name search needs every word ("Deutsche Bank AG" does not find "DEUTSCHE BANK AKTIENGESELLSCHAFT", so the legal form is left out of the search). Check matchType; watch by LEI code.
  • Parents are the accounting-consolidation parents GLEIF has; many entities report none (then the fields are empty).
  • GLEIF refreshes its data several times a day (dataUpdatedAt is the data set's publish date).

Data and licence

  • Source: the public GLEIF API (api.gleif.org), documented at gleif.org. GLEIF's LEI Data Terms of Use: the data "are provided under the CC0 licence" and the Access Service "is provided for free".
  • This Actor is not provided, supported, authorized or endorsed by GLEIF or any LEI issuer (LOU), and is not a GLEIF service. It returns the LEI data as published.

FAQ

How do I get alerted before an LEI lapses? Schedule a daily or weekly watch run with your LEIs and renewalWarningDays (default 30). Each LEI comes back once as renewal_due when its renewal date gets close, and again as changed if it lapses or is renewed.

Why did a company name give the wrong entity? GLEIF's name search is word based. Check matchType (

name (same name)
is an exact match after spelling out legal forms), raise matchesPerName, narrow with country, or use the LEI.

Are people's names returned? No. Only legal forms that can't be a person pass, and records with a person's name in any name field, a parent or successor that is a person, or an address line that names a person or an owner are left out whole. No free-text address line is ever returned. The check is automatic and leans towards leaving data out: a company named like a person (a bare two-word name such as "Fresh Express", with no legal-form or organisation word) is left out too.