# EU Beneficial Ownership Scraper - 9 Country UBO Aggregation (`jungle_synthesizer/eu-ubo-beneficial-owners-multi-country-scraper`) Actor

Cross-border UBO lookup: UK PSC, Belgium, Czech, Slovenia, Spain, Italy, Poland & more. Sanctions cross-reference. KYC/KYB, AML, due-diligence.

- **URL**: https://apify.com/jungle\_synthesizer/eu-ubo-beneficial-owners-multi-country-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## EU Beneficial Ownership Scraper - 9 Country UBO Aggregation

Cross-border beneficial ownership (UBO) lookup across UK, Poland, and 7+ EU jurisdictions in a single actor. Returns normalized beneficial owner records from open national registers. Built for KYC/KYB platforms, AML investigators, sanctions compliance teams, and investigative journalists.

### Why this actor

The EU's 5th Anti-Money Laundering Directive (5AMLD) required all member states to create public UBO registers. Enterprise data providers (Refinitiv World-Check: $30K–$300K/yr; Sayari Graph: $50K–$500K/yr) charge enterprise prices for this data. This actor aggregates the same public registers at $0.05/record.

**Important:** The 2022 CJEU ruling (case C-37/20) closed several registers to the public (Germany, Netherlands, Austria, France, Ireland, Luxembourg, Malta). This actor returns a clear status flag for those countries rather than silently returning empty results.

### Supported countries and registers

| Country | Register | Status | Notes |
|---------|----------|--------|-------|
| UK | Companies House PSC | Open — requires free API key | Register at developer.company-information.service.gov.uk |
| PL | CRBR (Centralny Rejestr Beneficjentów Rzeczywistych) | Open | NIP or KRS company ID lookup; BO name search |
| DE, NL, AT, FR, IE, LU, MT | Various | Closed by CJEU C-37/20 (2022) | Returns register_status: closed-by-cjeu-2022 |
| BE, CZ, SI, BG, RO, ES, IT, HR, LV, LT, FI, SE, EL, PT, DK | Various | Open — adapters in development | Returns register_status: adapter-not-implemented |

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| mode | select | No (default: by_company_name) | Query mode: by_company_id, by_company_name, by_bo_name, country_full_dump |
| query | string | Yes | Company name, company ID (NIP/CRN), or beneficial owner name |
| countries | array | No (default: UK, BE, CZ, SI, PL, ES, IT) | ISO country codes to search |
| ukCompaniesHouseApiKey | secret | For UK searches | Free Companies House API key |
| maxItems | integer | No (default: 10) | Max records to return |
| includeSanctionsCrossRef | boolean | No (default: true) | Enable sanctions cross-reference |

#### Example: Look up a Polish company by NIP

```json
{
  "mode": "by_company_id",
  "query": "8992689516",
  "countries": ["PL"],
  "maxItems": 20
}
````

#### Example: Search UK companies by name (requires API key)

```json
{
  "mode": "by_company_name",
  "query": "Accenture",
  "countries": ["UK"],
  "ukCompaniesHouseApiKey": "your-free-api-key-here",
  "maxItems": 10
}
```

#### Example: Check which countries have closed registers

```json
{
  "mode": "by_company_name",
  "query": "Deutsche Bank",
  "countries": ["DE", "NL", "AT", "PL"],
  "maxItems": 10
}
```

Returns status records for DE/NL/AT with register\_status: closed-by-cjeu-2022, and real beneficial owner data for PL if found.

### Output

Each record follows a normalized FATF-recommended schema:

| Field | Type | Description |
|-------|------|-------------|
| country | string | ISO country code of the register |
| source\_register | string | Name of the source register |
| subject\_company\_id | string | Company identifier (NIP, CRN, KBO, etc.) |
| subject\_company\_name | string | Registered company name |
| bo\_full\_name | string | Beneficial owner full name |
| bo\_first\_name | string | Beneficial owner given name |
| bo\_last\_name | string | Beneficial owner surname |
| bo\_dob\_year | integer | Birth year (most registers suppress full DOB) |
| bo\_dob\_month | integer | Birth month |
| bo\_nationality | string | Nationality (ISO code or country name) |
| bo\_residence\_country | string | Country of residence |
| control\_type | string | Nature of control (ownership, voting, etc.) |
| ownership\_percentage\_min | number | Minimum ownership percentage |
| ownership\_percentage\_max | number | Maximum ownership percentage |
| control\_start\_date | string | Date control began |
| is\_active | boolean | Whether beneficial ownership is current |
| register\_status | string | open, closed-by-cjeu-2022, api-key-required, no-results, etc. |

#### Example output record (Poland CRBR)

```json
{
  "country": "PL",
  "source_register": "Poland CRBR (Centralny Rejestr Beneficjentów Rzeczywistych)",
  "subject_company_id": "8992689516",
  "subject_company_name": "PSP POLSKA",
  "subject_country": "PL",
  "bo_full_name": "PIOTR KURCZEWSKI",
  "bo_first_name": "PIOTR",
  "bo_last_name": "KURCZEWSKI",
  "bo_nationality": "PL",
  "bo_residence_country": "PL",
  "control_type": "indirect ownership via chain",
  "register_status": "open"
}
```

### API keys

**UK Companies House**: Free. Register at developer.company-information.service.gov.uk. Provides access to the full PSC (Persons with Significant Control) database.

**Polish CRBR**: No key required. Open API with no rate limits for read access.

**Other countries**: No credentials needed. Additional country adapters will use BYO-key or open endpoints as they become available.

### Pricing

Pay-per-event pricing at $0.05 per beneficial owner record returned. Status records (closed register, guidance, error) are included in the count.

### Compliance notes

The beneficial ownership data returned by this actor is sourced from public government registers. Use is subject to UK Companies House Terms and Conditions, Polish public records law, and country-specific register terms. The actor does not return full DOB, national ID numbers, or other protected personal data — consistent with how each register publishes the information.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

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

No description

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

ISO country codes. Closed-register countries (DE, NL, AT, FR, IE, LU, MT) return empty results with a status flag.

## `query` (type: `string`):

Company name, company ID, or beneficial owner name to search for.

## `includeSanctionsCrossRef` (type: `boolean`):

Cross-reference beneficial owners against OFAC/EU/UN sanctions lists.

## `includePepCrossRef` (type: `boolean`):

Cross-reference beneficial owners against Politically Exposed Persons (PEP) datasets.

## `ukCompaniesHouseApiKey` (type: `string`):

Required for UK PSC lookups. Free key from developer.company-information.service.gov.uk.

## `czIssmToken` (type: `string`):

Optional token for Czech ISSM open data subscription tier.

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

Maximum number of UBO records to return.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "by_company_name",
  "countries": [
    "UK",
    "BE",
    "CZ",
    "SI",
    "PL",
    "ES",
    "IT"
  ],
  "query": "Accenture",
  "includeSanctionsCrossRef": true,
  "maxItems": 10
}
```

# Actor output Schema

## `results` (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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "by_company_name",
    "countries": [
        "UK",
        "BE",
        "CZ",
        "SI",
        "PL",
        "ES",
        "IT"
    ],
    "query": "Accenture",
    "includeSanctionsCrossRef": true,
    "includePepCrossRef": false,
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/eu-ubo-beneficial-owners-multi-country-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "mode": "by_company_name",
    "countries": [
        "UK",
        "BE",
        "CZ",
        "SI",
        "PL",
        "ES",
        "IT",
    ],
    "query": "Accenture",
    "includeSanctionsCrossRef": True,
    "includePepCrossRef": False,
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/eu-ubo-beneficial-owners-multi-country-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "mode": "by_company_name",
  "countries": [
    "UK",
    "BE",
    "CZ",
    "SI",
    "PL",
    "ES",
    "IT"
  ],
  "query": "Accenture",
  "includeSanctionsCrossRef": true,
  "includePepCrossRef": false,
  "maxItems": 10
}' |
apify call jungle_synthesizer/eu-ubo-beneficial-owners-multi-country-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=jungle_synthesizer/eu-ubo-beneficial-owners-multi-country-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EU Beneficial Ownership Scraper - 9 Country UBO Aggregation",
        "description": "Cross-border UBO lookup: UK PSC, Belgium, Czech, Slovenia, Spain, Italy, Poland & more. Sanctions cross-reference. KYC/KYB, AML, due-diligence.",
        "version": "0.1",
        "x-build-id": "A4HfabLoyi0p1wOPR"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~eu-ubo-beneficial-owners-multi-country-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-eu-ubo-beneficial-owners-multi-country-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~eu-ubo-beneficial-owners-multi-country-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-eu-ubo-beneficial-owners-multi-country-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/jungle_synthesizer~eu-ubo-beneficial-owners-multi-country-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-eu-ubo-beneficial-owners-multi-country-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "query"
                ],
                "properties": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "mode": {
                        "title": "Query Mode",
                        "enum": [
                            "by_company_id",
                            "by_company_name",
                            "by_bo_name",
                            "country_full_dump"
                        ],
                        "type": "string",
                        "description": ""
                    },
                    "countries": {
                        "title": "Countries",
                        "type": "array",
                        "description": "ISO country codes. Closed-register countries (DE, NL, AT, FR, IE, LU, MT) return empty results with a status flag.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "query": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Company name, company ID, or beneficial owner name to search for."
                    },
                    "includeSanctionsCrossRef": {
                        "title": "Include Sanctions Cross-Reference",
                        "type": "boolean",
                        "description": "Cross-reference beneficial owners against OFAC/EU/UN sanctions lists."
                    },
                    "includePepCrossRef": {
                        "title": "Include PEP Cross-Reference",
                        "type": "boolean",
                        "description": "Cross-reference beneficial owners against Politically Exposed Persons (PEP) datasets."
                    },
                    "ukCompaniesHouseApiKey": {
                        "title": "UK Companies House API Key",
                        "type": "string",
                        "description": "Required for UK PSC lookups. Free key from developer.company-information.service.gov.uk."
                    },
                    "czIssmToken": {
                        "title": "Czech ISSM Token (optional)",
                        "type": "string",
                        "description": "Optional token for Czech ISSM open data subscription tier."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of UBO records to return.",
                        "default": 10
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
