AIDEVELOPER TOOLS

Beneficial Ownership Investigation

Beneficial ownership investigation that traces the true controllers of any corporate entity using 6 advanced algorithms across 15 international data sources. Built for KYC/AML compliance teams, anti-corruption investigators, and financial crime analysts who need to cut through layered corporate structures to identify the natural persons who ultimately own or control a legal entity.

Try on Apify Store
$0.80per event
0
Users (30d)
0
Runs (30d)
90
Actively maintained
Maintenance Pulse
$0.80
Per event

Maintenance Pulse

90/100
Last Build
Today
Last Version
1d ago
Builds (30d)
8
Issue Response
N/A

Cost Estimate

How many results do you need?

analysis-runs
Estimated cost:$80.00

Pricing

Pay Per Event model. You only pay for what you use.

EventDescriptionPrice
analysis-runFull intelligence analysis run$0.80

Example: 100 events = $80.00 Β· 1,000 events = $800.00

Documentation

Beneficial ownership investigation that traces the true controllers of any corporate entity using 6 advanced algorithms across 15 international data sources. Built for KYC/AML compliance teams, anti-corruption investigators, and financial crime analysts who need to cut through layered corporate structures to identify the natural persons who ultimately own or control a legal entity.

The actor runs four sequential investigation phases: corporate registry collection from OpenCorporates (140+ jurisdictions), GLEIF, and jurisdiction-specific registries; director screening against INTERPOL, FBI, OFAC, and OpenSanctions; geocoded address clustering for shell company detection; and a composite scoring engine that applies six distinct algorithms to produce a graded opacity score with actionable findings. All phases run with parallel actor execution for speed.

What data can you extract?

Data PointSourceExample
πŸ“Š Overall opacity score6-algorithm composite0.72 (0.0–1.0 scale)
🏷️ Risk gradeComputed from opacityHIGH β€” Significant opacity detected
πŸ•ΈοΈ Ownership graph nodesCorporate registries14 entities, max depth 5
πŸ”— Ownership edgesGLEIF + OpenCorporates18 edges, circular detected
πŸ‘€ Nominee directors foundOpenCorporates records3 nominee directors
🏒 Formation agents detectedPattern matching2 formation agents (Trident Corp Services)
🌍 Secrecy jurisdiction hopsBVI, Cayman, Panama, 22 others4 hops through PA, VG, KY
⚠️ Sanctions/watchlist matchesOFAC, OpenSanctions, INTERPOL, FBI2 matches, severity: HIGH
πŸ“… Registration burstsKleinberg automaton1 burst, level 3, 6 entities, 2019-03
πŸ“ Address co-location clustersDBSCAN on geocoded data3 clusters, 11 entities sharing addresses
πŸ” Inferred beneficial ownerBayesian inferenceJan Marsalek, 73.4% confidence
πŸ“‹ Actionable recommendationsRule-based engineFile SAR, request UBO declarations

Why use Beneficial Ownership Investigation?

Manual beneficial ownership tracing for a complex corporate structure takes a compliance analyst 8–40 hours per entity: searching multiple registries, cross-referencing sanctions lists, geocoding registered addresses, and reasoning about probabilistic ownership. A single analyst hour costs $50–150. For high-risk counterparty reviews or regulatory submissions, this adds up fast.

Automated tools exist, but most provide only a corporate tree diagram with no risk scoring, no sanctions matching, and no statistical analysis of shell company patterns. This actor automates the full enhanced due diligence workflow β€” registry collection, person screening, geocoded clustering, and Bayesian inference β€” and outputs structured, machine-readable findings your compliance system can act on directly.

  • Scheduling β€” run quarterly or triggered-by-event re-screens to keep beneficial ownership data current with registry changes
  • API access β€” trigger investigations from your compliance workflow in Python, JavaScript, or any HTTP client without manual steps
  • Proxy rotation β€” registry and watchlist queries route through Apify's proxy infrastructure to avoid rate limiting at scale
  • Monitoring β€” receive Slack or email alerts when a run flags new CRITICAL or HIGH findings on a re-screened entity
  • Integrations β€” connect to Zapier, Make, Google Sheets, or your CRM to push findings into existing compliance workflows

Features

  • Recursive Ownership Unfolding (BFS with adversarial pruning) β€” traverses the ownership graph from the target entity outward, tracking depth, ownership percentages (stored as edge weights), and jurisdictional hops. Detects circular ownership structures and applies adversarial pruning to avoid infinite loops in deliberately obfuscated chains.
  • Cross-Lingual Transliteration Matching (5-stage phonetic pipeline) β€” applies Unicode normalization, Double Metaphone, Caverphone, Jaro-Winkler similarity, and token set ratio in sequence. Detects when sanctioned persons or entities appear under variant spellings across Latin, Cyrillic, Arabic, and CJK scripts β€” the most common sanctions evasion technique.
  • Temporal Registration Burst Detection (Kleinberg automaton) β€” models entity registration timestamps as a bursty event stream and fits a Kleinberg infinite-state automaton to identify periods of anomalously high registration frequency. Bursts, their level, duration, and the entities involved are all reported separately from the overall score.
  • Address Co-Location Clustering (DBSCAN) β€” geocodes up to 15 registered addresses per investigation using the Nominatim actor and applies DBSCAN density-based clustering. Multiple entities sharing the same registered address is a primary shell company indicator; each cluster receives a suspicion score weighted by jurisdictional risk.
  • Infrastructure Fingerprint Correlation (Weisfeiler-Lehman graph kernel) β€” compares shared digital infrastructure (domains, IP addresses, nameservers, TLS certificate issuers) across entities in the ownership network. The Weisfeiler-Lehman graph kernel measures structural similarity between infrastructure graphs to detect hidden connections not visible in registry data.
  • Bayesian Beneficial Ownership Inference (loopy belief propagation) β€” combines six evidence channels (ownership registration, officer overlap, address co-location, infrastructure sharing, sanctions co-occurrence, temporal co-registration) into a factor graph and runs loopy belief propagation to compute posterior ownership probabilities for each identified person. Reports convergence status and iteration count.
  • 22-jurisdiction secrecy scoring β€” tracks ownership hops through all 22 known secrecy jurisdictions (Panama, British Virgin Islands, Cayman Islands, Seychelles, Vanuatu, Marshall Islands, Liechtenstein, Monaco, and others) and applies a per-hop penalty to the opacity score.
  • Formation agent pattern detection β€” matches officer and company names against 18 known patterns including "nominee", "registered agent", "corporate services", "fiduciary", "offshore", and named formation agents (Mossack Fonseca, Asiaciti, Trident, Portcullis).
  • Director screening across 4 watchlists β€” screens up to 5 identified directors and officers against INTERPOL Red Notices, FBI Most Wanted, OFAC SDN List, and OpenSanctions simultaneously.
  • Parallel actor execution β€” Phase 1 registry calls and Phase 2 person screening calls run in parallel via Promise.all, cutting investigation time to under 5 minutes for most entities.
  • Weighted composite opacity score β€” the six algorithm scores combine with fixed weights (ownership 25%, Bayesian 20%, transliteration 15%, co-location 15%, infrastructure 15%, burst 10%) into a single 0.0–1.0 opacity value, graded CRITICAL / HIGH / ELEVATED / MODERATE / LOW.
  • Tiered recommendations β€” findings automatically trigger one of four recommendation tiers: annual re-screen (LOW), quarterly re-screen (MODERATE), enhanced monitoring + UBO declarations (HIGH), or SAR referral + forensic investigation (CRITICAL).

Use cases for beneficial ownership investigation

KYC/AML onboarding due diligence

Compliance teams at banks, fintechs, and payment processors must verify the beneficial owners of every new corporate client before onboarding. Manual registry searches across multiple jurisdictions take days and frequently miss nominee structures. This actor runs a full enhanced due diligence workflow in minutes, outputting a risk grade and ownership graph that feeds directly into the compliance decision.

Anti-corruption and financial crime investigation

Anti-corruption units and financial intelligence units need to trace ownership chains through secrecy jurisdictions to identify the natural persons behind suspected shell networks. The actor detects nominee directors, formation agents, and circular ownership β€” the three primary mechanisms used to conceal beneficial ownership β€” and scores each finding by severity for prioritized investigation.

Regulatory examination and supervisory review

Bank examiners and regulatory supervisors reviewing a financial institution's corporate client portfolio need to assess beneficial ownership risk at scale. The actor's structured JSON output integrates with compliance case management systems and provides the documentation trail regulators require to demonstrate adequate due diligence.

Asset tracing and litigation support

Law firms conducting asset tracing in fraud, divorce, or insolvency proceedings need to map corporate networks and identify controllers who may be hiding assets in nominee-held entities. The ownership graph, address clusters, and Bayesian inference output give litigators a starting map for further investigation and subpoena targeting.

Correspondent banking and de-risking decisions

Correspondent banks deciding whether to maintain or terminate banking relationships with foreign financial institutions need to assess the beneficial ownership opacity of their counterparty's client base. Periodic automated re-screening surfaces new risk indicators between manual review cycles.

Sanctions compliance and watchlist monitoring

Compliance officers responsible for ongoing sanctions monitoring need to detect when known or suspected sanctioned individuals gain ownership or control of previously clean entities. The cross-lingual transliteration matching catches name variants across scripts that standard exact-match screening misses.

How to investigate beneficial ownership

  1. Enter the entity name β€” type the exact legal name of the company to investigate, such as "Meridian Capital Holdings Ltd" or "Trident Global Services BV". The search is not case-sensitive and partial matches will be included.
  2. Set a jurisdiction (optional) β€” enter a two-letter ISO country code such as "GB", "KY", or "PA" to focus the search on a specific registry. Leave this field blank to query all supported registries globally.
  3. Run the investigation β€” click "Start" and wait approximately 3–8 minutes for the full 6-phase analysis to complete. Entities with large corporate networks or many directors will take longer.
  4. Download the report β€” click the Dataset tab to view results in the Apify console, or export as JSON, CSV, or Excel for your compliance system.

Input parameters

ParameterTypeRequiredDefaultDescription
entityNamestringYesβ€”Legal name of the corporate entity to investigate. Partial matches are included. Example: "Wirecard AG"
jurisdictionstringNo(all)ISO 3166-1 alpha-2 country code to focus on a specific national registry. Supported: GB, UK, CA, AU, NZ, and all OpenCorporates jurisdictions. Leave blank for global search.
includeDirectorsbooleanNotrueWhen true, screens all identified directors and officers against INTERPOL, FBI, OFAC, and OpenSanctions. Disable to speed up runs when director screening is not required.

Input examples

Standard investigation (global search with director screening):

{
    "entityName": "Meridian Capital Holdings",
    "includeDirectors": true
}

Jurisdiction-focused investigation:

{
    "entityName": "Trident Global Services",
    "jurisdiction": "KY",
    "includeDirectors": true
}

Fast registry-only scan (no director screening):

{
    "entityName": "Apex Innovations Ltd",
    "jurisdiction": "GB",
    "includeDirectors": false
}

Input tips

  • Use the full legal name β€” include "Ltd", "GmbH", "BV", or "LLC" when known. The search is tolerant of partial matches, but a precise name reduces false-positive records in the ownership graph.
  • Leave jurisdiction blank for offshore entities β€” if the entity might be registered in Panama, BVI, or Cayman Islands, a blank jurisdiction searches OpenCorporates' 140+ jurisdictions rather than a single registry.
  • Disable director screening for bulk runs β€” setting includeDirectors: false cuts run time by 30–60% when you only need the ownership graph and registry findings.
  • Run quarterly for high-risk counterparties β€” corporate structures change. Schedule periodic re-runs on CRITICAL and HIGH-graded entities to catch new nominees or registration events.

Output example

{
    "entity": "Meridian Capital Holdings Ltd",
    "jurisdiction": "global",
    "investigationDate": "2026-03-20T09:14:37.000Z",
    "overallRiskScore": 0.7143,
    "riskGrade": "HIGH β€” Significant opacity detected",
    "findings": [
        "CRITICAL: Circular ownership structure detected β€” potential concealment of beneficial ownership",
        "WARNING: 3 nominee director(s) detected in ownership chain",
        "ELEVATED: 4 hop(s) through secrecy jurisdictions",
        "ELEVATED: 1 temporal registration burst(s) detected β€” possible coordinated shell creation",
        "WARNING: 2 potential watchlist match(es) via transliteration matching",
        "WARNING: 2 address co-location cluster(s) β€” 9 entities sharing locations",
        "Inferred beneficial owner: Viktor Serov (confidence: 71.4%)"
    ],
    "recommendations": [
        "Enhanced monitoring required β€” significant opacity detected",
        "Verify beneficial ownership through independent sources",
        "Request certified UBO declarations from all identified controllers"
    ],
    "ownershipAnalysis": {
        "graph": {
            "nodes": [
                {
                    "id": "OC-00847291",
                    "name": "Meridian Capital Holdings Ltd",
                    "jurisdiction": "KY",
                    "depth": 0,
                    "opacityScore": 0.61,
                    "isNominee": false,
                    "isFormationAgent": false,
                    "registrationDate": "2018-04-12",
                    "address": "Harbour Place, 2nd Floor, 103 South Church Street, Grand Cayman",
                    "officers": ["Viktor Serov", "Trident Corporate Services Ltd"]
                }
            ],
            "edges": [
                { "source": "OC-00847291", "target": "OC-01922443", "ownershipPct": 100, "hopPenalty": 0.4 }
            ],
            "maxDepth": 5,
            "totalOpacity": 3.82,
            "circularOwnershipDetected": true,
            "nomineeCount": 3,
            "formationAgentCount": 2,
            "secrecyJurisdictionHops": 4
        },
        "summary": {
            "totalNodes": 14,
            "totalEdges": 18,
            "maxDepthReached": 5,
            "circularOwnership": true,
            "nominees": 3,
            "formationAgents": 2,
            "secrecyHops": 4,
            "totalOpacity": 3.82
        }
    },
    "sanctionsScreening": {
        "result": {
            "matches": [
                {
                    "entityName": "Viktor Serov",
                    "watchlistName": "Viktor Sergeyev",
                    "stage": "double_metaphone",
                    "similarity": 0.87,
                    "phoneticBonus": 0.09,
                    "finalScore": 0.96,
                    "source": "opensanctions"
                }
            ],
            "totalScreened": 8,
            "totalMatches": 2,
            "pipelineStats": [
                { "stage": "unicode_normalization", "matchesFound": 0 },
                { "stage": "double_metaphone", "matchesFound": 2 },
                { "stage": "caverphone", "matchesFound": 0 },
                { "stage": "jaro_winkler", "matchesFound": 0 },
                { "stage": "token_set_ratio", "matchesFound": 0 }
            ]
        },
        "severity": "CRITICAL",
        "personsScreened": 8
    },
    "registrationBursts": {
        "result": {
            "bursts": [
                {
                    "startDate": "2019-03-01",
                    "endDate": "2019-03-29",
                    "burstLevel": 3,
                    "entityCount": 6,
                    "entities": ["Meridian Capital Holdings Ltd", "Tidal Wave Holdings BV", "Coastal Ridge Investments Ltd"],
                    "jurisdiction": "KY",
                    "burstScore": 2.14,
                    "periodicity": null
                }
            ],
            "stateSequence": [0, 0, 1, 3, 3, 2, 0],
            "totalRegistrations": 14,
            "maxBurstLevel": 3
        },
        "summary": {
            "totalRegistrations": 14,
            "burstsDetected": 1,
            "maxBurstLevel": 3
        }
    },
    "addressClusters": {
        "summary": {
            "totalAddresses": 11,
            "totalGeocoded": 9,
            "clustersFound": 2,
            "noisePoints": 1,
            "maxSuspicionScore": 7.8
        }
    },
    "beneficialOwnership": {
        "summary": {
            "totalInferences": 5,
            "convergenceAchieved": true,
            "iterations": 12,
            "topInference": {
                "person": "Viktor Serov",
                "entity": "Meridian Capital Holdings Ltd",
                "posteriorProbability": 0.714,
                "evidenceBreakdown": {
                    "ownershipRegistration": 0.8,
                    "officerOverlap": 0.85,
                    "addressCoLocation": 0.5,
                    "infrastructureSharing": 0.5,
                    "sanctionsCoOccurrence": 0.5,
                    "temporalCoRegistration": 0.5
                },
                "iterations": 12,
                "converged": true
            }
        }
    },
    "opacityScore": {
        "entity": "Meridian Capital Holdings Ltd",
        "overallOpacity": 0.7143,
        "ownershipDepthScore": 0.6820,
        "transliterationRisk": 0.4800,
        "burstAnomalyScore": 0.3500,
        "coLocationScore": 0.6100,
        "infraConcealmentScore": 0.2200,
        "beneficialOwnerUncertainty": 0.2860,
        "grade": "HIGH β€” Significant opacity detected"
    },
    "dataSources": {
        "corporateRecords": 34,
        "leiRecords": 2,
        "watchlistEntries": 7,
        "geocodedAddresses": 9,
        "personsIdentified": 8
    }
}

Output fields

FieldTypeDescription
entitystringEntity name as submitted
jurisdictionstringJurisdiction searched ("global" if not specified)
investigationDatestringISO 8601 timestamp of the investigation run
overallRiskScorenumberComposite opacity score, 0.0–1.0 (higher = more opaque)
riskGradestringRisk label: LOW / MODERATE / ELEVATED / HIGH / CRITICAL
findings[]arrayHuman-readable findings, each prefixed with severity (CRITICAL / WARNING / ELEVATED)
recommendations[]arrayTiered action items derived from opacity score threshold
ownershipAnalysis.graph.nodes[]arrayOne entry per discovered entity in the ownership graph
ownershipAnalysis.graph.nodes[].idstringOpenCorporates company number or GLEIF LEI
ownershipAnalysis.graph.nodes[].namestringLegal entity name
ownershipAnalysis.graph.nodes[].jurisdictionstringRegistration jurisdiction ISO code
ownershipAnalysis.graph.nodes[].depthnumberHops from the target entity in the ownership graph
ownershipAnalysis.graph.nodes[].opacityScorenumberPer-node opacity contribution (0.0–1.0)
ownershipAnalysis.graph.nodes[].isNomineebooleanTrue if node matched formation agent / nominee patterns
ownershipAnalysis.graph.nodes[].officers[]arrayDirector and officer names extracted from registry
ownershipAnalysis.graph.edges[]arrayOwnership relationships between graph nodes
ownershipAnalysis.graph.edges[].ownershipPctnumberStated ownership percentage from registry
ownershipAnalysis.graph.edges[].hopPenaltynumberSecrecy jurisdiction hop penalty applied to this edge
ownershipAnalysis.summary.circularOwnershipbooleanTrue if circular ownership detected (concealment indicator)
ownershipAnalysis.summary.secrecyHopsnumberTotal hops through the 22 tracked secrecy jurisdictions
sanctionsScreening.result.matches[]arrayIndividual watchlist match records
sanctionsScreening.result.matches[].stagestringPhonetic pipeline stage that produced the match
sanctionsScreening.result.matches[].finalScorenumberMatch confidence 0.0–1.0 (>0.95 = CRITICAL)
sanctionsScreening.severitystringCLEAR / MODERATE / HIGH / CRITICAL
registrationBursts.result.bursts[]arrayDetected temporal registration anomalies
registrationBursts.result.bursts[].burstLevelnumberKleinberg automaton burst level (higher = more anomalous)
addressClusters.summary.clustersFoundnumberNumber of DBSCAN clusters (address co-location groups)
beneficialOwnership.summary.topInferenceobjectHighest-probability beneficial owner inference
beneficialOwnership.summary.topInference.posteriorProbabilitynumberBayesian posterior ownership probability
beneficialOwnership.summary.convergenceAchievedbooleanWhether loopy belief propagation converged
opacityScore.ownershipDepthScorenumberOwnership complexity sub-score (weight: 25%)
opacityScore.transliterationRisknumberSanctions phonetic match sub-score (weight: 15%)
opacityScore.burstAnomalyScorenumberRegistration burst sub-score (weight: 10%)
opacityScore.coLocationScorenumberAddress co-location sub-score (weight: 15%)
opacityScore.infraConcealmentScorenumberInfrastructure correlation sub-score (weight: 15%)
opacityScore.beneficialOwnerUncertaintynumberBayesian uncertainty sub-score (weight: 20%)
dataSources.corporateRecordsnumberTotal corporate registry records retrieved
dataSources.leiRecordsnumberGLEIF LEI records retrieved
dataSources.watchlistEntriesnumberTotal watchlist entries matched
dataSources.personsIdentifiednumberDirectors and officers identified and screened

How much does it cost to investigate beneficial ownership?

Beneficial Ownership Investigation uses pay-per-run pricing β€” you pay for the Apify platform compute time consumed. Each investigation typically costs $0.40–$1.00 depending on how many entities are discovered, how many directors are screened, and how many jurisdictions are searched. The free plan provides $5 of monthly credits β€” enough for 5–12 investigations.

ScenarioInvestigationsEstimated cost eachEstimated total
Quick test (single entity, no directors)1~$0.40~$0.40
Standard investigation (global search)1~$0.70~$0.70
Small batch (10 entities)10~$0.65~$6.50
Medium batch (50 entities)50~$0.65~$32.50
Ongoing compliance (200 re-screens/month)200~$0.60~$120

You can set a maximum spending limit per run to control costs. The actor stops when your budget is reached.

Comparable manual enhanced due diligence from a specialist provider costs $150–800 per entity report. With this actor, most compliance teams spend $20–120/month for the same coverage with machine-readable output.

Beneficial ownership investigation using the API

Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("ryanclinton/beneficial-ownership-investigation").call(run_input={
    "entityName": "Meridian Capital Holdings Ltd",
    "jurisdiction": "KY",
    "includeDirectors": True
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"Entity: {item['entity']}")
    print(f"Risk grade: {item['riskGrade']}")
    print(f"Opacity score: {item['overallRiskScore']:.3f}")
    print(f"Top finding: {item['findings'][0] if item['findings'] else 'None'}")
    top = item.get("beneficialOwnership", {}).get("summary", {}).get("topInference")
    if top:
        print(f"Inferred owner: {top['person']} ({top['posteriorProbability']*100:.1f}% confidence)")

JavaScript

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("ryanclinton/beneficial-ownership-investigation").call({
    entityName: "Meridian Capital Holdings Ltd",
    jurisdiction: "KY",
    includeDirectors: true
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    console.log(`Entity: ${item.entity}`);
    console.log(`Risk grade: ${item.riskGrade}`);
    console.log(`Opacity score: ${item.overallRiskScore.toFixed(3)}`);
    const top = item.beneficialOwnership?.summary?.topInference;
    if (top) {
        console.log(`Inferred owner: ${top.person} (${(top.posteriorProbability * 100).toFixed(1)}% confidence)`);
    }
}

cURL

# Start the investigation run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~beneficial-ownership-investigation/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entityName": "Meridian Capital Holdings Ltd",
    "jurisdiction": "KY",
    "includeDirectors": true
  }'

# Fetch results (replace DATASET_ID from the run response above)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"

How Beneficial Ownership Investigation works

Phase 1: Corporate registry collection (parallel)

The actor assembles a set of registry calls based on the input jurisdiction. All searches run in parallel using Promise.all. OpenCorporates (covering 140+ jurisdictions) and the GLEIF LEI registry are always queried. Jurisdiction-specific registries are conditionally added: UK Companies House for GB/UK, the Canada Business Registry for CA, the Australian Business Register for AU, and the New Zealand Companies Register for NZ. OFAC and OpenSanctions are also queried in this phase to build the watchlist baseline. Up to 40 OpenCorporates results and 15 LEI records are collected per entity name.

Phase 2: Director and officer screening (parallel)

If includeDirectors is enabled, the actor extracts all officer and director names from the corporate records collected in Phase 1. Up to 5 directors are screened in parallel against INTERPOL Red Notices and FBI Most Wanted. Each person triggers two simultaneous actor calls, so up to 10 parallel watchlist queries run in this phase. Results are merged into the consolidated watchlist entry list for use in Phase 4 algorithm scoring.

Phase 3: Geocoding for address clustering

Up to 15 unique registered addresses extracted from corporate records are geocoded using the Nominatim geocoder actor. Geocoded results (latitude, longitude) become the input to the DBSCAN clustering algorithm in Phase 4. The geocoding phase runs in parallel and skips addresses shorter than 5 characters (likely incomplete data).

Phase 4: Six-algorithm scoring engine

All six algorithms run sequentially on the data collected in Phases 1–3:

Algorithm 1 (BFS Unfolding) seeds a BFS queue with matching corporate records. Each node is scored against 18 nominee/formation-agent keyword patterns. Secrecy jurisdiction hops are counted using 22 ISO codes. Circular ownership is detected by tracking visited node IDs.

Algorithm 2 (Transliteration) runs up to 25 entity and person names through the 5-stage pipeline against all watchlist entries. Stages: Unicode normalization, Double Metaphone (30+ phoneme rules), Caverphone, Jaro-Winkler, and token set ratio. Each stage reports matches independently.

Algorithm 3 (Burst Detection) extracts registration dates, bins them into monthly intervals, and fits a Kleinberg infinite-state automaton assigning burst levels 0–3 to each interval. Consecutive level-1+ intervals are reported as burst events.

Algorithm 4 (DBSCAN Clustering) applies DBSCAN with eps = 0.001 degrees (~111 meters) and minPts = 2 to geocoded coordinates. Each cluster receives a suspicion score weighted by entity count, jurisdictional risk, and diversity index.

Algorithm 5 (WL Graph Kernel) builds an infrastructure graph from domains, IPs, nameservers, and TLS certificate issuers, then applies the Weisfeiler-Lehman graph kernel to compare structural similarity. High-kernel-value pairs are grouped into suspected shell networks.

Algorithm 6 (Bayesian Inference) constructs a factor graph over persons and entities with six evidence channels. Loopy belief propagation computes posterior ownership probabilities with convergence status reported in output.

Phase 5: Composite opacity scoring and report generation

The six sub-scores combine with fixed weights into a single overallOpacity value (0.0–1.0). Threshold-based rules map findings to severity labels (CRITICAL / WARNING / ELEVATED). Recommendation tiers fire at opacity thresholds of 0.75, 0.55, and 0.35. The complete structured report is pushed to the Apify dataset.

Tips for best results

  1. Use the full registered legal name. Including legal suffixes ("Ltd", "GmbH", "BV", "SA") significantly reduces false-positive records in the ownership graph. The actor uses partial matching, so "Meridian Capital" will find "Meridian Capital Holdings Ltd", but specificity improves precision.

  2. Start with a global search, then narrow. Leave the jurisdiction field blank on the first run to discover all registry presences. Once you have the ownership graph, re-run with specific jurisdiction codes for entities of interest to get deeper registry detail.

  3. Treat opacity scores above 0.55 as review triggers. The HIGH and CRITICAL thresholds (0.55 and 0.75) are calibrated against known shell company cases. Scores in these ranges warrant manual review even when individual findings seem ambiguous.

  4. Check the pipelineStats array in sanctions results. The 5-stage transliteration pipeline reports which stages produced matches. A match at the double_metaphone stage with a finalScore above 0.90 is highly reliable. A match only at token_set_ratio with a score below 0.80 may be a false positive.

  5. Combine with WHOIS Domain Lookup for infrastructure correlation. The actor's infrastructure phase is most effective when entity domains are known. Run WHOIS lookups on entity domains before or after this investigation to enrich the infrastructure fingerprint data.

  6. Schedule quarterly re-runs on all HIGH and CRITICAL entities. Corporate structures change. Nominee directors are replaced, new entities are registered in burst patterns, and addresses change. Periodic re-screening detects these changes before your next manual review cycle.

  7. Pipe HIGH-grade results directly into HubSpot Lead Pusher to create compliance case records automatically in your CRM for follow-up assignment.

  8. For large entity portfolios, batch by jurisdiction. Searching all jurisdictions simultaneously maximizes coverage but increases run time. For known-jurisdiction entities, specifying the jurisdiction code reduces Phase 1 call volume and cuts run time by 30–50%.

Combine with other Apify actors

ActorHow to combine
OFAC Sanctions SearchRun standalone OFAC checks before a full investigation to pre-screen low-risk entities and only trigger the full investigation for partial matches
OpenSanctions SearchUse as a supplementary global watchlist source for entities in jurisdictions not covered by OFAC
OpenCorporates SearchQuery the corporate registry directly for entities where you already know the jurisdiction, then feed the company numbers into this actor
WHOIS Domain LookupExtract domain registration data for the entity and its known subsidiaries to enrich the infrastructure fingerprint phase
GLEIF LEI LookupResolve the entity's Legal Entity Identifier before the investigation to anchor the ownership graph with authoritative LEI data
UK Companies HousePull detailed PSC (Persons with Significant Control) filings for UK-registered entities to supplement the beneficial ownership inference
Company Deep ResearchRun after a HIGH or CRITICAL finding to compile a comprehensive intelligence dossier on the entity and its identified controllers

Limitations

  • No real-time registry updates. The actor queries live APIs, but registry data latency varies by jurisdiction. Companies House typically updates within 24 hours; some registries update weekly or monthly.
  • OpenCorporates coverage varies. Some jurisdictions have incomplete or historical-only data in OpenCorporates. Offshore registries (BVI, Cayman, Seychelles) have limited publicly searchable records by design.
  • Infrastructure correlation requires domain data. The Weisfeiler-Lehman graph kernel phase requires known entity domains to produce meaningful correlations. In standalone mode with no domain input, the infrastructure sub-score defaults to near-zero and does not contribute meaningfully to the overall opacity score.
  • Director screening is capped at 5 persons. To control run time and cost, only the first 5 identified directors are screened against law enforcement databases. Entities with large boards may have unscreened officers.
  • Transliteration matching can produce false positives. Phonetic similarity across languages produces occasional false-positive watchlist matches. Always review matches with finalScore below 0.85 manually before taking compliance action.
  • Geocoding depends on address quality. Registered addresses in corporate records are often abbreviated or formatted inconsistently. Low-quality address strings may fail geocoding and be excluded from DBSCAN clustering, reducing cluster coverage.
  • Bayesian inference convergence is not guaranteed. The loopy belief propagation algorithm may not converge for highly circular or sparse evidence graphs. Non-converged results are flagged in the output with convergenceAchieved: false and should be treated as preliminary.
  • The actor does not access closed or paid registries. Beneficial Register data in many jurisdictions (e.g., Luxembourg, Netherlands, many US states) requires authenticated or paid API access not available in this actor.
  • Re-running produces slightly different results. API query ordering and parallel execution timing can cause minor variation in which records are included in the ownership graph between runs on the same entity.

Integrations

  • Zapier β€” trigger an investigation automatically when a new counterparty is added to your CRM and push findings back as a contact note
  • Make β€” build multi-step compliance workflows: run investigation, filter by risk grade, create tasks in Jira or Monday for HIGH and CRITICAL cases
  • Google Sheets β€” export investigation results to a compliance tracker spreadsheet for review and sign-off workflows
  • Apify API β€” trigger investigations programmatically from your compliance case management system and receive structured JSON results
  • Webhooks β€” receive a webhook notification when a HIGH or CRITICAL investigation completes, triggering downstream alert or escalation workflows
  • LangChain / LlamaIndex β€” feed investigation findings into an AI compliance assistant to generate narrative due diligence memos or answer investigator questions about the ownership structure

Troubleshooting

  • Run returns empty findings or all findings say "No significant concealment indicators detected". This typically means the entity name did not match any corporate records. Check spelling, try removing legal suffixes ("Ltd", "Inc"), or try a shorter partial name. If the entity is registered exclusively in a jurisdiction not covered by OpenCorporates, no records will be retrieved.

  • Sanctions screening shows no matches even though the entity is sanctioned. The OFAC and OpenSanctions queries use the entity name as submitted. If the sanctioned entity uses a significantly different name, the transliteration pipeline may not bridge the gap. Try submitting alternative known names or transliterations of the entity name.

  • Run times exceed 10 minutes. Large corporate networks with many subsidiaries and directors trigger more parallel actor calls. Set includeDirectors: false to cut run time, or specify a jurisdiction code to reduce registry calls. If runs are consistently slow, increase memory allocation to 512 MB in the actor settings.

  • The beneficialOwnership.summary.convergenceAchieved field is false. The loopy belief propagation algorithm did not reach a stable state, typically because the evidence graph is too sparse or too circular. The topInference result is still useful as a directional indicator but should not be relied on as a definitive ownership conclusion.

  • Address clusters are empty despite many registered addresses. Geocoding failures on non-standard address formats (e.g., P.O. Box addresses, addresses in non-Latin scripts) reduce the geocoded address count below the DBSCAN minPts = 2 threshold. The ownership graph and watchlist findings remain valid even without clustering results.

Responsible use

  • This actor queries publicly available corporate registry data, sanctions watchlists, and law enforcement databases.
  • Beneficial ownership findings are probabilistic, not legal determinations. Do not use investigation output as the sole basis for regulatory filings or legal action without independent verification.
  • Comply with GDPR and applicable data protection laws when processing personal data about directors and officers identified in the investigation.
  • Do not use this actor to investigate individuals who are not in their capacity as corporate officers or beneficial owners of legal entities.
  • For guidance on web scraping and data processing legality, see Apify's guide.

FAQ

How does beneficial ownership investigation work? The actor runs four phases: it collects corporate records from up to 7 registries in parallel, screens identified directors against 4 law enforcement and sanctions databases, geocodes registered addresses for clustering, then runs 6 algorithms (BFS ownership unfolding, 5-stage transliteration matching, Kleinberg burst detection, DBSCAN clustering, Weisfeiler-Lehman graph kernel, and Bayesian loopy belief propagation) to produce a composite opacity score graded LOW through CRITICAL.

What registries does the beneficial ownership investigation search? The actor always queries OpenCorporates (140+ jurisdictions), the GLEIF LEI registry, OFAC, and OpenSanctions. Based on the jurisdiction input, it additionally queries UK Companies House (GB/UK), the Canada Business Registry (CA), the Australian Business Register (AU), or the New Zealand Companies Register (NZ). Leave the jurisdiction field blank to query all supported registries.

How accurate is the beneficial ownership inference? The Bayesian inference engine reports a posterior probability for each person-entity ownership pair. Probabilities above 70% indicate strong evidence from multiple channels; below 50% indicates weak or conflicting evidence. The inference is a probabilistic estimate from public data, not a definitive legal determination. It should be used to direct further investigation, not as a standalone compliance conclusion.

How many beneficial ownership investigations can I run per month? As many as your Apify budget allows. Each investigation costs approximately $0.40–$1.00. Apify's free plan provides $5 of monthly credits (5–12 investigations). The $49/month Starter plan provides $49 of credits (50–120 investigations). There is no hard per-month cap β€” you pay for what you use.

Is it legal to investigate beneficial ownership using public registry data? Yes. All data sources queried (OpenCorporates, Companies House, GLEIF, OFAC, OpenSanctions, INTERPOL, FBI) are publicly available databases. Beneficial ownership investigation is a legally required activity under AML/KYC regulations in most jurisdictions. For a detailed analysis, see Apify's web scraping legality guide.

How is this different from commercial beneficial ownership databases like Refinitiv World-Check or Bureau van Dijk Orbis? Commercial platforms charge $15,000–$100,000+ per year for subscription access to proprietary beneficial ownership databases. This actor uses the same publicly available primary sources but applies advanced algorithmic analysis (transliteration matching, Kleinberg burst detection, Bayesian inference) that many commercial tools do not offer. It does not include proprietary data from paid closed registries.

What is an opacity score and how is it calculated? The opacity score (0.0–1.0) measures how difficult it is to determine the true beneficial owner of an entity. It combines six sub-scores with fixed weights: ownership complexity from BFS unfolding (25%), Bayesian owner uncertainty (20%), transliteration risk (15%), address co-location (15%), infrastructure correlation (15%), and registration burst anomaly (10%). Scores above 0.75 trigger CRITICAL grade; above 0.55 trigger HIGH; above 0.35 trigger ELEVATED; above 0.15 trigger MODERATE; below 0.15 is LOW.

What secrecy jurisdictions does the actor track? The actor tracks 22 secrecy jurisdictions: Panama (PA), British Virgin Islands (VG), Cayman Islands (KY), Belize (BZ), Seychelles (SC), Samoa (WS), Vanuatu (VU), Marshall Islands (MH), Bermuda (BM), Turks and Caicos (TC), Anguilla (AI), Montserrat (MS), Jersey (JE), Guernsey (GG), Isle of Man (IM), Gibraltar (GI), Liechtenstein (LI), Monaco (MC), Andorra (AD), San Marino (SM), Mauritius (MU), and Lebanon (LB). Each hop through a secrecy jurisdiction adds a penalty to the opacity score.

Can I use this for Corporate Transparency Act (CTA) or EU AMLD beneficial ownership compliance? Yes. The investigation output documents the ownership chain, identifies persons of interest, and provides supporting evidence from independent registry data β€” the components needed for Beneficial Ownership Information (BOI) reports under FinCEN's CTA rules or PSC declarations under EU AMLD directives. The output does not constitute a legal filing; it supports the documentation your compliance team prepares.

What happens if the entity name matches many unrelated companies? The actor retrieves up to 40 records from OpenCorporates and 15 from GLEIF. Records are filtered by name similarity to the target entity. If many partial matches exist, the ownership graph will include unrelated entities, which may produce false-positive clustering or burst detections. Use the jurisdiction parameter to scope the search, or use a more specific entity name.

Can I schedule this actor to run automatically? Yes. Apify's built-in scheduler allows you to run this actor on any interval (daily, weekly, monthly). Set up a scheduled task in the Apify console or via the API with a fixed entityName input. Use webhooks to receive notifications when a re-screen produces a higher risk grade than the previous run.

Help us improve

If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:

  1. Go to Account Settings > Privacy
  2. Enable Share runs with public Actor creators

This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.

Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise compliance integrations, reach out through the Apify platform.

How it works

01

Configure

Set your parameters in the Apify Console or pass them via API.

02

Run

Click Start, trigger via API, webhook, or set up a schedule.

03

Get results

Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.

Use cases

Sales Teams

Build targeted lead lists with verified contact data.

Marketing

Research competitors and identify outreach opportunities.

Data Teams

Automate data collection pipelines with scheduled runs.

Developers

Integrate via REST API or use as an MCP tool in AI workflows.

Ready to try Beneficial Ownership Investigation?

Start for free on Apify. No credit card required.

Open on Apify Store