LEI Records Scraper: Legal Entity Identifier Lookup API avatar

LEI Records Scraper: Legal Entity Identifier Lookup API

Pricing

from $2.00 / 1,000 lei records

Go to Apify Store
LEI Records Scraper: Legal Entity Identifier Lookup API

LEI Records Scraper: Legal Entity Identifier Lookup API

Legal Entity Identifier (LEI) records from the Global LEI Index, read through the public GLEIF API: legal name, legal form, register number, addresses, status, renewal date and parent companies. Filter by country, name, category and dates. No sole traders, no personal data.

Pricing

from $2.00 / 1,000 lei records

Rating

0.0

(0)

Developer

Rowcraft

Rowcraft

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Get Legal Entity Identifier (LEI) records from the Global LEI Index, the public register of about 3.4 million legal entities that trade on financial markets: companies, funds, branches and government bodies. This LEI scraper reads the public GLEIF API, so it is fast, complete and does not break when a web page changes. Each entity comes back as one flat row: LEI, legal name, legal form, business register and register number, legal and headquarters address, status, registration and renewal dates, and optionally its parent companies, as JSON, CSV or Excel.

Search by country, city, name, legal form, register number, category and dates, or look up a list of LEIs. Schedule it with Only new rows to get every new LEI in your countries, every day, for the price of the new rows.

Input form of LEI Records Scraper: Legal Entity Identifier Lookup API

What you get

One row per legal entity:

  • Identity: LEI and record link, legal name with its language, other and transliterated names, category (general, branch, fund, government entity, international organisation), entity status (active or inactive), creation date, jurisdiction
  • Legal form: ISO 20275 code (2HBR, 6QQB, XHN1...) with its name (Gesellschaft mit beschränkter Haftung, Aktiengesellschaft, Societate cu răspundere limitată), or the form as written when it is not on the list
  • Business register: register ID and name (Local Court München – Commercial Register, National Trade Register Office – Trade Register...), the entity's number in it, and the number the LEI issuer validated
  • Addresses: legal address and headquarters address, each with street, city, region, postal code, country code and country name
  • LEI registration: status (issued, lapsed, retired, merged...), first registration, last update and next renewal dates, managing LEI issuer, validation level, data quality flag
  • Links between entities: associated entity (the manager of a fund), successor after a merger, expiration date and reason, BIC and MIC codes
  • Parent companies (optional): direct and ultimate parent with LEI and name, or the reason the entity gave for not reporting one (owned by natural persons, not consolidated...)

Why this actor

  • Every filter the API offers, in plain fields: countries and cities of the legal or headquarters address, search text, category, entity status, LEI registration status, first registration, renewal, update and creation dates, legal form codes and register numbers.
  • No ceiling: the actor reads with a cursor, 200 records per request, so a search over a whole country goes past the 10,000 records that page numbers allow.
  • Codes turned into words: legal form codes and register IDs come with their names, looked up once per run and cached.
  • Count before you pay: Count only returns the exact number of matching records and what they would cost; nothing is delivered.
  • No sole proprietors: entities registered as sole proprietors are named after a person, so they are never delivered, in any mode, and never charged.

How to use it

  1. Open the Actor and fill in Countries (the other fields are optional filters).
  2. Set Maximum companies to a small number for a first try (the default is a safe start).
  3. Optional: tick Count only and start once. You get the number of matching rows and the estimated cost, for free (only the start event is charged). Untick it to get the data.
  4. Click Start. The status line shows progress; the run stops cleanly at your limit or at the charge limit you set in the run options.
  5. Open the Dataset tab and download JSON, CSV, Excel, XML or HTML, or send the rows to Google Sheets, Slack, Make, n8n or Zapier with the Integrations tab.
  6. To run it on a schedule, use Schedules in Apify Console and turn on Only new rows since the last run below: every run then costs only the new rows, and a webhook URL tells you when something new came in.

Input

FieldWhat it does
countries, cities, countryOfCountries (Germany or DE) and cities, of the legal address or of the headquarters
registeredAfter, registeredBeforeWhen the LEI was first issued (2026-10-01, yesterday, 7 days, 3 months); new LEIs are mostly new companies, funds and vehicles
searchWords searched in every field of the record: names, addresses, register numbers
categories, entityStatus, registrationStatusesCategory; active, inactive or both (default active); issued, lapsed, retired...
renewalAfter, renewalBefore, updatedAfter, createdAfterRenewal due dates (today and in 30 days), record updates, entity creation date
legalForms, registerNumbersISO 20275 legal form codes (2HBR is the German GmbH); register numbers as written in the record
sort, maxItems, includeLabels, includeParentsOrder, limit, legal form and register names (on by default), parent companies (slower)
leisLEI codes or record links to look up; the filters are then ignored
countOnly, onlyNew, stateName, notifyUrl, notifyWhenEmptyCount only (deliver nothing); see Automation below

Example: every GmbH and AG in Germany that got its LEI in the last 30 days, newest first.

{
"countries": ["Germany"],
"registeredAfter": "30 days",
"legalForms": ["2HBR", "6QQB"],
"maxItems": 1000
}

Example: LEIs in France that are due for renewal in the next 30 days.

{
"countries": ["France"],
"registrationStatuses": ["ISSUED"],
"renewalAfter": "today",
"renewalBefore": "in 30 days",
"sort": "renewal"
}

Output

52 fields per row. Empty values are null, never missing, so CSV and Excel columns are stable.

FieldTypeExample
idstring9845009069BF1F07A070
leistring9845009069BF1F07A070
urlstringhttps://search.gleif.org/#/record/9845009069BF1F07A070
legalNamestringFey Verwaltungs UG (haftungsbeschränkt)
legalNameLanguagestringde
otherNamesarray["Ingenieurburo Denk GmbH"]
categorystringGENERAL
subCategorystringEntity subcategory (government entities)
legalFormCodestring2HBR
legalFormNamestringGesellschaft mit beschränkter Haftung
legalFormOtherstringMiteigentumsfonds nach österreichischem Recht (InvFG / AIFMG)
entityStatusstringACTIVE
creationDatestring2026-05-11
jurisdictionstringDE
registrationAuthorityIdstringRA000208
registrationAuthorityNamestringLocal Court Bad Hersfeld – Commercial Register
registerNumberstringHRB 3508
legalStreetstringAulabergstraße 8
legalCitystringBad Hersfeld
legalRegionstringDE-HE
legalPostalCodestring36251
legalCountryCodestringDE
legalCountrystringGermany
hqStreetstringAulabergstraße 8
hqCitystringBad Hersfeld
hqRegionstringDE-HE
hqPostalCodestring36251
hqCountryCodestringDE
hqCountrystringGermany
associatedEntityLeistringAssociated entity LEI (the fund manager of a fund, for example)
associatedEntityNamestringAssociated entity name
successorLeistring549300UH7FDPRNBABQ46
successorNamestringPatria Bank S.A.
expirationDatestringDate the entity ceased to exist
expirationReasonstringWhy it ceased to exist: DISSOLVED, CORPORATE_ACTION...
registrationStatusstringISSUED
initialRegistrationDatestring2026-10-11
lastUpdateDatestring2026-10-11
nextRenewalDatestring2027-10-11
managingLoustring529900T8BM49AURSDO55
corroborationLevelstringFULLY_CORROBORATED
validatedRegisterNumberstringHRB 3508
bicsarray["ICPLPLP1XXX"]
micstringOTPR
conformityFlagstringCONFORMING
scrapedAtstring2026-10-11T23:07:56.860Z
directParentLeistring89450051ZRDOL9KEWH63
directParentNamestringUBISECURE HOLDINGS LIMITED
directParentExceptionstringNATURAL_PERSONS
ultimateParentLeistring89450051ZRDOL9KEWH63
ultimateParentNamestringUBISECURE HOLDINGS LIMITED
ultimateParentExceptionstringNATURAL_PERSONS

Example rows

Two real rows from a run (long texts shortened here, complete in the dataset):

[
{
"id": "529900T8BM49AURSDO55",
"lei": "529900T8BM49AURSDO55",
"url": "https://search.gleif.org/#/record/529900T8BM49AURSDO55",
"legalName": "Ubisecure Oy",
"legalNameLanguage": "fi",
"otherNames": [
"Ubisecure Inc",
"Ubisecure Ab",
"Ubisecure Solutions Oy"
],
"category": "GENERAL",
"subCategory": null,
"legalFormCode": "DKUW",
"legalFormName": "Osakeyhtiö",
"legalFormOther": null,
"entityStatus": "ACTIVE",
"creationDate": "2002-02-14",
"jurisdiction": "FI",
"registrationAuthorityId": "RA000188",
"registrationAuthorityName": "Finnish Patent and Registration Office – The Business Information System (BIS)",
"registerNumber": "1748721-4",
"legalStreet": "Tekniikantie 14",
"legalCity": "ESPOO",
"legalRegion": "FI-18",
"legalPostalCode": "02150",
"legalCountryCode": "FI",
"legalCountry": "Finland",
"hqStreet": "Tekniikantie 14",
"hqCity": "ESPOO",
"hqRegion": "FI-18",
"hqPostalCode": "02150",
"hqCountryCode": "FI",
"hqCountry": "Finland",
"associatedEntityLei": null,
"associatedEntityName": null,
"successorLei": null,
"successorName": null,
"expirationDate": null,
"expirationReason": null,
"registrationStatus": "ISSUED",
"initialRegistrationDate": "2016-08-04",
"lastUpdateDate": "2026-06-09",
"nextRenewalDate": "2027-06-28",
"managingLou": "529900T8BM49AURSDO55",
"corroborationLevel": "FULLY_CORROBORATED",
"validatedRegisterNumber": "1748721-4",
"bics": [],
"mic": null,
"conformityFlag": "CONFORMING",
"scrapedAt": "2026-10-11T23:07:41.050Z",
"directParentLei": "89450051ZRDOL9KEWH63",
"directParentName": "UBISECURE HOLDINGS LIMITED",
"directParentException": null,
"ultimateParentLei": "89450051ZRDOL9KEWH63",
"ultimateParentName": "UBISECURE HOLDINGS LIMITED",
"ultimateParentException": null
},
{
"id": "2138003IEBBQGQOFSP42",
"lei": "2138003IEBBQGQOFSP42",
"url": "https://search.gleif.org/#/record/2138003IEBBQGQOFSP42",
"legalName": "INTERBANK FINANCIAL SERVICES SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ W LIKWIDACJI",
"legalNameLanguage": "pl-PL",
"otherNames": [
"INTERBANK FINANCIAL SERVICES SP. Z O.O.",
"INTERBANK FINANCIAL SERVICES SPOLKA Z OGRANICZONA ODPOWIEDZIALNOSCIA W LIKWIDACJI"
],
"category": "GENERAL",
"subCategory": null,
"legalFormCode": "O7XB",
"legalFormName": "spółka z ograniczoną odpowiedzialnością",
"legalFormOther": null,
"entityStatus": "ACTIVE",
"creationDate": "2001-06-11",
"jurisdiction": "PL",
"registrationAuthorityId": "RA000484",
"registrationAuthorityName": "Ministry of Justice – National Court Register",
"registerNumber": "0000018077",
"legalStreet": "WARSZAWA WRONIA 45/14 45 14",
"legalCity": "WARSZAWA",
"legalRegion": "PL-14",
"legalPostalCode": "00-870",
"legalCountryCode": "PL",
"legalCountry": "Poland",
"hqStreet": "WARSZAWA WRONIA 45/14 45 14",
"hqCity": "WARSZAWA",
"hqRegion": "PL-14",
"hqPostalCode": "00-870",
"hqCountryCode": "PL",
"hqCountry": "Poland",
"associatedEntityLei": null,
"associatedEntityName": null,
"successorLei": null,
"successorName": null,
"expirationDate": null,
"expirationReason": null,
"registrationStatus": "LAPSED",
"initialRegistrationDate": "2013-09-26",
"lastUpdateDate": "2024-10-23",
"nextRenewalDate": "2024-09-24",
"managingLou": "259400L3KBYEVNHEJF55",
"corroborationLevel": "FULLY_CORROBORATED",
"validatedRegisterNumber": "0000018077",
"bics": [
"ICPLPLP1XXX"
],
"mic": null,
"conformityFlag": "NON_CONFORMING",
"scrapedAt": "2026-10-11T23:07:24.554Z"
}
]

Results can be downloaded as JSON, CSV, Excel, XML or HTML from the Dataset tab, or read through the Apify API.

Results of LEI Records Scraper: Legal Entity Identifier Lookup API in the Apify dataset view

Pricing

Pay per result. You pay for each company delivered to your dataset, nothing else: no subscription, no minimum, no charge for rows your filters drop or for the requests behind them.

Your Apify planPrice per 1,000 rowsPrice per row
Free plan$3.00$0.003
Starter plan$2.67$0.00267
Scale plan$2.33$0.00233
Business plan and above$2.00$0.002

Example: 1,000 companies cost $3.00 on the Free plan and $2.00 on the Business plan. The Apify platform usage of a run (compute, storage) is small for this actor — well under one cent per 1,000 rows — and is billed by Apify separately, as for every Actor. A start event of $0.00005 is charged once per run (Apify default). Cap your spend: set Maximum total charge in the run options. The actor stops cleanly when the cap is reached and you keep everything delivered until then. The run summary (RUN_SUMMARY in the key-value store) says why a run stopped. Check before you pay: turn on Count only to see how many rows match and what they would cost at your tier. That run delivers nothing and costs only the start event.

Automation: only new rows, notifications, schedules

Only new rows since the last run. Turn on onlyNew and the actor remembers every company it delivered to you (in a key-value store named rowcraft-lei-records-scraper-state in your Apify account). The next run with the same stateName skips what you already have and you pay only for new rows. The first run delivers everything that matches. Use a different stateName for each schedule or search so they keep separate memories.

Notification when the run ends. Put a webhook address in notifyUrl and the actor sends one JSON POST with the number of new rows, links to the dataset (JSON and CSV) and the run. It works out of the box with Slack and Discord incoming webhooks (the message is in text and content), with Make, n8n and Zapier catch hooks, and with your own endpoint. By default it is sent only when there is at least one new row; notifyWhenEmpty sends it every time.

Schedules. Create a schedule in Apify Console (hourly, daily, weekly or cron) with onlyNew on. A daily schedule gives you a feed of new companies for the price of the new rows only.

Integrations. Send the results to Make, n8n, Zapier, Google Sheets, Slack, Google Drive, Airtable or any webhooks from the Integrations tab of the Actor, with no code. Apify also offers native actions for Make, n8n and Zapier.

API, SDKs and AI agents. Every run is available through the Apify API and the official JavaScript and Python clients; the Actor can also be called by AI agents through the Apify MCP server. The example input in the API tab is a working call.

Count only. countOnly returns the number of matching companies and the estimated cost without delivering anything, so you can size a job before paying for it.

Use cases

  • KYC and onboarding: check that a client's LEI exists, is issued and not lapsed, and that the legal name, register number and address match what you were given.
  • Lead lists of new entities: every company, fund or special-purpose vehicle that got an LEI this week in your countries, with its legal form and registered address.
  • Renewal and compliance monitoring: LEIs of your counterparties that are lapsed or due for renewal, before a trade report is rejected.
  • Group structures: direct and ultimate parents of a list of entities, or the reason they gave for not reporting one.
  • Market research: how many funds, branches or companies of a legal form were registered per country and month.

Ready-made examples, each with the input filled in (open one and press Start, or save it as your own task):

What this actor does not do

  • Deliver sole proprietors, people or contact details: LEI records hold no e-mail addresses or phone numbers, and entities registered as sole proprietors are skipped and counted in the run summary.
  • Issue, renew or change LEIs: that is done by the accredited LEI issuers.
  • Return ISIN or BIC mappings in bulk, or the history of a record: each row is the current record.
  • Use proxies or solve CAPTCHAs: the public API needs none of that.

Limits and fair use

  • One request per second, the pace GLEIF allows (60 requests per minute). A search request returns up to 200 records; the legal form and register names add one small lookup the first time each code appears in a run.
  • Add parent companies asks for the direct and the ultimate parent of every record, two to four requests per record, so it delivers 15 to 30 records per minute: use it on targeted searches or LEI lists.
  • If the API asks the actor to slow down (HTTP 429), the actor waits and continues.
  • The run stops 90 seconds before its timeout with the summary and the Only new rows memory saved; for whole countries raise the timeout or split by city or date.

Data source

The data comes from the public GLEIF API, which serves the Global LEI Index compiled by the Global Legal Entity Identifier Foundation from the accredited LEI issuers. No key, login or cookie is needed and robots.txt allows the API. The records are published free of charge under the CC0 1.0 licence (see the LEI Data Terms of Use), which allows any reuse, including commercial use. Each row links to its record in the GLEIF LEI search.

Rowcraft is independent: this actor is not provided, endorsed or authorised by GLEIF or by any LEI issuer, and GLEIF gives no warranty on the data. The names belong to their owners.

Privacy: no personal data

Rowcraft actors are built not to collect personal data:

  • Entities registered as sole proprietors are never delivered, because they are named after a person.
  • LEI records describe legal entities and hold no contact persons, e-mail addresses or phone numbers; any e-mail address or phone number inside a name or an address is removed before the row is saved.
  • When an entity reports that it is owned by natural persons, the row says only that (NATURAL_PERSONS), never who they are.

You are responsible for using the data in line with the law that applies to you.

Other Rowcraft actors

All Rowcraft actors read official or public sources, deliver flat rows without personal data and support only-new runs and notifications:

FAQ

What is an LEI? A 20-character code (ISO 17442) that identifies a legal entity taking part in financial transactions. Banks, funds, listed companies and most firms that trade derivatives or securities in the EU, the UK and the US need one, and must renew it every year.

How many records are there? On 12 October 2026 the index held 3,458,680 LEIs: 3,328,502 without sole proprietors, of which 3,071,958 belong to active entities. Count only gives the exact number for your filters.

What is the difference between entity status and registration status? Entity status says whether the company still exists (active or inactive). Registration status is about the LEI itself: ISSUED means renewed on time, LAPSED means the yearly renewal was missed although the entity may still be active.

How do legal form codes work? Each country's legal forms have an ISO 20275 code: 2HBR is the German GmbH, 6QQB the German AG, XHN1 the Romanian SRL. Every row has the code and, with Add legal form and register names, its name; put codes in legalForms to filter on them.

Can I search by company register number? Yes: put the number in registerNumbers, written exactly as in the registerNumber field of a row (for example HRB 3508), and add the country, because the same number exists in several registers.

Why are some parents missing? Entities report their parents only when they are consolidated in the parent's accounts. Otherwise they give a reason, which the row shows: NATURAL_PERSONS (owned by people), NON_CONSOLIDATING, NO_KNOWN_PERSON and others.

How do I look up specific LEIs? Put the codes or record links in leis, up to thousands at a time; 200 are fetched per request. LEIs that do not exist are listed under missingLeis in the run summary and are not charged.

What does Count only do? It asks the API for the number of records that match your filters and writes it, with the cost at your plan, into the run summary. Nothing is delivered and only the start event is charged.

Can I pay only for new companies? Yes. Turn on Only new rows since the last run: the actor remembers what it delivered to you and later runs with the same state name deliver (and charge) only the new rows.

How do I get the results into Slack, Google Sheets, Make, n8n or Zapier? Use the Integrations tab of the Actor for the data, and the notifyUrl field for a message when a run ends (Slack and Discord webhooks work directly; catch hooks of Make, n8n and Zapier too).

Can I call it from code or from an AI agent? Yes: through the Apify API, the JavaScript and Python clients, and the Apify MCP server. The API tab shows a working example with the input of this Actor.

Is it legal to use this data? The actor reads the official API described in the Data source section and delivers company and job data without personal data. The licence of the source is described above. How you use the data is your responsibility under the law that applies to you.

Does it collect personal data? No. Contact persons, e-mails and phone numbers are removed and fields about people are never requested. See the Privacy section.

The run finished with 0 rows. Did I pay? No: with no rows delivered nothing is charged apart from the start event. Check the run summary (RUN_SUMMARY) for warnings, widen the filters, or run with Only new rows off if everything matching was already delivered to you.

Support and reviews

Problems, missing fields, questions: open an issue on the Issues tab of this Actor. We answer within one working day and fix confirmed bugs in the next release; the changelog lists every change.

If this Actor saved you time, a short review on its page helps other users find it and helps us keep improving it.