GLEIF LEI Lookup & Company LEI Search (Apify Actor)

LEI lookup in bulk from the GLEIF index: find the LEI for a company by name, or look up an LEI code. Returns legal name, status, jurisdiction, legal form, addresses, registration ID and parent LEI. No API key. $1 per 1,000 records, no-match inputs free. Runs as an Apify Actor, callable from MCP clients via the Apify MCP server (https://mcp.apify.com/?actors=pennydata/lei-company-lookup-bulk).

Hosted MCP Server

npx add-mcp 'https://mcp.apify.com/?actors=pennydata/lei-company-lookup-bulk'

Installs into Claude Code, Codex, Cursor and more

Documentation

LEI Lookup: Bulk GLEIF Company LEI Search, $1 per 1,000 (pennydata/lei-company-lookup-bulk) Actor

LEI lookup in bulk from the GLEIF index: find the LEI for a company by name, or look up an LEI code. Returns legal name, status, jurisdiction, legal form, addresses, registration ID and parent LEI. No API key. $1 per 1,000 records, no-match inputs free. AI-operated.

Pricing

from $0.70 / 1,000 company record returneds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage. 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 section below.

Each client library has reference documentation the quickstart does not restate: JavaScript/TypeScript (npm install apify-client) and Python (pip install apify-client).

README

LEI Lookup Bulk: Company Search by Name or LEI (GLEIF)

Real output (local run 2026-10-25, 5 company names, maxPerName 1):

leilegalNamejurisdictionregistrationStatusnextRenewalDate
HWUPKR0MPOU8FGXBT394Apple Inc.US-CAISSUED2027-03-08
INR2EJN1ERAN0W5ZP974MICROSOFT CORPORATIONUS-WAISSUED2027-05-04
54930043XZGB27CTOV49TESLA, INC.US-TXISSUED2027-05-14
549300S4KLFTLO7GSQ80NVIDIA CORPORATIONUS-DEISSUED2027-02-06
5493006MHB84DD0ZWV18ALPHABET INC.US-DEISSUED2027-09-17

Copy-paste input for this run:

{"names":["Apple Inc.","Microsoft Corporation","Tesla, Inc.","NVIDIA Corporation","Alphabet Inc."],"maxPerName":1}

Look up legal entities in bulk by company name or 20-character LEI and get flat rows: legal name, status, jurisdiction, legal form, legal and headquarters address, registration authority and ID, direct parent LEI and next renewal date. You are charged only for records that are returned; names with no match, invalid LEIs and failed requests are free. Built with AI assistance (Claude); maintained by the publisher. Not affiliated with, endorsed by or sponsored by GLEIF.

Quickstart (one API call)

curl -X POST "https://api.apify.com/v2/acts/pennydata~lei-company-lookup-bulk/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"names":["Apple Inc."],"maxPerName":3}'

Or open the Actor in the Console and click Start: the prefilled input (one name, Apple Inc.) runs as-is. Store page: https://apify.com/pennydata/lei-company-lookup-bulk

Try it (no code)

Open the Store page and click Try for free. The input form opens with the schema prefill (names: Apple Inc., maxPerName: 3), so Start runs as-is. There is no URL parameter that pre-fills custom input; type your own names into names instead.

Sample output of a real local run (2026-10-22) with {"names":["Apple Inc.","Microsoft Corporation","Tesla, Inc."],"maxPerName":1}, 3 rows:

leilegalNamejurisdictionregistrationStatusnextRenewalDate
HWUPKR0MPOU8FGXBT394Apple Inc.US-CAISSUED2027-03-08
INR2EJN1ERAN0W5ZP974MICROSOFT CORPORATIONUS-WAISSUED2027-05-04
54930043XZGB27CTOV49TESLA, INC.US-TXISSUED2027-05-14

Input

fieldmeaning
namesCompany names to search (one list entry each). Up to maxPerName records per name.
leis20-character LEIs to fetch directly.
countryOptional ISO country code of the legal address (e.g. US, DE).
statusOptional ACTIVE or INACTIVE.
fuzzytrue = GLEIF fuzzy matching, tolerates typos and near-misses. Default false.
maxPerNameMax records per name, 1-50. Default 3.
query, queries, companyNamesAliases for names (a single string / a list), for drop-in use from other LEI actors.
leiAlias for leis (a list or a single string).
maxResultsAlias for maxPerName; wins if both are set.

Use names, leis or both. Every row has a matchedInput field naming the name or LEI that produced it. Duplicate LEIs are returned once.

Output

One row per legal entity:

{
  "lei": "HWUPKR0MPOU8FGXBT394",
  "legalName": "Apple Inc.",
  "jurisdiction": "US-CA",
  "legalForm": "H1UM",
  "status": "ACTIVE",
  "legalAddress": { "lines": ["C/O C T Corporation System", "330 N. Brand Blvd", "Suite 700"], "city": "Glendale", "region": "US-CA", "country": "US", "postalCode": "91203" },
  "hqAddress": { "lines": ["One Apple Park Way"], "city": "Cupertino", "region": "US-CA", "country": "US", "postalCode": "95014" },
  "registrationAuthority": "RA000598",
  "registrationId": "806592",
  "directParentLei": null,
  "nextRenewal": "2027-03-08T17:27:20Z",
  "renewalStatus": "ISSUED",
  "daysUntilRenewal": 138,
  "matchedInput": "Apple Inc."
}

renewalStatus is the GLEIF registration status (ISSUED, LAPSED, ...). daysUntilRenewal is the whole days from today to nextRenewal (negative when overdue, null if unknown). directParentLei is null when GLEIF holds no direct-parent relationship for the entity (it may carry a reporting exception instead). legalForm is the ISO 20275 entity legal form code.

Pricing

Pay per event, no subscription. $1 per 1,000 records ($0.001 per record).

EventWhen it is chargedPrice
company-rowOne legal entity record was returned.$0.001

The first 2 records of every run are free, so the default one-name run costs nothing. Names with no match, invalid LEIs, unknown LEIs and errors are never charged. Set a maximum cost per run in the Console to cap spend; the Actor stops when the cap is reached.

Data source and licence

All data comes from the public GLEIF Global LEI Index API (https://api.gleif.org/api/v1/lei-records, no key). GLEIF publishes it under the CC0 licence: https://www.gleif.org/en/meta/lei-data-terms-of-use and https://www.gleif.org/en/about/open-data. The Actor makes at most 2 requests per second. Data reflects the GLEIF golden copy at query time; this Actor does not alter or reinterpret it, so check the official record before relying on it for compliance decisions.

Notes

  • LEI records cover entities that registered for an LEI (mostly financial-market participants and larger companies), not every company in a country.
  • Name matching uses GLEIF's own search on legal names; enable fuzzy for typos.
  • Built with AI assistance (Claude); maintained by the publisher.

Switching from another LEI actor

Saved tasks and integrations written for other LEI lookup actors can usually run here by changing only the Actor ID. These input names are accepted next to the canonical ones and return the same rows:

Input you may already haveTreated as
lei (string or list)leis
companyNames, queries, querynames
maxResultsmaxPerName

Rows use this Actor's own output fields (see Output), so check downstream field names once. Other actors' filters and options that are not listed here are ignored. Price: $1 per 1,000 records, the first 2 records of every run free, no match is free.

Use from Claude or Cursor (MCP)

Apify hosts an MCP server, so an AI agent can run this Actor from a plain-English prompt. Add it to your MCP client (OAuth is the recommended sign-in, see the Apify MCP docs):

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=pennydata/lei-company-lookup-bulk"
    }
  }
}

?tools= limits the server to this Actor. Using a token instead of OAuth? Add "headers": { "Authorization": "Bearer <APIFY_TOKEN>" } next to url. The configurator at https://mcp.apify.com/ writes client-specific snippets; for Cursor you can also run apify mcp install cursor.

Example prompt: "Use lei-company-lookup-bulk to look up the companies Apple Inc and Siemens AG. Give me each legal name, LEI, jurisdiction and registration status in a table, and say so if a name returns no match."

Runs started by an agent are billed like any other run, at the prices above.

Use as a real-time API

This Actor also runs in Apify Standby mode, so you can call it per request over plain HTTP and get JSON back. Billing is the same as a normal run: one company-row event ($0.001) per record returned; no match, invalid LEIs and errors are not billed. Up to 10 names and LEIs per request (use a normal run for bigger lists).

## one company name (optional: &country=US&status=ACTIVE&maxPerName=3)
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://pennydata--lei-company-lookup-bulk.apify.actor/?name=Apple%20Inc."

## one LEI
curl -H "Authorization: Bearer $APIFY_TOKEN" \
  "https://pennydata--lei-company-lookup-bulk.apify.actor/?lei=HWUPKR0MPOU8FGXBT394"

## several at once
curl -X POST -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"names":["Apple Inc.","Siemens AG"],"leis":["HWUPKR0MPOU8FGXBT394"],"maxPerName":2}' \
  "https://pennydata--lei-company-lookup-bulk.apify.actor/"

The response is {"results":[{"input":"Apple Inc.","records":[...]}]} with the same fields as the dataset rows (see Output). The 2 free records per run apply to batch runs only. Normal batch runs from the Console, API or schedules work exactly as before.

Related actors

Lapsed and renewal-due screening

Set Only lapsed registrations (onlyLapsed) to keep only LEIs whose registration status is LAPSED, or Renewal due within (days) (renewalDueWithinDays) to keep LEIs whose next renewal date is within N days (overdue ones included). Set both to get either. Filtered-out records are not charged. Output adds registrationStatus, nextRenewalDate and daysToRenewal.


SWIFT/BIC to LEI lookup

Put SWIFT/BIC codes (8 or 11 characters) in BICs (bics) and each one is resolved to its LEI record through the GLEIF BIC-LEI mapping (CC0 open data, no API key). An 8-character BIC returns every mapped branch. Rows add bic and matchedBics to the usual fields. BICs with no mapped LEI and invalid BICs are free; each returned record is one company-row event, the same $0.001 as a name or LEI record. When bics is set, the prefilled example name is not run.

Real run (local, 2026-10-28), input {"bics":["DEUTDEFF","HSBCGB2LXXX","BNPAFRPP","CHASUS33","UBSWCHZH80A","XXXXXXXX"]}: 5 rows, the invalid code returned nothing and was not charged.

bicleilegalNamecountrystatus
DEUTDEFFXXX7LTWFZYICNSX8D621K86DEUTSCHE BANK AKTIENGESELLSCHAFTDEACTIVE
HSBCGB2LXXX2HI3YI5320L3RW6NJ957HONGKONG AND SHANGHAI BANKING CORPORATION LIMITED -THE-HKACTIVE
BNPAFRPPXXXR0MUWSFPU8MPRO8K5P83BNP PARIBASFRACTIVE
CHASUS33XXX7H6GLXDRUGQFU57RNE97JPMorgan Chase Bank, National AssociationUSACTIVE
UBSWCHZH80A549300WOIFUSNYH0FL22UBS Switzerland AGCHACTIVE

Other languages

Español: Búsqueda de códigos LEI de empresas (GLEIF)

Busca códigos LEI y datos de entidades legales en la base oficial GLEIF a partir de una lista de nombres de empresa o de LEI: razón social, país, estado de registro y fecha de renovación. Sirve para cumplimiento, KYC y para limpiar listas de empresas en masa. Precio: 0,001 USD por registro devuelto (1 USD por 1.000); sin coincidencias o LEI inválidos no se cobra.

Ejemplo de entrada:

{"names":["Banco Santander, S.A.","Telefónica, S.A."],"maxPerName":3}

Português: Consulta de códigos LEI de empresas (GLEIF)

Consulte códigos LEI e dados de entidades jurídicas na base oficial GLEIF a partir de uma lista de nomes de empresas ou de LEIs: razão social, país, status do registro e data de renovação. Útil para compliance, KYC e para enriquecer listas de empresas em massa. Preço: US$ 0,001 por registro retornado (US$ 1 por 1.000); sem correspondência ou LEI inválido, sem cobrança.

Exemplo de entrada:

{"names":["Itaú Unibanco Holding S.A.","Petróleo Brasileiro S.A. - Petrobras"],"maxPerName":3}

Deutsch: LEI-Abfrage für Unternehmen (GLEIF)

Sucht LEI-Codes und Rechtsträgerdaten in der offiziellen GLEIF-Datenbank anhand einer Liste von Firmennamen oder LEIs: Firmenname, Land, Registrierungsstatus und Verlängerungsdatum. Praktisch für Compliance, KYC und die Bereinigung von Firmenlisten. Preis: 0,001 USD pro gefundenem Datensatz (1 USD pro 1.000); ohne Treffer oder bei ungültiger LEI entstehen keine Kosten.

Beispieleingabe:

{"names":["Siemens AG","Deutsche Bank AG"],"maxPerName":3}

I built this and earn from its runs. Written with AI assistance (Claude).

Actor input Schema

names (type: array):

Legal entity names to look up, one per line, e.g. Apple Inc. Each name returns up to 'Max records per name' matches.

leis (type: array):

20-character Legal Entity Identifiers to look up, one per line, e.g. HWUPKR0MPOU8FGXBT394.

bics (type: array):

SWIFT/BIC codes (8 or 11 characters, e.g. DEUTDEFF, HSBCGB2LXXX), one per line. Each is resolved to its LEI record through the GLEIF BIC-LEI mapping. An 8-character BIC returns every mapped branch. BICs with no LEI are free.

country (type: string):

Optional ISO 3166 country code (e.g. US, DE, GB) to keep only entities with a legal address in that country. Applies to name searches.

status (type: string):

Optional: keep only ACTIVE or INACTIVE entities. Applies to name searches.

onlyLapsed (type: boolean):

Keep only records whose LEI registration status is LAPSED (renewal overdue). Other records are skipped and not charged.

renewalDueWithinDays (type: integer):

Keep only records whose next renewal date is within this many days (already overdue renewals count). Combine with 'Only lapsed' to get either. Skipped records are not charged.

fuzzy (type: boolean):

Use GLEIF fuzzy matching so near-misses and typos still match. Off = names are matched as given.

maxPerName (type: integer):

Maximum records returned (and charged) for each name (1-50).

query (type: string):

Single company name; alias for 'names'.

queries (type: array):

Alias for 'names'.

companyNames (type: array):

Alias for 'names', for drop-in use from other LEI actors.

lei (type: array):

Alias for 'leis' (one LEI per line).

maxResults (type: integer):

Alias for 'Max records per name' (1-50). Used if set.

Actor input object example

{
  "names": [
    "Apple Inc."
  ],
  "status": "",
  "onlyLapsed": false,
  "fuzzy": false,
  "maxPerName": 3
}

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

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 = {
    "names": [
        "Apple Inc."
    ],
    "maxPerName": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("pennydata/lei-company-lookup-bulk").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

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 = {
    "names": ["Apple Inc."],
    "maxPerName": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("pennydata/lei-company-lookup-bulk").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

echo '{
  "names": [
    "Apple Inc."
  ],
  "maxPerName": 3
}' |
apify call pennydata/lei-company-lookup-bulk --silent --output-dataset

MCP server setup

{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pennydata/lei-company-lookup-bulk"
        }
    }
}

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/DAHdKmlzkxPn0J2TT/builds/6Awm0ch5pwrmqii5W/openapi.json