Gleif Lei Scraper avatar

Gleif Lei Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Gleif Lei Scraper

Gleif Lei Scraper

3.4 million companies worldwide from GLEIF's official Legal Entity Identifier registry - legal name, addresses, jurisdiction, registration number, and real ownership links. When a company shows no parent, this is the only scraper that tells you why instead of leaving it blank.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Norm Data

Norm Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Norm Data

🏒 GLEIF LEI Scraper

Pull the global Legal Entity Identifier (LEI) registry straight from GLEIF's own official data, no login: 3.4 million real legal entities with legal name, addresses, jurisdiction, national registration number, registration status, and real ownership links, including the actual reason a parent relationship is absent, not just a blank field.

🎯 Who uses it?

πŸ›‚ KYC/AML & compliance teams

Validate a counterparty's legal identity, jurisdiction, and registration status before onboarding.

πŸ—ΊοΈ Corporate ownership researchers

Trace a group's real subsidiary tree, or find a subsidiary's real ultimate parent, and know why when there isn't one.

⚠️ Risk & credit monitors

Track LEIs that have lapsed as an early compliance signal.

πŸ—‚οΈ Data & entity-resolution teams

Build a clean, joinable company master file keyed on real national registration numbers.

✨ What it does

Reads GLEIF's own official data directly, no key, no login.

  • Registry: pull every real entity in one or more countries, or the whole registry, filtered by entity status and registration status, each country getting its own fair share of the row cap.
  • Search: full-text search across real legal entity names.
  • Lookup: enrich a list of known LEI codes with their full real record.
  • Subsidiaries: given a LEI, the real companies it directly owns.
  • Parents: given a LEI, its real direct and ultimate parent, and when there isn't one, the real documented reason (e.g. a public company with no single controlling owner).

Missing source values are returned as null, never invented.

Why this scraper

  • No practical result ceiling. Pull an entire country, however large, in one clean run, with no gaps and no manual splitting into smaller requests.
  • The real reason a parent is missing, not just a blank field. When a company has no reported parent, this Actor tells you why, instead of leaving you to guess whether it's independent, undisclosed, or simply not checked.
  • Reliable under real load. Built and tested for sustained, concurrent pulls with no slowdown.
  • Bidirectional ownership in one Actor. Subsidiaries and parents are both first-class modes, not bolted onto a single generic mode.

How it compares

Checked directly against the closest real competitor on Apify (their own declared input and output):

CapabilityThis actorClosest competitor
Practical result ceiling on a large country or querynone hit in testingrequires manually splitting large requests
Real reason for a missing parent relationshipyesnot exposed
Registry / Search / Lookup / Subsidiaries / Parents modesall 5all 5
SourceOfficial GLEIF dataOfficial GLEIF data

πŸ“¦ What data you get

EntityUseful fields
IdentityLEI, legal name, and record URL.
ClassificationEntity category, entity status, legal form code, and jurisdiction.
RegistrationReal national registration number and registration authority, a join key to local registries.
AddressesSeparate legal and headquarters addresses, plus whether they differ.
LEI healthRegistration status, lapsed flag, and next renewal date.
Data qualityManaging LOU, validation sources, and conformity flag, GLEIF's own quality metadata.
RelationshipsRelated LEI and relationship type in Subsidiaries/Parents mode, plus the real reason a parent relationship is absent when one applies.

πŸ’‘ Use cases

πŸ‡©πŸ‡ͺ Every active company in a country

{ "mode": "registry", "countries": ["DE"], "entityStatus": "ACTIVE" }

πŸ”€ Search by company name

{ "mode": "search", "searchQuery": "Tesla" }

πŸ†” Look up known LEI codes

{ "mode": "lookup", "leiCodes": ["HWUPKR0MPOU8FGXBT394"] }

🌳 Real subsidiaries or parents of a company

{ "mode": "subsidiaries", "relationshipLeiCodes": ["HWUPKR0MPOU8FGXBT394"] }

βš™οΈ How the input is organised

The input form is split into a top-level mode picker plus one section per mode:

SectionWhat it's for
Mode + row capPick Registry, Search, Lookup, Subsidiaries, or Parents, plus the row cap for the run.
Registry modeCountries, entity status, and registration status.
Search modeThe company name to search.
Lookup modeThe exact LEI codes to enrich.
Subsidiaries / Parents modeThe LEI codes to look up real ownership links for.

Only the fields for the mode you pick are used; the rest are ignored.

Apify Free plan: every run is limited to a fixed 10-row sample. Upgrade your Apify plan to run your own settings.

πŸ›‘οΈ Limits & responsible use

This Actor reads only GLEIF's own publicly documented data. It never signs in and never accesses anything gated behind an account.

reporting_exception_reason surfaces the real reason GLEIF itself gives when an entity reports no parent: NATURAL_PERSONS means it's owned by individual people rather than a single corporate parent (common for public companies), and other real reasons include the parent being non-consolidating, legally restricted from disclosure, or genuinely unknown; it is never a guess. bic and successor_lei are usually null because GLEIF only sets them when they genuinely apply, most entities have no BIC code and have never merged into a successor.

Read live from GLEIF on every run. It is not cached.

Is this an official GLEIF tool? No. Independent, not affiliated with GLEIF. It reads only the publicly documented data.

πŸ“§ Contact

Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com

Local development

bun install
bun test # offline: normalization (real fixtures)
bun run src/main.ts # reads storage/key_value_stores/default/INPUT.json