# Company Registry Lookup: SIRENE, LEI, Brreg & KYB Data (`plainrows/company-registry-lookup`) Actor

Look up companies in official registers by name, registration number, VAT number or LEI: France SIRENE, Norway Brreg, Finland PRH, Czech ARES and the global LEI index. Legal form, status, address, industry, employees, LEI. No API key, no personal data. Pay only per company found.

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

## Pricing

from $1.20 / 1,000 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: SIRENE, LEI, Brreg & KYB Data

Look up companies in **official business registers** by name, registration number, EU VAT number or LEI: **France (SIREN/SIRET, Sirene)**, **Norway (Brønnøysund / Brreg)**, **Finland (PRH / YTJ)**, **Czechia (ARES, IČO)** and the worldwide **GLEIF LEI index**.
One clean row per company — legal form, status, incorporation date, registered address, industry code (NAF / NACE), employees, VAT number, LEI, website — straight from the public registers, with no API key and **no personal data**. Pay only per company found.

### Typical uses

- **KYB and onboarding checks**: confirm that a supplier or customer exists, is active, and matches the name, address and registration number it gave you.
- **CRM and lead enrichment**: turn a list of SIRENs, org numbers or VAT numbers into legal names, addresses, industry codes, size bands and websites.
- **LEI lookup**: find the LEI of a company from its national number, or the registry data behind an LEI.
- **Data cleaning**: normalize company names and numbers across France, the Nordics and Czechia, with a common NACE code for cross-country analysis.
- **AI agents**: give an agent a reliable "who is this company?" tool backed by official sources.

### What you get

| Field | Description |
|---|---|
| `query` | Your input line. |
| `found` | `false` on the free row of an input with no company (`note` says why). |
| `matchType` | `identifier` (looked up by number or LEI) or `name` (name search). |
| `registry` | `FR-SIRENE`, `NO-BRREG`, `FI-PRH`, `CZ-ARES` or `GLEIF`. |
| `country` | Country of the company (ISO code). |
| `name` | Registered legal name. |
| `registrationNumber`, `registrationNumberType` | SIREN, organisasjonsnummer, Business ID (Y-tunnus), IČO; for GLEIF the local number as filed. |
| `headOfficeSiret` | France: SIRET of the head office. |
| `vatNumber` | France: intra-EU VAT number computed from the SIREN with the official key. Norway: `NO…MVA` when VAT-registered. Finland: when VAT-liable. Czechia: DIČ. |
| `lei`, `leiStatus` | Legal Entity Identifier and its status (ISSUED, LAPSED…), found in GLEIF from the registration number. |
| `legalForm`, `legalFormCode` | Legal form as named by the register (local language; English for Finland) and its code. |
| `status`, `statusDetail` | `active`, `winding-up` (bankruptcy, liquidation, insolvency) or `closed`, with details and dates. |
| `incorporationDate`, `closedDate` | Dates (YYYY-MM-DD). |
| `address`, `street`, `postalCode`, `city`, `addressCountryCode` | Registered (head office) address. |
| `industryCode`, `industryLabel`, `industryCodeSystem` | Main activity as published (NAF rev. 2, Norwegian SN, Finnish TOL, CZ-NACE). |
| `naceCode` | EU NACE class (`dd.dd`) from the first four digits of the national code. |
| `employeeRange` / `employeeCount` | Size band (France, Czechia) or registered headcount (Norway). |
| `website` | Website registered with the register (Norway, Finland). |
| `revenue`, `netIncome`, `financialYear`, `currency` | France: latest published accounts, when public. |
| `sourceUrl` | Official public page of the company. |
| `sourceLicense` | Licence and attribution of the source data. |
| `observedAt` | When the register was queried. |

Not every register publishes every field: a field the register does not publish is `null`, never guessed.

### Input

```json
{
  "queries": ["552032534", "NO923609016MVA", "0112038-9", "00177041", "969500KMUQ2B6CBAF162", "FR: Decathlon", "Danone"],
  "country": "auto",
  "maxResultsPerQuery": 3,
  "activeOnly": true,
  "addLei": true
}
```

- **Numbers are routed automatically** by format and check digit: SIREN (9 digits) or SIRET (14) → France, organisation number (9 digits) → Norway, `1234567-8` → Finland, IČO (8 digits) → Czechia, 20-character LEI → GLEIF. EU VAT numbers of these countries work too (`FR27552032534`, `NO923609016MVA`, `FI01120389`, `CZ00177041`). A number with a wrong check digit gets a free row saying so.
- **Names** are searched in the register chosen in `country`: France, Norway, Finland, Czechia, or the worldwide LEI index (the default for `auto`). Prefix a line to choose per line: `FR: Decathlon`, `NO: Equinor`, `FI: Supercell`, `CZ: Alza.cz`, `LEI: Spotify`. National registers list every company of the country; the LEI index covers entities worldwide that have an LEI (banks, listed and regulated companies, funds, many larger firms).
- `maxResultsPerQuery` (1–100): companies returned per name, best match first as ranked by the register. A number always returns its one company.
- `activeOnly` (default `true`): name searches skip closed, bankrupt or liquidating companies. Lookups by number always return the company with its status.
- `addLei` (default `true`): adds the LEI to France, Norway, Finland and Czechia results (free).
- Domain names cannot be looked up: none of these registers is searchable by website.

#### Personal data: what is never returned

Only company-level data is returned. **No directors, officers, shareholders or beneficial owners** — the Actor does not even download them. **Sole proprietorships are withheld**, because their name is the owner's name: French *entrepreneurs individuels* and groups of natural persons (catégories juridiques 1000, 2110, 2210, 2310), Norwegian *enkeltpersonforetak* (ENK), Czech self-employed persons (legal forms 101–108, 424, 425) and GLEIF *sole proprietors*. The Finnish open data already excludes private traders. A withheld match is never charged; a number that belongs to a sole proprietorship gets a free row explaining why. Norwegian entities deleted from the register are not returned, as Brønnøysund asks re-users to drop them.

### Output example

A real row from a run on 2026-10-07:

```json
{
  "query": "552032534",
  "found": true,
  "matchType": "identifier",
  "registry": "FR-SIRENE",
  "country": "FR",
  "name": "DANONE",
  "registrationNumber": "552032534",
  "registrationNumberType": "SIREN",
  "headOfficeSiret": "55203253400703",
  "vatNumber": "FR27552032534",
  "lei": "969500KMUQ2B6CBAF162",
  "leiStatus": "ISSUED",
  "legalForm": "SA à conseil d'administration (s.a.i.)",
  "legalFormCode": "5599",
  "status": "active",
  "statusDetail": null,
  "incorporationDate": "1955-01-01",
  "closedDate": null,
  "address": "59-61 RUE LA FAYETTE 75009 PARIS",
  "street": "59-61 RUE LA FAYETTE",
  "postalCode": "75009",
  "city": "PARIS",
  "addressCountryCode": "FR",
  "industryCode": "70.10Z",
  "industryLabel": "Activités des sièges sociaux",
  "industryCodeSystem": "NAF rev. 2",
  "naceCode": "70.10",
  "employeeRange": "1000-1999",
  "employeeCount": null,
  "website": null,
  "revenue": 27376000000,
  "netIncome": 2100000000,
  "financialYear": "2025",
  "currency": "EUR",
  "sourceUrl": "https://annuaire-entreprises.data.gouv.fr/entreprise/552032534",
  "sourceLicense": "Licence Ouverte 2.0 (Etalab). Source: API Recherche d'entreprises (INSEE Sirene, INPI RNE)",
  "observedAt": "2026-10-07T16:28:17.915Z",
  "schemaVersion": "1.0"
}
```

### Pricing

**Pay per result**: you pay only for each company returned (event `company-result`).

| Apify plan | Price per company | 1,000 companies |
|---|---|---|
| Free | $0.0025 | $2.50 |
| Bronze | $0.002 | $2.00 |
| Silver | $0.0016 | $1.60 |
| Gold | $0.0012 | $1.20 |

Free: inputs with no company, invalid numbers, unsupported countries, withheld sole proprietorships and the LEI enrichment. No start fee, no add-ons. The run stops cleanly at the maximum cost you set and only charges what was delivered. Free inputs still use computing time: if a run's inputs keep finding no company (for example a few hundred unknown names searched in GLEIF, or about a thousand in France, with almost no match), the run stops early with a warning in its `OUTPUT`, leaves the remaining inputs unrun and charges nothing for them. The price per company stays the same; ordinary lists, where most inputs find a company, are not affected. On the free Apify plan a run is limited to 10 inputs and 5 companies per name.

### Use it from code, automations or AI agents

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~company-registry-lookup/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["552032534", "NO: Equinor"], "maxResultsPerQuery": 1}'
```

- **n8n, Make, Zapier**: use the Apify app/node, action "Run Actor" with `plainrows/company-registry-lookup`, then read the dataset items.
- **AI agents (MCP)**: add `https://mcp.apify.com?tools=plainrows/company-registry-lookup` to Claude, Cursor or any MCP client, and ask "check that SIREN 552032534 is active and give me its LEI".

### Sources and licences

| Register | Source | Licence | Rate we use |
|---|---|---|---|
| France | [API Recherche d'entreprises](https://recherche-entreprises.api.gouv.fr) (INSEE Sirene, INPI RNE) | Licence Ouverte 2.0 | 5 requests/s (limit: 7/s) |
| Norway | [Enhetsregisteret API](https://data.brreg.no/enhetsregisteret/api/dokumentasjon/en/index.html), Brønnøysund Register Centre | NLOD 2.0 | 5 requests/s |
| Finland | [PRH open data, YTJ API v3](https://avoindata.prh.fi/en) | CC BY 4.0 | ~3 requests/s |
| Czechia | [ARES](https://ares.gov.cz), Czech Ministry of Finance | Public register (informational) | 5 requests/s (limit: 500/min) |
| Worldwide | [GLEIF API](https://www.gleif.org/en/lei-data/gleif-api) | CC0 | ≤ 55 requests/min (limit: 60/min) |

Each row carries its `sourceLicense` and `sourceUrl` for attribution. This Actor is not affiliated with or endorsed by any of these registers or by GLEIF.

### What this is not

- Not an extract with legal value: for proof (Kbis, firmaattest, výpis), order it from the register.
- Not a people search: no directors, owners or contact persons, no e-mails or phone numbers.
- Not (yet) the UK: Companies House requires a registered API key; UK entities with an LEI are available through the LEI index.
- Name search quality is the register's own: France and Norway rank by relevance; Finland returns matches in no particular order, so the Actor reads up to three pages of matches and re-ranks them by name similarity — use the Business ID for an exact match.

### Run summary

The run's `OUTPUT` record (key-value store) gives: inputs submitted and run, inputs with no result, companies billed, sole proprietorships withheld, rows with an LEI, requests sent per register, duplicates removed, invalid inputs, and any warning (budget reached, free-plan limit, LEI service unavailable, early stop after too many inputs with no company).

### FAQ

**How do I look up a company by its registration number?**
Paste the number: SIREN/SIRET (France), organisation number (Norway), business ID `1234567-8` (Finland), IČO (Czechia) or a 20-character LEI. The register is chosen automatically from the format.

**Can I search by company name?**
Yes: names are searched in the register set in **country**, or per line with a prefix such as `FR: Decathlon` or `NO: Equinor`.

**Is the UK (Companies House) covered?**
Not directly yet; UK entities with an LEI are found through the worldwide LEI index.

**Does it return directors or contact details?**
No: company data only. No directors, owners, e-mails or phone numbers.

**Is the result an official extract?**
No: for a document with legal value, order it from the register.

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [ATS Jobs Scraper (Greenhouse, Lever, Ashby, SmartRecruiters)](https://apify.com/plainrows/ats-job-postings) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Google Ads Transparency Scraper](https://apify.com/plainrows/google-ads-transparency) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [App Reviews Scraper (Google Play & App Store)](https://apify.com/plainrows/app-reviews-scraper)

### Support

Questions, a register you need (UK, Switzerland, Belgium…), or a field missing? Open an issue on the Actor's **Issues** tab.

# Actor input Schema

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

One per line: a registration number (French SIREN or SIRET, Norwegian organisation number, Finnish Business ID, Czech IČO), an EU VAT number of those countries, an LEI, or a company name. Numbers are routed to the right register automatically. Names are searched in the register chosen below; to pick a register per line, prefix it: "FR: Danone", "NO: Equinor", "FI: Supercell", "CZ: Alza.cz", "LEI: Spotify". Up to 5,000 per run.

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

Where company names are searched (and how numbers are read). National registers list every company of the country; the LEI index covers entities worldwide that have an LEI. A "FR:"-style prefix on a line overrides this.

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

For name searches: how many matching companies to return, best match first. A registration number always returns its one company. Each company returned is billed.

## `activeOnly` (type: `boolean`):

Skip closed, bankrupt or liquidating companies in name searches. Lookups by number always return the company with its status.

## `addLei` (type: `boolean`):

Find each company's Legal Entity Identifier in the GLEIF index from its registration number. Free; makes runs slightly slower.

## Actor input object example

```json
{
  "queries": [
    "552032534",
    "923609016",
    "0112038-9",
    "00177041",
    "Danone"
  ],
  "country": "auto",
  "maxResultsPerQuery": 3,
  "activeOnly": true,
  "addLei": true
}
```

# Actor output Schema

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

No description

## `summary` (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": [
        "552032534",
        "923609016",
        "0112038-9",
        "00177041",
        "Danone"
    ],
    "country": "auto"
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/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": [
        "552032534",
        "923609016",
        "0112038-9",
        "00177041",
        "Danone",
    ],
    "country": "auto",
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/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": [
    "552032534",
    "923609016",
    "0112038-9",
    "00177041",
    "Danone"
  ],
  "country": "auto"
}' |
apify call plainrows/company-registry-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plainrows/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/bBUdKHYnTeDs53axn/builds/4sqvm7Pqjq0F9DyKi/openapi.json
