# Company Registry Lookup (KYB) - Companies House, Sirene, Brreg (`offgrid-labs/company-registry-lookup`) Actor

Company registry lookup (KYB) in official business registers - UK Companies House, France Sirene, Norway Brreg, Finland PRH: search by name or registration number for status, legal form, industry codes, address, VAT and officers in one company record. $3.00 per 1,000 company records.

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

## Pricing

from $3.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

### Company registry lookup (KYB): official company data from Companies House, Sirene, Brreg and PRH

**TL;DR:** Company Registry Lookup finds companies by **name or registration number** in **official government business registers** (UK Companies House, France Sirene/RNE, Norway Brønnøysund and Finland PRH) and returns one unified record per company: registration number, legal name, status, legal form, incorporation date, industry codes, registered address, website, VAT number, employee band, French revenue and net income, and optional officers. It is built for KYB/onboarding, lead enrichment, due diligence, data teams and AI agents. You pay **$3.00 per 1,000 company records**.

All four sources are official public APIs. No browser, no login, no proxy.

### Registers covered

| Register | Country | Key needed? | Licence |
|---|---|---|---|
| Brønnøysund Register Centre - Enhetsregisteret | Norway | No | NLOD 2.0 |
| Recherche d'entreprises (INSEE Sirene + RNE, by api.gouv.fr) | France | No | Licence Ouverte 2.0 |
| PRH / YTJ open data (Finnish Patent and Registration Office) | Finland | No | CC BY 4.0 |
| Companies House Public Data API | United Kingdom | Yes - your own free key | Open Government Licence |

### What data you get

One dataset row per company, with the same fields for every register. Fields a register doesn't publish are `null`.

| Field | What it is | Example |
|---|---|---|
| `registry`, `country` | Register and country | `no-brreg`, `NO` |
| `companyNumber` | Registration number in that register | `923609016` |
| `name`, `previousNames[]` | Legal name and former names | `EQUINOR ASA`, `STATOIL ASA` |
| `status`, `isActive` | Status as published, plus a normalized active flag | `Active`, `true` |
| `legalForm` | Legal form | `ASA - Allmennaksjeselskap` |
| `incorporatedAt`, `dissolvedAt` | Dates (YYYY-MM-DD) | `1972-09-18`, `null` |
| `industryCodes[]`, `industryDescriptions[]` | NACE / SIC / NAF codes and labels | `06.100`, `Utvinning av råolje` |
| `address`, `postalCode`, `city`, `addressCountry` | Registered address | `Forusbeen 50, 4035 STAVANGER` |
| `website`, `phone` | Where published | `www.equinor.com` |
| `employees`, `employeesBand` | Employee count (Norway) or band (France) | `21231` |
| `vatNumber` | VAT number where the register publishes it | `NO923609016MVA` |
| `revenue`, `netIncome`, `financialYear` | Latest published financials (France only) | number or `null` |
| `officers[]` | Optional: name and role only | `null` unless requested |
| `registryUrl`, `query`, `sourceUrl`, `scrapedAt` | Official register page, matching query, API URL, time | `https://virksomhet.brreg.no/...` |

### Use cases

- **KYB and onboarding**: verify that a supplier or customer exists, is active and has the legal form and address they claim.
- **Lead enrichment**: add registration number, industry code, size band, website and VAT to company lists.
- **Due diligence and credit**: spot dissolved, bankrupt or recently renamed companies.
- **Data teams**: one schema for four registers instead of four different APIs.

### How to look up companies

1. Add **Company names or registration numbers**, one per line:
   - Names: `Equinor`, `Danone`, `Nokia`
   - Norway organisasjonsnummer: `923609016`
   - France SIREN or SIRET: `552032534`
   - Finland Business ID (Y-tunnus): `0112038-9`
   - UK company number: `02627406`, `SC123456`
     Registration numbers are looked up directly in the register that uses that format.
2. Choose **Registries**. For the UK, add your free **Companies House API key** (create an application at developer.company-information.service.gov.uk and copy the REST key).
3. Optional: **Active companies only**, **Include officers / directors** (name and role only), **Max results per query per registry**.
4. Click **Start** and export to JSON, CSV or Excel, or read the dataset through the API.

### Input example

```json
{
  "queries": ["Equinor", "Danone", "0112038-9", "02627406"],
  "registries": ["no", "fr", "fi", "uk"],
  "maxResultsPerQuery": 3,
  "activeOnly": true,
  "includeOfficers": false,
  "companiesHouseApiKey": "<your Companies House REST key>"
}
```

### Output example

```json
{
  "registry": "no-brreg",
  "country": "NO",
  "companyNumber": "923609016",
  "name": "EQUINOR ASA",
  "status": "Active",
  "isActive": true,
  "legalForm": "ASA - Allmennaksjeselskap",
  "incorporatedAt": "1972-09-18",
  "dissolvedAt": null,
  "industryCodes": ["06.100", "06.200", "19.200"],
  "industryDescriptions": ["Utvinning av råolje", "Utvinning av naturgass", "Produksjon av raffinerte petroleumsprodukter og fossile brenselsprodukter"],
  "address": "Forusbeen 50, 4035 STAVANGER",
  "postalCode": "4035",
  "city": "STAVANGER",
  "addressCountry": "NO",
  "website": "www.equinor.com",
  "phone": "51 99 00 00",
  "employees": 21231,
  "employeesBand": null,
  "vatNumber": "NO923609016MVA",
  "previousNames": ["Den norske stats oljeselskap a.s", "STATOIL ASA", "STATOILHYDRO ASA"],
  "revenue": null,
  "netIncome": null,
  "financialYear": null,
  "officers": null,
  "registryUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016",
  "query": "Equinor",
  "sourceUrl": "https://data.brreg.no/enhetsregisteret/api/enheter?navn=Equinor&size=3",
  "scrapedAt": "2026-11-03T01:31:33.211Z"
}
```

Fields a register does not publish are `null` (for example, revenue is only available from the French register, employee counts from Norway). A per-query summary is saved in the key-value store record `RUN_SUMMARY`.

### How much does a company registry lookup cost?

Pay per event: one charge per company record saved. Compute and proxy costs are included. The price is the same on every Apify plan.

| Event | Charged when | Price |
|---|---|---|
| `result` | One company record saved | **$3.00 per 1,000** ($0.003 each) |
| `apify-actor-start` | Once per run (Apify's standard start fee) | $0.00005 |

**Worked examples**

- **1,000 company records** = 1,000 × $0.003 = **$3.00** (+ $0.00005 start fee).
- Enriching a list of 5,000 companies by registration number (one record each): **$15.00**.
- Name searches return up to **Max results per query per registry** records per register, so 100 names × 3 registers × 1 result = up to 300 records = up to **$0.90**.

Set **Maximum cost per run** in the run options; the actor stops cleanly at the limit.

### How it compares

| | This actor | Calling each register's API yourself | Commercial KYB / company-data platforms |
|---|---|---|---|
| Registers in one schema | 4 (UK, FR, NO, FI) | One integration per register | Many countries |
| Source | Official registers, live at run time | Same | Aggregated, often enriched |
| Officers | Name and role (optional) | Varies | Often more detail |
| Countries without an open register API | Not covered | n/a | Often covered |
| Cost | $3.00 per 1,000 records, pay as you go | Free + your time and hosting | Subscription / per check |

### FAQ

#### How do I look up a UK company on Companies House?

Select the `uk` registry, add your free Companies House API key, and enter the company name or number (`02627406`, `SC123456`). Keys are rate-limited to 600 requests per 5 minutes; the actor stays below that.

#### How do I check a French company by SIREN or SIRET?

Enter the 9-digit SIREN or 14-digit SIRET with the `fr` registry selected. French records include NAF codes, employee band and, where published, latest revenue and net income.

#### How do I verify that a company is active (KYB)?

Look up its registration number and check `status` and `isActive`, plus `legalForm` and the registered address. Turn on **Active companies only** to drop dissolved, bankrupt or ceased companies from name searches.

#### Why do name searches return similar names?

Registers use fuzzy name search. Keep **Max results per query per registry** low for the best matches, or use registration numbers for exact lookups.

#### Are personal data included?

Only what the registers publish about companies. Officers are optional and limited to name and role; birth dates, nationalities and home addresses are never included. Sole-proprietorship names can be personal names; if you process those, you are the data controller (GDPR).

#### Why do I need a key for the UK?

Companies House requires a free API key for its public data API. It is stored encrypted and only sent to Companies House.

#### Which other countries are supported?

Only registers that offer an official open API are used: the UK, France, Norway and Finland today. Open an issue with the register you need; more can be added where an open API exists.

#### Is it legal to use company registry data?

All sources are official open-data APIs: Norway (NLOD 2.0), France (Licence Ouverte 2.0), Finland (CC BY 4.0) and UK Companies House (Open Government Licence, with your own key). Attribution: data from the Brønnøysund Register Centre, INSEE/INPI via api.gouv.fr, the Finnish Patent and Registration Office, and Companies House.

#### Can an AI agent use this company lookup?

Yes. Through the Apify MCP server an agent can find it with `search-actors`, read the input schema and run it, for example "is this supplier's company number active, and what is its registered address?". See **Integrations**.

#### Something wrong?

Open an issue on the Issues tab; we aim to respond within 24 hours.

### Integrations

- **API**: `POST https://api.apify.com/v2/acts/offgrid-labs~company-registry-lookup/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>` with the input JSON as the body returns the records directly (runs under 5 minutes; otherwise start a run and read its dataset).
- **Python / JavaScript**: `pip install apify-client` / `npm install apify-client`, then `client.actor("offgrid-labs/company-registry-lookup").call(run_input={...})`.
- **No-code**: Apify's integrations for **Make**, **Zapier** and **n8n**, plus Google Sheets, CRM webhooks and Schedules (for example enrich new CRM accounts with registry data).
- **MCP / AI agents**: add `https://mcp.apify.com?tools=offgrid-labs/company-registry-lookup` to your MCP client to expose this actor as a tool.

### Changelog

- **2026-11-03** · README restructured (register and data tables, cost examples, comparison, FAQ, integrations); input field descriptions rewritten with formats, defaults and examples for AI agents; output schema and dataset views described. Removed an incorrect line about plan discounts: the price is a flat $3.00 per 1,000 records on every plan.
- **2026-11-03** · Output schema with Overview and All fields views; Store title aligned with search intent.
- **2026-11-03** · First release: Norway Brreg, France Recherche d'entreprises (Sirene + RNE), Finland PRH/YTJ, UK Companies House (your key); name and number lookup, active filter, optional officers.

### Related actors

| Actor | What it does |
|---|---|
| Tech Stack Detector | Technology profile (CMS, e-commerce, analytics, hosting) of a company's website |
| ATS Jobs Scraper | Open jobs at the same companies (Greenhouse, Lever, Ashby, Workable) |
| SEC EDGAR Scraper | Filings, insider trades and XBRL financials for US-listed companies |

***

```
// OFFGRID LABS ─────────────────────────────────────────────
// status: monitored 24/7 by a self-hosted agent swarm
// health checks: every 6h · auto-repair + rollback on failure
// sources: official public APIs and open data only
// support: open an issue — human-reviewed response within 24h
// ───────────────────────────────────────────────────────────
```

# Actor input Schema

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

Required. One per line: a company name (Equinor, Danone, Nokia) or a registration number - Norwegian organisasjonsnummer (923609016), French SIREN/SIRET (552032534), Finnish Business ID / Y-tunnus (0112038-9), UK company number (02627406, SC123456). Numbers are looked up directly in the register that uses that format; names are searched in every selected register.

## `registries` (type: `array`):

Official registers to search: no = Norway Brreg (Enhetsregisteret), fr = France Sirene/RNE (Recherche d'entreprises), fi = Finland PRH/YTJ, uk = UK Companies House (needs your free API key below). Default \["no", "fr", "fi"]. Each query is searched in every selected register.

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

Best name-search matches kept per query in each register (1-100). Default 5. Registration-number lookups return one company. One company = one dataset row = one charged result. Example: 1 for the single best match

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

If true, skip dissolved, deleted, bankrupt or ceased companies. Default false (return all statuses).

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

If true, adds an officers list (name and role only; birth dates and home addresses are never included). Uses extra requests for Norway and the UK. Default false.

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

Required only for the uk registry. Your own free REST API key from developer.company-information.service.gov.uk (Register > Create application > REST key). Stored encrypted; sent only to Companies House.

## Actor input object example

```json
{
  "queries": [
    "Equinor",
    "Danone",
    "0112038-9"
  ],
  "registries": [
    "no",
    "fr",
    "fi"
  ],
  "maxResultsPerQuery": 3,
  "activeOnly": false,
  "includeOfficers": false
}
```

# Actor output Schema

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

All company rows with every field, including officers when requested.

## `overview` (type: `string`):

Compact table: registry, company number, name, status, legal form, incorporation date, industry codes, city, website and registry link.

# 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",
        "Danone",
        "0112038-9"
    ],
    "registries": [
        "no",
        "fr",
        "fi"
    ],
    "maxResultsPerQuery": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("offgrid-labs/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",
        "Danone",
        "0112038-9",
    ],
    "registries": [
        "no",
        "fr",
        "fi",
    ],
    "maxResultsPerQuery": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("offgrid-labs/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",
    "Danone",
    "0112038-9"
  ],
  "registries": [
    "no",
    "fr",
    "fi"
  ],
  "maxResultsPerQuery": 3
}' |
apify call offgrid-labs/company-registry-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,offgrid-labs/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/JDOXaaT7mUKocJXAY/builds/8WQGr2U3puQwKy3S5/openapi.json
