EU Beneficial Ownership Scraper - 9 Country UBO Aggregation
EU Beneficial Ownership Multi-Country Scraper
Aggregate beneficial ownership data across EU member-state registers — UK PSC, Poland CRBR, and known-closed registers — from a single input. Returns one normalized record per beneficial owner, with company identifiers, control percentages, residence, nationality, and register status across the nine countries that allow programmatic access (with status flags for the seven closed by CJEU C-37/20).
EU UBO Scraper Features
- Queries the UK Persons with Significant Control register and Poland's CRBR from one job
- Three lookup modes: by company ID (CRN, NIP, IČO, KBO), by company name, or by beneficial owner name
- Handles the seven post-CJEU closed registers (DE, NL, AT, FR, IE, LU, MT) by returning a labeled status record instead of failing the run
- Normalizes ownership percentage bands into
[min, max]numeric ranges across UK and PL register dialects - Returns nationality, residence country, residence city, birth year, and birth month — every field the public register exposes
- Cross-reference flag scaffolded for OFAC/EU/UN sanctions matching against beneficial owner names
- Validates Polish NIP checksums before hitting the CRBR API. Saves you a polite "invalid request" round trip
- Pure JSON API access, no browser, no proxy required
Who Uses EU Beneficial Ownership Data?
- AML and KYB analysts — Run beneficial owner checks across cross-border corporate structures without paying enterprise list prices
- Compliance teams — Build screening pipelines that flag PSC changes, new BO appointments, or ownership cessations
- Sanctions screening vendors — Feed normalized UBO records into match engines without re-writing per-country adapters
- Investigative journalists — Trace shell company chains across UK and EU jurisdictions using a single query interface
- Due diligence firms — Pull a defensible audit trail of which registers were queried, which returned data, and which were closed by ruling
How the EU UBO Scraper Works
- Pick a mode —
by_company_name,by_company_id,by_bo_name, orcountry_full_dump - Choose countries — Pass any combination of ISO codes; the scraper routes each one to its register adapter or returns a status record explaining why no data is available
- Provide a UK API key if you need PSC data — Free from Companies House, takes a minute to register, then UK results flow through
- Returns one normalized record per beneficial owner — Same schema regardless of which register the data came from, so downstream pipelines don't branch
The scraper does not invent data. Closed registers (per CJEU 2022) return a status record citing the ruling, not a zero result. That distinction matters when you're documenting due diligence.
Input
{
"mode": "by_company_name",
"query": "Accenture",
"countries": ["UK", "PL", "BE", "CZ"],
"includeSanctionsCrossRef": true,
"includePepCrossRef": false,
"ukCompaniesHouseApiKey": "your-companies-house-key",
"maxItems": 50
}
| Field | Type | Default | Description |
|---|---|---|---|
| mode | string | by_company_name | Lookup mode. One of by_company_id, by_company_name, by_bo_name, country_full_dump. |
| query | string | (required) | Company name, company identifier, or beneficial owner name to search for. |
| countries | array | ["UK","BE","CZ","SI","PL","ES","IT"] |
ISO country codes to query. Closed registers return status records, not data. |
| includeSanctionsCrossRef | boolean | true | Cross-reference beneficial owners against OFAC/EU/UN sanctions lists. |
| includePepCrossRef | boolean | false | Cross-reference against Politically Exposed Persons datasets. |
| ukCompaniesHouseApiKey | string | none | Required for UK PSC lookups. Free key from developer.company-information.service.gov.uk. |
| czIssmToken | string | none | Optional token for the Czech ISSM subscription tier. |
| maxItems | integer | 10 | Maximum number of UBO records to return across all countries. |
Polish NIP lookup
{
"mode": "by_company_id",
"query": "8992689516",
"countries": ["PL"],
"maxItems": 20
}
Beneficial owner name search
{
"mode": "by_bo_name",
"query": "Kowalski",
"countries": ["PL"],
"maxItems": 25
}
EU UBO Scraper Output Fields
{
"country": "UK",
"source_register": "UK PSC (Companies House)",
"subject_company_id": "04684915",
"subject_company_name": "ACCENTURE (UK) LIMITED",
"subject_country": "UK",
"bo_full_name": "Accenture Plc",
"bo_first_name": null,
"bo_last_name": null,
"bo_dob_year": null,
"bo_dob_month": null,
"bo_nationality": null,
"bo_residence_country": "Ireland",
"bo_residence_city": "Dublin",
"control_type": "ownership-of-shares-75-to-100-percent",
"ownership_percentage_min": 75,
"ownership_percentage_max": 100,
"control_start_date": "2016-06-30",
"control_end_date": null,
"is_active": true,
"sanctions_match_flags": "",
"pep_match_flags": "",
"register_status": "open"
}
| Field | Type | Description |
|---|---|---|
| country | string | ISO code of the register that returned this record. |
| source_register | string | Name of the register (UK PSC, Poland CRBR, etc.). |
| subject_company_id | string | Company identifier in the source register (CRN, NIP, IČO, KBO). |
| subject_company_name | string | Registered company name. |
| subject_country | string | Country of incorporation of the subject company. |
| 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 (full DOB is not exposed by most registers). |
| bo_dob_month | integer | Birth month, 1–12. |
| bo_nationality | string | Nationality as ISO code or country name. |
| bo_residence_country | string | Country of residence. |
| bo_residence_city | string | City of residence. |
| control_type | string | Nature of control: ownership, voting, control, other. |
| ownership_percentage_min | number | Minimum ownership percentage (registers report bands, not exact values). |
| ownership_percentage_max | number | Maximum ownership percentage. |
| control_start_date | string | ISO 8601 date beneficial ownership began. |
| control_end_date | string | ISO 8601 date ownership ceased, if applicable. |
| is_active | boolean | Whether beneficial ownership is currently active. |
| sanctions_match_flags | string | Comma-separated sanctions list matches; empty string if none. |
| pep_match_flags | string | Comma-separated PEP dataset matches; empty string if none. |
| register_status | string | open, closed-by-cjeu-2022, partial, api-key-required, no-results, fetch-error. |
| _status_message | string | Human-readable explanation when the record is a status flag rather than UBO data. |
FAQ
How do I scrape UK PSC data?
EU UBO Scraper queries the UK Persons with Significant Control register via the official Companies House API. You need a free API key from developer.company-information.service.gov.uk — paste it into the ukCompaniesHouseApiKey field and any UK query returns PSC records. Without a key, the scraper returns a guidance record telling the user where to get one.
Why are German and French registers returning empty records?
EU UBO Scraper returns a closed-by-cjeu-2022 status record for DE, NL, AT, FR, IE, LU, and MT. The European Court of Justice ruling in C-37/20 (November 2022) restricted public access to those registers to parties demonstrating a "legitimate interest" — programmatic access is no longer available. The status record exists so your audit log shows the register was queried, not silently skipped.
What country codes are supported?
EU UBO Scraper has live adapters for UK and PL. For BE, CZ, SI, ES, IT, BG, RO, HR, LV, LT, FI, SE, EL, PT, DK the scraper returns an adapter-not-implemented status record — the register is known to be open, but the country-specific adapter hasn't been wired up yet. Need a specific country adapter? File an issue.
How much does the EU UBO Scraper cost to run?
EU UBO Scraper is priced per UBO record returned via the pay-per-event model. Status records (closed registers, no-results, adapter-not-implemented) count as records too, since they represent a defensible audit trail of which registers were checked.
Does this need proxies?
EU UBO Scraper does not need proxies. UK Companies House and Poland CRBR are public APIs that accept datacenter IPs without complaint.
Need More Features?
Need a specific country adapter (BE KBO, CZ ISSM, SI AJPES), PEP/sanctions list integration, or a different output schema? File an issue or get in touch.
Why Use the EU UBO Scraper?
- Cross-border in one job — UK and PL in the same run with a normalized schema. Most alternatives make you write per-country adapters.
- Closed-register transparency — Records the CJEU ruling explicitly instead of returning silent zeros, which matters when a regulator asks how thorough your check was
- Affordable — One actor at pay-per-record beats the multi-thousand-dollar minimums for enterprise UBO providers, especially for spot-check workflows