# Company Registry Search — Companies House, SIRENE, Brreg & more (`cleandata/european-company-registry`) Actor

Company data from official business registers: UK Companies House, France SIRENE, Norway Brreg, Finland PRH/YTJ and Czech ARES. Search by name, NACE/SIC activity or incorporation date, or look up company numbers. VAT number, status, address, directors. For KYC and leads.

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

## Pricing

from $5.00 / 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.

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

## European Company Registry Search — UK, France, Norway, Finland, Czech Republic

Search **official company registers** in several European countries with one Actor and get **one consistent output format**: company number, **VAT number**, legal form, status, incorporation date, registered address, **NACE/SIC activity codes**, employee range, website and, optionally, **directors and officers**.

| Country | Official register |
|---|---|
| 🇬🇧 United Kingdom | Companies House |
| 🇫🇷 France | INSEE SIRENE + RNE (via the government's open API) |
| 🇳🇴 Norway | Brønnøysund Register Centre |
| 🇫🇮 Finland | Finnish Patent and Registration Office (PRH / YTJ) |
| 🇨🇿 Czech Republic | ARES (Ministry of Finance) |

**Reliable by design:** the data comes straight from official government registers and open-data APIs, not from third-party aggregators. Filters run *before* billing, so you only pay for companies that match.

### What can you use it for?

- **Lead generation:** list every active company in an industry, for example all bakeries (`10.71`) or software companies (`62.01`) incorporated this year.
- **KYC and due diligence:** verify a company's status, registered address, VAT number and directors.
- **CRM enrichment:** add company numbers, legal forms and activity codes to your accounts.
- **Market research:** count new companies by industry and country.
- **Monitoring new businesses:** schedule a weekly run with *Incorporated on or after* to catch new companies in your sector.

### Sample results

A few bakeries from real runs (the registered address, status, source link and, optionally, the officers are in the output too):

| Country | Company number | Name | Legal form | Incorporated | City | Activity | VAT number | Employees |
|---|---|---|---|---|---|---|---|---|
| 🇬🇧 | SC451157 | MONTAGU BAKERY LIMITED | Private limited company | 2013-05-30 | Edinburgh | 10710 | – | – |
| 🇫🇷 | 403052111 | BOULANGERIES PAUL | SAS | 1995-12-07 | Marcq-en-Barœul | 10.71A | FR32403052111 | 500-999 |
| 🇫🇷 | 572045540 | PATISSERIE E.LADUREE | SAS | 1957-01-01 | Paris | 10.71D | FR22572045540 | 500-999 |
| 🇳🇴 | 916133774 | LEVAIN THE BAKERY AS | Aksjeselskap | 2015-10-12 | Levanger | 10.710 | NO916133774MVA | 24 |
| 🇫🇮 | 0195727-7 | Haagan Leipä Oy | Limited company | 1956-08-03 | Helsinki | 10710 | FI01957277 | – |

### How much does it cost?

You pay per result, with no monthly rental:

| What | Price |
|---|---|
| Company | $5 per 1,000 companies ($0.005 each) |
| Directors and officers (optional) | $3 per 1,000 companies |

Companies removed by your filters are never charged. Apify's free plan includes $5 of monthly credit, which covers about 1,000 companies a month. You can also set a maximum cost per run in the run options.

### How to use it

1. Click **Try for free** and sign in to Apify (no credit card needed).
2. Pick the countries.
3. Search by name, by activity code (for example `10.71` for bakeries), or both, or paste company numbers to look up. Optionally add *Incorporated on or after*.
4. Click **Start**. When the run finishes, download the results as JSON, CSV or Excel, or send them to Google Sheets, your CRM or your own system.

### Input

| Field | Description |
|---|---|
| **Countries** | GB, FR, NO, FI, CZ. |
| **Company name contains** | Words in the company name (`bakery`, `boulangerie`, `bakeri`, `leipomo`, `pekárna`). Local-language terms work best. |
| **Activity codes (NACE / SIC)** | NACE codes such as `10.71`, `62.01` or `56.10`. The Actor translates them to each country's system (UK SIC with its subclasses, French NAF, Norwegian SN2025, Finnish TOL, CZ-NACE) and also searches the renumbered codes from NACE Rev. 2.1 where a register already switched (for example, software development `62.01` became `62.10`), using the official Rev. 2 → Rev. 2.1 correspondence. |
| **Incorporated on or after** | Only companies registered on or after this date. |
| **Active companies only** | Skip dissolved, bankrupt and liquidated companies (on by default). |
| **Look up company numbers** | `GB:00445790`, `FR:478455793`, `NO:931320270`, `FI:0187176-4`, `CZ:00529974`. |
| **Include directors and officers** | Current directors and officers with role and appointment date (UK, FR, NO, CZ). Extra event. |
| **Max companies per search / in total** | Limits for each country × name × activity combination and for the whole run. |

```json
{
    "countries": ["GB", "FR", "NO", "FI", "CZ"],
    "activityCodes": ["10.71"],
    "incorporatedAfter": "2026-01-01",
    "activeOnly": true,
    "maxResultsPerSearch": 500
}
```

### Output

```json
{
    "country": "GB",
    "registry": "Companies House",
    "companyNumber": "SC548639",
    "vatNumber": null,
    "name": "BHAILE CRAFT BAKERY LTD",
    "tradingNames": [],
    "legalForm": "Private limited company",
    "status": "active",
    "statusDetail": "Active",
    "incorporationDate": "2016-10-26",
    "dissolutionDate": null,
    "address": {
        "street": "10 Inverkar Road",
        "postalCode": "KA7 2JT",
        "city": "Ayr",
        "region": "Scotland",
        "full": "10 Inverkar Road, Ayr, Scotland KA7 2JT"
    },
    "latitude": null,
    "longitude": null,
    "activityCodes": ["10710"],
    "naceCodes": ["10.71"],
    "activityDescription": null,
    "employees": null,
    "website": null,
    "email": null,
    "phone": null,
    "sourceUrl": "https://find-and-update.company-information.service.gov.uk/company/SC548639",
    "searchTerm": "bakery",
    "searchActivity": null,
    "officers": [
        { "name": "SMITH, Jane", "role": "Director", "appointedOn": "2016-10-26", "type": "person" }
    ]
}
```

#### What each register provides

| Field | 🇬🇧 | 🇫🇷 | 🇳🇴 | 🇫🇮 | 🇨🇿 |
|---|---|---|---|---|---|
| VAT number | – | ✓ (calculated from SIREN) | ✓ (if VAT-registered) | ✓ (if VAT-registered) | ✓ |
| Activity codes | SIC 2007 | NAF rév. 2 | SN2025 (NACE 2.1) | TOL 2008 / 2025 | CZ-NACE (2025) |
| Activity description | lookups only | – | ✓ | ✓ | – |
| Employee range | – | ✓ | ✓ | – | – |
| Website / email / phone | – | – | ✓ (when registered) | website | – |
| Coordinates | – | ✓ | – | – | – |
| Directors and officers | ✓ | ✓ | ✓ | – | ✓ |

`activityCodes` keeps each register's own codes; `naceCodes` reduces them to the NACE class every country shares (`10.71`, `62.10`…), so you can sort and merge results across countries. Norway, Finland and the Czech Republic already use NACE Rev. 2.1 classes, the UK and France Rev. 2. With an activity search, every company returned really has that activity code (some registers match codes loosely, and the Actor double-checks before billing).

`status` is always `active` or `inactive`; `statusDetail` keeps the register's own wording (for example "Bankrupt", "In liquidation", "Active — Active proposal to strike off").

### Limits

- Each register caps how many results one search returns: about 5,000 for Companies House, 10,000 for France and Norway, and 1,000 for ARES. Large Czech searches are split automatically by legal form, which covers about 97% of companies. For bigger lists, combine activity codes with names or dates.
- France and the Czech Republic can't filter by incorporation date at the source. With *Incorporated on or after*, the Actor scans their results and keeps only new companies, so these searches take longer (you are still only charged for the companies you get).
- A few NACE Rev. 2 classes were split into many classes in Rev. 2.1 (for example, online retail `47.91`). The Actor warns you when you use one of them: in Norway, Finland and the Czech Republic, add the new codes you need.
- Finland's open API does not publish directors.
- Officer data contains names and roles only: no birth dates or home addresses. If you process personal data about officers, you are responsible for complying with GDPR.

### Coming next

Netherlands, Belgium and Poland, then Germany. Want another country first? Open an issue.

### FAQ

**Where does the data come from?** From the official registers listed above, through their public websites and open-data APIs.

**Do I need API keys?** No.

**Is it legal to use this data?** Yes, in general: these are official public registers, and most of them publish their data as open data for reuse. Officer names are personal data, so if you store or contact officers, the GDPR applies to you. When in doubt, ask a lawyer.

**Can I run it from my own code?** Yes, through the Apify API. In Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("cleandata/european-company-registry").call(
    run_input={"countries": ["GB", "FR"], "activityCodes": ["62.01"], "incorporatedAfter": "2026-01-01", "maxResults": 200}
)
for company in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(company["country"], company["companyNumber"], company["name"])
```

The same works in JavaScript (`apify-client`) or with plain HTTP. See the *API* tab on this page.

**Something broke or you need a field?** Open an issue on the Actor's Issues tab. Feature requests are welcome.

# Actor input Schema

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

Registers to search.

## `searchTerms` (type: `array`):

Words in the company name, e.g. <code>bakery</code>, <code>boulangerie</code>, <code>consulting</code>. Use the local language for best results.

## `activityCodes` (type: `array`):

Industry codes in NACE format, e.g. <code>10.71</code> (bakeries), <code>62.01</code> (software development), <code>56.10</code> (restaurants). They are translated to each country's system (UK SIC, French NAF, Norwegian SN2007, Finnish TOL, Czech CZ-NACE). Combine with names or use alone.

## `incorporatedAfter` (type: `string`):

Only companies incorporated (registered) on or after this date — great for finding new companies as leads.

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

Skip dissolved, bankrupt and liquidated companies.

## `companyNumbers` (type: `array`):

Company numbers prefixed with the country code: <code>GB:00445790</code>, <code>FR:478455793</code> (SIREN), <code>NO:931320270</code>, <code>FI:0187176-4</code>, <code>CZ:00529974</code> (IČO).

## `includeOfficers` (type: `boolean`):

Add current directors, managers and other officers (name, role, appointment date) where the register publishes them (UK, FR, NO, CZ). Charged as an extra event.

## `maxResultsPerSearch` (type: `integer`):

Limit for each country × name × activity combination (0 = as many as the register returns).

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

Limit for the whole run (0 = no limit).

## `proxyConfiguration` (type: `object`):

Proxy settings. The default works in most cases.

## Actor input object example

```json
{
  "countries": [
    "GB",
    "FR",
    "NO",
    "FI",
    "CZ"
  ],
  "searchTerms": [
    "bakery"
  ],
  "activeOnly": true,
  "includeOfficers": false,
  "maxResultsPerSearch": 25,
  "maxResults": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `companies` (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 = {
    "countries": [
        "GB",
        "FR",
        "NO",
        "FI",
        "CZ"
    ],
    "searchTerms": [
        "bakery"
    ],
    "maxResultsPerSearch": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cleandata/european-company-registry").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 = {
    "countries": [
        "GB",
        "FR",
        "NO",
        "FI",
        "CZ",
    ],
    "searchTerms": ["bakery"],
    "maxResultsPerSearch": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("cleandata/european-company-registry").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 '{
  "countries": [
    "GB",
    "FR",
    "NO",
    "FI",
    "CZ"
  ],
  "searchTerms": [
    "bakery"
  ],
  "maxResultsPerSearch": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call cleandata/european-company-registry --silent --output-dataset

```

## MCP server setup

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

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/eBYl1af3GMbJPkt8L/builds/rioCCZPSJSPJSpSV2/openapi.json
