# Company Registry Lookup & Business Verification: Global KYB (`reliable_tools/company-registry-lookup`) Actor

Company registry lookup across official registers and the GLEIF LEI index: legal name, status, registration number, legal form, address, LEI and parent company, with an AI same-entity match score.

- **URL**: https://apify.com/reliable_tools/company-registry-lookup.md
- **Developed by:** [Reliable Tools](https://apify.com/reliable_tools) (community)
- **Categories:** Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.50 / 1,000 verified companies

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/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

## Company Registry Lookup & Business Verification: Global KYB

This company registry lookup checks your companies against official business registers and the global LEI index in one run. Give it a list of names, registration numbers, VAT numbers or LEIs, and you get one row per company: the registered legal name, whether it is active or dissolved, the registration number, legal form, incorporation date, registered address, LEI and its status, the direct and ultimate parent company, and a link to the official record. When you give a name, an AI match score tells you whether the register entry is the same legal entity, a related one or a different company, with a probability.

It is built for know-your-business (KYB) checks, supplier and customer onboarding, and cleaning a CRM, where you need the official record for hundreds of companies in many countries and don't want to open a dozen register websites.

### What it does

- **Looks up a registration number directly** in the national register (for example SIREN in France, organisation number in Norway, Business ID in Finland, ICO in Czechia, KRS in Poland).
- **Searches by company name** when you have no number, ranks the register entries and compares the best ones with your input.
- **Adds the LEI layer** from the GLEIF index: LEI, registration status, next renewal date, and the direct and ultimate parent company (or the reason the company reports no parent).
- **Covers every other country through GLEIF**: any company with an LEI is found, for example in Germany, the Netherlands, Switzerland, Italy, Spain or Japan.
- **Only charges for verified companies.** Not found, no match, invalid and failed rows are free.

### Countries and sources

| Country | Source | What you can give | Licence |
|---|---|---|---|
| All countries | GLEIF Global LEI Index (api.gleif.org) | LEI, name, register number | CC0 1.0 |
| France | INSEE SIRENE and RNE via recherche-entreprises.api.gouv.fr | name, SIREN, SIRET, VAT number | Licence Ouverte 2.0 (Etalab) |
| Norway | Bronnoysund Register Centre, Enhetsregisteret API | name, organisation number | NLOD 2.0 |
| Finland | PRH / YTJ open data API | name, Business ID, VAT number | CC BY 4.0 |
| Czechia | ARES register of economic entities | name, ICO, VAT number | ARES open data |
| Poland | National Court Register (KRS) open API | KRS number (names, NIP and REGON via GLEIF) | Public KRS data |
| Estonia | e-Business Register open data file | name, registry code | CC BY 4.0 |
| Latvia | Register of Enterprises open data | name, registration number | CC0 1.0 |
| Ireland | Companies Registration Office daily open data file (companies.csv), refreshed at most once a day | name, CRO number | CC BY 4.0. Contains Irish Public Sector Data licensed under a Creative Commons Attribution 4.0 International (CC BY 4.0) licence |
| Singapore | ACRA entity data on data.gov.sg, paced to the keyless rate limit (one request every 2.6 seconds) | name, UEN | Singapore Open Data Licence 1.0 (data.gov.sg/open-data-licence) |
| United States | SEC EDGAR (companies that file with the SEC) | name, CIK | Public domain |
| United Kingdom | Companies House API, with your own free API key | name, company number | Open Government Licence v3.0 |
| Australia | ABN Lookup web services, with your own free GUID | name, ABN, ACN | ABN Lookup terms |

Coming next: Germany (Handelsregister), Denmark (CVR), Sweden, the Netherlands, Belgium, Switzerland, Austria, Spain, Italy, Lithuania, New Zealand, Canada and India. Until then these countries are checked through GLEIF.

Without a Companies House key or an ABN Lookup GUID, UK and Australian companies are still found when they have an LEI.

### Who uses it

- Compliance and KYB teams onboarding business customers, merchants or marketplace sellers.
- Procurement teams checking that a supplier exists, is active and is not dissolved or in liquidation.
- Finance teams matching invoices and VAT numbers to the right legal entity.
- Sales and data teams cleaning CRM accounts and adding parent companies for account hierarchies.
- AI agents that need a reliable "does this company exist and who owns it" answer with a source link.

### Output

| Field | Example |
|---|---|
| `lookupStatus` | `found`, `not_found`, `no_match` (no register entry is the same entity), `invalid_input`, `unavailable` |
| `legalName` | `DANONE` |
| `companyStatus` | `active`, `in_restructuring`, `in_liquidation`, `in_insolvency`, `dissolved`, `inactive`, `unknown` |
| `registryStatusText` | the status as the register words it, for example `Under liquidation (under avvikling)` |
| `registrationNumber`, `registrationNumberType` | `552032534`, `SIREN` |
| `legalForm` | `Societe anonyme a conseil d'administration (5599)` |
| `incorporationDate`, `dissolutionDate` | `1955-01-01` |
| `registeredAddress` | street, postal code, city, region, country and the full address line (companies only) |
| `vatId` | when the register publishes it, plus `vatIdMatches` when you gave one |
| `lei`, `leiStatus` | LEI with registration status, entity status, next renewal date |
| `directParent`, `ultimateParent` | parent LEI, name and country, or the reported reason there is none |
| `matchScore` | verdict `same_entity`, `related_entity` or `different_entity`, `sameEntityProbability`, `needsReview` and the evidence |
| `sourceRegistry`, `sourceUrl`, `sourceLicence`, `sources`, `retrievedAt` | where every value comes from, and when |
| `summary` | one sentence for your review |

Sole traders are natural persons. For them the address is not returned, only the business record.

### How to run it

1. Add your companies under **Companies to verify**, one object per company, for example `{"name": "Nokia Oyj", "country": "FI"}` or `{"registrationNumber": "923609016", "country": "NO"}`. You can also link a CSV file.
2. Give the country as a two-letter code (FR, GB, US) or a country name. With an LEI or a VAT number the country is optional.
3. Add a registration number when you have one. It is the most precise way to look a company up.
4. Optional: paste your Companies House API key and your ABN Lookup GUID to cover all UK and Australian companies.
5. Start the run and export the results as JSON, CSV or Excel, or read them through the API.

### Example input

```json
{
  "companies": [
    {"reference": "C-1", "name": "Danone SA", "country": "FR"},
    {"reference": "C-2", "registrationNumber": "923609016", "name": "Equinor", "country": "NO"},
    {"reference": "C-3", "name": "Skoda Auto", "country": "CZ"},
    {"reference": "C-4", "lei": "W38RGI023J3WT1HWRP32"}
  ]
}
```

### Example output

```json
{
  "reference": "C-3",
  "lookupStatus": "found",
  "legalName": "Škoda Auto a.s.",
  "companyStatus": "active",
  "registrationNumber": "00177041",
  "registrationNumberType": "ICO",
  "legalForm": "Akciová společnost (121)",
  "incorporationDate": "1990-11-20",
  "registeredAddress": {"postalCode": "29301", "city": "Mladá Boleslav", "country": "CZ",
                        "full": "tř. Václava Klementa 869, Mladá Boleslav II, 29301 Mladá Boleslav"},
  "vatId": "CZ00177041",
  "lei": "529900I8XOZDM4ZQSQ21",
  "leiStatus": {"registrationStatus": "ISSUED", "entityStatus": "ACTIVE", "nextRenewalDate": "2027-10-25"},
  "ultimateParent": {"lei": "529900NNUPAGGOMPXZ31", "name": "VOLKSWAGEN AKTIENGESELLSCHAFT", "country": "DE"},
  "matchScore": {"verdict": "same_entity", "sameEntityProbability": 0.95, "needsReview": false},
  "sourceRegistry": "ARES, Czech register of economic entities",
  "sourceUrl": "https://ares.gov.cz/ekonomicke-subjekty?ico=00177041",
  "summary": "Škoda Auto a.s. (ICO 00177041): active, Akciová společnost (121), LEI 529900I8XOZDM4ZQSQ21, ultimate parent VOLKSWAGEN AKTIENGESELLSCHAFT. Same legal entity as your input (probability 0.95)."
}
```

### Use it through the API

You can run the company registry lookup in the Apify Console or call it from your own code through the Apify API. The **API** tab of this Actor has ready-to-copy examples for the JavaScript and Python clients, the Apify CLI, plain HTTP and the OpenAPI definition. To use it from an AI assistant or agent, connect the Apify MCP server and add this Actor as a tool. Each result row is self-contained, with the source link and retrieval time, so an agent can cite it.

### Pricing

You pay per verified company, plus a small fee for the AI match score when you gave a name.

| Event | Price |
|---|---|
| Verified company (found in a register or the LEI index) | $0.01 |
| AI match score (same entity, related or different) | $0.005 |
| Not found, no match, invalid input, register unavailable | free |

Example: 1,000 companies given by name, all found, cost $15. The same 1,000 given by registration number without names cost $10.

### FAQ

**What is the difference between not_found and no_match?** `not_found` means the register has no entry for your number or name. `no_match` means the register has entries with a similar name, but none is the same legal entity as yours. The closest entries are listed in `otherCandidates`. Both are free.

**How reliable is the match score?** It compares your name, city and postal code with the register entry and returns a probability. Rows between clear yes and clear no are flagged with `needsReview: true`. Give a registration number when you have one; then the lookup is exact and the score only checks that the name fits the number.

**Why is the status unknown for some US companies?** SEC EDGAR lists companies that file with the SEC but does not publish whether a company is active. When the company has an LEI, the status comes from GLEIF and `statusSource` says so. The `registryStatusText` shows the latest filing date.

**Does it check VAT numbers?** It shows the VAT number when the register publishes it and tells you whether yours matches. For a live VIES check of EU VAT numbers, use our VAT number verifier.

**Does it return directors or owners?** No. It returns company data only, no data about directors, shareholders or beneficial owners. Note that for sole traders the registered business name is often the owner's own name.

**Is this an official register extract?** No. Results come from the registers' open data at the time of the run. They are not an official register extract and not legal or compliance advice.

**Who is behind it?** Reliable Tools is not affiliated with, endorsed or authorised by GLEIF or any register named here. The match score, status mapping and summaries are our own.

**How fast is it?** The LEI index allows about one request per second, so with the LEI and parent lookup switched on plan for roughly two seconds per company. Switch **Look up LEI and parent companies** off for a faster run against the national registers only.

**Can I use a Polish NIP or REGON?** Yes, when the company has an LEI. The KRS register itself is looked up by KRS number.

**What about Germany?** German companies with an LEI are found through GLEIF, with register court and HRB number. A direct Handelsregister connection is on our list.

**Something is missing or wrong?** Open an issue on the Issues tab and we'll look at it.

### About Reliable Tools

This Actor is made by [Reliable Tools](https://apify.com/reliable_tools). We build tools that return clean data from official sources plus an AI label with a confidence score, so you can filter and act on the results straight away. Our focus is compliance checks, e-commerce, product sourcing and lead research.

If a field is missing or a company doesn't come back the way you expect, open an issue on the Issues tab. We read every one and usually reply within a day. You can find our other Actors on our [profile page](https://apify.com/reliable_tools).

# Actor input Schema

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

One object per company. Fields: "name", "country" (two-letter code such as FR, GB, US, or the country name), "registrationNumber" (SIREN, organisation number, Business ID, ICO, KRS, registry code, UEN, CRO number, CIK, company number or ABN), "lei", "vatId", and optional "city", "postalCode" and "reference" (your own ID). A name alone is searched and matched; a number is looked up directly. The prefill is sample data.

## `csvUrl` (type: `string`):

Optional: a link to a CSV file with a header row, read as your company list. Recognised columns: name, country, registrationNumber (or companyNumber, regNo), lei, vatId, city, postalCode, reference.

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

Adds the LEI, its status and renewal date, and the direct and ultimate parent company from the GLEIF LEI index to every company found in a national register.

## `matchScore` (type: `boolean`):

When you give a company name, compares it with the register entry and says whether it is the same legal entity, a related entity (parent, subsidiary, branch) or a different company, with a probability. Rows without a same-entity match are free.

## `companiesHouseApiKey` (type: `string`):

Your own free Companies House API key. With it every UK company is checked in Companies House. Without it, UK companies are found only when they have an LEI.

## `abnLookupGuid` (type: `string`):

Your own free ABN Lookup web services GUID. With it every Australian ABN or ACN is checked. Without it, Australian companies are found only when they have an LEI.

## `maxResults` (type: `integer`):

Stops after this many input rows.

## Actor input object example

```json
{
  "companies": [
    {
      "reference": "C-1",
      "name": "Danone SA",
      "country": "FR"
    },
    {
      "reference": "C-2",
      "registrationNumber": "923609016",
      "name": "Equinor",
      "country": "NO"
    },
    {
      "reference": "C-3",
      "name": "Nokia Oyj",
      "country": "FI"
    },
    {
      "reference": "C-4",
      "lei": "W38RGI023J3WT1HWRP32"
    }
  ],
  "includeParents": true,
  "matchScore": true,
  "maxResults": 10000
}
```

# Actor output Schema

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

Dataset in the companies view.

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

Counts per lookup status and match verdict.

# 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": [
        {
            "reference": "C-1",
            "name": "Danone SA",
            "country": "FR"
        },
        {
            "reference": "C-2",
            "registrationNumber": "923609016",
            "name": "Equinor",
            "country": "NO"
        },
        {
            "reference": "C-3",
            "name": "Nokia Oyj",
            "country": "FI"
        },
        {
            "reference": "C-4",
            "lei": "W38RGI023J3WT1HWRP32"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("reliable_tools/company-registry-lookup").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": [
        {
            "reference": "C-1",
            "name": "Danone SA",
            "country": "FR",
        },
        {
            "reference": "C-2",
            "registrationNumber": "923609016",
            "name": "Equinor",
            "country": "NO",
        },
        {
            "reference": "C-3",
            "name": "Nokia Oyj",
            "country": "FI",
        },
        {
            "reference": "C-4",
            "lei": "W38RGI023J3WT1HWRP32",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("reliable_tools/company-registry-lookup").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 '{
  "companies": [
    {
      "reference": "C-1",
      "name": "Danone SA",
      "country": "FR"
    },
    {
      "reference": "C-2",
      "registrationNumber": "923609016",
      "name": "Equinor",
      "country": "NO"
    },
    {
      "reference": "C-3",
      "name": "Nokia Oyj",
      "country": "FI"
    },
    {
      "reference": "C-4",
      "lei": "W38RGI023J3WT1HWRP32"
    }
  ]
}' |
apify call reliable_tools/company-registry-lookup --silent --output-dataset

```

## MCP server setup

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

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/OaR0CkRH7AA7hSOIS/builds/JsP5GyENCWf3BVdMA/openapi.json
