# European Company Registry Lookup (8 countries + LEI) (`pavel.tashev/european-company-registry-lookup`) Actor

Look up companies by name or registration number in official government registries (France Sirene, Norway Brønnøysund, Finland YTJ, Czech ARES, Latvia) and the global GLEIF LEI index. One clean schema, company data only.

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

## Pricing

from $2.00 / 1,000 company 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?

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

### What does European Company Registry Lookup do?

**European Company Registry Lookup finds companies in official government business registries by company name or registration number, and returns them in one clean, consistent format.** It searches **France (INSEE Sirene)**, **Norway (Brønnøysund Enhetsregisteret)**, **Finland (PRH / YTJ)**, the **Czech Republic (ARES)**, **Slovakia (RPO)**, **Poland (KRS)**, **Latvia (Uzņēmumu reģistrs)**, **Ireland (CRO)** and the global **GLEIF LEI index** in a single run.

For every company you get the official name, registration number, VAT ID where the registry publishes it, legal form, status (active, inactive or dissolved), incorporation date, registered address, industry codes, employee count where available and a link to the company's page on the official registry. Runs on the Apify platform, so you also get API access, scheduling, webhooks and integrations with Make, Zapier, n8n and Google Sheets.

### Why use European Company Registry Lookup?

- **Official sources only.** Data comes straight from the government registries' own open-data APIs, not from scraped directories.
- **One schema for nine registries.** No need to learn eight national APIs, their languages and their date and address formats.
- **Paste names or numbers.** SIREN/SIRET, Norwegian organisasjonsnummer, Finnish Y-tunnus, Czech and Slovak IČO, Polish KRS numbers, Irish CRO company numbers, Latvian registration numbers, LEI codes and VAT numbers (for example `CZ00177041` or `NO923609016MVA`) are recognised automatically, with checksum validation.
- **Company data only.** Directors, owners and sole traders (natural persons) are never included, which keeps the output free of personal data.
- **Pay only for companies found.** Queries with no match cost nothing.

Typical uses: **KYB and supplier onboarding** checks, **CRM and lead enrichment** with official IDs and VAT numbers, **invoice and VAT data validation**, **checking whether a partner is still active**, and giving AI agents a reliable "look up this company" tool.

### How to look up companies in European business registries

1. Click **Try for free**.
2. In **Companies**, enter company names or registration numbers, one per line.
3. Optionally choose which **Countries and registries** to search.
4. Click **Start**. Most runs finish in seconds.
5. Open the **Output** tab. **Overview** shows name, country, registration number, status and a registry link; **Details** shows the full record.

### Input

| Field | Description | Default |
|---|---|---|
| **Companies** | Company names or registration numbers, one per line (up to 1,000). | – |
| **Countries and registries** | FR, NO, FI, CZ, SK, PL, LV, IE and LEI (global). Registration numbers are only looked up in the registry they belong to. Poland (KRS) is searched by KRS number only. | all |
| **Lookup mode** | `auto` detects registration numbers; `name` and `id` force one kind of lookup. | auto |
| **Maximum results per company and registry** | For name searches, how many matches each registry returns (best first). | 10 |
| **Include original registry record** | Adds the registry's own record under `raw` (person data removed). | off |

Example input:

```json
{
  "queries": ["Equinor ASA", "0112038-9", "CZ00177041", "529900FCMZ4LKXFD0R69"],
  "countries": ["NO", "FI", "CZ", "LEI"],
  "maxResultsPerQuery": 5
}
```

**How name search works:** every word you type must appear as a whole word in the company name (accents and punctuation are ignored, so `Skoda Auto` finds `Škoda Auto a.s.`). Exact names come first, then names that start with your query, then names that contain it; active companies are listed before dissolved ones.

### Output

One dataset item per company. A real example from a run on 15 September 2026:

```json
{
  "id": "NO:923609016",
  "country": "NO",
  "registry": "Brønnøysund Register Centre, Enhetsregisteret (Norway)",
  "registryId": "923609016",
  "vatId": "NO923609016MVA",
  "lei": null,
  "name": "EQUINOR ASA",
  "legalForm": "Allmennaksjeselskap",
  "legalFormCode": "ASA",
  "status": "active",
  "incorporationDate": "1972-09-18",
  "dissolutionDate": null,
  "address": { "street": "Forusbeen 50", "postalCode": "4035", "city": "STAVANGER", "region": "STAVANGER", "country": "NO" },
  "industryCodes": [{ "scheme": "SN2007 (NACE)", "code": "06.100", "description": "Utvinning av råolje" }],
  "employeesRange": "21272",
  "website": "https://www.equinor.com",
  "sourceUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016",
  "attribution": "Contains data under the Norwegian licence for Open Government data (NLOD) 2.0 distributed by Brønnøysundregistrene",
  "query": "NO923609016MVA",
  "matchType": "id"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. A per-query report (matches found, saved, skipped sole traders and any registry errors) is saved in the key-value store as `QUERIES_REPORT`.

### Output fields

| Field | Meaning |
|---|---|
| `id`, `registryId`, `registry`, `country` | Unique ID (`country:number`), the official registration number and registry |
| `vatId`, `lei` | VAT ID when the registry publishes it (France, Norway, Czech Republic, Poland); LEI for GLEIF records |
| `name`, `legalForm`, `legalFormCode` | Official name and legal form as registered |
| `status`, `statusRaw` | `active`, `inactive` (for example bankruptcy or liquidation in progress) or `dissolved`, plus the registry's own status |
| `incorporationDate`, `dissolutionDate` | Dates in `YYYY-MM-DD` |
| `address` | Registered address: street, postal code, city, region, country |
| `industryCodes` | NACE-based activity codes (NAF, SN2007, TOL 2008, CZ-NACE, SK NACE, PKD 2007, NACE Rev. 2) |
| `employeesRange`, `website` | When published (France: size band; Norway: headcount) |
| `sourceUrl`, `attribution` | Link to the official registry page and the licence line to keep with the data |
| `query`, `matchType` | Your query and whether it matched by `id` or `name` |

### How much does it cost to look up company registry data?

This Actor uses **pay-per-event pricing**: you pay for each company record saved to your dataset. Queries with no match, invalid registration numbers and skipped sole traders are free, and the same company found by two queries is saved and charged once. See the **Pricing** tab for the current price per 1,000 companies. Platform compute is included. Set a maximum cost per run and the Actor stops cleanly when it is reached.

### Tips

- **Use registration numbers when you have them.** They return exactly one company and are the cheapest lookup.
- **Narrow name searches** by selecting only the countries you need and lowering *Maximum results per company and registry*.
- **Name searches for short, common words** (for example `Bolt`) match many companies in every registry; add the legal form (`Bolt Group s.r.o.`) to be precise.
- **Eight-digit numbers** can be a Czech or Slovak IČO and a Finnish Y-tunnus without the dash; every registry whose checksum matches is queried.
- **Polish companies:** enter the 10-digit KRS number (for example `KRS 0000019193`); the KRS API has no name search.
- **Irish companies:** a 5–6 digit number, or `CRO 249885`, is looked up as a CRO company number.

### Sources, licences and limitations

| Registry | Coverage | Licence |
|---|---|---|
| France – API Recherche d'entreprises (INSEE Sirene, RNE) | Companies and associations; non-public ("non-diffusible") entities are not available | Licence Ouverte / Open Licence 2.0 |
| Norway – Brønnøysund Enhetsregisteret | All registered legal entities | NLOD 2.0 |
| Finland – PRH / YTJ open data | Companies in the Finnish Trade Register | Open data; mention the source |
| Czech Republic – ARES (Ministry of Finance) | Economic entities in Czech public registers | Open data (Government Regulation 425/2016) |
| Slovakia – Register of Legal Entities (RPO), Statistical Office | Legal entities; natural-person entrepreneurs and trade-licence holders are skipped | CC BY 4.0 |
| Poland – KRS via API KRS (Ministry of Justice) | Entities in the KRS register of entrepreneurs and of associations (lookup by KRS number) | Public domain (CC0 1.0) |
| Latvia – Register of Enterprises | Legal entities in the Latvian register | CC0 1.0 |
| Ireland – Companies Registration Office (CRO) open data | Companies registered in Ireland (updated daily) | CC BY 4.0 |
| GLEIF – Global LEI Index | Entities with an LEI, worldwide | CC0 1.0 |

- **Not included:** directors, shareholders, beneficial owners, financial statements, and natural persons (sole traders, individual entrepreneurs, farms owned by individuals).
- Registry data is informative and not an official extract; for legal proceedings, request a certified extract from the registry.
- When you publish or resell the data, keep the `attribution` line. Do not use registry logos or present your service as the registry's own.
- The registries set fair-use limits (for example ARES: 500 requests per minute; France: 7 requests per second). The Actor paces its requests to stay within them.
- A registry that doesn't answer within about 30 seconds is skipped for that query. Results found before that are kept, and `QUERIES_REPORT` marks the registry as `partial` or `failed`. You're only charged for companies saved.

### Related tools

Add hiring and website data to company records:

- [Company Career Page Jobs Scraper](https://apify.com/pavel.tashev/company-jobs-scraper): get all open jobs from company career pages (Greenhouse, Lever, Ashby and more).
- [Website Tech Stack Detector](https://apify.com/pavel.tashev/website-tech-stack-detector): detect the CMS, frameworks, analytics and hosting of any website.
- [Remote Jobs Aggregator](https://apify.com/pavel.tashev/remote-jobs-aggregator): collect remote jobs from Himalayas, Remote OK and Jobicy in one dataset.

### FAQ and support

**Which countries are next?** Tell us in the **Issues** tab. UK Companies House, Denmark, Estonia, Lithuania and Switzerland are on the list, subject to their API terms.

**A company is missing or looks wrong?** Check `QUERIES_REPORT` for registry errors, then open an issue with the query. Custom registry integrations and bulk data pipelines are available on request.

# Actor input Schema

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

Company names or registration numbers, one per line. Numbers are recognised automatically: French SIREN/SIRET, Norwegian organisasjonsnummer, Finnish Y-tunnus, Czech or Slovak IČO, Polish KRS number (e.g. KRS 0000019193), Irish CRO company number (e.g. CRO 249885), Latvian registration number, LEI codes, and VAT numbers such as CZ00177041 or NO923609016MVA.

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

Registries to search. Registration numbers are only looked up in the registry they belong to. Poland (KRS) supports lookups by KRS number only.

## `lookupMode` (type: `string`):

Auto treats valid registration numbers as numbers and everything else as a company name. Name only and Number only force one kind of lookup.

## `maxResultsPerQuery` (type: `integer`):

For name searches: how many matching companies to return from each registry, best matches first. Every word of the name must appear in the company name.

## `includeRaw` (type: `boolean`):

Adds the registry's original record under `raw` (without person data such as directors). Makes the dataset much larger.

## Actor input object example

```json
{
  "queries": [
    "Equinor ASA",
    "0112038-9",
    "383474814",
    "Škoda Auto a.s.",
    "529900FCMZ4LKXFD0R69"
  ],
  "countries": [
    "FR",
    "NO",
    "FI",
    "CZ",
    "SK",
    "PL",
    "LV",
    "IE",
    "LEI"
  ],
  "lookupMode": "auto",
  "maxResultsPerQuery": 10,
  "includeRaw": false
}
```

# Actor output Schema

## `companies` (type: `string`):

No description

## `queriesReport` (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": [
        "Equinor ASA",
        "0112038-9",
        "383474814",
        "Škoda Auto a.s.",
        "529900FCMZ4LKXFD0R69"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("pavel.tashev/european-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 = { "queries": [
        "Equinor ASA",
        "0112038-9",
        "383474814",
        "Škoda Auto a.s.",
        "529900FCMZ4LKXFD0R69",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("pavel.tashev/european-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 '{
  "queries": [
    "Equinor ASA",
    "0112038-9",
    "383474814",
    "Škoda Auto a.s.",
    "529900FCMZ4LKXFD0R69"
  ]
}' |
apify call pavel.tashev/european-company-registry-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,pavel.tashev/european-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/rtYQqO2xewu7nQ09j/builds/1NVpBOjlKR5xbAzFc/openapi.json
