# EU Company Registry Search – Finland, Estonia & Czechia (`gazidev/eu-company-registry-search`) Actor

Search official company registers of Finland (PRH/YTJ), Estonia (e-Business Register) and Czechia (ARES) in one input: new registrations by date, name search and bulk ID lookup. Business ID, VAT, legal form, status, address, NACE. $1.50 per 1,000.

- **URL**: https://apify.com/gazidev/eu-company-registry-search.md
- **Developed by:** [Cemal Atakli](https://apify.com/gazidev) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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

## EU Company Registry Search – Finland, Estonia & Czechia

Search three official **European company registers** with one input and get the same clean record format back:

- **Finland**: Finnish Patent and Registration Office (PRH), **YTJ open data API** (Business ID / Y-tunnus)
- **Estonia**: **e-Business Register (e-äriregister) open data** (registry code / registrikood)
- **Czechia**: **ARES**, the Administrative Register of Economic Subjects (IČO)

Each record has the **registry ID**, **VAT ID** (when VAT-registered), EUID (Finland), name, **legal form** (Oy, OÜ, s.r.o., a.s.…), **status** (active, pending, in liquidation, bankrupt, dissolved), **registration date**, registered address, postal code, city and region, **industry code** (TOL 2008 / CZ-NACE where the register gives one), website (Finland) and a link to the official register page.

Three modes:

1. **New registrations**: companies registered in a date range (default: the last 7 days), **newest first**. A daily lead feed of new Finnish Oy, Estonian OÜ and Czech s.r.o. companies.
2. **Name search**: every company whose name contains your text (`nordic`, `software`, `asseco`…).
3. **ID lookup**: bulk check of Finnish Business IDs, Estonian registry codes or VAT numbers, and Czech IČO numbers. Is the company still active? What is its legal form, address and VAT number?

All data comes from **official, keyless open-data sources**. No scraping of web pages, no login, no API key. **$1.50 per 1,000 companies.**

> Looking for **Norway**? Use [Norway Company Search (Brreg)](https://apify.com/gazidev/norway-company-leads), with CEO and board. **France**? Use [France Company Search](https://apify.com/gazidev/france-company-search) (SIREN/SIRET).

### Who uses it

- **KYB, KYC and compliance teams**: verify Nordic, Baltic and Central European counterparties in bulk. Check the status, legal form, VAT number and registered address.
- **B2B sales and lead generation**: a weekly list of **new companies in Finland, Estonia and Czechia** (accountants, banks, insurers, SaaS, office suppliers, web agencies).
- **Cross-border prospecting**: one schema for several countries, so you skip three different register formats.
- **Researchers and journalists**: company formation trends by country, legal form or city.

### Input examples

New limited companies from the last 7 days in all three countries, 10 per country (the prefill):

```json
{ "mode": "newRegistrations", "countries": ["FI", "EE", "CZ"], "registeredWithinDays": 7, "onlyLimitedCompanies": true, "maxResultsPerCountry": 10 }
```

All new Estonian companies registered in Tallinn this month:

```json
{ "mode": "newRegistrations", "countries": ["EE"], "registeredFrom": "2026-10-01", "city": "Tallinn", "maxResultsPerCountry": 0 }
```

Name search across all three registers:

```json
{ "mode": "nameSearch", "searchName": "nordic", "maxResultsPerCountry": 200 }
```

Bulk ID lookup (country is detected from the format; use a prefix for 8-digit IDs):

```json
{ "mode": "idLookup", "ids": ["0112038-9", "FI23365096", "EE16752073", "EE101335276", "CZ27074358", "00177041"] }
```

#### Filters

| Field | Meaning |
|---|---|
| `mode` | `newRegistrations` (default), `nameSearch`, `idLookup` |
| `countries` | `FI`, `EE`, `CZ` (default: all three) |
| `registeredWithinDays` / `registeredFrom` / `registeredTo` | Registration date (FI: Business ID date, EE: first entry date, CZ: date of establishment) |
| `searchName` | Name search: text contained in the company name (FI also matches former and auxiliary names) |
| `ids` | Lookup: `1234567-8` / `FI12345678` (FI), `EE` + 8-digit code or `EE` VAT (EE), `CZ` + IČO (CZ). Unprefixed 8-digit IDs are checked in EE and CZ |
| `city` | City, town or region in the registered address (`Helsinki`, `Tartu maakond`, `Praha`) |
| `onlyLimitedCompanies` | Only Oy/Oyj, OÜ/AS, s.r.o./a.s. |
| `excludeSoleTraders` | Default on: skip natural-person sole traders (Estonian FIE, Czech trade-licence holders) |
| `includeInactive` | Also return companies in liquidation, bankrupt, ceased or dissolved (lookup always returns them) |
| `maxResultsPerCountry` | Stop after N companies per country (0 = no limit). You pay per company returned |

### Output

One row per company. All countries share the same fields:

```json
{
  "country": "Czechia",
  "countryCode": "CZ",
  "registryId": "30187958",
  "vatId": null,
  "name": "ATDP Vanguard s.r.o.",
  "legalForm": "Limited liability company (s.r.o.)",
  "legalFormCode": "112",
  "legalFormLocal": "Společnost s ručením omezeným",
  "status": "Active; commercial register: registered",
  "isActive": true,
  "registrationDate": "2026-10-22",
  "address": "Vinecká 1",
  "postalCode": "29301",
  "city": "Mladá Boleslav",
  "region": "Středočeský kraj",
  "fullAddress": "Vinecká 1, Čejetičky, 29301 Mladá Boleslav",
  "industryCode": null,
  "registryUrl": "https://ares.gov.cz/ekonomicke-subjekty?ico=30187958",
  "source": "ARES - Administrative Register of Economic Subjects, Ministry of Finance of the Czech Republic (ares.gov.cz)",
  "licence": "Public open data (ARES terms of operation)",
  "attribution": "Source: ARES, Ministry of Finance of the Czech Republic."
}
```

```json
{
  "countryCode": "FI",
  "registryId": "0112038-9",
  "vatId": "FI01120389",
  "euid": "FIFPRO.0112038-9",
  "name": "Nokia Oyj",
  "otherNames": ["Nokia Abp", "Nokia Corporation", "Nokia Networks", "..."],
  "legalForm": "Public limited company",
  "legalFormCode": "OYJ",
  "status": "Valid; Trade register: Registered",
  "isActive": true,
  "registrationDate": "1978-03-15",
  "city": "Espoo",
  "industryCode": "70100",
  "industryDescription": "Activities of head offices",
  "website": "https://www.nokia.com",
  "licence": "CC BY 4.0"
}
```

The run summary (`OUTPUT` in the key-value store) lists companies per country, register matches, skipped rows by reason, IDs that were not found, warnings and the attribution lines.

### Pricing

Pay per event: **$0.0015 per company returned** ($1.50 per 1,000), plus a tiny Actor start fee. Error rows are free. Set **Max results per country** or a maximum cost per run, and the run stops cleanly at that limit.

| | This Actor | Other multi-country registry Actors on the Store (Oct 2026) |
|---|---|---|
| Price per company | $0.0015 | from $0.002 |
| Finland + Estonia + Czechia in one input | yes | varies |
| New registrations by date (lead feed) | yes, newest first | varies |
| Bulk ID / VAT lookup | yes | varies |
| Official keyless open-data sources only | yes | varies |

### Use with AI agents (Apify MCP)

Add this Actor to Claude, ChatGPT or any MCP client through the [Apify MCP server](https://mcp.apify.com) and ask, for example: *"List new Estonian OÜ companies registered in Tartu this week"*, *"Is Czech IČO 27074358 still active and what is its VAT number?"* or *"Find Finnish companies with 'nordic' in their name in Helsinki"*.

### FAQ

**How fresh is the data?** Finland and Czechia are queried live. Estonia comes from the e-Business Register open-data file, which is regenerated **every day**.

**Why are new Finnish companies "Pending / Unregistered"?** A Business ID is granted the day the start-up notification arrives. The trade-register entry follows a few days later. They are real new companies, which is why they are good leads.

**Why do Czech results lag by a few days?** New Czech registrations are found through the official ARES change batches of the public (commercial) register, published every 1–3 days. The `registrationDate` is the legal date of establishment, so use at least 7 days for a complete picture. The batches cover about the last 30 days.

**Why is there no industry code for Estonia or for brand-new Czech companies?** The Estonian basic open-data file has no EMTAK code. New Czech companies often have no CZ-NACE code yet.

**Why are sole traders excluded by default?** Estonian FIE and Czech trade-licence holders are natural persons, and the "company" name is the person's name. Set `excludeSoleTraders` to `false` if you have a legitimate reason to process them.

**ARES says there are too many results.** ARES returns at most 1,000 matches per name search. Add a `city`, turn on `onlyLimitedCompanies` or use a more specific name.

**Do you have Norway, Sweden, Denmark or France?** Norway: [gazidev/norway-company-leads](https://apify.com/gazidev/norway-company-leads). France: [gazidev/france-company-search](https://apify.com/gazidev/france-company-search).

### Data sources and licences

- **Finland**: contains data from the **Finnish Patent and Registration Office (PRH)**, YTJ open data API v3 ([avoindata.prh.fi](https://avoindata.prh.fi/en)), licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). This Actor is an independent service. It is not provided or endorsed by PRH or YTJ and does not use their logos.
- **Estonia**: contains data from the **Estonian e-Business Register open data** ([avaandmed.ariregister.rik.ee](https://avaandmed.ariregister.rik.ee/en)), Centre of Registers and Information Systems (RIK), licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).
- **Czechia**: data from **ARES**, the Administrative Register of Economic Subjects, operated by the Ministry of Finance of the Czech Republic ([ares.gov.cz](https://ares.gov.cz)). It is public data used under the ARES terms of operation. Requests are throttled well below the 500-requests-per-minute limit.

Every output row has `source`, `licence` and `attribution` fields. If you republish the data, keep the attribution. Some records name natural persons (for example in partnership names). Process them in line with GDPR.

# Actor input Schema

## `mode` (type: `string`):

**New registrations**: companies registered in a date range (lead lists, newest first). **Name search**: companies whose name contains your text. **Look up**: bulk check of business IDs / registry codes / IČO.

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

Registers to search. Norway: use gazidev/norway-company-leads; France: gazidev/france-company-search.

## `registeredWithinDays` (type: `integer`):

New registrations mode: registration date in the last N days. Ignored when *Registered from* is set. Czechia covers about the last 30 days.

## `registeredFrom` (type: `string`):

YYYY-MM-DD. Overrides *last N days*. Also works as a filter in name search.

## `registeredTo` (type: `string`):

YYYY-MM-DD, inclusive. Optional upper bound.

## `searchName` (type: `string`):

Name search mode, e.g. `nordic`, `software`, `asseco`. Finland also matches former and auxiliary names. ARES (CZ) returns at most 1,000 matches per query.

## `ids` (type: `array`):

Look-up mode. Finland: Business ID `0112038-9` (or VAT `FI01120389`). Estonia: 8-digit registry code `EE16752073` (or VAT `EE101335276`). Czechia: IČO `CZ27074358`. Unprefixed 8-digit numbers are checked in Estonia and Czechia.

## `city` (type: `string`):

Optional: only companies whose registered address is in this city or region, e.g. `Helsinki`, `Tallinn`, `Praha`, `Tartu maakond`.

## `onlyLimitedCompanies` (type: `boolean`):

Keep only Oy/Oyj (FI), OÜ/AS (EE) and s.r.o./a.s. (CZ).

## `excludeSoleTraders` (type: `boolean`):

Skip natural-person sole traders (Estonian FIE, Czech trade-licence holders). On by default: these records are mostly people's names. Ignored in look-up mode.

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

Also return companies in liquidation, bankrupt, ceased or dissolved. Look-up mode always returns them.

## `maxResultsPerCountry` (type: `integer`):

Stop after this many companies per country. 0 = no limit. You pay per company returned.

## Actor input object example

```json
{
  "mode": "newRegistrations",
  "countries": [
    "FI",
    "EE",
    "CZ"
  ],
  "registeredWithinDays": 7,
  "onlyLimitedCompanies": true,
  "excludeSoleTraders": true,
  "includeInactive": false,
  "maxResultsPerCountry": 10
}
```

# Actor output Schema

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

No description

## `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 = {
    "mode": "newRegistrations",
    "countries": [
        "FI",
        "EE",
        "CZ"
    ],
    "registeredWithinDays": 7,
    "onlyLimitedCompanies": true,
    "maxResultsPerCountry": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("gazidev/eu-company-registry-search").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 = {
    "mode": "newRegistrations",
    "countries": [
        "FI",
        "EE",
        "CZ",
    ],
    "registeredWithinDays": 7,
    "onlyLimitedCompanies": True,
    "maxResultsPerCountry": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("gazidev/eu-company-registry-search").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 '{
  "mode": "newRegistrations",
  "countries": [
    "FI",
    "EE",
    "CZ"
  ],
  "registeredWithinDays": 7,
  "onlyLimitedCompanies": true,
  "maxResultsPerCountry": 10
}' |
apify call gazidev/eu-company-registry-search --silent --output-dataset

```

## MCP server setup

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

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/nManDhgy3Cm6SOViv/builds/nU50Wlo3fcAmECvY8/openapi.json
