# Company KYB Resolver — GLEIF LEI + SEC EDGAR, 11 Fields (`themineworks/company-identity-resolver`) Actor

Resolve any company in one call: GLEIF LEI number, EU jurisdiction flag from GLEIF HQ country (not a live VIES VAT check), and SEC EDGAR CIK for US listed firms. Built for KYB, vendor onboarding & due diligence. No API key. Works in Claude, ChatGPT & any MCP agent.

- **URL**: https://apify.com/themineworks/company-identity-resolver.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Business, Lead generation, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 company resolveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Company KYB Resolver — GLEIF LEI + SEC EDGAR, 12 Fields

> **The Mine Works:** 544 users across 100 public Actors, >99% run success. Pay only for results delivered. [Browse all Actors](https://apify.com/themineworks).

Resolve a company name to its canonical identifiers in **one call across two authoritative registries**: **GLEIF** for the Legal Entity Identifier and **SEC EDGAR** for the CIK of US filers. **12 fields per company** including LEI, LEI registration status, registered legal name, HQ country, entity status, an EU-registration flag, EDGAR CIK, EDGAR filer name, last filing date and a `resolved` boolean.

Pure HTTP against both official APIs. **No API key, no login, no browser.**

### Why use this company KYB resolver

- **Two registries, one row.** GLEIF and SEC EDGAR are separate systems with separate identifiers. This Actor joins them so a name goes in and both identifiers come out.
- **The EDGAR match is verified, not assumed.** EDGAR full-text search returns filings that *contain* your phrase, and the filer of that document is often a different company. Taking the top hit made private companies resolve to whichever public company mentioned them. This Actor only accepts a hit whose filer name actually matches the queried company, and returns nothing otherwise — "no SEC presence" is the correct answer for a private firm.
- **An explicit `resolved` flag.** Every input company gets a row. `resolved` tells you whether either registry produced an identifier, so a name that matched nothing is visible in your join rather than silently missing.
- **Country-scoped disambiguation.** `countryCode` restricts the GLEIF search to entities headquartered in that country, which separates same-name entities across jurisdictions.
- **EDGAR is optional.** Set `includeEDGAR: false` to skip the SEC lookup entirely when you only need LEI.

### Resolve a batch of company names

```json
{
  "companies": ["Apple Inc", "Volkswagen AG", "Nestle S.A."],
  "includeEDGAR": true
}
```

The core call: names in, LEI plus CIK out, one row per company.

### Disambiguate same-name entities by country

```json
{
  "companies": ["Santander"],
  "countryCode": "ES",
  "includeEDGAR": false
}
```

`countryCode` filters the GLEIF search on headquarters country, which is how you separate a parent from its national subsidiaries.

### Resolve LEI only, skipping SEC

```json
{
  "companies": ["Siemens AG", "Airbus SE", "ASML Holding N.V."],
  "includeEDGAR": false
}
```

For a European book the EDGAR lookup adds latency and no information. Turning it off makes the run faster.

### Screen a vendor list for EU registration

```json
{
  "companies": [
    "SAP SE",
    "Shopify Inc",
    "Spotify AB",
    "Atlassian Corporation"
  ]
}
```

`is_eu_registered` is derived from the GLEIF headquarters country against the 27 EU member states — a fast first pass before a full jurisdiction review.

### What data does the KYB resolver return

```json
{
  "query_name": "Apple Inc",
  "lei": "HWUPKR0MPOU8FGXBT394",
  "lei_status": "ISSUED",
  "legal_name": "APPLE INC.",
  "country": "US",
  "entity_status": "ACTIVE",
  "is_eu_registered": false,
  "edgar_cik": "0000320193",
  "edgar_name": "Apple Inc. (AAPL)",
  "resolved": true,
  "scraped_at": "2026-08-01T23:00:00.000Z"
}
```

| Field | Description |
| --- | --- |
| `query_name` | The name you submitted, so the row joins back to your input |
| `lei`, `lei_status` | GLEIF identifier and its registration status |
| `legal_name`, `country`, `entity_status` | Registered name, HQ country and GLEIF entity status |
| `is_eu_registered` | Derived from the GLEIF HQ country against the 27 EU member states |
| `edgar_cik`, `edgar_name` | SEC identifiers for verified US filers. For actual filing history, use [SEC EDGAR Filings](https://apify.com/themineworks/sec-edgar-filings) — correctly date-sorted, not this resolver's job. |
| `resolved` | True when either registry produced an identifier |
| `scraped_at` | Capture timestamp |

`is_eu_registered` is a **jurisdiction flag derived from GLEIF's HQ country, not a live VAT check**. If you need VAT validity, run the [EU VAT Checker (VIES)](https://apify.com/themineworks/eu-vat-vies-validator) as a second step.

### How the resolver works without an API key

Both sources are open. For each company the Actor queries GLEIF's `lei-records` endpoint filtered on legal name (and headquarters country when you supply one), then queries SEC EDGAR full-text search restricted to 10-K filings. EDGAR hits are name-normalised — punctuation stripped, legal suffixes such as Inc, Corp, GmbH and PBC removed — and only accepted when the filer name genuinely matches the query. Requests are paced with short pauses between lookups.

### What can you build with resolved company identifiers

**KYB and vendor onboarding.** A single call that returns a legally grounded identifier before you open an account.

**Entity resolution.** Join messy CRM company names to LEI and CIK as stable keys.

**Diligence workflows.** Confirm a target's legal entity, jurisdiction and whether it files with the SEC.

**AI grounding.** Ask a model for a company's CIK and it will confidently invent one. Resolving against the registries is the fix.

### How much does it cost to resolve companies

Pay per company resolved: **$0.005 on the Apify Free plan, $0.0025 on Gold and above**. Every submitted company produces a row, including unmatched ones, so you can see exactly what failed to resolve.

### How do I use the KYB resolver in Claude or ChatGPT

```
https://mcp.apify.com/?tools=themineworks/company-identity-resolver
```

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/company-identity-resolver').call({
  companies: ['Apple Inc', 'Volkswagen AG'],
  includeEDGAR: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

### Company KYB resolver FAQ

**Do I need an API key?** No. Both GLEIF and SEC EDGAR are open.

**Why is `edgar_cik` empty for a company I know exists?** Either it is private and does not file with the SEC, or its filer name did not match the query. The Actor deliberately returns nothing rather than the wrong CIK.

**Does `is_eu_registered` mean the VAT number is valid?** No. It is a jurisdiction flag from the GLEIF HQ country. Use the EU VAT Checker for validity.

**Why does a name return no LEI?** GLEIF matches the registered legal name. Try the full legal form, or add `countryCode` to narrow the search.

**Can I resolve by ticker?** No. Input is company name. Use the GLEIF LEI Lookup Actor if you already hold LEIs.

### Complete your KYB pipeline

- **[GLEIF LEI Lookup](https://apify.com/themineworks/gleif-lei-lookup)** — the full 18-field legal entity record.
- **[EU VAT Checker (VIES)](https://apify.com/themineworks/eu-vat-vies-validator)** — live VAT validity with registered name and address.

Found a bug or want a field added? Open an issue on the Actor's Apify Console page.

### Related guides

- [Ask an AI for a Company's SEC CIK and It Will Lie to You. Here Is the Fix.](https://themineworks.com/blog/company-diligence-grounded-registries)
- [Company KYB Resolver: LEI, EU VAT, and SEC CIK Lookup in One API Call](https://themineworks.com/blog/company-kyb-resolver-lei-vat-sec-cik-api)
- [Company KYB Resolver: Resolve LEI, EU VAT, and SEC CIK in One API Call](https://themineworks.com/blog/company-kyb-resolver-lei-vat-sec-one-call)

*Last verified: 2026-08*

# Actor input Schema

## `companies` (type: `array`):

List of company names to resolve. E.g. \["Apple Inc", "Volkswagen AG", "Tata Motors"]

## `countryCode` (type: `string`):

Optional: hint the country for faster LEI matching (e.g. US, DE, GB).

## `includeEDGAR` (type: `boolean`):

Look up SEC EDGAR filing status for potential US-listed companies.

## Actor input object example

```json
{
  "companies": [
    "Apple Inc",
    "Volkswagen AG"
  ],
  "includeEDGAR": true
}
```

# Actor output Schema

## `results` (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 = {
    "companies": [
        "Apple Inc",
        "Volkswagen AG"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/company-identity-resolver").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 = { "companies": [
        "Apple Inc",
        "Volkswagen AG",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("themineworks/company-identity-resolver").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "companies": [
    "Apple Inc",
    "Volkswagen AG"
  ]
}' |
apify call themineworks/company-identity-resolver --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=themineworks/company-identity-resolver",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/haJSsydW6hwIaTdid/builds/mbmyCrdMlqVS7L3JM/openapi.json
