# LEI Lookup: legal entity data from GLEIF (`examsens.ai/lei-lookup`) Actor

Looks up Legal Entity Identifiers in the official GLEIF database by LEI code or entity name: legal name, addresses, jurisdiction, legal form, entity and registration status, renewal date, BIC codes and optional direct and ultimate parents. No key needed.

- **URL**: https://apify.com/examsens.ai/lei-lookup.md
- **Developed by:** [Ed Rayyis](https://apify.com/examsens.ai) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.70 / 1,000 record returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LEI Lookup: legal entity data from GLEIF

Look up Legal Entity Identifiers by code or by company name and get each entity back as one clean row: legal name, legal and headquarters addresses, jurisdiction, legal form, entity status, registration status and renewal date, the registry it's filed with, and any BIC codes linked to it. The data comes from the Global Legal Entity Identifier Foundation's free public API \[1], so it matches what GLEIF publishes, and there's no key to set up.

Turn on parents and each row also names the entity's direct and ultimate parent where GLEIF holds them.

### What you get for each record

- `lei`, `legalName`, `otherNames` (former and trading names GLEIF lists) and `transliteratedNames`
- `legalAddress` and `headquartersAddress`, each with street lines, city, region, country and postal code, and `country`
- `jurisdiction`, `legalFormId` (the legal form code GLEIF lists) and `legalFormOther`
- `category`, `subCategory`, `entityStatus` (such as ACTIVE), `entityCreationDate`, and `expirationDate`, `expirationReason`, `successorLei` and `successorName` for entities that have ended
- `registrationStatus` (such as ISSUED or LAPSED), `initialRegistrationDate`, `lastUpdateDate`, `nextRenewalDate`, `managingLou` and `corroborationLevel`
- `registeredAt` and `registeredAs`: the business registry and the entity's number in it
- `bic`, `mic` and `ocid` codes where GLEIF links them
- `directParent` and `ultimateParent`, each with LEI, legal name and country, when you turn parents on
- `gleifUrl`, a link to the record on GLEIF's search site

In testing, Apple Inc.'s LEI returned its Glendale legal address, Cupertino headquarters, former name Apple Computer, Inc. and BIC code. A search for "Google LLC" with parents on returned Google subsidiaries with GOOGLE LLC as the direct parent and ALPHABET INC. as the ultimate parent.

### Personal data

The actor returns entity data only. Records in GLEIF's sole proprietor category can carry a person's name, so they're left out: a code that points to one gets an error row, and name searches skip them. Address lines that start with "c/o", "care of", "attn" or "attention" can name a person and are dropped from both addresses.

### Input

- LEI codes. Each is checked against the ISO 17442 check digits before any request, and up to 100 go to GLEIF in one request.
- Entity names. By default a name is matched against GLEIF's full text index, so "Siemens Aktiengesellschaft" also finds Siemens subsidiaries. Turn on "Search legal names only" to match legal names alone.
- Country of legal address, as a two letter code, and only active entities: both narrow name searches.
- Maximum results per name search, 20 by default.
- Include direct and ultimate parents, off by default.

### Output

One row per record, with `query` and `queryType` showing which input found it. A code that fails the check digit test, a code GLEIF doesn't hold, and a name with no matches each get a row with `ok` false and the reason in `error`, and the run carries on. The `OUTPUT` record in the key value store gives records returned and inputs that failed.

### Speed and fair use

GLEIF allows 60 requests per minute per user \[2], so the actor sends one request at a time at least 1.1 seconds apart. A batch of up to 100 LEI codes is one request and a name search is one request per 200 results, Parents cost two more requests per record, so runs with parents are slower.

### Pricing

Pay per event: one event per record returned. Rejected codes, codes with no record and empty searches aren't charged. Before each record the run checks the maximum charge you set and stops when it's reached, so every record row in the dataset is a paid one.

### Data license

GLEIF provides LEI data under the CC0 license \[3]. This actor isn't provided, supported or authorized by GLEIF, and every row carries that note in `notice`.

### Support

Questions and problems: the Issues tab on this page. Replies are written by an AI assistant on behalf of the developer and reviewed by the developer.

### References

\[1] GLEIF, GLEIF API. https://www.gleif.org/en/lei-data/gleif-api
\[2] GLEIF API documentation, section "Terms & Conditions". https://api.gleif.org/docs
\[3] GLEIF, LEI Data Terms of Use, section II.3. https://www.gleif.org/en/meta/lei-data-terms-of-use

# Actor input Schema

## `leis` (type: `array`):

20 character Legal Entity Identifiers, one per line. Up to 100 are fetched in one request.

## `names` (type: `array`):

Company or organization names to search, one per line. Each search returns up to the maximum below.

## `exactNameMatch` (type: `boolean`):

Match the name against legal names only. Off searches GLEIF's full text index, which also covers other names and more fields.

## `country` (type: `string`):

Keep name search results whose legal address is in this country, as a two letter ISO code such as US, GB or DE.

## `onlyActive` (type: `boolean`):

Keep name search results whose entity status is ACTIVE.

## `maxResultsPerSearch` (type: `integer`):

Records kept for each name searched, in GLEIF's order.

## `includeParents` (type: `boolean`):

Add the LEI, legal name and country of each record's direct and ultimate parent where GLEIF holds them. This takes two more requests per record, so runs are slower.

## Actor input object example

```json
{
  "leis": [
    "5493001KJTIIGC8Y1R12"
  ],
  "names": [
    "Siemens Aktiengesellschaft"
  ],
  "exactNameMatch": false,
  "onlyActive": false,
  "maxResultsPerSearch": 20,
  "includeParents": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "leis": [
        "5493001KJTIIGC8Y1R12"
    ],
    "names": [
        "Siemens Aktiengesellschaft"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("examsens.ai/lei-lookup").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "leis": ["5493001KJTIIGC8Y1R12"],
    "names": ["Siemens Aktiengesellschaft"],
}

# Run the Actor and wait for it to finish
run = client.actor("examsens.ai/lei-lookup").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "leis": [
    "5493001KJTIIGC8Y1R12"
  ],
  "names": [
    "Siemens Aktiengesellschaft"
  ]
}' |
apify call examsens.ai/lei-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,examsens.ai/lei-lookup"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/U9H9DKFYkoY172UDh/builds/9CtccjDBGj32vdajt/openapi.json
