OrbTop

EU Beneficial Ownership Scraper - 9 Country UBO Aggregation

BUSINESSOTHER

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

  1. Pick a modeby_company_name, by_company_id, by_bo_name, or country_full_dump
  2. 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
  3. Provide a UK API key if you need PSC data — Free from Companies House, takes a minute to register, then UK results flow through
  4. 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