# Company Registry Lookup, 7 Countries (`gubidonius/company-registry-lookup`) Actor

Look up a company in seven national business registers and get one row back in the same shape every time. Official government APIs, no personal data.

- **URL**: https://apify.com/gubidonius/company-registry-lookup.md
- **Developed by:** [Gregory Bolshakov](https://apify.com/gubidonius) (community)
- **Categories:** Business, MCP servers, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Company Registry Lookup, 7 Countries

Look up a company in seven national business registers and get back one row in the same
shape every time.

Czechia, Estonia, Finland, France, Norway, Poland and Slovakia each publish an official
API. Each one returns a different structure, uses different field names, and writes dates
and statuses its own way. This Actor reads all seven and gives you 28 fields with the same
names in every country.

### What you put in

A company name or a registration number, one per line.

```
cz:27074358
fr:552032534
no:Equinor
fi:0112038-9
Bolt
```

Put a country code in front to search one register. Without a prefix, every register that
fits the input is tried. A registration number is matched by its shape, so an 8 digit
number goes to Czechia, Estonia and Slovakia, and a 9 digit number goes to France, Norway
and Poland.

### What you get back

One row per company. Same 28 fields every time.

| Field | Example |
|---|---|
| `country`, `countryName`, `registry` | `NO`, `Norway`, `Bronnoysund Enhetsregisteret` |
| `registrationNumber` | `923609016` |
| `name` | `EQUINOR ASA` |
| `previousNames` | `["STATOIL ASA", "STATOILHYDRO ASA"]` |
| `status`, `statusRaw` | `active`, `registrert` |
| `legalForm`, `legalFormCode` | `Allmennaksjeselskap`, `ASA` |
| `incorporatedAt`, `dissolvedAt` | `1995-03-12`, `null` |
| `address`, `street`, `city`, `postalCode`, `region`, `addressCountry` | full and split |
| `activityCode`, `activityLabel` | `06.100`, `Utvinning av raolje` |
| `vatNumber`, `vatRegistered` | `CZ27074358`, `true` |
| `employeeCount` | `21239` |
| `website` | `www.equinor.com` |
| `registryUrl` | link to the official record |
| `registryUpdatedAt`, `retrievedAt` | when the register last changed it, when we read it |

`status` is always one of `active`, `inactive` or `unknown`, so you can filter one field
across all seven countries. `statusRaw` keeps the original word from the register.

Not every register publishes every field. Norway fills 25 of 28, Finland and Slovakia 22,
Czechia 21, France 20, Poland 15, Estonia 14. A field the register does not publish comes
back `null`, never as a guess. France is the one case where the register ships an activity
code with no label, so `activityCode` is filled and `activityLabel` stays null.

### No personal data

Every one of these registers publishes directors, shareholders and their home addresses.
This Actor does not read those fields and does not return them. You get company level data
only.

That is on purpose. If you are screening suppliers or onboarding business customers, you
need the company record, and you probably do not want a dataset full of other people's
personal data sitting in your storage.

### Sources

All seven are official government APIs, public and free. Nothing here is a login, a token,
or a scraped page.

| Country | Register | Search by name |
|---|---|---|
| Czechia | ARES | yes |
| Estonia | Ariregister | yes |
| Finland | PRH / YTJ | yes |
| Norway | Bronnoysund Enhetsregisteret | yes |
| France | Annuaire des Entreprises, INSEE and RNE | yes |
| Poland | Ministry of Finance VAT list | no, number only |
| Slovakia | RPO, Statistical Office | yes |

Poland has no name search, so a name query returns nothing for Poland instead of a guess.

### Name search

Registers match names loosely. Norway answers `not-a-real-company-xyz` with three real
companies that share a word. Those get dropped before you are charged, so a query that
finds nothing costs you nothing.

### What it costs

Two events:

- **Run start**, charged once per run, and only if the run returns at least one company.
- **Company record**, charged per company returned.

A run that finds nothing is free.

Use `maxResultsPerQuery` to cap how many companies a name search can return and charge for.
The default is 5.

### Options

- `queries`: names or registration numbers, one per line.
- `countries`: which registers to search. Fewer countries means fewer requests.
- `maxResultsPerQuery`: cap per query, default 5.
- `onlyActive`: drop companies the register marks as dissolved.

### Notes

Long runs stop before the platform timeout, write what they have, and say so in the
summary. Check `SUMMARY` in the key value store to see which register answered each query
and what failed.

More countries are planned. If you need one that is not here, open an issue and say which.

Need higher volume, a country sooner, or a different output shape? Write to
gregory.bolshakov.work@gmail.com.

# Actor input Schema

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

A company name or a registration number, one per line. Put a country code in front to search one register only, like cz:27074358 or no:Equinor. Without a prefix, every register that fits the input is tried.

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

Limit the search to these registers. Fewer countries means fewer requests and a cheaper run.

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

A name search can match many companies. This caps how many are returned and charged for each query.

## `onlyActive` (type: `boolean`):

Drop companies the register marks as dissolved or deregistered.

## Actor input object example

```json
{
  "queries": [
    "cz:27074358",
    "fr:552032534",
    "no:Equinor",
    "fi:0112038-9",
    "Bolt"
  ],
  "countries": [
    "cz",
    "ee",
    "fi",
    "fr",
    "no",
    "pl",
    "sk"
  ],
  "maxResultsPerQuery": 5,
  "onlyActive": false
}
```

# Actor output Schema

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

One row per company, with the registration number, status, legal form, address and activity code in the same shape for every country.

## `summary` (type: `string`):

Which registers were searched for each query, how many companies each returned, and anything that failed.

# 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": [
        "cz:27074358",
        "fr:552032534",
        "no:Equinor",
        "fi:0112038-9",
        "Bolt"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("gubidonius/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": [
        "cz:27074358",
        "fr:552032534",
        "no:Equinor",
        "fi:0112038-9",
        "Bolt",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("gubidonius/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": [
    "cz:27074358",
    "fr:552032534",
    "no:Equinor",
    "fi:0112038-9",
    "Bolt"
  ]
}' |
apify call gubidonius/company-registry-lookup --silent --output-dataset

```

## MCP server setup

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