# GLEIF LEI Scraper (`anyxsolutions/gleif-lei-scraper`) Actor

Search the Global LEI Index by company name, LEI code or GLEIF URL. Get legal names, registered and HQ addresses, company register numbers, legal forms, status, renewal dates, BIC codes, and parent and subsidiary links. Official CC0 data from GLEIF; no API key or proxy.

- **URL**: https://apify.com/anyxsolutions/gleif-lei-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** Lead generation, Business
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

![banner](https://anyx.solutions/banners/gleif-lei-scraper.png)

## GLEIF LEI Scraper

**Company identity data from the Global LEI Index (legal names, addresses, register numbers, legal forms and parent companies) as clean JSON.**

The Global LEI Index lists almost 3.5 million legal entities that hold a Legal Entity Identifier
(LEI), the 20-character code that banks, funds, listed companies and their subsidiaries need to
trade and report to regulators. This Actor searches the index by company name, looks up LEI codes,
or reads GLEIF record URLs, and returns each entity's legal and other names, registered and
headquarters addresses, company register and register number, legal form, status, LEI renewal
dates, BIC and other identifiers, and its direct and ultimate parent companies. Search a name, a
list of LEIs, or a whole slice of the index by country, legal form and status. The data is the
official GLEIF Golden Copy, published under CC0 and updated daily. There is no login, no API key
and no proxy to set up. Built for KYC and onboarding teams, lead generation, supplier and
counterparty checks, and corporate-structure research.

### ⚡ Quick start

```json
{
  "searchTerms": ["Siemens"],
  "startUrls": [
    { "url": "https://search.gleif.org/#/record/W38RGI023J3WT1HWRP32" }
  ],
  "maxItems": 5
}
```

### 🧩 Input

| Field                  | Type    | Required | Default                      | Description                                                                                                                                                              |
| ---------------------- | ------- | -------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `searchTerms`          | array   | no       | —                            | Company names to search for, such as `Siemens`. Matches legal, trading, previous and transliterated names, best matches first.                                           |
| `leis`                 | array   | no       | —                            | LEI codes to fetch directly, such as `W38RGI023J3WT1HWRP32`. Invalid codes are skipped and listed in the log.                                                            |
| `startUrls`            | array   | no       | —                            | GLEIF URLs: record pages (`https://search.gleif.org/#/record/<LEI>`) or search pages (`…/#/search/simpleSearch=<name>`). lei-lookup.com record URLs work too.            |
| `countries`            | array   | no       | —                            | Only entities whose legal address is in these countries (two-letter ISO codes, such as `DE`).                                                                            |
| `legalForms`           | array   | no       | —                            | Only entities with these ISO 20275 legal-form (ELF) codes, such as `6QQB` (German AG) or `2HBR` (German GmbH).                                                           |
| `entityStatus`         | string  | no       | —                            | `ACTIVE` or `INACTIVE`. Leave empty for both.                                                                                                                            |
| `registrationStatuses` | array   | no       | —                            | Only LEIs in these registration states, such as `ISSUED` or `LAPSED`.                                                                                                    |
| `categories`           | array   | no       | —                            | Only these kinds of entity: `GENERAL`, `FUND`, `BRANCH`, `SOLE_PROPRIETOR`, `RESIDENT_GOVERNMENT_ENTITY`, `INTERNATIONAL_ORGANIZATION`.                                  |
| `includeRelationships` | boolean | no       | `true`                       | Include parents and subsidiaries: each entity's direct and ultimate parent (or why none is reported) and how many direct and ultimate subsidiaries hold an LEI.          |
| `maxItems`             | integer | no       | —                            | Maximum entities per company name or search URL. The input form starts at 5; leave it empty to get every match. LEI codes and record URLs always return one entity each. |
| `proxyConfiguration`   | object  | no       | `{ "useApifyProxy": false }` | Proxy settings. The Global LEI Index needs no proxy.                                                                                                                     |

Give at least one company name, LEI code or GLEIF URL, or set a filter on its own: with filters
and no names, the Actor lists every entity that matches them, for example every active German
Aktiengesellschaft (`countries: ["DE"]`, `legalForms: ["6QQB"]`, `entityStatus: "ACTIVE"`). The
filters apply to name searches and filter-only listings; LEI codes are always fetched as given.

### 📤 Output

Each legal entity is one dataset row. Dates are ISO 8601. Country and region codes are ISO 3166.

#### Fields

| Field                   | Type   | Description                                                                                                                                                     |
| ----------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `lei`                   | string | The Legal Entity Identifier.                                                                                                                                    |
| `legalName`             | string | Official legal name.                                                                                                                                            |
| `otherNames`            | array  | Trading, previous and other names: `name`, `language`, `type`.                                                                                                  |
| `transliteratedNames`   | array  | Latin-script versions of the names: `name`, `language`, `type`.                                                                                                 |
| `legalAddress`          | object | Registered address: `addressLines`, `addressNumber`, `city`, `region`, `postalCode`, `country`.                                                                 |
| `headquartersAddress`   | object | Headquarters address, same shape.                                                                                                                               |
| `registeredAt`          | object | The company register: `authorityId` (GLEIF RA code), `authorityName`, `authorityOrganization`, and `entityId`, the entity's number there (e.g. company number). |
| `legalJurisdiction`     | string | Jurisdiction of legal formation.                                                                                                                                |
| `legalForm`             | object | `code` (ISO 20275 ELF code) and `name`.                                                                                                                         |
| `category`              | string | `GENERAL`, `FUND`, `BRANCH`, `SOLE_PROPRIETOR`, and so on.                                                                                                      |
| `subCategory`           | string | Sub-category, when given.                                                                                                                                       |
| `status`                | string | Entity status: `ACTIVE` or `INACTIVE`.                                                                                                                          |
| `creationDate`          | string | When the entity was legally created.                                                                                                                            |
| `expiration`            | object | For an entity that has ceased: `date` and `reason`. Null otherwise.                                                                                             |
| `associatedEntity`      | object | For a fund, its manager or umbrella: `lei` and `name`. Null otherwise.                                                                                          |
| `successorEntity`       | object | The entity that took over after a merger: `lei` and `name`. Null otherwise.                                                                                     |
| `registration`          | object | The LEI itself: `initialRegistrationDate`, `lastUpdateDate`, `status`, `nextRenewalDate`, `managingLou` (issuer LEI), `corroborationLevel`.                     |
| `bic`                   | array  | BIC (SWIFT) codes mapped to the entity.                                                                                                                         |
| `mic`                   | array  | Market Identifier Codes mapped to the entity.                                                                                                                   |
| `ocid`                  | string | OpenCorporates ID, when mapped.                                                                                                                                 |
| `qcc`                   | string | QCC code, when mapped.                                                                                                                                          |
| `spglobal`              | array  | S\&P Global company IDs, when mapped.                                                                                                                            |
| `conformityFlag`        | string | Whether the record conforms to GLEIF's data-quality rules.                                                                                                      |
| `directParent`          | object | `lei` and `legalName` of the direct accounting parent, or `reportingException` with the reason none is reported. Null when relationships are off.               |
| `ultimateParent`        | object | The same for the ultimate parent.                                                                                                                               |
| `directChildrenCount`   | number | How many direct subsidiaries hold an LEI. Null when relationships are off.                                                                                      |
| `ultimateChildrenCount` | number | How many subsidiaries, at any depth, have this entity as ultimate parent.                                                                                       |
| `searchTerm`            | string | The company name that found the entity; null for LEI lookups.                                                                                                   |
| `dataAsOf`              | string | Publication date of the GLEIF data set the record was read from.                                                                                                |
| `url`                   | string | The entity's page on search.gleif.org.                                                                                                                          |

<details><summary>Example output</summary>

```json
{
  "lei": "W38RGI023J3WT1HWRP32",
  "legalName": "Siemens Aktiengesellschaft",
  "otherNames": [],
  "transliteratedNames": [],
  "legalAddress": {
    "addressLines": ["Werner-von-Siemens-Str. 1"],
    "addressNumber": null,
    "city": "München",
    "region": "DE-BY",
    "postalCode": "80333",
    "country": "DE"
  },
  "headquartersAddress": {
    "addressLines": ["Werner-von-Siemens-Str. 1"],
    "addressNumber": null,
    "city": "München",
    "region": "DE-BY",
    "postalCode": "80333",
    "country": "DE"
  },
  "registeredAt": {
    "authorityId": "RA000304",
    "authorityName": "Commercial Register",
    "authorityOrganization": "Local Court München",
    "entityId": "HRB 6684"
  },
  "legalJurisdiction": "DE",
  "legalForm": { "code": "6QQB", "name": "Aktiengesellschaft" },
  "category": "GENERAL",
  "subCategory": null,
  "status": "ACTIVE",
  "creationDate": "1996-08-27T22:00:00Z",
  "expiration": null,
  "associatedEntity": null,
  "successorEntity": null,
  "registration": {
    "initialRegistrationDate": "2012-06-06T15:52:00Z",
    "lastUpdateDate": "2026-09-01T15:35:21Z",
    "status": "ISSUED",
    "nextRenewalDate": "2027-10-25T12:49:24Z",
    "managingLou": "5299000J2N45DDNE4Y28",
    "corroborationLevel": "FULLY_CORROBORATED"
  },
  "bic": ["SIEMDEMMXXX"],
  "mic": [],
  "ocid": null,
  "qcc": "QDEB14M6VV",
  "spglobal": ["394038"],
  "conformityFlag": "CONFORMING",
  "directParent": {
    "lei": null,
    "legalName": null,
    "reportingException": "NO_KNOWN_PERSON"
  },
  "ultimateParent": {
    "lei": null,
    "legalName": null,
    "reportingException": "NO_KNOWN_PERSON"
  },
  "directChildrenCount": 459,
  "ultimateChildrenCount": 572,
  "searchTerm": null,
  "dataAsOf": "2026-10-13T00:00:00Z",
  "url": "https://search.gleif.org/#/record/W38RGI023J3WT1HWRP32"
}
```

</details>

### 💡 Use cases

- **KYC and onboarding.** Verify a counterparty's legal name, registered address, register number and LEI status before you open an account or sign a contract.
- **Lead generation.** List every active company of a given legal form in a country, with addresses and register numbers, as a clean prospect base.
- **Corporate structure.** Find who owns a subsidiary, and how many subsidiaries a group has, from the parent data companies report themselves.
- **Data enrichment.** Add LEIs, BIC codes and register numbers to a CRM or supplier master, or check LEIs that are due for renewal or have lapsed.

### ❓ FAQ

- **Where does the data come from?** From GLEIF, the Global Legal Entity Identifier Foundation, which publishes the Global LEI Index as open data under the CC0 licence. It is updated daily; `dataAsOf` gives the publication date.
- **Do I need an API key, a GLEIF account or a proxy?** No.
- **How fast is it?** GLEIF allows about 60 requests a minute, and the Actor keeps under that limit. A request fetches up to 200 entities, so plain searches are fast. With parents and subsidiaries on, each group parent costs two extra requests; turn `includeRelationships` off for very large listings.
- **Why is a parent missing?** Companies report their parents to GLEIF themselves. When they don't, `reportingException` gives the reason, for example `NATURAL_PERSONS` (owned by people), `NON_CONSOLIDATING` or `NO_KNOWN_PERSON`.
- **Can I get more than 10,000 results for one name?** GLEIF returns at most 10,000 matches per name search. Narrow it with filters, or leave the name empty and list by filters only, which has no limit.
- **What is an ELF code?** The ISO 20275 code for a legal form, such as `6QQB` for a German Aktiengesellschaft. GLEIF publishes the full ELF code list on its website.

### 🔗 More scrapers by Anyx

- [Google Maps Email Extractor](https://apify.com/anyxsolutions/google-maps-email-extractor)
- [Yellow Pages Scraper](https://apify.com/anyxsolutions/yellowpages-scraper)
- [Trustpilot Scraper](https://apify.com/anyxsolutions/trustpilot-scraper)
- [Glassdoor Scraper](https://apify.com/anyxsolutions/glassdoor-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [search.gleif.org](https://search.gleif.org/)

# Actor input Schema

## `searchTerms` (type: `array`):

Company names to search for, for example Siemens or Deutsche Bank. Matches legal names, trading names, previous names and transliterations, best matches first.

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

Legal Entity Identifiers (20 characters) to fetch directly, for example W38RGI023J3WT1HWRP32. Invalid codes are skipped and reported in the log.

## `startUrls` (type: `array`):

GLEIF record URLs, such as https://search.gleif.org/#/record/W38RGI023J3WT1HWRP32, or GLEIF search URLs (…/#/search/simpleSearch=<name>). lei-lookup.com record URLs work too.

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

Only return entities whose legal address is in these countries, as two-letter ISO codes, for example DE or US. Applies to name searches; with no names, lists every matching entity.

## `legalForms` (type: `array`):

Only return entities with these ISO 20275 legal-form codes, for example 6QQB (German Aktiengesellschaft) or 2HBR (German GmbH).

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

Only return active entities, or only entities that have ceased to exist. Leave empty for both.

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

Only return LEIs in these registration states. Issued LEIs are current; lapsed ones were not renewed on time.

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

Only return these kinds of entity, for example companies (General) without investment funds or branches.

## `includeRelationships` (type: `boolean`):

Add each entity's direct and ultimate parent (or the reason none is reported) and how many direct and ultimate subsidiaries hold an LEI. Costs a few extra calls per page.

## `maxItems` (type: `integer`):

Maximum number of entities to return per company name or search URL. Leave empty to get every match. LEI codes and record URLs always return one entity each.

## `proxyConfiguration` (type: `object`):

Proxy settings. The Global LEI Index is public and needs no proxy.

## Actor input object example

```json
{
  "searchTerms": [
    "Siemens"
  ],
  "startUrls": [
    {
      "url": "https://search.gleif.org/#/record/W38RGI023J3WT1HWRP32"
    }
  ],
  "includeRelationships": true,
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "searchTerms": [
        "Siemens"
    ],
    "startUrls": [
        {
            "url": "https://search.gleif.org/#/record/W38RGI023J3WT1HWRP32"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/gleif-lei-scraper").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 = {
    "searchTerms": ["Siemens"],
    "startUrls": [{ "url": "https://search.gleif.org/#/record/W38RGI023J3WT1HWRP32" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/gleif-lei-scraper").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 '{
  "searchTerms": [
    "Siemens"
  ],
  "startUrls": [
    {
      "url": "https://search.gleif.org/#/record/W38RGI023J3WT1HWRP32"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/gleif-lei-scraper --silent --output-dataset

```

## MCP server setup

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

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/5MH8zxaT2zoEs98Cr/builds/ebELo8dV9gRbw3Jiq/openapi.json
