# EU Company Search: KYB Lookup + New Company Registrations (`transparent_meteorite/eu-business-registry-search`) Actor

Verify a company or build a feed of newly registered companies from official registers in France, Norway and Finland: registry ID, legal form, status, registration date, address, industry code, source link. No login. Beta.

- **URL**: https://apify.com/transparent_meteorite/eu-business-registry-search.md
- **Developed by:** [Detroit Web Agent - Open Data](https://apify.com/transparent_meteorite) (community)
- **Categories:** Lead generation
- **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?

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 Business Registry Search: KYB Lookup + New Companies (FR, NO, FI)

Use this to verify a European company against its official register (France, Norway, Finland) or to get a feed of newly registered companies.

**Beta.** Verify the companies you act on in the linked official register. Built on official open registers, local unit tests with recorded fixtures, and a live check of each registry API before release. Open an issue on the Issues tab if a field looks wrong and we fix it fast.

### What it does

Two modes in one actor, both from **official open registers** (no login, no scraping of private sites):

1. **KYB / company lookup.** Give company names or registry IDs; get matching registry records with legal form, status, registration date, address, industry code and a link to the official record. Not-found queries return a free `found: false` row.
2. **New-company feed.** Leave Queries empty to get companies registered in the last N days (Norway and Finland), deduped across runs so a repeat run returns and charges nothing.

### Coverage

| Country | Register | Lookup | New feed |
|---|---|---|---|
| France | Annuaire des Entreprises / INSEE Sirene (data.gouv.fr API) | name, SIREN, SIRET | no (no creation-date filter in the open API) |
| Norway | Bronnoysundregistrene Enhetsregisteret | name, org number | yes |
| Finland | PRH / YTJ open data | name, business ID | yes |

More countries are added based on demand. Tell us which register you need on the Issues tab.

### Use cases

- Supplier and customer onboarding checks (KYB) across France, Norway and Finland.
- Sales prospecting: fresh company registrations in Nordic markets, filtered by name keyword.
- Compliance and due-diligence enrichment: legal form, status, address, industry code.

### Example input

```json
{ "queries": ["Nokia", "0112038-9"], "countries": ["FI", "NO", "FR"], "resultsPerQuery": 3 }
```

New registrations:

```json
{ "countries": ["NO", "FI"], "daysBack": 7, "keywords": ["consulting"], "maxItems": 50 }
```

### Output fields

country, registryId, entityName, legalName, legalForm(Code), status, registrationDate, address (full, street, postalCode, city), industryCode, industryDescription, employeesBand, website (where the register publishes it), sourceUrl, sourceRegistry, scrapedAt.

### Pricing

Pay per event: $0.004 per company record returned (about $4 per 1,000). Actor start $0.00005. Not-found rows, filtered rows and already-seen rows are free. Set Maximum cost per run to cap spend.

### Privacy and limits

Company-level public register data only. Natural-person officer names are not emitted. Registry data can lag the source by a day or more; the sourceUrl links the authoritative record. Each registry rate-limits politely; the actor makes serial requests with backoff.

### Output sample

Each result is one dataset item (JSON, CSV, Excel or via API). Shape taken from the actor's dataset schema; field names and meanings below, not live data:

| Field | Meaning |
|---|---|
| `country` |  |
| `registryId` |  |
| `entityName` |  |
| `legalForm` |  |
| `status` |  |
| `registrationDate` |  |
| `industryCode` |  |
| `sourceUrl` |  |

### FAQ

**How do I try it quickly?** Press Start with the prefilled input; it is a small run.

**How is it priced?** Pay per event; see the Pricing section above or the Pricing tab. A small run costs very little.

**Is this a one-off or can it run on a schedule?** Both. Use Apify schedules or the API to run it repeatedly.

**What if the source is slow or fails?** Failed or rate-limited requests (HTTP 429 or 5xx, network errors) are retried up to 4 attempts with growing waits; if a source stays unavailable the run records a warning instead of returning invented results.

**Is the data legal to use?** The actor reads public data. You are responsible for using the results in line with applicable law and the source's terms.

### Alternatives to EU Company Search

Other ways to get similar data, so you can choose what fits:

- **OpenCorporates**: global company database with its own API
- **Dun & Bradstreet**: commercial company data and risk scores
- **the official registers directly**: free but one lookup at a time

This actor's edge is pay-per-result pricing, no login and ready-to-use structured output. Compare on a small test run before you commit.

### Changelog

- **0.2** (2026-10-28): listing refresh (title, description, README sections, console prefills). No change to output fields.
- Earlier: initial release.

# Actor input Schema

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

KYB lookup mode: company names or registry numbers (French SIREN/SIRET, Norwegian 9-digit org number, Finnish business ID like 0112038-9). Leave empty for the new-registrations feed (Norway, Finland).

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

Registers to query. Empty = all three. France supports lookup only (its open API has no creation-date filter).

## `daysBack` (type: `integer`):

Return companies registered in the last N days (1 to 60). Ignored in lookup mode.

## `keywords` (type: `array`):

Keep only new companies whose name contains any of these words, e.g. consulting, bygg, rakennus.

## `maxItems` (type: `integer`):

Cap on company records delivered (and charged) this run.

## `resultsPerQuery` (type: `integer`):

Lookup mode: how many best matches to return per query and country.

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

Drop bankrupt, liquidating or dissolved entities from the new-registrations feed.

## `onlyNewSinceLastRun` (type: `boolean`):

New-registrations mode: skip companies delivered in a previous run (tracked in a named key-value store). A repeat run delivers 0 rows and charges 0 events.

## `stateStoreName` (type: `string`):

Named key-value store that remembers delivered companies. Change it to keep separate feeds or reset dedupe.

## Actor input object example

```json
{
  "queries": [
    "Nokia"
  ],
  "countries": [
    "FI"
  ],
  "daysBack": 7,
  "maxItems": 5,
  "resultsPerQuery": 3,
  "activeOnly": true,
  "onlyNewSinceLastRun": true,
  "stateStoreName": "eu-registry-seen"
}
```

# Actor output Schema

## `overview` (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 = {
    "queries": [
        "Nokia"
    ],
    "countries": [
        "FI"
    ],
    "maxItems": 5,
    "onlyNewSinceLastRun": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("transparent_meteorite/eu-business-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 = {
    "queries": ["Nokia"],
    "countries": ["FI"],
    "maxItems": 5,
    "onlyNewSinceLastRun": False,
}

# Run the Actor and wait for it to finish
run = client.actor("transparent_meteorite/eu-business-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 '{
  "queries": [
    "Nokia"
  ],
  "countries": [
    "FI"
  ],
  "maxItems": 5,
  "onlyNewSinceLastRun": false
}' |
apify call transparent_meteorite/eu-business-registry-search --silent --output-dataset

```

## MCP server setup

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