# Global Company Check – LEI & Legal Entity Lookup (`fieldnoteagents/global-company-check`) Actor

Look up any company with an LEI by legal name + country, or by LEI. Returns legal name, LEI, status, addresses, legal form, register ID and parent companies as clean JSON. Built for AI agents and enrichment workflows. Public GLEIF data only (CC0). Not affiliated with or endorsed by GLEIF.

- **URL**: https://apify.com/fieldnoteagents/global-company-check.md
- **Developed by:** [Fieldnote Agents](https://apify.com/fieldnoteagents) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 company founds

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

## Global Company Check – LEI & Legal Entity Lookup, built on GLEIF open data

*Publisher: Fieldnote Agents*

**First 25 results free per Apify account, then $0.03 per company found.**

**Verify a company in one call.** Give it a legal name + country, or an LEI, and get back the official legal name, LEI, status, addresses, legal form, register ID and parent companies, as tidy JSON. Made for AI agents, CRM enrichment and supplier checks. Public GLEIF data only (CC0). No scraping of paid databases.

*Not affiliated with or endorsed by GLEIF; data under CC0. No GLEIF logo or trademark is used.*

Every field carries its `source` and `retrieved_at` timestamp.

### What it returns

- **GLEIF (CC0):** legal name, other names, LEI, entity status and LEI registration status, legal and HQ address, jurisdiction, legal form (ISO 20275 ELF code), registration authority (GLEIF RA code) and registration ID, direct and ultimate parent (or GLEIF's reporting-exception reason, e.g. `NO_KNOWN_PERSON`, `NATURAL_PERSONS`).

### Input

Use **`queries`**: a list of up to 500 lines, one result each. Each line is either

- an **LEI** (20 characters), e.g. `549300TTCXZOGZM2EY83`, or
- a **legal name, optionally followed by `| CC`** (ISO 3166-1 alpha-2 country of the legal address), e.g. `Spotify AB | SE`.

Via the API you can also pass objects: `{"lei": "..."}` or `{"companyName": "...", "country": "SE"}`. `includeParents` (default `true`) adds direct and ultimate parents.

```json
{ "queries": ["549300TTCXZOGZM2EY83", "SAP SE | DE", "Spotify AB | SE"], "includeParents": true }
```

The older single inputs (`lei`, `leis`, `companyName` + `country`) still work. Name without a country is less reliable.

### Output

One dataset item per query: `query`, `matchType` (`lei` | `exact-name` | `fuzzy-name` | `none`), **`matchNote`** (a plain-language match note, e.g. "Legal name matches the query exactly (country SE)"; there's no confidence score), `candidates` (other GLEIF hits for name queries), `company` (each field `{value, source, retrieved_at}`), `errors`, `billing`. Schemas: `.actor/dataset_schema.json`, `.actor/output_schema.json`.

### Pricing

**The first 25 results per Apify account are free, then $0.03 per company found**, counted per result (pay-per-event `company-result`, plus Apify's standard actor-start event), charged automatically. Lookups that find nothing are free. Set a max cost per run in Apify and the Actor stops cleanly when it's reached. Details in `PRICING.md`.

### Reliability and data

Timeouts (configurable), up to 3 retries with backoff that honours `Retry-After` on 429/5xx, and GLEIF pacing of about 1 request/s (under the roughly 60/min limit). A 24h on-disk cache sits in `.cache/`. The tool stores nothing beyond what the registers return for legal entities.

### Limits

GLEIF covers only entities that hold an LEI (about 3M worldwide, mostly larger or regulated firms). Name search returns the best hit with a match note plus `candidates`, so check them, because subsidiaries are similar (e.g. "SAP" also matches SAP Deutschland SE & Co. KG). GLEIF data is supplied by third parties "as is".

### Run locally

`pip install -r requirements.txt && apify run`, or test the core: `python3 -c "from src.registers import lookup; print(lookup(lei='549300TTCXZOGZM2EY83'))"`. The old website scraper is in `legacy/`.

### FAQ

- **How much does it cost?** $0.03 per company found, after 25 free results per Apify account. Lookups that find nothing are free.
- **Is it GDPR-safe?** It returns legal-entity data from the GLEIF register only. Note that GLEIF also lists some sole proprietors, whose entity name can be a person's name.
- **Coverage?** Entities that hold an LEI in the GLEIF register (~3M worldwide, mostly larger or regulated firms). It isn't a credit, KYC/AML or VAT check.

# Actor input Schema

## `queries` (type: `array`):

One query per line. Either an LEI (20 characters, e.g. 549300TTCXZOGZM2EY83) or a legal name with an optional ISO 2-letter country after a pipe, e.g. 'Spotify AB | SE' or 'SAP SE | DE'. One result per query. Name without a country is less reliable.

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

Adds direct and ultimate parent (or GLEIF's reporting-exception reason). Turn off for faster lookups.

## `lei` (type: `string`):

20-character Legal Entity Identifier from any country, e.g. 549300TTCXZOGZM2EY83 (Inditex, ES) or 5493004INDUJX1TDHI57 (Spotify AB, SE). (Legacy single input; prefer 'queries'.)

## `leis` (type: `array`):

Several LEIs from any country, one per line. One result each. (Legacy single input; prefer 'queries'.)

## `companyName` (type: `string`):

Legal name of any entity worldwide, searched in GLEIF open data. Add a country for better matches. (Legacy single input; prefer 'queries'.)

## `country` (type: `string`):

Optional ISO 3166-1 alpha-2 country of the legal address, e.g. US, GB, JP, DE. (Legacy single input; prefer 'queries'.)

## `timeoutSecs` (type: `integer`):

Per-request HTTP timeout to GLEIF, in seconds.

## Actor input object example

```json
{
  "queries": [
    "549300TTCXZOGZM2EY83",
    "Spotify AB | SE"
  ],
  "includeParents": true,
  "timeoutSecs": 15
}
```

# Actor output Schema

## `results` (type: `string`):

All results in the default dataset.

## `overview` (type: `string`):

No description

# 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 = {
    "queries": [
        "549300TTCXZOGZM2EY83",
        "Spotify AB | SE"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fieldnoteagents/global-company-check").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 = { "queries": [
        "549300TTCXZOGZM2EY83",
        "Spotify AB | SE",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("fieldnoteagents/global-company-check").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 '{
  "queries": [
    "549300TTCXZOGZM2EY83",
    "Spotify AB | SE"
  ]
}' |
apify call fieldnoteagents/global-company-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fieldnoteagents/global-company-check"
        }
    }
}
```

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/IhJ8N2CMbTJS9Bv33/builds/zGO9qJbE3vXLwrvAC/openapi.json
