# GLEIF New LEI Feed: New Companies & Funds Worldwide (`moment-data/gleif-new-lei-feed`) Actor

Daily feed of newly registered Legal Entity Identifiers (LEIs) worldwide from the official GLEIF API (CC0): new companies, funds and SPVs with legal form, jurisdiction and address. Filter by country, legal form, jurisdiction. Optional lapsed/retired LEIs, parent companies, new-since-last-run mode.

- **URL**: https://apify.com/moment-data/gleif-new-lei-feed.md
- **Developed by:** [Luke Miller](https://apify.com/moment-data) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 lei records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## GLEIF New LEI Feed: New Companies & Funds Worldwide (official API, no key)

Get **every newly registered Legal Entity Identifier (LEI) worldwide, the day it is issued**, from the **official GLEIF API** (CC0 open data). Around **1,100-1,500 new LEIs** are issued every day: new companies, holding companies, SPVs, investment funds, branches and subsidiaries that are about to trade securities, take out financing, open institutional accounts or report under EMIR, MiFID II or Dodd-Frank. That makes the LEI feed a **global new-company signal** you can filter by **country, legal form (GmbH, AG, Ltd, LLC, SICAV...), jurisdiction (e.g. Delaware) and category (companies or funds)**. Add **lapsed** and **retired / merged** LEIs to track entities going dormant, and turn on **parent enrichment** to see the **direct and ultimate parent company** behind each new entity.

### Who it's for

- **B2B sales and business development:** a daily list of new legal entities in your countries, e.g. new German GmbHs, new Delaware LPs, new Luxembourg funds. New entities need banks, auditors, fund administrators, law firms, insurers, software and office space.
- **Fund administrators, custodians, depositaries and transfer agents:** new funds (`categories: ["FUND"]`) in LU, IE, KY, US the day they get an LEI, often before launch.
- **Banks, KYC / AML and compliance teams:** new and lapsed counterparties, parent chains and reporting exceptions; lapsed LEIs signal reporting problems.
- **M\&A, private equity and corporate-structure research:** new subsidiaries and SPVs of known groups (ultimate parent), retired / merged LEIs after deals.
- **Data vendors, CRMs and AI agents:** clean JSON with ISO country / region codes, ISO 20275 legal form codes plus readable names, registry numbers and GLEIF links.

### Why this Actor

- **Feed, not a lookup:** existing GLEIF Actors search one LEI at a time. This one delivers what is **new**: a stateless lookback window by default, or **new since last run** with per-schedule history so a daily schedule pays only for LEIs it has not delivered yet.
- **Three event types:** `new` registrations, `lapsed` (renewal date passed without renewal) and `retired` (retired or merged).
- **Smart filters:** legal forms by ELF code **or plain name / abbreviation** (`GmbH`, `AG`, `Aktiebolag`, `LLP`, `SICAV`), resolved against the bundled ISO 20275 ELF code list (3,600 forms); jurisdictions like `US-DE`; countries; categories.
- **Readable output:** legal form name and the abbreviation the entity actually uses, managing LOU (LEI issuer) name, founding date and **age at registration** (spot brand-new companies vs old companies getting their first LEI), flattened legal and HQ address, registry ID.
- **Optional parents:** direct and ultimate accounting-consolidation parent (LEI, name, country) or GLEIF's reporting-exception reason (`NATURAL_PERSONS`, `NON_CONSOLIDATING`, `NO_LEI`, `NO_KNOWN_PERSON`...).
- **Entity-level only:** sole proprietors (natural persons) are always excluded. No personal data.
- **Official, open, polite:** GLEIF API, no key, CC0 1.0 licence; under 1 request per second with retries.
- **Fast:** the default run returns 30 LEIs in about 2 seconds at 512 MB.

### Quick start

1. Click **Start** with the default input `{}`. You get the 30 newest LEIs from the latest UTC day with data.
2. New US companies and funds of the last 2 days: `{"countries": ["US"], "daysBack": 2, "maxItems": 300}`
3. New German GmbHs and UGs: `{"countries": ["DE"], "legalForms": ["GmbH"], "daysBack": 3, "maxItems": 500}`
4. New Luxembourg and Irish funds: `{"countries": ["LU", "IE"], "categories": ["FUND"], "daysBack": 7, "maxItems": 500}`
5. New Delaware entities with parent companies: `{"jurisdictions": ["US-DE"], "includeParents": true, "maxItems": 50}`
6. Lapsed and retired LEIs in the UK: `{"eventTypes": ["lapsed", "retired"], "countries": ["GB"], "daysBack": 3, "maxItems": 200}`

#### Schedule tip (daily feed)

Create an Apify **Schedule** (for example daily at 06:00 UTC, after GLEIF's overnight publication) with:

```json
{ "mode": "sinceLastRun", "stateKey": "de-gmbh-daily", "countries": ["DE"], "legalForms": ["GmbH"], "maxItems": 1000 }
```

Use one `stateKey` per schedule. Each run delivers only LEIs not delivered before for that key (it re-checks the last 3 days, because issuers sometimes publish records a day or two late). Connect the run to Slack, email, Google Sheets, Airtable, HubSpot, Make, Zapier, n8n or a webhook via Apify integrations.

### Input

| Field | Meaning |
|---|---|
| `mode` | `window` (default, stateless) or `sinceLastRun` (**set this for schedules**) |
| `eventTypes` | `new` (default), `lapsed`, `retired` (retired or merged); several allowed, `maxItems` is split between them |
| `daysBack` | UTC days ending today, default 1. In window mode a short window is widened one day at a time (max 7) so the latest day with data is covered (`autoExtend`) |
| `countries` | Legal-address country codes: `US`, `GB`, `DE`, `LU`, `IE`, `KY`, `SG`... |
| `legalForms` | ELF codes (`2HBR`, `XJHM`) or names / abbreviations (`GmbH`, `AG`, `Ltd`, `LLP`, `SICAV`, `Aktiebolag`) |
| `jurisdictions` | `US-DE`, `US-NY`, `CA-ON`, `GB`, `KY`... |
| `categories` | `GENERAL`, `FUND`, `BRANCH`, `INTERNATIONAL_ORGANIZATION`, `RESIDENT_GOVERNMENT_ENTITY` (sole proprietors always excluded) |
| `includeParents` | Add direct and ultimate parent or reporting-exception reason (extra `lei-enriched` event, ~2 s per record) |
| `maxItems` | Cap per run (also caps your spend), default 30 |
| `autoExtend` | Window mode: widen a short window (default on) |
| `stateKey` | One key per saved search (sinceLastRun) |

### Output

Base fields (always): `lei`, `eventType` (new / lapsed / retired), `eventDate` (registration date, renewal date or last update date, UTC), `legalName`, `legalNameLanguage`, `otherNames`, `legalFormCode`, `legalFormName`, `legalFormAbbreviation`, `legalFormOther`, `jurisdiction`, `category`, `subCategory`, `entityStatus`, `entityCreationDate`, `entityAgeDaysAtRegistration`, `registeredAs` (registry number), `registrationAuthorityId`, `legalAddress`, `legalCity`, `legalRegion`, `legalCountry`, `legalPostalCode`, `hqAddress`, `hqCity`, `hqRegion`, `hqCountry`, `hqPostalCode`, `registrationStatus`, `initialRegistrationDate`, `lastUpdateDate`, `nextRenewalDate`, `managingLou`, `managingLouName`, `corroborationLevel`, `expirationDate`, `expirationReason`, `successorLei`, `successorName`, `bic`, `hasDirectParent`, `hasUltimateParent`, `gleifUrl`, `apiUrl`, `firstSeenAt`.

Parent fields (filled when `includeParents` is on, otherwise `null`): `enriched`, `directParentLei`, `directParentName`, `directParentCountry`, `directParentException`, `ultimateParentLei`, `ultimateParentName`, `ultimateParentCountry`, `ultimateParentException`.

Example (a real enriched record):

```json
{
  "lei": "254900ZE5SHQ5U4KB714",
  "eventType": "new",
  "eventDate": "2026-10-29",
  "legalName": "Wipro Technologies GmbH",
  "legalNameLanguage": "de",
  "otherNames": [],
  "legalFormCode": "2HBR",
  "legalFormName": "Gesellschaft mit beschränkter Haftung",
  "legalFormAbbreviation": "GmbH",
  "legalFormOther": null,
  "jurisdiction": "DE",
  "category": "GENERAL",
  "subCategory": null,
  "entityStatus": "ACTIVE",
  "entityCreationDate": "2017-05-29",
  "entityAgeDaysAtRegistration": 3440,
  "registeredAs": "HRB 108590",
  "registrationAuthorityId": "RA000242",
  "legalAddress": "Senckenberganlage 19",
  "legalCity": "Frankfurt Am Main",
  "legalRegion": "DE-HE",
  "legalCountry": "DE",
  "legalPostalCode": "60325",
  "hqAddress": "Senckenberganlage 19",
  "hqCity": "Frankfurt Am Main",
  "hqRegion": "DE-HE",
  "hqCountry": "DE",
  "hqPostalCode": "60325",
  "registrationStatus": "ISSUED",
  "initialRegistrationDate": "2026-10-29",
  "lastUpdateDate": "2026-10-29",
  "nextRenewalDate": "2027-10-29",
  "managingLou": "5493001KJTIIGC8Y1R12",
  "managingLouName": "Bloomberg Finance L.P.",
  "corroborationLevel": "FULLY_CORROBORATED",
  "expirationDate": null,
  "expirationReason": null,
  "successorLei": null,
  "successorName": null,
  "bic": [],
  "hasDirectParent": false,
  "hasUltimateParent": true,
  "gleifUrl": "https://search.gleif.org/#/record/254900ZE5SHQ5U4KB714",
  "apiUrl": "https://api.gleif.org/api/v1/lei-records/254900ZE5SHQ5U4KB714",
  "enriched": true,
  "directParentLei": null,
  "directParentName": null,
  "directParentCountry": null,
  "directParentException": "NO_LEI",
  "ultimateParentLei": "335800IFS1IJHESG8362",
  "ultimateParentName": "WIPRO LIMITED",
  "ultimateParentCountry": "IN",
  "ultimateParentException": null,
  "firstSeenAt": "2026-10-31T06:59:51.366Z"
}
```

See `sample-output.json` for more. Every run also writes a summary (windows, resolved filters, total matching records, counts, why it stopped) to the `OUTPUT` record. Download as JSON, CSV, Excel or via API.

### Pricing

Pay per event (Apify takes care of billing; you only pay for what is delivered):

| Event | Price | Charged |
|---|---|---|
| `apify-actor-start` | $0.005 | once per run |
| `lei-record` | $0.003 | per LEI record delivered |
| `lei-enriched` | $0.005 | additionally per record with parent companies, only when `includeParents` is on |

A default test run (30 new LEIs, no parents) costs about $0.095. With `includeParents` on, each record costs $0.008 in total. `maxItems` and Apify's *max cost per run* cap your spend; the Actor never delivers more than your run budget allows. No separate platform-usage charges: compute is included in the event prices.

### Data source and notes

- [GLEIF API](https://www.gleif.org/en/lei-data/gleif-api) (`/lei-records`, parent and reporting-exception endpoints, no key) and the [ISO 20275 ELF code list](https://www.gleif.org/en/about-lei/code-lists/iso-20275-entity-legal-forms-code-list). LEI data is published by GLEIF under **CC0 1.0**. This Actor is not affiliated with or endorsed by GLEIF.
- Dates are UTC. GLEIF publishes updates several times a day; a new LEI usually appears within hours of issuance.
- An LEI's `entityCreationDate` is when the entity was founded, not when it got the LEI. Use `entityAgeDaysAtRegistration` < 90 to focus on truly new companies.
- Parent relationships are often reported some days after a new LEI is issued, so many new records show a reporting exception instead.
- `retired` uses the record's last update date as the event date; GLEIF sometimes re-touches retired records in bulk.

### FAQ

**Is this a list of all newly incorporated companies?** It is every entity that obtained a new LEI. Most are companies, funds and SPVs active in financial markets; very small local businesses often never get an LEI.
**How fresh is it?** Live from the GLEIF API at run time (the golden copy is refreshed several times a day).
**Can I look up a specific company?** Use the `gleifUrl` / `apiUrl`, or a GLEIF lookup Actor; this Actor is a feed of changes.
**Do I need an API key?** No.

# Actor input Schema

## `mode` (type: `string`):

window (default): records in the last N UTC days, no saved state. sinceLastRun: only LEIs not delivered before for this State key; use this for daily schedules.

## `eventTypes` (type: `array`):

new = newly registered LEIs (default). lapsed = LEIs whose renewal date passed without renewal (window = renewal date). retired = LEIs retired or merged (window = last update date). Empty = new only.

## `daysBack` (type: `integer`):

Window of UTC days ending today. 1 = today (GLEIF is UTC-based). In window mode, if the window holds fewer than Max items records it is widened one day at a time (up to 7 days), so the latest day with data is always covered. Also the first-run window in sinceLastRun mode.

## `countries` (type: `array`):

ISO 3166-1 alpha-2 codes of the legal address, e.g. US, GB, DE, LU, IE, KY, SG, IN. Empty = worldwide.

## `legalForms` (type: `array`):

ISO 20275 ELF codes (e.g. 2HBR = German GmbH, XJHM = Swedish AB) or names / abbreviations (GmbH, AG, Aktiebolag, Ltd, LLP, SICAV, SCSp). Names are matched within the chosen countries when Countries is set. Empty = all.

## `jurisdictions` (type: `array`):

Legal jurisdiction codes, e.g. US-DE (Delaware), US-NY, CA-ON, GB, KY. Empty = all.

## `categories` (type: `array`):

GENERAL (companies), FUND, BRANCH, INTERNATIONAL_ORGANIZATION, RESIDENT_GOVERNMENT_ENTITY. Sole proprietors are always excluded. Empty = all.

## `includeParents` (type: `boolean`):

Looks up each LEI's reported direct and ultimate accounting-consolidation parent (LEI, name, country) or the reporting-exception reason (NATURAL_PERSONS, NON_CONSOLIDATING, NO_LEI, NO_KNOWN_PERSON...). About 2 API calls per record (GLEIF allows ~60/min), so roughly 2 seconds per record. Charged as one lei-enriched event per record.

## `maxItems` (type: `integer`):

Hard cap on delivered records (also caps your spend), split across event types. Default is small so a first run is quick and cheap; raise it for production (about 1,000-1,500 new LEIs are issued per day worldwide).

## `autoExtend` (type: `boolean`):

In window mode, widen the window one day at a time (max 7) when it holds fewer than Max records per run. Turn off to get exactly the Days back window.

## `stateKey` (type: `string`):

Name of the saved search for sinceLastRun mode. Each key keeps its own history, so use one key per schedule.

## Actor input object example

```json
{
  "mode": "window",
  "eventTypes": [
    "new"
  ],
  "daysBack": 1,
  "includeParents": false,
  "maxItems": 30,
  "autoExtend": true,
  "stateKey": "default"
}
```

# Actor output Schema

## `leis` (type: `string`):

One record per LEI event (new, lapsed or retired).

## `summary` (type: `string`):

Windows covered, resolved filters, counts, why the run stopped.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "eventTypes": [
        "new"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("moment-data/gleif-new-lei-feed").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "eventTypes": ["new"] }

# Run the Actor and wait for it to finish
run = client.actor("moment-data/gleif-new-lei-feed").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "eventTypes": [
    "new"
  ]
}' |
apify call moment-data/gleif-new-lei-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,moment-data/gleif-new-lei-feed"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eHwOlWMksO6NNinW1/builds/GSfQCtXpTykhd2Eyy/openapi.json
