# Company Register Scraper — 3M Companies | $4/1K (`datawell/company-register-scraper`) Actor

Search 3 million registered companies worldwide: legal name, addresses, official register number, legal form, status and founding date. Includes corporate structure — parents and subsidiaries. Germany alone holds 250,000+. No API key. For lead generation, KYB and due diligence.

- **URL**: https://apify.com/datawell/company-register-scraper.md
- **Developed by:** [datawell](https://apify.com/datawell) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 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/platform/actors/running/actors-in-store#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 Register Scraper (LEI / GLEIF)

Search over **3 million registered companies worldwide** — legal name, registered
address, official register number, legal form, status and corporate structure.
No API key, no login, no per-lookup fee.

***

### Why this scraper

**Official register numbers, not guesses.** Every row carries the entity's real
company register number (`HRB 100484` for a German GmbH, the equivalent
elsewhere). That is the key that lets you join this data to national registers,
credit reports or your own CRM.

**Corporate structure included.** Parent companies, ultimate parents and
subsidiaries — the relationships that turn a list of names into a group
hierarchy.

**Global and free.** GLEIF is the register behind the Legal Entity Identifier,
maintained under regulatory mandate. Germany alone holds over 250,000 entities,
and the whole dataset is public.

***

### What you can extract

| Mode | What you get |
|---|---|
| **Search companies** | Legal name, both addresses, register number, legal form, status, founding date |
| **Look up LEI codes** | Full records for specific 20-character LEI codes |
| **Corporate structure** | Direct parents, ultimate parents and subsidiaries of a company |
| **Company name suggestions** | Find the exact legal spelling before running a search |

***

### Quick start

1. Pick **Search companies**.
2. Enter a country code (`DE`) or a company name, or both.
3. Set **Maximum results**, click **Start**, download as CSV or Excel.

***

### Example inputs

**Every active company registered in Germany**

```json
{
  "mode": "search",
  "country": "DE",
  "entityStatus": "ACTIVE",
  "maxItems": 50000
}
```

**Find a specific company group**

```json
{
  "mode": "search",
  "companyName": "Volkswagen",
  "maxItems": 200
}
```

**Investment funds in Luxembourg**

```json
{
  "mode": "search",
  "country": "LU",
  "entityCategory": "FUND",
  "maxItems": 5000
}
```

**Map a group hierarchy**

```json
{
  "mode": "relations",
  "leiCodes": ["529900YDAG61JYILJZ53"],
  "relationTypes": ["direct-parent", "ultimate-parent", "direct-children"]
}
```

**Enrich a list of LEI codes you already have**

```json
{
  "mode": "byLei",
  "leiCodes": ["529900YDAG61JYILJZ53", "3912004FNXESG95J5T56"]
}
```

***

### Output fields

| Field | Description |
|---|---|
| `name` | Official legal name |
| `lei` | 20-character Legal Entity Identifier |
| `registeredAs` | **Official company register number** |
| `registeredAt` | Which register holds the entry |
| `addressStreet`, `addressCity`, `addressPostalCode`, `addressCountry`, `addressRegion` | Registered address |
| `hqStreet`, `hqCity`, `hqPostalCode`, `hqCountry`, `hqRegion` | Headquarters address |
| `status` | ACTIVE or INACTIVE |
| `legalFormId`, `legalFormOther` | Standardised legal form |
| `jurisdiction`, `category`, `subCategory` | Legal classification |
| `creationDate` | When the entity was founded |
| `expirationDate`, `expirationReason` | If and why it ceased to exist |
| `registrationStatus` | ISSUED means the LEI is current; LAPSED often signals a dormant company |
| `initialRegistrationDate`, `lastUpdateDate`, `nextRenewalDate` | Record lifecycle |
| `otherNames` | Trading names and former names |
| `bic`, `ocid` | Bank identifier and OpenCorporates cross-reference |
| `relationType`, `relationTo` | Corporate structure mode only |
| `url` | Link to the public record |

***

### Limits

- **Filters are restricted.** GLEIF accepts name, country, jurisdiction, status,
  category and registration status. City, postcode and legal form are *not*
  filterable — the API rejects them. Filter those columns after export.
- **Coverage is regulatory, not universal.** Entities need an LEI mainly if they
  trade in financial markets. Small local businesses often have none.
- **Names are as registered**, which may differ from the trading name.
- **Addresses are legal addresses**, not necessarily where anyone works.

***

### FAQ

**Do I need an API key?**
No. GLEIF publishes the register openly.

**Is this the same as a national commercial register?**
No, but it links to one: `registeredAs` holds the official register number, so
you can look up the full national entry from there.

**How many German companies are in here?**
Over 250,000 with a registered German address.

**Can I find subsidiaries of a group?**
Yes — the corporate structure mode returns direct children and parents.

**What formats can I export?**
CSV, Excel, JSON, XML, or straight from the Apify API.

***

### Legal and responsible use

This Actor reads publicly available company register data through GLEIF's own
public API. Company records are business data, but sole traders and small
entities can be identifiable individuals — GDPR obligations may apply depending
on what you do with the output.

# Actor input Schema

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

Pick what you want to collect. The fields below apply depending on this choice. Each option below says which extra field it needs — fill that one in, the rest are ignored.

## `companyName` (type: `string`):

Full or partial legal name, e.g. 'Volkswagen'. Leave empty to list everything matching the other filters.

## `country` (type: `string`):

Two-letter country code of the registered address, e.g. DE, GB, US, FR. Germany alone holds over 250,000 entities.

## `jurisdiction` (type: `string`):

Two-letter code of the legal jurisdiction the company is registered in. Often the same as country, but differs for entities registered abroad.

## `entityCategory` (type: `string`):

Ordinary companies, investment funds, branches or sole traders.

## `entityStatus` (type: `string`):

Active companies only, or also those that have been dissolved or merged away.

## `registrationStatus` (type: `string`):

'Issued' means the LEI is current. 'Lapsed' means it was not renewed — often a sign the company stopped trading.

## `leiCodes` (type: `array`):

20-character LEI codes, e.g. 529900YDAG61JYILJZ53. Used in the lookup and corporate structure modes.

## `relationTypes` (type: `array`):

Which parts of the corporate tree to fetch: direct-parent, ultimate-parent, direct-children, ultimate-children. Leave empty for the first three.

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

Total number of records to collect.

## `requestDelaySeconds` (type: `integer`):

Seconds to wait between calls. Raise this for very large runs.

## Actor input object example

```json
{
  "mode": "search",
  "companyName": "Siemens",
  "entityCategory": "",
  "entityStatus": "",
  "registrationStatus": "",
  "leiCodes": [
    "529900T8BM49AURSDO55"
  ],
  "maxItems": 100,
  "requestDelaySeconds": 0
}
```

# Actor output Schema

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

Company records with LEI, legal name, registered and headquarters address, official register number, legal form and registration status.

## `resultsCsv` (type: `string`):

The same rows as a CSV download, ready for Excel or Google Sheets.

# 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 = {
    "companyName": "Siemens",
    "leiCodes": [
        "529900T8BM49AURSDO55"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datawell/company-register-scraper").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 = {
    "companyName": "Siemens",
    "leiCodes": ["529900T8BM49AURSDO55"],
}

# Run the Actor and wait for it to finish
run = client.actor("datawell/company-register-scraper").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 '{
  "companyName": "Siemens",
  "leiCodes": [
    "529900T8BM49AURSDO55"
  ]
}' |
apify call datawell/company-register-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datawell/company-register-scraper"
        }
    }
}

```

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/qfoazpb8YWGCqgBDR/builds/xw9X1CljFBh9Oe629/openapi.json
