# GLEIF LEI Lookup – Legal Entity Identifier & New LEI Companies (`gazidev/gleif-lei-search`) Actor

Look up Legal Entity Identifiers (LEI) by code, company name or registration number, or get newly issued LEIs by country and date: legal & HQ address, status, renewal date, legal form, LOU, BIC, parent companies. Official GLEIF API (CC0). $1 per 1,000 records.

- **URL**: https://apify.com/gazidev/gleif-lei-search.md
- **Developed by:** [Cemal Atakli](https://apify.com/gazidev) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 lei records

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

## GLEIF LEI Lookup – Legal Entity Identifier Search & Newly Issued LEIs

Look up **Legal Entity Identifiers (LEI)** in the official **GLEIF Global LEI Index**, the public register of about 2.9 million companies, funds, branches and other legal entities worldwide. You can search by **LEI code** (bulk), by **company name** or by **registration / company number**. The main feature is a feed of **newly issued LEIs by country and date**: every day new holding companies, funds, SPVs and subsidiaries get an LEI before they trade, borrow or report.

Each record includes the **LEI**, legal name and other names, **legal and headquarters address**, jurisdiction, **legal form** (ELF code + name), registration authority and **company number**, **entity status**, **LEI registration status** (issued / lapsed ...), **initial registration date**, **next renewal date**, **managing LOU** (LEI issuer), corroboration level, **BIC codes**, successor entity and, optionally, the **direct and ultimate parent company**.

Data comes from the official keyless **GLEIF API** (`api.gleif.org`). No scraping, no login, no API key. GLEIF publishes LEI data under **CC0 1.0** (public domain).

**$1 per 1,000 LEI records.** Parent lookups are included. You pay only for records saved.

### Who uses it

- **B2B sales, banks, payment and fintech providers**: a daily list of **new companies and funds that just got an LEI** in Germany, the UK, Luxembourg, Ireland, the US or any other country. These are often new investment vehicles that need banking, custody, audit, insurance or legal services.
- **KYC / AML / onboarding teams**: verify a counterparty's LEI, legal name, address, status and **who owns whom** (direct and ultimate parent) in bulk.
- **Compliance and reporting (EMIR, MiFIR, SFTR, DORA)**: check that the LEIs you report are **ISSUED** and not **LAPSED**, and see when they must be renewed.
- **LEI registration agents**: find **lapsed** or soon-to-expire LEIs for renewal offers.
- **Data teams and AI agents**: enrich a CRM with LEI, BIC, legal form and parent data.

### How it works

The Actor picks its mode from the input:

| You fill in | What you get |
|---|---|
| **LEI codes** | Bulk lookup, 100 LEIs per API request. Unknown codes are listed in the run summary. |
| **Company names** | Top matches per name (legal + other names), best match first. |
| **Registration numbers** | Exact match on the business-register number (e.g. `HRB 89334`). |
| Nothing of the above | **Newly issued LEIs** in the chosen countries within the last N days (default 7), newest first. |

Filters: countries, entity status (active / inactive), LEI registration status (issued, lapsed ...), category (general, fund, branch, sole proprietor ...). Tick **Only LEIs not returned before** and schedule the Actor daily to get a monitoring feed of new LEIs.

### Input example

```json
{
  "countries": ["DE"],
  "registeredWithinDays": 7,
  "categories": ["GENERAL"],
  "registrationStatuses": ["ISSUED"],
  "includeParents": true,
  "maxResults": 500
}
```

Bulk lookup:

```json
{ "leiCodes": ["HWUPKR0MPOU8FGXBT394", "7LTWFZYICNSX8D621K86"], "includeParents": true }
```

### Output example

```json
{
  "lei": "9845001ADF68D5FCD057",
  "legalName": "Companyon Analytics GmbH",
  "otherNames": [],
  "entityStatus": "ACTIVE",
  "registrationStatus": "ISSUED",
  "category": "GENERAL",
  "jurisdiction": "DE",
  "legalFormCode": "2HBR",
  "legalFormName": "Gesellschaft mit beschränkter Haftung",
  "registrationAuthorityId": "RA000234",
  "registrationNumber": "HRB 89334",
  "entityCreationDate": "2020-03-19",
  "initialRegistrationDate": "2026-10-23",
  "nextRenewalDate": "2027-10-23",
  "managingLou": "529900T8BM49AURSDO55",
  "managingLouName": "Ubisecure RapidLEI",
  "corroborationLevel": "FULLY_CORROBORATED",
  "legalAddress": "Speditionstraße 15a, 40221 Düsseldorf, DE-NW, DE",
  "legalCity": "Düsseldorf",
  "legalCountry": "DE",
  "hqAddress": "Speditionstraße 15a, 40221 Düsseldorf, DE-NW, DE",
  "bic": [],
  "directParentLei": null,
  "directParentExceptionReason": "NO_KNOWN_PERSON",
  "gleifUrl": "https://search.gleif.org/#/record/9845001ADF68D5FCD057",
  "licence": "CC0 1.0"
}
```

With **Include direct & ultimate parent** on, a subsidiary such as Siemens S.A.S gets `directParentLei: "W38RGI023J3WT1HWRP32"` and `directParentName: "Siemens Aktiengesellschaft"`. See `SAMPLE_OUTPUT.json` for complete records. A run summary (records, total matches, not-found codes, whether the run stopped at the charge limit) is saved as `OUTPUT` in the key-value store.

### Pricing

Pay per event: **$0.001 per LEI record** ($1 per 1,000). Parent lookups, legal-form and LOU names are included. Error rows are free. The run stops gracefully when your maximum charge per run is reached.

| Actor | Price per 1,000 records | New LEIs by country/date | Parents |
|---|---|---|---|
| **This Actor** | **$1.00** | Yes, newest first + monitoring | Yes, included |
| logiover/gleif-lei-company-registry-scraper | $3.00 | – | – |
| ryanclinton/gleif-lei-lookup | $2.00 | – | – |
| rtworule (GLEIF) | $1.00 | – | – |

(Store prices checked October 2026. Features of other Actors may change; check their pages.)

Speed: the GLEIF API allows about 60 requests per minute, and this Actor stays under that limit. Each request returns up to 200 records, so about 10,000 records take ~1 minute. The default run (100 new German LEIs) finishes in a few seconds at 256 MB.

### FAQ

**What is an LEI?** A 20-character ISO 17442 code that identifies a legal entity taking part in financial transactions. It is required for trading, derivatives reporting and many bank and regulatory processes.

**Why are newly issued LEIs useful leads?** A new LEI usually means a new fund, SPV, holding or subsidiary that is about to trade, borrow, issue securities or open accounts. These entities have just appeared and often still need service providers.

**Is this legal?** Yes. LEI data is published by the Global Legal Entity Identifier Foundation (GLEIF) under the CC0 1.0 licence (see the [LEI data terms of use](https://www.gleif.org/en/meta/lei-data-terms-of-use)). `api.gleif.org/robots.txt` disallows nothing, and no key is needed. The Actor uses only the official API and stays under its rate limit.

**How fresh is the data?** GLEIF updates the API several times a day from the LEI issuers. LEIs issued yesterday are usually present today.

**Can I filter by city or legal form?** The GLEIF API does not support these filters, so the Actor doesn't either. Country (legal address), status and category are filtered on the server.

**Does it return ISINs?** No. ISIN mappings need one extra request per LEI, which would make runs much slower. BIC codes are included.

**Why does a name search not show the exact company first?** The order comes from GLEIF's search ranking. Raise *Max results per name* or add a country filter.

### Use with AI agents / Apify MCP

You can call this Actor as a tool from Claude, ChatGPT or any MCP client through the [Apify MCP server](https://mcp.apify.com) (`gazidev/gleif-lei-search`). Example prompts: *"List LEIs issued in Luxembourg this week for funds"*, *"Check whether these 50 LEIs are still ISSUED and when they need renewal"*, *"Who is the ultimate parent of LEI 549300VBOZ8U67FXUY26?"*. The input is plain JSON and the output is flat records, which work well in agent pipelines.

*This Actor is not affiliated with or endorsed by GLEIF. LEI data © GLEIF, CC0 1.0.*

# Actor input Schema

## `countries` (type: `array`):

2-letter ISO country codes of the entity's legal address, e.g. `DE`, `US`, `GB`, `FR`, `LU`, `IE`. Used by the new-LEI search and as a filter for name / registration-number searches. Empty = all countries.

## `registeredWithinDays` (type: `integer`):

Main feature: newly issued LEIs (new holding companies, funds, SPVs, subsidiaries...), newest first. Used when no LEI codes, names or registration numbers are given. 0 = no date limit (then pick a country).

## `registeredFrom` (type: `string`):

YYYY-MM-DD. Overrides *last N days*.

## `registeredTo` (type: `string`):

YYYY-MM-DD. Optional upper bound (inclusive).

## `leiCodes` (type: `array`):

Bulk lookup by 20-character LEI, e.g. `HWUPKR0MPOU8FGXBT394` (Apple Inc.). 100 LEIs per API request; unknown codes are listed in the run summary (OUTPUT). Other filters are ignored for LEI lookups.

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

Matches legal and other (trading / previous / transliterated) names, best matches first, e.g. `Deutsche Bank`, `Tesla`. Country / status / category filters apply.

## `maxResultsPerName` (type: `integer`):

Top matches returned for each name.

## `registrationNumbers` (type: `array`):

Exact business-register number as filed with GLEIF, e.g. `HRB 89334` (Germany), `806592` (Apple, California). Combine with *Countries* to avoid collisions.

## `entityStatus` (type: `string`):

Legal status of the entity itself.

## `registrationStatuses` (type: `array`):

Empty = any. `Lapsed` = LEI not renewed (renewal outreach leads).

## `categories` (type: `array`):

Empty = all categories.

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

Adds the direct and ultimate accounting-consolidation parent (LEI, name, country) or the reported exception reason (e.g. NATURAL_PERSONS, NON_CONSOLIDATING). About 1 extra API request per 200 records; no extra charge.

## `onlyNew` (type: `boolean`):

Skip LEIs returned by earlier runs with the same *State key*. Schedule daily for a feed of newly issued LEIs.

## `stateKey` (type: `string`):

Separate 'already seen' lists for different searches.

## `maxResults` (type: `integer`):

Stop after this many records in total (0 = all matching). You pay per record saved.

## Actor input object example

```json
{
  "countries": [
    "DE"
  ],
  "registeredWithinDays": 7,
  "maxResultsPerName": 10,
  "entityStatus": "ANY",
  "includeParents": false,
  "onlyNew": false,
  "stateKey": "default",
  "maxResults": 100
}
```

# Actor output Schema

## `leiRecords` (type: `string`):

No description

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

No description

## `summary` (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 = {
    "countries": [
        "DE"
    ],
    "registeredWithinDays": 7,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("gazidev/gleif-lei-search").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 = {
    "countries": ["DE"],
    "registeredWithinDays": 7,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("gazidev/gleif-lei-search").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 '{
  "countries": [
    "DE"
  ],
  "registeredWithinDays": 7,
  "maxResults": 100
}' |
apify call gazidev/gleif-lei-search --silent --output-dataset

```

## MCP server setup

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

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/9y6gmPdPrnSSgayb1/builds/Q2cxKtGkztG6xh566/openapi.json
