# Company Registry Lookup - EU & Brazil Official Business Data (`actor-forge/company-registry-lookup`) Actor

Look up companies in official business registers by name or ID: France (SIREN), Norway, Finland, Czechia, Poland (KRS) and Brazil (CNPJ), plus GLEIF LEI worldwide. Legal form, status, dates, address, NACE/CNAE, VAT, capital. No API key. $1 per 1,000 companies.

- **URL**: https://apify.com/actor-forge/company-registry-lookup.md
- **Developed by:** [ActorForge](https://apify.com/actor-forge) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 company results

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 - EU & Brazil Official Business Data

Look up companies in official business registers by name or ID: France (SIREN), Norway, Finland, Czechia, Poland (KRS) and Brazil (CNPJ), plus GLEIF LEI worldwide. Legal form, status, dates, address, NACE/CNAE, VAT, capital. No API key. $1 per 1,000 companies.

**Look up companies in official government business registers, in bulk, without API keys or scraping.** Give it company names or national IDs and it returns one clean, normalised record per company straight from the official register: **registered name, trading names, national ID, legal form, status (active / ceased, bankruptcy or liquidation flags), incorporation and dissolution dates, registered address, main activity code (NACE / NAF / CNAE / PKD) with description, VAT number, share capital, employee band, latest revenue and net income (France), website and LEI**. Covered natively: **France** (Sirene / RNE via API Recherche d'entreprises: name or SIREN/SIRET), **Norway** (Brønnøysund Enhetsregisteret: name or organisation number), **Finland** (PRH / YTJ: name or Y-tunnus), **Czechia** (ARES: name or IČO), **Poland** (KRS number) and **Brazil** (CNPJ via OpenCNPJ). **Any other country** (Germany, UK, US, Italy, Spain, ...) is searched in the **GLEIF global LEI index**, and an LEI works anywhere. Mix countries in one run. Use it for **KYC and onboarding checks, supplier and customer verification, CRM and lead enrichment in Clay, n8n, Make or Zapier, due diligence, VAT checks** and as a data tool for **AI agents**. Every row carries its source register and licence. Directors and partners are personal data, so they are **off by default** (opt in for France and Brazil). **$1 per 1,000 companies** (other registry actors charge $4-8 per 1,000); not-found queries and invalid IDs are free.

### What data does it return?

Every run outputs clean, schema-validated rows like these:

| name | country | companyId | status | legalForm | incorporationDate | activityCode | vatNumber |
| --- | --- | --- | --- | --- | --- | --- | --- |
| DANONE | FR | 552032534 | active | SA à conseil d’administration | 1955-01-01 | 70.10Z | FR27552032534 |
| EQUINOR ASA | NO | 923609016 | active | Allmennaksjeselskap | 1972-09-18 | 06.100 | NO923609016MVA |
| Nokia Oyj | FI | 0112038-9 | active | Public limited company | 1896-12-19 | 70100 | FI01120389 |
| OPEN KNOWLEDGE BRASIL | BR | 19131243000197 | active | Associação Privada | 2013-10-03 | 9430800 |  |

### How much does it cost?

Transparent pay-per-event pricing — you only pay for what you get, and the
actor **always respects your run budget**: set a maximum total charge and it
stops cleanly at the cap instead of overrunning.

| Event | Price | Charged | Worked example |
| --- | --- | --- | --- |
| `company-result` | $0.001 | per company record delivered | 1,000 suppliers verified = $1.00 |
| `apify-actor-start` | $0.00005 | per run per GB of memory (platform start fee) | One run at 256 MB = $0.00005 |

### Input options

| Field | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `queries` | array | yes | — | One item per company: {"country": "FR", "query": "Danone"}, or a string like "NO: 923609016". The query is a company name or the national ID: SIREN/SIRET (France), organisasjonsnummer (Norway), Y-tunnus (Finland), IČO (Czechia), KRS number (Poland, ID only), CNPJ (Brazil, ID only) or an LEI (any country, no country needed). Any other ISO country code (DE, US, GB, IT, ...) is searched in the GLEIF LEI index. |
| `defaultCountry` | string | no | — | Two-letter country code used for queries that don't name one (e.g. a plain list of Norwegian organisation numbers). |
| `maxResultsPerQuery` | integer | no | `1` | Name searches can match several companies: keep the best N (1 = best match only). ID lookups always return one. Each company is one charged row. |
| `includeOfficers` | boolean | no | `false` | Add the directors (France, from RNE) and partners (Brazil, QSA) that the registers publish: name, role and entry date only, never birth dates, ID numbers or nationality. Off by default: these are personal data under GDPR/LGPD, so only switch it on with a lawful purpose (e.g. KYC, due diligence). |
| `lookupLei` | boolean | no | `false` | Also look up each company's Legal Entity Identifier in GLEIF by its national ID (free, one extra request per company; GLEIF allows about 60 per minute, so large lists run slower). |

### Limits & honest notes

- Sources, licences and attribution (each row's source field names its register): France: API Recherche d'entreprises (DINUM; Sirene/INSEE and RNE/INPI data), Licence Ouverte / Etalab 2.0. Norway: Brønnøysundregistrene Enhetsregisteret, Norwegian Licence for Open Government Data (NLOD 2.0), source credit required. Finland: Finnish Patent and Registration Office (PRH) YTJ open data, CC BY 4.0: "mention the original source"; this actor is not a PRH service. Czechia: ARES (Ministry of Finance). Poland: KRS official extract API (Ministry of Justice). Brazil: Receita Federal CNPJ public data via OpenCNPJ (open-source, non-profit; BrasilAPI is not used because its terms discourage automated use). Worldwide: GLEIF LEI data, CC0. Not affiliated with any of these bodies.
- Rate limits are respected per register: France at most 2.5 requests/s (the API allows 7/s per IP and 30/s per network), Czechia about 3/s (ARES may block more than 500/minute), Poland 1/s, GLEIF about 55/minute, others 2-5/s, with Retry-After honoured on HTTP 429. Big lists therefore take a few minutes.
- Poland and Brazil are ID lookups only (KRS number, 14-digit CNPJ): their keyless APIs have no name search, so Polish or Brazilian names are searched in GLEIF, which only covers companies with an LEI. CNPJ check digits are validated before any request.
- Name searches return the register's own ranking (Finland and GLEIF are re-ranked by name similarity). Use maxResultsPerQuery above 1 for ambiguous names, or the national ID for an exact match.
- Officers: off by default. With includeOfficers, France returns directors (name and role) and Brazil returns partners (name, role, entry date); birth dates, ID numbers and nationality are never output. Norway, Finland and Czechia officers are not included; Polish board members are masked by the KRS API itself. Company e-mail addresses and phone numbers are not output.
- Coverage follows each register: France excludes companies that opted out of public dissemination; activity descriptions are given where the register provides them (codes always). Revenue and net income are France-only, as published.
- Respects your run budget: set a maximum total charge and the run stops cleanly at the cap, with nothing charged twice. Not-found queries, invalid IDs and register outages each get a free status row and never fail the run.

### Related ActorForge actors

- [Companies House Enrichment](https://apify.com/actor-forge/companies-house-enrichment) — the same lookup for UK companies
- [Domain Enrichment](https://apify.com/actor-forge/domain-enrichment) — company websites to contacts and socials

### Changelog

- **2026-10-23** — Initial release: France, Norway, Finland, Czechia, Poland and Brazil registers plus GLEIF LEI worldwide, mixed-country bulk lookups, optional LEI enrichment, officers opt-in.

***

*Built and maintained by **ActorForge**. Reliability first: every actor in the
portfolio is monitored by an automated nightly self-test, and breakages are
typically fixed the same day.*

# Actor input Schema

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

One item per company: {"country": "FR", "query": "Danone"}, or a string like "NO: 923609016". The query is a company name or the national ID: SIREN/SIRET (France), organisasjonsnummer (Norway), Y-tunnus (Finland), IČO (Czechia), KRS number (Poland, ID only), CNPJ (Brazil, ID only) or an LEI (any country, no country needed). Any other ISO country code (DE, US, GB, IT, ...) is searched in the GLEIF LEI index.

## `defaultCountry` (type: `string`):

Two-letter country code used for queries that don't name one (e.g. a plain list of Norwegian organisation numbers).

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

Name searches can match several companies: keep the best N (1 = best match only). ID lookups always return one. Each company is one charged row.

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

Add the directors (France, from RNE) and partners (Brazil, QSA) that the registers publish: name, role and entry date only, never birth dates, ID numbers or nationality. Off by default: these are personal data under GDPR/LGPD, so only switch it on with a lawful purpose (e.g. KYC, due diligence).

## `lookupLei` (type: `boolean`):

Also look up each company's Legal Entity Identifier in GLEIF by its national ID (free, one extra request per company; GLEIF allows about 60 per minute, so large lists run slower).

## Actor input object example

```json
{
  "queries": [
    {
      "country": "FR",
      "query": "Danone"
    },
    {
      "country": "NO",
      "query": "Equinor"
    },
    {
      "country": "BR",
      "query": "19131243000197"
    }
  ],
  "maxResultsPerQuery": 1,
  "includeOfficers": false,
  "lookupLei": false
}
```

# Actor output Schema

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

One row per company record from an official register or GLEIF, plus free status rows for queries without a match.

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

Companies delivered per register, not-found / invalid / failed query counts, API requests and billing.

# 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": [
        {
            "country": "FR",
            "query": "Danone"
        },
        {
            "country": "NO",
            "query": "Equinor"
        },
        {
            "country": "BR",
            "query": "19131243000197"
        }
    ],
    "maxResultsPerQuery": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("actor-forge/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": [
        {
            "country": "FR",
            "query": "Danone",
        },
        {
            "country": "NO",
            "query": "Equinor",
        },
        {
            "country": "BR",
            "query": "19131243000197",
        },
    ],
    "maxResultsPerQuery": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("actor-forge/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": [
    {
      "country": "FR",
      "query": "Danone"
    },
    {
      "country": "NO",
      "query": "Equinor"
    },
    {
      "country": "BR",
      "query": "19131243000197"
    }
  ],
  "maxResultsPerQuery": 1
}' |
apify call actor-forge/company-registry-lookup --silent --output-dataset

```

## MCP server setup

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