# Company Registry Lookup: Official Records, EU, UK & US (`subtleasianmerch/company-registry-lookup`) Actor

Look up official company records in 7 government registries: France, Norway, Finland, Czechia, Poland, US SEC and UK. Search by name or number for status, legal form, address and VAT ID. No data about people. $2 per 1,000 companies.

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

## Pricing

from $2.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: Official Records, EU, UK & US

Check a company against its **official government registry** in France, Norway, Finland, Czechia, Poland, the US (SEC EDGAR) or the UK (Companies House). Search by name or registration number, and get status, legal form, address, industry codes and VAT ID in one format.

- 🏛️ **7 official government registries,** read through their own open APIs. Only the UK needs a key: your own free one.
- 🔎 **Search by name or look up by number:** SIREN, organisasjonsnummer, Y-tunnus, IČO, KRS number, CIK or UK company number.
- 📋 **One format for every country:** status, legal form, start date, address, industry codes, VAT ID and a registry link.
- 🚫 **No data about people:** no directors, officers or shareholders. Sole traders are left out unless you ask.
- 📜 **The data licence and credit line on every row,** so you know how you may reuse it.
- 💸 **$2 per 1,000 companies.** Names with no match, skipped countries and failed lookups are free.

**Try it:** the input comes pre-filled with an example. Click **Start** to search "Nokia" in Finland, Norway and France and to look up three companies by number. Then add your own names and numbers.

### What you get

One row per company, in the same format whichever registry it comes from.

| Data | Fields |
|---|---|
| Identity | country, registry, the registry's number for the company and its kind (SIREN, KRS and so on); name, and former, trade and parallel names |
| Status | `active`, `inactive` or `dissolved`, plus the registry's own wording, such as "Konkurs" or "W likwidacji" |
| Legal form and dates | legal form as text and as the registry's code; incorporation and dissolution dates |
| Address | registered or business address: street, postal code, city, region and country |
| Industry | industry codes with descriptions: NAF, Norwegian NACE, TOL, CZ-NACE, PKD or SIC |
| Size | employees: an exact number in Norway, a size band in France |
| IDs and links | website, VAT ID and other IDs (SIRET, REGON, NIP, DIČ, EIN, LEI, EUID) where given; a link to the registry's page and the API address of the record |
| Reuse | the data licence, its link and the credit line it asks for |
| Search | what you searched for, how it matched, and when the record was read |

**The registries:**

| Country | Registry | By name | By number | Key needed |
|---|---|---|---|---|
| France | Sirene and the national business register (RNE), through API Recherche d'entreprises | Yes | SIREN (or a SIRET) | No |
| Norway | Enhetsregisteret, Brønnøysund Register Centre | Yes | Organisasjonsnummer | No |
| Finland | Trade Register and YTJ, Finnish Patent and Registration Office (PRH) | Yes | Y-tunnus | No |
| Czech Republic | ARES, Ministry of Finance | Yes | IČO | No |
| Poland | National Court Register (KRS), Ministry of Justice | No | KRS number | No |
| United States | SEC EDGAR (companies that file with the SEC) | Yes | CIK | No |
| United Kingdom | Companies House | Yes | Company number | Your own free key |

Every run also saves a `RUN_SUMMARY` record: each search and lookup with its status, the companies delivered, and the reason for anything skipped.

### Who it's for

- **Sales and finance teams:** check that a customer or supplier exists, is active and has the VAT ID they gave you.
- **Compliance and KYB analysts:** confirm a company's legal form, registered address and status from the official source.
- **Data teams:** clean up and enrich company lists with official IDs, industry codes and addresses.
- **Researchers and journalists:** find companies across several countries in one run, in one format.
- **App builders:** add company lookups to a form, CRM or onboarding flow through the Apify API.

### How much does it cost?

Pay per event: you pay per company delivered, plus Apify's start fee per run.

| Event | Price |
|---|---|
| Company delivered | $2 per 1,000 ($0.002 each) |
| Run start | Apify's standard start fee |

**Examples:**

- **1,000 companies delivered:** 1,000 × $0.002 = **$2**, plus the start fee.
- **Checking 500 suppliers by number,** 480 of them found: 480 × $0.002 = **$0.96**, plus the start fee. The 20 not found are free.
- **Searching 100 names in 3 countries,** up to 5 matches each: at most 1,500 companies, so at most **$3.00**. Names with fewer matches cost less, and names with no match are free.

**Free:**

- names with no match, and numbers not found;
- countries skipped: Poland by name, and the UK without a key;
- searches a registry blocked or failed;
- companies left out by your filters: inactive companies, sole traders, and people filing with the SEC.

**Spending limit:** set a maximum cost per run in the run options. The run stops cleanly at that amount, even with several registries running side by side.

### How to use it

1. **Add company names** under **Company names**, one per line, such as `Danone`. Choose the **Countries to search the names in**; each name is searched in each country.
2. **Add registration numbers** under **Registration numbers**, one per line, with the country first, such as `FR:552032534` or `NO:923609016`. For a list from one country, choose it under **Country for numbers without a prefix**, then paste bare numbers.
3. **Set the options:** **Most companies per name and country** gives the best matches first (default 10). **Include inactive and dissolved companies** and **Include sole traders** are off by default.
4. **For the UK,** paste your own free Companies House API key (see the FAQ). Set a maximum cost in the run options, then click **Start**.
5. **View and download the results.** The **Companies** table shows country, number, name, status, legal form, date, address, VAT ID and registry link. Export as JSON, CSV or Excel.

**Number formats:**

| Country | Example | Number |
|---|---|---|
| France | `FR:552032534` | SIREN, or a 14-digit SIRET |
| Norway | `NO:923609016` | Organisasjonsnummer |
| Finland | `FI:0112038-9` | Y-tunnus |
| Czech Republic | `CZ:27082440` | IČO |
| Poland | `PL:0000019193` | KRS number |
| United States | `US:320193` | CIK |
| United Kingdom | `UK:00445790` | Company number |

### Example input

**Check a supplier list by registration number:**

```json
{
  "registrationNumbers": ["FR:552032534", "NO:923609016", "FI:0112038-9", "CZ:27082440", "PL:0000019193", "US:320193"]
}
```

**Find bakeries in Norway and the Czech Republic, including closed ones:**

```json
{
  "searches": ["Sentrum bakeri", "Pekárna"],
  "countries": ["NO", "CZ"],
  "maxResultsPerSearch": 25,
  "includeInactive": true
}
```

**Search the UK with your own key, and France:**

```json
{
  "searches": ["Tesco"],
  "countries": ["UK", "FR"],
  "maxResultsPerSearch": 5,
  "companiesHouseApiKey": "YOUR_COMPANIES_HOUSE_KEY"
}
```

### Example output

One row per company. This is a real record from Norway's registry, shortened:

```json
{
  "country": "NO",
  "countryName": "Norway",
  "registry": "Enhetsregisteret (Brønnøysundregistrene)",
  "companyId": "923609016",
  "idType": "Organisasjonsnummer",
  "name": "EQUINOR ASA",
  "otherNames": ["Den norske stats oljeselskap a.s", "STATOIL ASA", "STATOILHYDRO ASA"],
  "status": "active",
  "registryStatus": "Registrert i Foretaksregisteret",
  "legalForm": "Allmennaksjeselskap",
  "legalFormCode": "ASA",
  "incorporationDate": "1972-09-18",
  "dissolutionDate": null,
  "address": { "street": "Forusbeen 50", "postalCode": "4035", "city": "STAVANGER", "region": null, "country": "Norway", "countryCode": "NO", "full": null },
  "industryCodes": [
    { "scheme": "SN (Norwegian NACE)", "code": "06.100", "description": "Utvinning av råolje", "primary": true },
    { "scheme": "SN (Norwegian NACE)", "code": "06.200", "description": "Utvinning av naturgass", "primary": false }
  ],
  "employeeCount": 21231,
  "employeeBand": null,
  "website": "https://www.equinor.com",
  "vatId": "NO923609016MVA",
  "otherIds": {},
  "marketingOptOut": null,
  "details": { "registeredDate": "1995-03-12", "sector": "Statlig eide aksjeselskaper mv.", "partOfGroup": true, "lastAnnualAccounts": "2025", "municipality": "STAVANGER" },
  "registryUrl": "https://virksomhet.brreg.no/nb/oppslag/enheter/923609016",
  "source": "https://data.brreg.no/enhetsregisteret/api/enheter/923609016",
  "licence": "Norwegian Licence for Open Government Data (NLOD) 2.0",
  "licenceUrl": "https://data.norge.no/nlod/en/2.0",
  "attribution": "Contains data under the Norwegian licence for Open Government data (NLOD) distributed by Brønnøysundregistrene",
  "searchedFor": "Equinor",
  "matchType": "name",
  "fetchedAt": "2026-10-31T12:04:10.000Z"
}
```

### Integrations

- **Schedules:** re-check a customer or supplier list every week or month, with the same input.
- **API:** look companies up from your own code, form or onboarding flow (example below).
- **Webhooks:** have Apify call your URL when a run finishes, then read that run's dataset.
- **Make, Zapier and n8n:** pass the records on to a CRM or spreadsheet with Apify's apps for these tools.
- **Monitoring:** Apify's monitoring can alert you when a scheduled run fails.

#### Run it from the API

```bash
curl -X POST "https://api.apify.com/v2/acts/subtleasianmerch~company-registry-lookup/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"registrationNumbers": ["FR:552032534", "NO:923609016", "CZ:27082440"]}'
```

The call runs the Actor and returns the companies as a JSON array. Replace `YOUR_TOKEN` with your Apify API token, from Apify Console under Settings → API & Integrations.

### Good to know

#### About the fields

- `status`: `active`; `inactive` for bankrupt, in liquidation or being wound up; `dissolved` for deleted, ceased or removed. It's `null` for SEC filers, as EDGAR has no company status. `registryStatus` keeps the registry's own words.
- `incorporationDate`: for Poland, the date of entry in the KRS; for SEC filers, `null`.
- `industryCodes`: each registry's own scheme, with descriptions in the registry's language. Czech codes have no "primary" flag (`primary: null`).
- `vatId`: France's VAT number; Norway's and Finland's when the company is VAT-registered; the Czech DIČ when the company is a VAT payer.
- `marketingOptOut` (France only): `true` means the company objected to the use of its data for commercial prospecting.
- `details`: a few facts only one registry has. Examples: tickers and the last filing date for SEC filers, or the KRS register for Poland.
- `registryUrl`: `null` for Poland, as the KRS search site has no link per company.

**Dataset view:** **Companies** shows the country, number, name, status, legal form, date, address, VAT ID, registry link and what you searched for.

**Run summary:** the `RUN_SUMMARY` record in the run's key-value store lists each search and lookup with:

- its status: `ok`, `no match`, `not found`, `left out`, `skipped`, `failed` or `not run`;
- the companies delivered, and the matches left out by your filters;
- the reason for anything not delivered.

It also lists each registry with its status and number of requests.

#### Coverage and limits

- **No data about people.** Directors, officers, shareholders and beneficial owners are never read into the output. Poland's extracts include anonymised board members; they're dropped. "c/o" (care of) parts of addresses are dropped too, because they can name a person.
- **Sole traders are left out by default.** A sole trader's record is about one person, often with a home address. The Actor recognises them in France (entrepreneur individuel), Norway (ENK) and the Czech Republic (natural persons). Turn on **Include sole traders** only if you have a lawful reason.
- **Finland has no sole traders in its open data.** PRH's open data covers the Trade Register "except private traders".
- **Poland: by number only.** The KRS API has no name search. Polish companies removed from the KRS have no current extract, so they show as "not found".
- **The UK needs your own free Companies House key.** Without it, UK searches and numbers are skipped and free. Your key is stored as a secret input and never logged.
- **The UK is tested against Companies House's documented answer format,** not yet with a real key.
- **SEC EDGAR covers SEC filers only.** That's mainly public companies, funds and their issuers, not every US business. People who file with the SEC, such as company insiders, are left out.
- **Name matching differs by registry.** France, Norway and the UK rank matches themselves. Finland, the Czech Republic and the SEC list matches in number or alphabetical order. The Actor ranks those by how closely the name matches. The SEC only finds names that start with your words.
- **Lookups by number** always return inactive companies. Name searches leave them out unless you turn on **Include inactive and dissolved companies**.
- **French data protection:** if `marketingOptOut` is `true`, the company has objected to the use of its data for commercial prospecting. Don't use it for marketing. Companies that refused publication aren't in the French open data at all.
- **Licences and credit:** each row carries its licence and the credit line it asks for. France: Licence Ouverte 2.0. Norway: NLOD 2.0. Finland: CC BY 4.0. SEC EDGAR: public information. The Czech, Polish and UK registries publish their data for reuse without a named licence. Keep the `attribution` text when you publish the data.
- **Speed and politeness:** one request a second per registry, five a second for the SEC. Registries run side by side. A lookup by number takes one request, two at most for Poland. The Actor says it's a bot in every request.
- **No evasion.** If a registry asks it to slow down, the Actor waits and retries. If a registry blocks it, that registry stops, the others continue, and the summary says so.

#### Test runs on Apify (31 October 2026)

- **Prefilled example:** 12 companies in 6 requests, 4 seconds.
- **5 names in France, Norway, Finland, the Czech Republic and the US:** 77 companies in 10 seconds. 2 searches with no match were free.
- **Numbers in every country:** 10 companies. A missing IČO and a removed KRS entity came back "not found", free.

### FAQ

#### Is it legal to use?

The Actor reads open government APIs that publish company records for reuse. Each registry's reuse terms were read on 31 October 2026, and none forbade this kind of reuse. The conditions they set:

- keep each row's `attribution` credit line when you publish the data;
- don't use the PRH or Finnish Business Information System logos;
- don't use French companies with `marketingOptOut: true` for marketing;
- sole traders' records are personal data, so data-protection law such as GDPR applies if you turn them on.

Check that your own use complies with the law and each registry's terms where you are.

#### Do I need any accounts or keys?

No, except for the UK. France, Norway, Finland, the Czech Republic, Poland and the SEC are open.

#### How do I get a Companies House key?

Register at developer.company-information.service.gov.uk, create an application, and add a REST API key to it. It's free. Paste the key into **Companies House API key**.

#### Why does the SEC search miss my company?

EDGAR only has companies that file with the SEC. Its search matches names that start with your words. Try the company's full name, or look it up by CIK.

#### Why is a company missing from a name search?

By default, name searches leave out inactive companies and sole traders. Turn on the two options, or look the company up by number: lookups by number always return inactive companies.

#### Can I get directors or shareholders?

No. The Actor is built to leave out data about people.

#### Should I add my email for the SEC?

It's optional. The SEC asks automated tools to identify themselves. The Actor sends an honest bot name, which the SEC accepted in tests. Adding your email follows the SEC's guidance more closely. It's sent only to sec.gov.

#### How fresh is the data?

Each record is read live from the registry's API during your run. `fetchedAt` shows when.

### Related Actors

More Actors from the same developer that work well with this one:

| Actor | Use it to |
|---|---|
| [Domain Availability Checker](https://apify.com/subtleasianmerch/domain-availability-checker) | check whether a business name's web addresses are still free |
| [Career Site Jobs Monitor](https://apify.com/subtleasianmerch/career-site-jobs-monitor) | see which jobs the companies you looked up are hiring for |

Questions, bugs or ideas? Open an issue on this Actor's **Issues** tab.

# Actor input Schema

## `searches` (type: `array`):

Names to search, one per line, e.g. Nokia. Each name is searched in every country chosen below. Up to 500 per run.

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

Registries to search the company names in. Poland can't be searched by name (look up KRS numbers instead). The United Kingdom needs your Companies House API key, below.

## `registrationNumbers` (type: `array`):

One per line, with the country first: FR:552032534 (SIREN), NO:923609016 (organisasjonsnummer), FI:0112038-9 (Y-tunnus), CZ:27082440 (IČO), PL:0000019193 (KRS), US:320193 (CIK) or UK:00445790 (company number). Up to 5,000 per run.

## `numbersCountry` (type: `string`):

Lets you paste bare numbers, e.g. 552032534, when they're all from one country. Numbers with a prefix like NO: keep their own country.

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

Best matches first. Each company delivered is charged; a name with no match is free.

## `includeInactive` (type: `boolean`):

Name searches leave out companies that are bankrupt, in liquidation, dissolved or removed. Turn on to include them. Lookups by number always return the company, whatever its status.

## `includeSoleTraders` (type: `boolean`):

A sole trader's record is about one person (their name and often their home address), so it's left out by default. Turn on only if you have a lawful reason to process it.

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

Your own free key from developer.company-information.service.gov.uk (create an application, then a REST API key). Without it, UK searches and numbers are skipped, free. The key is stored encrypted and never logged.

## `secContactEmail` (type: `string`):

The SEC asks automated tools to identify themselves. The Actor already sends an honest bot name, and that worked in tests; adding your email to it follows the SEC's guidance more closely. It's sent only to sec.gov, in the request's user agent.

## Actor input object example

```json
{
  "searches": [
    "Nokia"
  ],
  "countries": [
    "FI",
    "NO",
    "FR"
  ],
  "registrationNumbers": [
    "NO:923609016",
    "PL:0000019193",
    "US:320193"
  ],
  "maxResultsPerSearch": 3,
  "includeInactive": false,
  "includeSoleTraders": false
}
```

# Actor output Schema

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

The dataset rows this run produced.

## `runSummary` (type: `string`):

Counts, costs and anything skipped, saved as RUN_SUMMARY.

# 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 = {
    "searches": [
        "Nokia"
    ],
    "countries": [
        "FI",
        "NO",
        "FR"
    ],
    "registrationNumbers": [
        "NO:923609016",
        "PL:0000019193",
        "US:320193"
    ],
    "maxResultsPerSearch": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("subtleasianmerch/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 = {
    "searches": ["Nokia"],
    "countries": [
        "FI",
        "NO",
        "FR",
    ],
    "registrationNumbers": [
        "NO:923609016",
        "PL:0000019193",
        "US:320193",
    ],
    "maxResultsPerSearch": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("subtleasianmerch/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 '{
  "searches": [
    "Nokia"
  ],
  "countries": [
    "FI",
    "NO",
    "FR"
  ],
  "registrationNumbers": [
    "NO:923609016",
    "PL:0000019193",
    "US:320193"
  ],
  "maxResultsPerSearch": 3
}' |
apify call subtleasianmerch/company-registry-lookup --silent --output-dataset

```

## MCP server setup

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