LEI Lookup & GLEIF API: Batch LEI, Name, BIC & ISIN Search avatar

LEI Lookup & GLEIF API: Batch LEI, Name, BIC & ISIN Search

Pricing

from $1.20 / 1,000 lei records

Go to Apify Store
LEI Lookup & GLEIF API: Batch LEI, Name, BIC & ISIN Search

LEI Lookup & GLEIF API: Batch LEI, Name, BIC & ISIN Search

LEI lookup on the public GLEIF API: batch-check Legal Entity Identifiers and find LEIs by company name, BIC, ISIN or registration number, with parents and subsidiaries. Every input gets a clear status row. From $0.002 per record found. GLEIF data is CC0; not endorsed by GLEIF.

Pricing

from $1.20 / 1,000 lei records

Rating

0.0

(0)

Developer

Clearpath Data

Clearpath Data

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

8 days ago

Last modified

Security

Limited permissions

Share

What is an LEI, and what does this LEI lookup do?

An LEI (Legal Entity Identifier) is the 20-character ISO 17442 code that identifies a legal entity in financial transactions and regulatory reports. The Global Legal Entity Identifier Foundation (GLEIF) publishes every LEI record through its official public API.

This Actor is an LEI lookup and LEI validator on top of the GLEIF API. Paste LEIs, legal names, BICs, ISINs or business register numbers and get one clean row per input, with a clear status (found, ambiguous, possible_match, not_found, invalid_input), the entity's registration status, and optionally its direct and ultimate parents and children. Independent tool; not affiliated with or endorsed by GLEIF.

Price: $0.002 per returned entity record. Invalid, not-found and error rows are free. You only pay for saved results. Set maxResults to cap the cost.

Quick start: GLEIF API and LEI lookup

  1. Click Try for free, keep the prefilled input and press Start.
  2. Or call it from code:
curl -X POST "https://api.apify.com/v2/acts/clearpath-data~lei-lookup/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" -d '{"leis": ["5493001KJTIIGC8Y1R12", "W38RGI023J3WT1HWRP32", "5493001KJTIIGC8Y1R13"], "names": ["Apple Inc.", "Deutsche Bank Aktiengesellschaft"], "bics": ["DEUTDEFF"], "isins": ["US0378331005"]}'

Sample output: LEI data

inputstatusleilegalNamecountry
5493001KJTIIGC8Y1R13invalid_input
5493001KJTIIGC8Y1R12found5493001KJTIIGC8Y1R12Bloomberg Finance L.P.US
W38RGI023J3WT1HWRP32foundW38RGI023J3WT1HWRP32Siemens AktiengesellschaftDE
DEUTDEFFfound7LTWFZYICNSX8D621K86DEUTSCHE BANK AKTIENGESELLSCHAFTDE
US0378331005foundHWUPKR0MPOU8FGXBT394Apple Inc.US

Sample rows: real output of test run on 2026-10-09, trimmed to a few columns. The invalid_input row was caught by the ISO 17442 checksum before any API call, so it was free.

Input

FieldTypeDefaultWhat it does
leisarray20-character LEI codes, one per line (commas also work). Checksums are verified before any request. Looked up 100 per API request.
namesarrayLegal names, one per line. Exact matches (ignoring case, accents, punctuation and common legal-form spellings such as AG / Aktiengesellschaft) are returned as found or ambiguous. Without an exact match you get the closest names as possible_match rows for review.
bicsarray8- or 11-character BICs. 8-character codes are treated as the head office (XXX). Uses the SWIFT BIC-to-LEI mapping published by GLEIF.
isinsarray12-character ISINs of securities; returns the issuer's LEI record. Uses the ANNA ISIN-to-LEI mapping published by GLEIF (coverage depends on the issuing agency).
registrationNumbersarrayBusiness register numbers exactly as the register writes them (e.g. "HRB 6684"). The same number can exist in several registers, so add a country filter when you can.
nameMatchingstring"exact_then_similar"With "Exact names only", inputs without an exact name match get a not_found row that lists the closest names.
maxCandidatesPerNameinteger3How many rows to return when a name or registration number is ambiguous or only has similar matches. Each row is a charged record.
preferPrimaryRecordbooleantrueIf several records share the exact name but only one is an ACTIVE entity with an ISSUED LEI that is not a branch, return that one as found (the others are mentioned in statusDetail). Turn off to get every exact match as ambiguous.
countriesarray2-letter ISO country codes, e.g. DE, US. Applied to name and registration-number searches and checked on LEI, BIC and ISIN results (non-matching records get a free filtered_out row).
entityStatusstring"ANY"Whether the legal entity itself still exists.
registrationStatusesarrayKeep only LEIs in these registration statuses. Empty = all. ISSUED means renewed and current; LAPSED means not renewed on time.
includeDirectParentbooleantrueAdd the direct accounting-consolidating parent, or the reason none is reported (e.g. NATURAL_PERSONS, NON_CONSOLIDATING). One extra API request per record; turn off for faster large batches.
includeUltimateParentbooleantrueAdd the ultimate parent, or the reason none is reported. One extra API request per record; turn off for faster large batches.
includeDirectChildrenbooleanfalseAdd the entities this one directly consolidates (LEI, name, country, statuses) and their total count. One request per 200 children; skipped when GLEIF reports none.
includeUltimateChildrenbooleanfalseAdd the entities for which this one is the ultimate parent, and their total count.
maxChildrenPerEntityinteger100Cap on listed children per record and type (max 1,000; GLEIF serves 200 per request). The total count is always reported. 0 = count only (one request).
maxRequestsPerMinuteinteger50GLEIF allows 60 requests per minute per user. The Actor never goes above 60 and backs off when GLEIF asks it to.
includeRawRecordbooleanfalseAdd the full original GLEIF record attributes as rawRecord.

Find a company's LEI by name

List legal names in names. Exact matches (ignoring case, accents, punctuation and common legal-form spellings such as AG / Aktiengesellschaft) come back as found or ambiguous. Without an exact match you get the closest names as possible_match rows to review. Add countries (e.g. ["DE"]) to narrow the search, or set nameMatching to exact names only.

BIC to LEI

List 8- or 11-character BIC (SWIFT) codes in bics. 8-character codes are treated as the head office (XXX). The Actor uses the BIC-to-LEI mapping that GLEIF publishes with SWIFT, so a BIC that isn't in that mapping returns a free not_found row.

ISIN to LEI

List 12-character ISINs in isins to get the issuer's LEI record. This uses the ISIN-to-LEI mapping that GLEIF publishes with ANNA; coverage depends on the issuing national numbering agency, so some ISINs have no mapping.

Validate LEIs (ISO 17442 checksum)

Every code in leis is checked against the ISO 17442 check digits before any API call. Malformed codes get a free invalid_input row. Valid codes are looked up 100 per request, and registrationStatus tells you whether the LEI is ISSUED (current), LAPSED (not renewed on time), RETIRED and so on.

Parents and subsidiaries

includeDirectParent and includeUltimateParent (on by default) add the accounting-consolidating parents, or GLEIF's reason none is reported (e.g. NATURAL_PERSONS, NON_CONSOLIDATING). Turn on includeDirectChildren or includeUltimateChildren to list the entities a company consolidates; the total count is always reported and maxChildrenPerEntity caps the list.

Use cases

  • KYC/KYB onboarding: check that a counterparty's LEI is valid, issued and current before you onboard it.
  • Data quality: validate LEI columns in bulk; malformed codes are caught by the ISO 17442 checksum and cost nothing.
  • Ownership and group structure: pull direct and ultimate parents, or an entity's children, for group-level reporting.
  • Identifier mapping: match legal names, BICs, ISINs or registry numbers to LEIs.

Integrations, schedules and AI agents

  • Schedules: Schedule it to re-check a list of LEIs and catch lapsed or retired registrations. See Apify schedules.
  • No-code tools: send results to Google Sheets, Slack or a CRM with Apify's Make, Zapier or n8n integrations, or a webhook when a run finishes.
  • AI agents and assistants (MCP): connect an MCP client to https://mcp.apify.com?tools=clearpath-data/lei-lookup with your Apify account (OAuth or API token) and the agent can run this Actor as a tool, charged per event at the prices under "How much does it cost?". Agents without an Apify account can use a prepaid token from Apify's agentic payments (experimental). See the Apify MCP server docs.

How much does it cost?

PlanPrice per LEI record
Free / Bronze$0.002
Silver$0.0016
Gold and above$0.0012

Plus Apify's standard Actor-start event ($0.00005 per GB of memory).

Example: 1,000 found records on the Free plan cost $2.00.

FAQ

Where does the data come from?

GLEIF's official public API (data under the CC0 licence). Each run queries the API live, so results are as current as GLEIF's own records. GLEIF collects the data from the LEI issuing organisations (LOUs); this Actor doesn't edit it.

What do ISSUED, LAPSED and RETIRED mean?

ISSUED: the LEI is current and its data was renewed on time. LAPSED: the entity didn't renew its registration by the due date (the LEI still identifies it, but the data may be out of date). RETIRED, MERGED, ANNULLED and the other statuses mean the LEI is no longer in normal use. Use registrationStatuses to keep only some of them.

Why did a name return "ambiguous"?

Several LEI records share the same legal name (often in different countries, or a branch next to its head office). You get up to maxCandidatesPerName rows; add countries to narrow it down. With preferPrimaryRecord on, a single ACTIVE, ISSUED, non-branch record is returned as found.

Is a not-found row charged?

No. You pay only for rows with entity data (found, ambiguous, possible_match). not_found, invalid_input, filtered_out and error rows are free.

Can I use it from Python or Excel?

Yes. From Python, use the Apify client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("clearpath-data/lei-lookup").call(run_input={"bics": ["DEUTDEFF"], "isins": ["US0378331005"]})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["input"], row["status"], row.get("lei"))

For Excel, download the dataset as CSV or XLSX from the run page or the API.

Rate limits?

GLEIF allows 60 requests per minute. The Actor stays under that (maxRequestsPerMinute, default 50) and backs off when GLEIF asks it to. Parent and child lookups add requests, so large batches with relationships take longer; turn them off for plain validation.

Troubleshooting

A company I know has an LEI returns not_found

Check that you used the legal name, not a brand or trading name ("Alphabet Inc.", not "Google"). Try its business register number with a countries filter, or its BIC or an ISIN it issued. The not_found row lists the closest names it saw.

My BIC or ISIN returns not_found

GLEIF's BIC and ISIN mappings don't cover every code. Look the entity up by name or register number instead.

Limits

  • Only entities that have an LEI are covered; many small companies don't have one.
  • The data is what the LEI issuers reported to GLEIF; check the source for decisions that matter.

Further reading and example tasks

Combine with other Clearpath Data Actors

Other Clearpath Data Actors

ActorWhat it does
remote-jobs-aggregatorRemote jobs from Remote OK and Himalayas
ats-jobs-by-companyJobs from Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee boards
companies-house-new-companiesNew UK companies from Companies House, with officers and PSCs
uk-visa-sponsor-registerUK visa sponsor licence list from the GOV.UK register, with a changes feed
hiring-changes-monitorJobs each company opened or closed since your last run, on the same six ATS boards
us-new-business-filingsNew LLCs and corporations from the NY, CO and CT state registries, since your last run
us-private-funding-roundsNew US private funding rounds from Form D notices, only filings new since your last run
us-federal-contract-opportunitiesDaily US federal contract opportunities and award notices from SAM.gov's public extract; awardee names can go into names here