# GLEIF Entity Change Monitor - LEI and Parent Data

Monitor explicit LEI watchlists for legal-entity, registration and accounting-parent changes. Preserve parent reporting exceptions and source evidence. No API key.

Canonical product page: https://mayd-it.com/data-tools/actors/gleif-entity-change-monitor/
Public Actor: https://apify.com/maydit/gleif-entity-change-monitor

## Example input

```json
{
  "leis": [
    "HWUPKR0MPOU8FGXBT394"
  ],
  "includeParents": true,
  "maxResults": 1
}
```

## Full guide

![Entity changes, with parent context — illustrative workflow](https://api.apify.com/v2/key-value-stores/YGxD9JRpduom8Q5Zd/records/gleif-entity-change-monitor-51176498a0b5.png?signature=126y0cLGELn1h8AxsxXZw)

## Entity changes, with parent context

Maintain a counterparty reference-data watchlist from the official GLEIF API. Saved observations combine entity identity, LEI registration and optional accounting-parent evidence without fuzzy company matching.

[Open this Actor in Console](https://console.apify.com/actors/Fl0SFGfZj6r9Eafuq/input) · [First run](#try-this-actor) · [Results](#result-preview) · [Cost](#usage-and-pricing) · [Full guide](#full-guide)

## Try this Actor

1. **Choose a small scope.** Use the existing **Apple identity and parent reporting exceptions** example below: one LEI, parent information enabled and at most one saved entity.
2. **Run and review.** Open the dataset and inspect entity status separately from LEI registration status. The run's key-value-store `SUMMARY` records entity and parent-source failures.
3. **Use the results.** Export JSON to retain parent relationships, reporting exceptions and saved field differences. Keep the LEI and source link when reconciling downstream records.

**Read this before using the data:** An active entity can have a lapsed LEI. Parent relationships describe accounting consolidation, not a complete beneficial-ownership graph. Missing parent data does not prove that no parent exists.

**Apple LEI and Parent Reporting Exceptions** — copy this input into the JSON editor in Console.

```json
{"leis":["HWUPKR0MPOU8FGXBT394"],"includeParents":true,"maxResults":1}
```

## Result preview

The dataset view highlights these columns:

- **LEI** · `lei`
- **Legal entity name** · `legalName`
- **Entity status** · `entityStatus`
- **LEI registration status** · `registrationStatus`
- **Jurisdiction** · `jurisdiction`
- **LEI next renewal date** · `nextRenewalDate`

Use the original source links and the field definitions below when interpreting the results. CSV works well for flat columns; JSON preserves nested values.

## Usage and pricing

Base result rate on the FREE tier: **$5 per 1,000 legal entity observations**. The [Pricing tab](https://apify.com/maydit/gleif-entity-change-monitor/pricing) shows your plan's result rate and any Actor Start charge. Set a small result limit for the first run; the requested limit is not a guarantee of that many results.

---

## Full guide

Monitor explicit **Legal Entity Identifier (LEI) watchlists** for changes in company identity, LEI registration and published accounting-parent relationships. Each result preserves source evidence and distinguishes parent relationships from reporting exceptions. The official public API requires no key.

### Why use it

Keep a counterparty master-data feed current without repeatedly reconciling entity records, parent links and reporting exceptions yourself. Named observation history produces field-level differences and can skip unchanged records. The product provides evidence for your workflow; it does not decide whether a counterparty should be approved or rejected.

**Price:** $0.005 per saved entity on FREE/BRONZE, plus the configured $0.00005 start event. SILVER results are 20% less; GOLD and higher are 40% less. Parent lookups are included in the entity result. Skipped unchanged observations have no result charge. Apify's configured prices govern the actual charge.

### Fast default

`{}` checks Apple Inc. (`HWUPKR0MPOU8FGXBT394`) and Microsoft India Corporation (`8945006U6W5TYUM16C74`), including their direct/ultimate parent information. This illustrates both a published reporting exception and a published accounting-consolidation relationship.

### Inputs

| Field | Meaning |
|---|---|
| `leis` | Up to 50 explicit valid 20-character LEIs, including valid check digits. Empty input uses the two default entities. |
| `includeParents` | Fetch both direct and ultimate relationship records or reporting exceptions; default true. |
| `maxResults` | Maximum saved entity rows; default 2 and maximum 50. |
| `comparePrevious` | Compare the exact LEI list and parent setting with saved observations; default false. |
| `onlyChanges` | Enables comparison and skips unchanged observations; default false. |
| `snapshotName` | Named history scope, default `default`; one writer per name/scope. |
| `maxRunSeconds` | Own deadline, default 240 seconds and range 30–900; also respects the platform deadline with a 25-second reserve. |

### Output

One complete row per saved entity includes:

- `lei`, `legalName`, `entityStatus`, `entityCategory`, `jurisdiction`, `legalForm`, `registrationAuthority`, `registeredAs`.
- Published `legalAddress` and `headquartersAddress`.
- `registrationStatus`, `registrationUpdatedAt`, `initialRegistrationDate`, `nextRenewalDate`, `managingLou`, `corroborationLevel`, `conformityFlag`.
- `directParent` and `ultimateParent`, each with a status and exact source evidence.
- `sourceGoldenCopyAt` when supplied by the API, `url`, `observedAt`, `contentHash` and attribution.
- `comparisonStatus`: `not_requested`, `new`, `changed` or `unchanged`; `changedFields`, `previousObservedAt` and `previous`.

Parent status meanings:

| Status | Meaning |
|---|---|
| `reported` | A published accounting-consolidation relationship, with `parentLei`, type, status, periods, registration dates and source URL. |
| `reporting_exception` | The publisher gives a reason for not reporting this parent, retained verbatim with its category, reference and source URL. |
| `not_reported` | The entity response supplies neither parent relationship nor exception link. This does not prove that there is no parent. |
| `not_requested` | `includeParents` was false. |

**Entity status and LEI registration status are different.** An active entity can have a lapsed LEI. Parent records describe accounting consolidation, not a full beneficial-ownership graph. A `NATURAL_PERSONS` reporting exception does not identify any individuals. No personal owner lookup is performed.

### Three exact examples

#### Apple identity and parent reporting exceptions

Use the [copyable first-run input](#try-this-actor) above.

#### Microsoft India accounting-parent relationships

```json
{"leis":["8945006U6W5TYUM16C74"],"includeParents":true,"maxResults":1}
```

#### Unilever and Microsoft identity watchlist

```json
{"leis":["549300MKFYEKVRWML317","INR2EJN1ERAN0W5ZP974"],"includeParents":false,"maxResults":2}
```

### Repeated observations

The named key-value store `maydit-gleif-entity-history` retains observations. `snapshotName`, sorted LEI list and `includeParents` define the history scope. The first comparison run emits `new` observations and logs a warning. A later unchanged run with `onlyChanges:true` legitimately emits zero results.

Identity, registration and parent fields are compared. Retrieval time and Golden Copy publication time are excluded from the change hash. A newer Golden Copy alone therefore does not manufacture a company change. Publisher update timestamps remain part of the source observation. Changes are observed between runs, not claimed to have happened at the observation time.

History advances only after a complete entity row is confirmed saved. If either requested parent lookup fails, that entity is marked failed and no partial paid row or history update is created. A rejected spending-limit row never updates history; a final accepted row does count when the SDK signals a cap. Choose `maxResults` at least as large as the LEI list when establishing a complete watchlist baseline.

The Actor re-reads history before committing and refuses a detected concurrent change. This is an optimistic check, not an atomic lock: **use one writer per snapshot scope**. Invalid stored history is rejected; a new `snapshotName` starts fresh. Missing entities never generate removal events.

### Coverage and failures

`SUMMARY` includes `status`, `incomplete`, `rowsSaved`, `rowsObserved`, `unchangedSkipped`, `sourcesSucceeded`, `sourceCoverage`, `failedSources` and limit flags. Failed entity/parent responses, invalid shapes and deadline stops are explicit. A run in which no usable observations can be saved fails; valid no-change runs and budget stops do not invent data rows.

There is no company-name search, child-tree traversal, sanctions screening, credit score or investment/legal advice. Not every business has an LEI. Source data may be incomplete, delayed or inaccurate. Parent and entity endpoints are fetched separately and are not a transactional snapshot of the entire GLEIF database.

### Sources and reuse

The Actor uses the [official GLEIF API](https://www.gleif.org/en/lei-data/gleif-api) and follows parent/exception endpoints returned by it, restricted to the exact expected public host and LEI path. Requests respect robots rules, bounded time/size limits, rate-limit responses and public-network safety checks.

GLEIF provides the reference data under [CC0 and its data terms](https://www.gleif.org/en/meta/lei-data-terms-of-use). The underlying data is freely available. The price covers this Actor's normalized, repeatable observation workflow. This independent product is not affiliated with or endorsed by GLEIF.

For support or correction/deletion requests, use Actor Issues or **bmay@mayd-it.com**.

## Help with your run

Open the **Issues** tab on this Actor with the run URL, the input field that caused trouble and what you expected to receive. Remove API keys and private information before posting.

[Explore more Mayd-It Actors](https://apify.com/maydit)

## Understand your run

Open **Run report** in the run’s Output tab for saved-record counts, reported source issues and limits, and suggested next steps. Use **CSV export** to take the saved results into a spreadsheet. The existing JSON results and detailed machine-readable summary remain available.

The report reflects this run’s recorded coverage. A successful run or a saved result does not establish that every possible source record was collected.
