LEI Parent Lookup

Find reported direct and ultimate parent companies for an LEI in GLEIF, including reporting exceptions where a parent is not named.

gleif-l2-ubo-lookup

Example

Input
{
  "lei": "5493004INDUJX1TDHI57"
}
Answer
{
  "input_lei": "5493004INDUJX1TDHI57",
  "legal_name": "Spotify AB",
  "data_source": "GLEIF Level 2 (Who Owns Whom)",
  "jurisdiction": "SE",
  "direct_parent": {
    "lei": "549300B4X0JHWV0DTD60",
    "country": "LU",
    "legal_name": "SPOTIFY TECHNOLOGY S.A.",
    "jurisdiction": "LU"
  },
  "is_top_of_tree": false,
  "ultimate_parent": {
    "lei": "549300B4X0JHWV0DTD60",
    "country": "LU",
    "legal_name": "SPOTIFY TECHNOLOGY S.A.",
    "jurisdiction": "LU"
  },
  "has_direct_parent": true,
  "has_ultimate_parent": true,
  "direct_parent_exception": null,
  "ownership_chain_complete": true,
  "ultimate_parent_exception": null
}

Inputs

FieldTypeRequiredWhat it is
leistringNo20-character LEI of the entity to look up parents for. Canonical input.
company_namestringNoOptional fallback input — company name to search GLEIF for if no LEI is known. Resolves to an LEI internally before fetching parent data.
jurisdictionstringNoOptional ISO country code (e.g. "SE") to disambiguate name search.

Output fields

How reliably each field appears in a successful answer.

FieldTypeAppears
input_leistringAlways (present in every successful answer)
legal_namestringAlways (present in every successful answer)
data_sourcestringAlways (present in every successful answer)
jurisdictionstring or nullAlways (present in every successful answer)
direct_parentobject or nullUsually (present for most inputs)
is_top_of_treebooleanAlways (present in every successful answer)
ultimate_parentobject or nullUsually (present for most inputs)
has_direct_parentbooleanAlways (present in every successful answer)
has_ultimate_parentbooleanAlways (present in every successful answer)
direct_parent_exceptionobject or nullUsually (present for most inputs)
ownership_chain_completebooleanAlways (present in every successful answer)
ultimate_parent_exceptionobject or nullUsually (present for most inputs)

How to call it

The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.

# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
  -H "Authorization: Bearer $STRALE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "capability_slug": "gleif-l2-ubo-lookup",
    "inputs": {
      "lei": "5493004INDUJX1TDHI57"
    },
    "max_price_cents": 5
  }'

Limitations

  • Coverage is limited to entities that have an LEI

    GLEIF L2 only contains relationship data for entities registered in the GLEIF system. Approximately 2.6M entities globally have LEIs, primarily large or regulated entities. SMEs without LEIs return no L2 data — pair with country-registry beneficial ownership lookups for full SME coverage.

    What to do instead: For SMEs without an LEI, use country-specific UBO sources (e.g. Companies House PSC for UK, OpenOwnership BODS for UK/DK/SK).

  • Reporting exceptions are common

    Many entities report a structured "reporting exception" instead of naming a parent (NATURAL_PERSONS, NON_CONSOLIDATING, NO_KNOWN_PERSON, LEGAL_OBSTACLES, DISCLOSURE_DETRIMENTAL, BINDING_LEGAL_COMMITMENTS). The exception is structured data and is surfaced verbatim in direct_parent_exception / ultimate_parent_exception, but it does not name an ultimate beneficiary.

  • Parent relationships are self-reported and refreshed annually

    Entities self-report parent relationships in their annual LEI renewal. Stale data is possible for restructurings between renewal cycles. The lastUpdateDate on the underlying LEI record indicates currency.