<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: OpenRegistry</title>
    <description>The latest articles on DEV Community by OpenRegistry (@openregistry).</description>
    <link>https://dev.to/openregistry</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3887433%2F5bf952c8-814a-4f0d-be42-3667f94e9592.png</url>
      <title>DEV Community: OpenRegistry</title>
      <link>https://dev.to/openregistry</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/openregistry"/>
    <language>en</language>
    <item>
      <title>Live UK director-change detection on Companies House: 4 real cases from this month</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Mon, 11 May 2026 04:24:54 +0000</pubDate>
      <link>https://dev.to/openregistry/live-uk-director-change-detection-on-companies-house-4-real-cases-from-this-month-nd4</link>
      <guid>https://dev.to/openregistry/live-uk-director-change-detection-on-companies-house-4-real-cases-from-this-month-nd4</guid>
      <description>&lt;p&gt;Most KYB pipelines I've seen treat the UK registry like a monthly snapshot. Aggregators such as &lt;a href="https://openregistry.sophymarine.com/vs/opencorporates" rel="noopener noreferrer"&gt;OpenCorporates&lt;/a&gt; ingest the Companies House bulk feed once a day (or weekly, for some non-UK jurisdictions), build their own index, and resell. That's fine for company name search and stable fields. It breaks when a director leaves or a corporate restructuring triggers a PSC change, because the buyer of that snapshot is looking at last week's truth.&lt;/p&gt;

&lt;p&gt;Here are four director changes that happened on Companies House over the past 30 days, with the actual filing-to-detection lag, queried live through an MCP server I run at &lt;a href="https://openregistry.sophymarine.com/mcp" rel="noopener noreferrer"&gt;openregistry.sophymarine.com/mcp&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1: BP plc, director resignation, 5 days ago
&lt;/h2&gt;

&lt;p&gt;On 6 May 2026, Thierry Dominique Gerard Garnier stepped down from the board of BP plc (Companies House number 00445790). The TM01 termination form was filed the next day, 7 May. Querying &lt;code&gt;list_filings&lt;/code&gt; against the MCP server today (11 May) shows it as the most recent entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"filing_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-07"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"officers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"termination-director"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"officer_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Thierry Dominique Gerard Garnier"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"termination_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-06"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;File-to-detect lag: zero. The data is the registry's response, returned in 80 ms. No nightly ingest. No snapshot cache.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2: Unilever plc, three directors out on the same day
&lt;/h2&gt;

&lt;p&gt;On 23 April 2026, three directors left the board of Unilever plc (00102498) on the same day: Karen Ann Richardson, Simon Peter Henry, and Melody Boone Meyer. Three separate TM01s were filed on 27 April, 4 days after the actual termination. Companies House had them by 27 April. Anyone querying live had access to all three within minutes of CH receiving the forms.&lt;/p&gt;

&lt;p&gt;If you were holding a 30-day &lt;a href="https://openregistry.sophymarine.com/vs/opencorporates" rel="noopener noreferrer"&gt;OpenCorporates&lt;/a&gt; snapshot from say 20 April, you would have shown those three as active directors of a FTSE 100 company for ~14 days after they had left. For a KYC desk approving counterparty risk on Unilever, that's a window where every report cites stale governance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 3: Wise plc, capital change + new director appointment
&lt;/h2&gt;

&lt;p&gt;Wise plc (13211214) had two events in March 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 March: Mr Scott Anthony Hill appointed director (AP01)&lt;/li&gt;
&lt;li&gt;25 March: capital alteration / share redemption (SH02)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Filings dates were 12 March and 7 May respectively, so the appointment was visible within 10 days, and the capital change within 6 weeks. The gap between action date and filing date is the legal filing window, not the registry's delay. CH publishes within hours of receiving the form.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 4: Stripe Payments UK Ltd, corporate director change
&lt;/h2&gt;

&lt;p&gt;Stripe Payments UK Ltd (08480771) had a corporate director change involving Stripe, Inc. on 3 January 2026, filed on 14 January. A natural-person appointment followed on 10 February (Ms Helen Claire McGrath), filed on 17 February. Both events were visible through live registry queries within a week, while many ingestion-based services were still serving December data.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run this yourself
&lt;/h2&gt;

&lt;p&gt;The MCP server gives you 27 jurisdictions. For UK Companies House specifically, the relevant tool is &lt;code&gt;list_filings&lt;/code&gt; with &lt;code&gt;jurisdiction: "GB"&lt;/code&gt; and a &lt;code&gt;company_id&lt;/code&gt;. The response carries everything Companies House returns: the TM01, AP01, SH01, SH02, CS01 form types, the officer or PSC names, the action date versus the filing date, and a &lt;code&gt;document_id&lt;/code&gt; you can pass to &lt;code&gt;fetch_document&lt;/code&gt; to retrieve the actual PDF.&lt;/p&gt;

&lt;p&gt;Here's the discovery flow for Claude Desktop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openregistry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://openregistry.sophymarine.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste that into Claude Desktop's developer config, restart, and prompt: &lt;em&gt;"What's the most recent director change at Unilever plc?"&lt;/em&gt; The agent calls &lt;code&gt;search_companies&lt;/code&gt;, then &lt;code&gt;list_filings&lt;/code&gt;, then summarizes. Free anonymous tier; no API key.&lt;/p&gt;

&lt;p&gt;For non-Claude clients (Cursor, Cline, Goose, Zed, Gemini CLI), point them at the same URL. The transport is MCP Streamable HTTP with OAuth 2.1 discovery at the standard &lt;code&gt;/.well-known/oauth-authorization-server&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this sits in the KYB stack
&lt;/h2&gt;

&lt;p&gt;If you currently run a Companies House data pipeline through a static-snapshot vendor, here are the trade-offs of swapping in a live-query model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Freshness: every query goes to CH directly. Files appear when CH publishes, not on the vendor's ingest schedule.&lt;/li&gt;
&lt;li&gt;Cost: the free tier is 30 requests per minute. Pro is $9/month at 180 rpm; Max is $29/month at 900 rpm. Enterprise is custom.&lt;/li&gt;
&lt;li&gt;Coverage: 27 jurisdictions today including UK, Germany, France, Italy, Spain, Poland, Cyprus, Liechtenstein, Cayman, Korea OpenDART, plus 17 others. The &lt;a href="https://openregistry.sophymarine.com/docs/jurisdictions/gb" rel="noopener noreferrer"&gt;UK jurisdiction reference&lt;/a&gt; and the &lt;a href="https://openregistry.sophymarine.com/docs" rel="noopener noreferrer"&gt;docs index&lt;/a&gt; describe what each registry exposes.&lt;/li&gt;
&lt;li&gt;Document access: &lt;code&gt;fetch_document&lt;/code&gt; returns the upstream PDF or iXBRL bytes. The statutory record is the answer, not a parsed approximation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A more detailed look at the UK API specifically, including post-ECCTA changes and what the API now returns versus what it withdrew, is in &lt;a href="https://dev.to/openregistry/uk-companies-house-post-eccta-reality-api-guide-3mh1"&gt;this earlier post on Companies House post-ECCTA reality&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For teams evaluating an &lt;a href="https://openregistry.sophymarine.com/vs/opencorporates" rel="noopener noreferrer"&gt;OpenCorporates alternative&lt;/a&gt; that runs live against the source registries, the side-by-side comparison is at openregistry.sophymarine.com/vs/opencorporates. Same data sources, different freshness model.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this doesn't replace
&lt;/h2&gt;

&lt;p&gt;Live registry queries cover the registry. They don't cover sanctions lists, court records, beneficial-owner registries that require AML-gated access (the EU CJEU rulings on these are real), adverse-media screening, or proprietary subscription feeds. If your stack needs all of that bundled with one contract, you're still looking at Sayari, Kharon, or Castellum.AI.&lt;/p&gt;

&lt;p&gt;For teams just looking for an &lt;a href="https://openregistry.sophymarine.com/vs/opencorporates" rel="noopener noreferrer"&gt;OpenCorporates alternative&lt;/a&gt; that returns the registry's own response on every call, with the underlying document bytes available, the live MCP path covers it, and you can run it free.&lt;/p&gt;

&lt;p&gt;If you've used live registry queries on other jurisdictions and seen edge cases where the public API doesn't cover something a commercial product does, I'd be interested. Comments below.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>kyb</category>
      <category>compliance</category>
      <category>programming</category>
    </item>
    <item>
      <title>Three failure modes of AI agents on company-registry data</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Thu, 07 May 2026 12:22:29 +0000</pubDate>
      <link>https://dev.to/openregistry/three-failure-modes-of-ai-agents-on-company-registry-data-44pp</link>
      <guid>https://dev.to/openregistry/three-failure-modes-of-ai-agents-on-company-registry-data-44pp</guid>
      <description>&lt;p&gt;I've spent the last six weeks watching AI agents try to do KYB and corporate due-diligence work over MCP. The agents themselves are mostly fine. The data layer underneath them is the part that breaks. Three failure modes show up in almost every workflow, and most teams don't notice until a real review surfaces a bad result.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The aggregator-snapshot lag
&lt;/h2&gt;

&lt;p&gt;The default architecture for a "company data API" is: a vendor (OpenCorporates, Sayari, Bureau van Dijk / Moody's Orbis, Kyckr, Refinitiv, Middesk) ingests the upstream registry on a refresh cycle, normalises everything into their schema, and resells the snapshot. Most snapshots refresh every 6–24 hours.&lt;/p&gt;

&lt;p&gt;For a static dossier, that's fine. For an agent making a real-time decision, it's a hidden time bomb. UK Companies House publishes administration filings the same day they're submitted. A counterparty that filed Notice of Appointment of Administrators yesterday afternoon will not appear as &lt;code&gt;dissolved&lt;/code&gt; in BvD's snapshot until tomorrow morning at the earliest, and often longer. If your agent's KYB step looks "active" because it's reading a snapshot that was correct twelve hours ago, the audit trail will record an active counterparty even though the counterparty was insolvent at the time of the call.&lt;/p&gt;

&lt;p&gt;The fix isn't faster snapshots. It's calling the upstream registry directly. The trade-off is real: upstream APIs are slower, less normalised, sometimes flaky. But for any decision the agent might be cited on later, the upstream call is the only defensible source.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Schema normalisation that hides jurisdictional truth
&lt;/h2&gt;

&lt;p&gt;Every registry has its own concept of who controls a company. UK Companies House publishes Persons of Significant Control (PSC), a binary "yes / no" flag with statutory thresholds. Germany's Handelsregister lists Geschäftsführer (managing directors) and shareholders separately, with shareholding written in the deed of incorporation. Korea's OpenDART exposes major shareholders with quarterly disclosure cadence. Cayman's CIMA and Companies Registry expose controlling parties only via TCSP-mediated requests for licensed entities.&lt;/p&gt;

&lt;p&gt;Aggregators flatten all of this into a single "Beneficial Owners" table. The flattening is what kills you. A 25.1% shareholder in a German GmbH is not a PSC under UK rules but is reportable under German rules; if your agent receives a normalised "is_beneficial_owner = false" because the aggregator picked one jurisdiction's threshold, you've lost the actual answer. Worse, aggregators rarely flag &lt;em&gt;which&lt;/em&gt; registry they decided not to surface.&lt;/p&gt;

&lt;p&gt;The pattern that works: keep the upstream field names, return the upstream values unchanged, and let the agent reason about jurisdiction. If your tool exposes &lt;code&gt;psc_data&lt;/code&gt; for UK and &lt;code&gt;gesellschafter_data&lt;/code&gt; for DE, the agent figures out the difference. If you exposed &lt;code&gt;beneficial_owner&lt;/code&gt; and lost the qualifier, the agent can't recover it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Cross-border fan-out that doesn't fan out
&lt;/h2&gt;

&lt;p&gt;The hardest problem in real KYB is following an ownership chain across registries. Iceland Foods Ltd is owned by WD FF MIDCO LIMITED is owned by ICELAND VLNCO LIMITED is owned by LANNIS LIMITED, which finally lists eight named individuals as PSCs. Three of those layers are UK Companies House, but the same shape appears with German GmbH owners of UK Ltd subsidiaries, Cayman holdcos owning Hong Kong opcos, Polish KRS spółka z o.o. owners of Czech ARES s.r.o.&lt;/p&gt;

&lt;p&gt;If your data layer is one country at a time, the agent has to do registry routing itself. That means it has to know that "WD FF MIDCO LIMITED" is a UK company name, parse the company number into a jurisdiction code, switch which API to call, and stitch results across calls. Every one of those steps is a place where the LLM hallucinates a jurisdiction or fabricates a company number.&lt;/p&gt;

&lt;p&gt;The solution is to expose a single tool surface that takes &lt;code&gt;(jurisdiction, company_id)&lt;/code&gt; as parameters, and to make the agent's job purely sequential: read PSC, find a corporate PSC, recurse. The cross-border step then becomes "swap the jurisdiction parameter," not "change the entire vendor API."&lt;/p&gt;

&lt;h2&gt;
  
  
  What this points to
&lt;/h2&gt;

&lt;p&gt;If you're building anything that uses live company data through an LLM, the data layer questions to ask are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are tool responses byte-identical to the upstream registry, or is your vendor normalising fields you can't recover?&lt;/li&gt;
&lt;li&gt;Is the freshness real-time, or is your tool reading an N-hour-old snapshot?&lt;/li&gt;
&lt;li&gt;Can the same tool handle a UK PSC walk and a German Handelsregister walk and a Korean DART walk without rewriting the agent prompt?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We've been building &lt;a href="https://openregistry.sophymarine.com" rel="noopener noreferrer"&gt;OpenRegistry&lt;/a&gt; as a Streamable-HTTP MCP server that makes all three default behaviours: live calls to 27 government registries, raw upstream field names, single tool surface for cross-border fan-out. The free anonymous tier works in Claude Desktop, Cursor, Cline, Goose, Zed and the Gemini CLI with one config line. But the underlying point isn't the tool. It's that aggregator-shaped APIs are the wrong architecture for agentic workflows on regulated data, and the failure modes show up in production, not in benchmarks.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>compliance</category>
      <category>kyb</category>
    </item>
    <item>
      <title>Spain BORME — post-RETIR / post-CJEU API guide</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Wed, 06 May 2026 15:01:24 +0000</pubDate>
      <link>https://dev.to/openregistry/spain-borme-post-retir-post-cjeu-api-guide-34f1</link>
      <guid>https://dev.to/openregistry/spain-borme-post-retir-post-cjeu-api-guide-34f1</guid>
      <description>&lt;h1&gt;
  
  
  Spain BORME — post-RETIR / post-CJEU API guide
&lt;/h1&gt;

&lt;p&gt;Spain is a useful registry case because the free surface is not a company-of-record database at all; it is the BORME publications gazette. That matters right now because the country’s open surface is still shaped by the post-RETIR world on the one hand and by the CJEU’s post-C-37/20 ownership-visibility limits on the other. The concrete fact readers can verify in seconds is simple: there is no free public company ID like a CIF/NIF on the BORME surface. The registry indexes by exact denominación social instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the registry actually exposes
&lt;/h2&gt;

&lt;p&gt;OpenRegistry’s ES adapter is built around the publication stream, not a canonical company profile. The live surface covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;search_companies&lt;/code&gt; — title/full-text search over BORME announcements, deduped by denominación social.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_filings&lt;/code&gt; — the strongest free endpoint; returns one filing row per Section II publication for a given exact company name.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_document_metadata&lt;/code&gt; — format/size/page metadata for a specific publication.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;fetch_document&lt;/code&gt; — raw PDF by default, or source XML when available.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_actos_inscritos&lt;/code&gt; — a Section II/acts view for companies.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_officers&lt;/code&gt; — a delta stream of officer-related acto paragraphs.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_shareholders&lt;/code&gt; — a delta stream of shareholder-related acto paragraphs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The support matrix from the live &lt;code&gt;list_jurisdictions&lt;/code&gt; call shows Spain as &lt;code&gt;real_time=true&lt;/code&gt;, with no caching beyond a short search-result / XML dedupe window. Every call still hits boe.es live. The public surface is intentionally thin: &lt;code&gt;get_company_profile&lt;/code&gt;, &lt;code&gt;get_persons_with_significant_control&lt;/code&gt;, &lt;code&gt;get_charges&lt;/code&gt;, &lt;code&gt;get_officer_appointments&lt;/code&gt;, and &lt;code&gt;search_officers&lt;/code&gt; are blocked on the free path.&lt;/p&gt;

&lt;p&gt;Auth is simple: there is none on the free tier. The response format is unified, but the jurisdiction-specific payload is where the useful data lives. For filings you get PDF/XML/HTML URLs plus the announcement text fields; for officer/shareholder deltas you get raw acto text, page numbers, and publication metadata.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's paywalled, gated, or restricted
&lt;/h2&gt;

&lt;p&gt;Spain is unusually strict about where the useful company data lives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No free company-of-record profile endpoint.&lt;/li&gt;
&lt;li&gt;No free PSC / beneficial ownership REST API; this surface is AML-gated.&lt;/li&gt;
&lt;li&gt;No free cross-company officer-name index.&lt;/li&gt;
&lt;li&gt;No free charges endpoint on the company surface; those rights sit in separate registries.&lt;/li&gt;
&lt;li&gt;The registry’s &lt;code&gt;status&lt;/code&gt; is often &lt;code&gt;unknown&lt;/code&gt; because BORME is a gazette, not a live status feed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical consequence is that the free path is publication-first. If you want the authoritative document trail, you query filings and then read the PDF/XML yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which OpenRegistry tools cover which surface
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;search_companies&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;title match on BORME announcements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;list_filings&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;exact denominación, Section II rows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_document_metadata&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;PDF/XML metadata for a publication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fetch_document&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;raw PDF or source XML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;list_actos_inscritos&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;Section II acts stream&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_officers&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;officer-related delta paragraphs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_shareholders&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;shareholder-related delta paragraphs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_company_profile&lt;/td&gt;
&lt;td&gt;⛔ 501&lt;/td&gt;
&lt;td&gt;no free profile API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_persons_with_significant_control&lt;/td&gt;
&lt;td&gt;⛔ 501&lt;/td&gt;
&lt;td&gt;AML-gated BO register&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_charges&lt;/td&gt;
&lt;td&gt;⛔ 501&lt;/td&gt;
&lt;td&gt;separate paid registries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_officer_appointments&lt;/td&gt;
&lt;td&gt;⛔ 501&lt;/td&gt;
&lt;td&gt;no free cross-company index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;search_officers&lt;/td&gt;
&lt;td&gt;⛔ 501&lt;/td&gt;
&lt;td&gt;no free cross-company index&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Country-specific quirks
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use the exact denominación social.&lt;/strong&gt; &lt;code&gt;INDITEX, S.A.&lt;/code&gt; is the identifier shape here, not the fiscal number. Matching is tolerant, but the company name still matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Most statuses are unknown.&lt;/strong&gt; If you are used to Companies House or KVK, do not expect a clean active/inactive profile. On BORME, the filing trail is the source of truth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Actos are not the same as person directories.&lt;/strong&gt; &lt;code&gt;get_officers&lt;/code&gt; returns the relevant paragraphs, but the person names and roles are embedded in raw text and must be parsed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shareholder visibility is partial.&lt;/strong&gt; You can see delta events, not a complete shareholder book for most companies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;get_company_profile&lt;/code&gt; will not save you.&lt;/strong&gt; The free surface intentionally pushes you back to filings.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A complete worked example
&lt;/h2&gt;

&lt;p&gt;Take &lt;code&gt;INDITEX, S.A.&lt;/code&gt;. A typical workflow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search the company name.&lt;/li&gt;
&lt;li&gt;Pull the filing list.&lt;/li&gt;
&lt;li&gt;Fetch the publication document for the announcement you care about.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"list_filings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ES"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"company_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INDITEX, S.A."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That returns a filing envelope with a BORME publication code, publication date, and direct document URLs. If you need the underlying notice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fetch_document"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ES"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"document_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BORME-C-2026-1234"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"format"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pdf"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key point is that the registry gives you the source document, not a synthetic summary. For Spanish workflows, that is usually enough: read the notice, confirm the act, then use the same denominación for the next query.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting an MCP client
&lt;/h2&gt;

&lt;p&gt;Claude Desktop / Cursor / Cline can all point at the same server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mcp endpoint: https://openregistry.sophymarine.com/mcp
Claude Desktop: add custom connector with that URL
Cursor / Cline: add the endpoint in MCP settings
No API key required on the free tier
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  CTA
&lt;/h2&gt;

&lt;p&gt;If you want to test this without signing up, use the free anonymous tier and query the example company profile path for the same name you saw above. The public web profile path for &lt;code&gt;INDITEX, S.A.&lt;/code&gt; is &lt;code&gt;/company/es/INDITEX%2C%20S.A.&lt;/code&gt; and the live MCP endpoint is enough to get you from search to filing without a login.&lt;/p&gt;




&lt;h2&gt;
  
  
  OpenRegistry's full coverage
&lt;/h2&gt;

&lt;p&gt;OpenRegistry is a free remote MCP server giving AI agents real-time access to company-registry data from &lt;strong&gt;30 national governments&lt;/strong&gt;. This article focused on Spain; the same toolkit covers:&lt;/p&gt;

&lt;p&gt;🇬🇧 UK Companies House · 🇫🇷 INSEE Sirene + INPI RNE · 🇩🇪 Handelsregister · 🇮🇹 Registro Imprese (BRIS) · 🇪🇸 BORME · 🇳🇱 KVK · 🇧🇪 KBO · 🇨🇭 Zefix · 🇳🇴 Brreg · 🇫🇮 PRH · 🇮🇪 CRO · 🇵🇱 KRS · 🇨🇿 ARES · 🇮🇸 RSK · 🇮🇲 IoM Registry · 🇨🇾 DRCOR · 🇲🇨 RCI · 🇱🇮 Liechtenstein HR · 🇰🇷 OPENDART · 🇭🇰 Companies Registry · 🇹🇼 GCIS · 🇲🇾 SSM · 🇮🇩 Ditjen AHU · 🇦🇺 ABR · 🇳🇿 Companies Office · 🇨🇦 Corporations Canada (+ BC + NWT) · 🇮🇳 MCA · 🇺🇸 NY State · 🇺🇸 California · 🇲🇽 PSM · 🇰🇾 CIMA · 🇷🇺 ЕГРЮЛ&lt;/p&gt;

&lt;p&gt;→ Hosted MCP endpoint: &lt;a href="https://openregistry.sophymarine.com/mcp" rel="noopener noreferrer"&gt;https://openregistry.sophymarine.com/mcp&lt;/a&gt;&lt;br&gt;
→ Docs: &lt;a href="https://openregistry.sophymarine.com/docs/" rel="noopener noreferrer"&gt;https://openregistry.sophymarine.com/docs/&lt;/a&gt;&lt;br&gt;
→ Free anonymous tier: 20 req/min, all tools, every jurisdiction.&lt;/p&gt;

&lt;p&gt;Made by Sophymarine.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>kyb</category>
      <category>compliance</category>
      <category>legaltech</category>
    </item>
    <item>
      <title>Italy Registro delle imprese — post-Consiglio di Stato 2024 API guide</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Wed, 06 May 2026 03:56:39 +0000</pubDate>
      <link>https://dev.to/openregistry/italy-registro-delle-imprese-post-consiglio-di-stato-2024-api-guide-ee5</link>
      <guid>https://dev.to/openregistry/italy-registro-delle-imprese-post-consiglio-di-stato-2024-api-guide-ee5</guid>
      <description>&lt;p&gt;$(sed '1,2d' /home/richard/.openclaw/workspace/it_article.md)&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>kyb</category>
      <category>compliance</category>
      <category>programming</category>
    </item>
    <item>
      <title>OpenCorporates alternatives compared</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Thu, 30 Apr 2026 04:34:59 +0000</pubDate>
      <link>https://dev.to/openregistry/opencorporates-alternatives-compared-1ip1</link>
      <guid>https://dev.to/openregistry/opencorporates-alternatives-compared-1ip1</guid>
      <description>&lt;h1&gt;
  
  
  OpenCorporates alternatives compared
&lt;/h1&gt;

&lt;p&gt;Anyone evaluating OpenCorporates as a company-data source tends to hit the same handful of limits within a couple of weeks: data freshness, missing share register data, and patchy coverage of non-Anglophone registries. The table below compares the alternatives that come up most often in due diligence and KYC work.&lt;/p&gt;

&lt;p&gt;All facts checked against the products' own pricing pages, API docs, and platform pages. Where the source is unclear, the cell says so.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feature comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;OpenCorporates&lt;/th&gt;
&lt;th&gt;OpenRegistry&lt;/th&gt;
&lt;th&gt;Sayari&lt;/th&gt;
&lt;th&gt;BvD / Orbis&lt;/th&gt;
&lt;th&gt;D&amp;amp;B Direct+&lt;/th&gt;
&lt;th&gt;GLEIF&lt;/th&gt;
&lt;th&gt;National registry sites&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Refresh model&lt;/td&gt;
&lt;td&gt;ingested, varies per registry&lt;/td&gt;
&lt;td&gt;live call to gov registry on every query&lt;/td&gt;
&lt;td&gt;full rebuild every 2 weeks + daily delta&lt;/td&gt;
&lt;td&gt;ingested from 170+ providers&lt;/td&gt;
&lt;td&gt;configurable INTRA_DAY → MONTHLY, ~5M updates/day&lt;/td&gt;
&lt;td&gt;3× daily Golden Copy + delta&lt;/td&gt;
&lt;td&gt;live&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Directors / officers&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗ (entity only, no people)&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shareholders (as a separate filing from directors)&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓ (&lt;code&gt;get_shareholders&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;✓ (ownership graph)&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;varies by country&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Persons with significant control / UBO&lt;/td&gt;
&lt;td&gt;partial (UK PSC mostly)&lt;/td&gt;
&lt;td&gt;✓ (&lt;code&gt;get_persons_with_significant_control&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;parent / ultimate parent only&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mortgages and charges&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓ (&lt;code&gt;get_charges&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Raw statutory filings as bytes (PDF / XBRL / iXBRL)&lt;/td&gt;
&lt;td&gt;filings list only&lt;/td&gt;
&lt;td&gt;✓ (&lt;code&gt;fetch_document&lt;/code&gt; returns upstream bytes)&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓ on most&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native XBRL / iXBRL financials surfaced&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓ on FI, KR (XBRL) and GB (iXBRL)&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗ (extracted to proprietary schema)&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cross-jurisdiction name search in one call&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓ (with per-tier fan-out cap)&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗ (one country at a time)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Direct gov registry URL preserved on every record&lt;/td&gt;
&lt;td&gt;partial&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓ (RA link)&lt;/td&gt;
&lt;td&gt;n/a (is the source)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP server for AI agents&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓ (public, free)&lt;/td&gt;
&lt;td&gt;beta (enterprise contract required)&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free anonymous access (no signup)&lt;/td&gt;
&lt;td&gt;✓ (web only, rate-limited)&lt;/td&gt;
&lt;td&gt;✓ (API + web, 20 req/min)&lt;/td&gt;
&lt;td&gt;✗ (demo request only)&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;usually&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Self-serve API for individuals&lt;/td&gt;
&lt;td&gt;✗ (paid tier from £2,250/yr)&lt;/td&gt;
&lt;td&gt;✓ (anonymous tier free)&lt;/td&gt;
&lt;td&gt;✗ (enterprise only)&lt;/td&gt;
&lt;td&gt;✗ (enterprise only)&lt;/td&gt;
&lt;td&gt;✗ (contracted)&lt;/td&gt;
&lt;td&gt;✓ (free)&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entry-tier price&lt;/td&gt;
&lt;td&gt;£2,250 / yr (Essentials)&lt;/td&gt;
&lt;td&gt;$0 anon, $9 / mo Pro&lt;/td&gt;
&lt;td&gt;enterprise (no published price)&lt;/td&gt;
&lt;td&gt;enterprise&lt;/td&gt;
&lt;td&gt;enterprise&lt;/td&gt;
&lt;td&gt;free&lt;/td&gt;
&lt;td&gt;mostly free&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing published on website&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✗&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jurisdictions covered&lt;/td&gt;
&lt;td&gt;140+&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;250+&lt;/td&gt;
&lt;td&gt;global (no number published)&lt;/td&gt;
&lt;td&gt;220+&lt;/td&gt;
&lt;td&gt;232 (LEI registrants only)&lt;/td&gt;
&lt;td&gt;1 each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entity count&lt;/td&gt;
&lt;td&gt;~200M&lt;/td&gt;
&lt;td&gt;live proxy (no ingested count)&lt;/td&gt;
&lt;td&gt;~1.5B&lt;/td&gt;
&lt;td&gt;~380M (Orbis)&lt;/td&gt;
&lt;td&gt;~500M&lt;/td&gt;
&lt;td&gt;~3M active LEIs&lt;/td&gt;
&lt;td&gt;varies&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What the table says about OpenRegistry
&lt;/h2&gt;

&lt;p&gt;The OpenRegistry column is the only one that combines all of the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A live call to the underlying government registry on every single query, so a director, shareholder, charge, or filing recorded today is visible the same day.&lt;/li&gt;
&lt;li&gt;Directors, shareholders, persons with significant control, and charges as four separate, machine-readable tools, because in most jurisdictions these correspond to four different filings and collapsing them loses information.&lt;/li&gt;
&lt;li&gt;Document-level access: &lt;code&gt;fetch_document&lt;/code&gt; returns the upstream PDF, iXBRL, or XBRL bytes, so audit and compliance work can cite the statutory record directly.&lt;/li&gt;
&lt;li&gt;Native XBRL financials on Finland (PRH), Korea (DART), and the UK (iXBRL), without re-rendering or re-encoding.&lt;/li&gt;
&lt;li&gt;A free public MCP transport. Sayari has an MCP product as well, but it is in beta and gated behind an enterprise contract; OpenRegistry's MCP endpoint is open at &lt;code&gt;/mcp&lt;/code&gt; with no signup.&lt;/li&gt;
&lt;li&gt;Self-serve API on a free anonymous tier (20 req/min). Every other paid product on this list starts at four-figure annual contracts or enterprise pricing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off is breadth. OpenRegistry covers 27 national registries today, against the ~145 of OpenCorporates and the larger ingest piles inside the commercial analyst suites. For workflows where the binding constraint is freshness, share-register / UBO access, or document-level provenance rather than coverage of every jurisdiction on Earth, that trade-off usually goes the other way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;OpenCorporates → &lt;a href="https://opencorporates.com" rel="noopener noreferrer"&gt;opencorporates.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenRegistry → &lt;a href="https://openregistry.sophymarine.com" rel="noopener noreferrer"&gt;openregistry.sophymarine.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sayari → &lt;a href="https://sayari.com" rel="noopener noreferrer"&gt;sayari.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Bureau van Dijk / Orbis → &lt;a href="https://www.bvdinfo.com" rel="noopener noreferrer"&gt;bvdinfo.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Dun &amp;amp; Bradstreet → &lt;a href="https://www.dnb.com" rel="noopener noreferrer"&gt;dnb.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GLEIF → &lt;a href="https://www.gleif.org" rel="noopener noreferrer"&gt;gleif.org&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;UK Companies House → &lt;a href="https://find-and-update.company-information.service.gov.uk" rel="noopener noreferrer"&gt;find-and-update.company-information.service.gov.uk&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;France RNE → &lt;a href="https://data.inpi.fr" rel="noopener noreferrer"&gt;data.inpi.fr&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Germany Handelsregister → &lt;a href="https://www.handelsregister.de" rel="noopener noreferrer"&gt;handelsregister.de&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Norway Brreg → &lt;a href="https://www.brreg.no" rel="noopener noreferrer"&gt;brreg.no&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Spain BORME → &lt;a href="https://www.borme.es" rel="noopener noreferrer"&gt;borme.es&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;South Korea DART → &lt;a href="https://dart.fss.or.kr" rel="noopener noreferrer"&gt;dart.fss.or.kr&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>api</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>UK Companies House — post-ECCTA reality / API guide</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Wed, 29 Apr 2026 15:01:20 +0000</pubDate>
      <link>https://dev.to/openregistry/uk-companies-house-post-eccta-reality-api-guide-3mh1</link>
      <guid>https://dev.to/openregistry/uk-companies-house-post-eccta-reality-api-guide-3mh1</guid>
      <description>&lt;h1&gt;
  
  
  UK Companies House — post-ECCTA reality / API guide
&lt;/h1&gt;

&lt;p&gt;The UK matters because Companies House is still the cleanest high-volume live registry surface in OpenRegistry, and it is now changing under the post-ECCTA regime rather than the old “just a lookup page” model. For integrators, the concrete fact to anchor on is simple: company numbers are still 8 characters, and the adapter auto-pads short England/Wales numbers like &lt;code&gt;6&lt;/code&gt; to &lt;code&gt;00000006&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the registry actually exposes
&lt;/h2&gt;

&lt;p&gt;OpenRegistry’s UK adapter is the reference implementation and the most complete surface in the server. The live coverage currently includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;search_companies&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_company_profile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list_filings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_financials&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_shareholders&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_officers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_persons_with_significant_control&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_charges&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_officer_appointments&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;search_officers&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get_document_metadata&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fetch_document&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Auth-wise, this is the public hosted MCP endpoint and does not require a registry account. The upstream adapter is live, and the server notes a 600 requests / 5 minutes / operator key ceiling. There is also a small in-adapter dedup cache for 10 seconds inside one AI turn; if you need absolute freshness, pass &lt;code&gt;fresh=true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Response formats are close to upstream Companies House data: structured JSON for profiles, officers, PSCs, filings, charges, and financials; documents are fetched through metadata then download. The key thing for builders is that the data comes through unmodified and source-linked, rather than being normalized into a synthetic company graph.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is paywalled, gated, or restricted
&lt;/h2&gt;

&lt;p&gt;The public surface is broad, but it is not everything.&lt;/p&gt;

&lt;p&gt;Some identity and privacy-sensitive fields are redacted or only partially exposed. Officer dates of birth are month/year only. Home addresses are not surfaced; only service or correspondence-style addresses appear. The public adapter also does not expose identity-verification status.&lt;/p&gt;

&lt;p&gt;For UK users, the registry itself is still subject to the usual Companies House product boundaries: some document flows are slower than the metadata surface, and document retrieval should be treated as a separate step from profile lookup. The adapter does not invent missing fields when upstream omits them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which OpenRegistry tools cover which surface
&lt;/h2&gt;

&lt;p&gt;For the UK, the coverage matrix is unusually complete:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;search_companies&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;name search and company-number search&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_company_profile&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;statutory profile, status, addresses, accounts, confirmation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;list_filings&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;filing history with category, description, date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_financials&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;filed accounts surface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_shareholders&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;shareholding surface where available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_officers&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;current and historic officers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_persons_with_significant_control&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;PSC entries and control types&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_charges&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;registered charges and satisfaction status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_officer_appointments&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;cross-company appointment history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;search_officers&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;officer-name discovery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;get_document_metadata&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;metadata before document fetch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fetch_document&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;document download&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This matters because the UK is the baseline where “production-grade” means the whole workflow, not just lookup-by-name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Country-specific quirks
&lt;/h2&gt;

&lt;p&gt;Three UK quirks matter in practice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ID shape is not uniform across the four legal geographies.&lt;/strong&gt; England/Wales use 8 digits; Scotland uses &lt;code&gt;SC&lt;/code&gt; plus 6 digits; Northern Ireland uses &lt;code&gt;NI&lt;/code&gt; plus 6 digits; LLPs use &lt;code&gt;OC&lt;/code&gt; plus 6 digits. The adapter accepts short England/Wales forms and pads them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Company status is not a single business-friendly value.&lt;/strong&gt; Native states include &lt;code&gt;active&lt;/code&gt;, &lt;code&gt;dissolved&lt;/code&gt;, &lt;code&gt;liquidation&lt;/code&gt;, &lt;code&gt;receivership&lt;/code&gt;, &lt;code&gt;administration&lt;/code&gt;, &lt;code&gt;voluntary-arrangement&lt;/code&gt;, &lt;code&gt;insolvency-proceedings&lt;/code&gt;, &lt;code&gt;open&lt;/code&gt;, &lt;code&gt;closed&lt;/code&gt;, &lt;code&gt;removed&lt;/code&gt;, and &lt;code&gt;converted-closed&lt;/code&gt;. Treat mapping carefully.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Officers and PSCs are intentionally incomplete compared with private databases.&lt;/strong&gt; The public dataset is still useful, but it is not a full-person dossier. That is a feature, not a bug.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Complete worked example
&lt;/h2&gt;

&lt;p&gt;Take Monzo Bank Limited, company number &lt;code&gt;09446231&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;A profile lookup returns the live statutory record:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;company name: MONZO BANK LIMITED&lt;/li&gt;
&lt;li&gt;status: active&lt;/li&gt;
&lt;li&gt;incorporation date: 2015-02-18&lt;/li&gt;
&lt;li&gt;registered office: Broadwalk House, 5 Appold Street, London, EC2A 2AG&lt;/li&gt;
&lt;li&gt;previous name: FOCUS FS LIMITED&lt;/li&gt;
&lt;li&gt;SIC codes: &lt;code&gt;64191&lt;/code&gt;, &lt;code&gt;64999&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;last accounts made up to: 2025-03-31&lt;/li&gt;
&lt;li&gt;next accounts due: 2026-12-31&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is enough for a downstream workflow to decide whether to inspect officers, charges, filings, or financial statements next. For a live agent, the same sequence can be chained in one turn: search, profile, filings, PSCs, then document fetch if the filing text is needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting an MCP client
&lt;/h2&gt;

&lt;p&gt;Add the server URL to your client as a remote MCP endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openregistry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://openregistry.sophymarine.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That works in Claude Desktop, Cursor, and Cline with the usual remote-MCP flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  CTA
&lt;/h2&gt;

&lt;p&gt;If you need an anonymous first pass, this is a good place to start: search Monzo as a public profile, verify the company number, then branch into filings or officers without signing up anywhere. The live profile for the example company is at &lt;code&gt;/company/GB/09446231&lt;/code&gt; on the OpenRegistry site.&lt;/p&gt;




&lt;h2&gt;
  
  
  OpenRegistry's full coverage
&lt;/h2&gt;

&lt;p&gt;OpenRegistry is a free remote MCP server giving AI agents real-time access to company-registry data from &lt;strong&gt;29 national governments&lt;/strong&gt;. This article focused on the UK; the same toolkit covers:&lt;/p&gt;

&lt;p&gt;🇬🇧 UK Companies House · 🇮🇪 CRO · 🇦🇺 ABR · 🇨🇭 Zefix · 🇳🇴 Brreg · 🇫🇷 INSEE Sirene + RNE · 🇫🇮 PRH · 🇨🇿 ARES · 🇵🇱 KRS · 🇹🇼 GCIS · 🇨🇦 Corporations Canada · 🇨🇦 BC · 🇨🇦 NWT · 🇧🇪 KBO · 🇮🇲 IoM Registry · 🇮🇸 RSK · 🇱🇮 Liechtenstein HR · 🇩🇪 Handelsregister · 🇳🇿 Companies Office · 🇲🇨 RCI · 🇮🇹 Registro Imprese (BRIS) · 🇭🇰 Companies Registry · 🇲🇾 SSM · 🇰🇷 OPENDART · 🇨🇾 DRCOR · 🇰🇾 CIMA · 🇲🇽 PSM · 🇷🇺 ЕГРЮЛ&lt;/p&gt;

&lt;p&gt;→ Hosted MCP endpoint: &lt;code&gt;https://openregistry.sophymarine.com/mcp&lt;/code&gt;&lt;br&gt;
→ Docs: &lt;a href="https://openregistry.sophymarine.com/docs/" rel="noopener noreferrer"&gt;https://openregistry.sophymarine.com/docs/&lt;/a&gt;&lt;br&gt;
→ Free anonymous tier: 20 req/min, all tools, every jurisdiction.&lt;/p&gt;

&lt;p&gt;Made by Sophymarine.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>kyb</category>
      <category>compliance</category>
      <category>programming</category>
    </item>
    <item>
      <title>The five-call cross-border KYB workflow — walking a UBO chain across jurisdictions in a single prompt</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Wed, 29 Apr 2026 09:04:39 +0000</pubDate>
      <link>https://dev.to/openregistry/the-five-call-cross-border-kyb-workflow-walking-a-ubo-chain-across-jurisdictions-in-a-single-273l</link>
      <guid>https://dev.to/openregistry/the-five-call-cross-border-kyb-workflow-walking-a-ubo-chain-across-jurisdictions-in-a-single-273l</guid>
      <description>&lt;h1&gt;
  
  
  The five-call cross-border KYB workflow — walking a UBO chain across jurisdictions in a single prompt
&lt;/h1&gt;

&lt;p&gt;KYB ("Know Your Business") used to mean "pull a company report and check the directors." That stopped being enough around the time the FATF revised Recommendation 24 in March 2022 and AMLD5 transposition deadlines started biting. A modern KYB review for a counterparty of any meaningful size has to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify the legal entity in the jurisdiction it claims to be incorporated in,&lt;/li&gt;
&lt;li&gt;Identify everyone who owns more than 25 % (or controls via voting / appointment / contract),&lt;/li&gt;
&lt;li&gt;Walk through any corporate layer above that — because step 2 will almost always return &lt;em&gt;another company&lt;/em&gt; rather than a human,&lt;/li&gt;
&lt;li&gt;Repeat until you reach a natural person, a listed issuer, a state, or a &lt;em&gt;bona-fide&lt;/em&gt; statutory exception,&lt;/li&gt;
&lt;li&gt;Cite the registry of record at every hop so the audit trail survives a regulatory review.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last point is what breaks every "we have a company-data API" SaaS: the moment the counterparty is in a different jurisdiction from your aggregator's strongest coverage, you start joining records the aggregator &lt;em&gt;opined&lt;/em&gt; about rather than records the &lt;em&gt;government&lt;/em&gt; asserted. When the FCA / FinCEN / BaFin auditor asks "where did this PSC entry come from?" the answer needs to be a registry URL, not "BvD says".&lt;/p&gt;

&lt;p&gt;The rest of this post walks through the canonical five-call cross-border KYB workflow, what it looks like in practice on a real UK→Holdco chain, and the eight EU registers that will currently — post-CJEU C-37/20 — return a structured &lt;code&gt;501&lt;/code&gt; regardless of which vendor you query.&lt;/p&gt;

&lt;p&gt;This is the workflow &lt;a href="https://openregistry.sophymarine.com/solutions/kyb" rel="noopener noreferrer"&gt;OpenRegistry&lt;/a&gt; was built to serve: 27 national company registries behind one MCP endpoint, byte-identical responses, source-linked, no aggregator layer between the AI agent and the statutory record.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "look up the company in country X" doesn't generalize
&lt;/h2&gt;

&lt;p&gt;Every KYB SaaS does step 1 reasonably well in its strongest jurisdictions. Steps 2 → 5 are where the wheels come off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Step 2 (PSC / UBO layer)&lt;/strong&gt; — Every member state of the EU plus the UK has its own legal definition of "beneficial owner," its own threshold (25 % is most common but Cyprus uses 10 %, Estonia uses "any control"), its own filing window, and its own access regime. Post CJEU C-37/20 (2022), eight EU UBO registers became AML-obliged-only — meaning &lt;em&gt;no commercial vendor&lt;/em&gt; can legally republish them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 3 (corporate-layer recursion)&lt;/strong&gt; — When the PSC of a UK Ltd is a Luxembourg SARL, you have left the British Companies House schema and entered the Luxembourg RCS schema. These have &lt;em&gt;different&lt;/em&gt; identifier formats, different officer-role enumerations, different statuses. Aggregators paper over this with their own canonical schema; that paper covers the gap that gets you in trouble at audit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 4 (terminating in a natural person)&lt;/strong&gt; — In the UK 80 %+ of PSC chains terminate in 1-2 hops. In Luxembourg, Cayman, BVI, Jersey, Liechtenstein it's routinely 4-6 hops, sometimes through a trust that legally has no UBO at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Step 5 (citing the registry)&lt;/strong&gt; — Aggregators almost universally strip the upstream URL because it's how they justify their licensing. If you can't link to &lt;code&gt;https://find-and-update.company-information.service.gov.uk/company/01107406/persons-with-significant-control&lt;/code&gt; on your KYB report, your audit trail is "we trust our vendor."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The five-call workflow below assumes you have direct, byte-identical access to the registry of record at every step. With that assumption, the workflow becomes mechanical and the AI agent can run it without supervision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The canonical five-call workflow
&lt;/h2&gt;

&lt;p&gt;This is the prompt-time tool sequence an AI agent runs against the &lt;a href="https://openregistry.sophymarine.com/solutions/kyb#connect" rel="noopener noreferrer"&gt;OpenRegistry MCP endpoint&lt;/a&gt; for every cross-border KYB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. search_companies({ jurisdiction, query, limit: 5 })
   → resolve the legal name to a registry-issued company_id
2. get_company_profile({ jurisdiction, company_id })
   → registered office, status, incorporation date, officers (where included)
3. get_persons_with_significant_control({ jurisdiction, company_id })
   → the PSC / UBO / beneficial-owner layer, with type=individual|corporate|trust
4. for each PSC of type 'corporate' or 'trust':
   → recurse from step 1 with the PSC's jurisdiction + name (or registry id if printed)
5. fetch_document({ document_id })
   → the statutory filing that backs the assertion (Confirmation Statement,
     Comptes annuels, Jahresabschluss, opinion of independent registrar, etc.)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the full agent loop. Five calls, recursing on step 4 until the chain terminates in a natural person, a state actor, a listed issuer, or a structured &lt;code&gt;501&lt;/code&gt; (the statutory wall — more on those below).&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;cross-border&lt;/em&gt; part is what eats most KYB SaaS implementations: each recursion of step 4 hops to a different national registry with a different schema, different identifier format, different language. Hand-stitching this in a SaaS UI takes an analyst 30-90 minutes per counterparty. With a unified MCP gateway and a halfway-decent AI client, the same chain runs in ~30 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Worked example — Iceland Foods Ltd → Iceland Topco Limited → individuals
&lt;/h2&gt;

&lt;p&gt;Let's run it on a real, public, legally-trivial UK chain. Iceland Foods Ltd is a UK private company; its PSCs trace through three corporate layers before reaching individuals. The full walked example with raw JSON is on the OpenRegistry &lt;a href="https://openregistry.sophymarine.com/docs/case-studies/iceland-foods-chain-walk" rel="noopener noreferrer"&gt;Iceland Foods cross-border chain walk&lt;/a&gt; — what follows is the abridged structural view.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — resolve the legal name&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"search_companies"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Iceland Foods Ltd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first hit returns &lt;code&gt;company_id: "01107406"&lt;/code&gt;, status &lt;code&gt;active&lt;/code&gt;, incorporated 1973-04-26. We have a stable identifier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — pull the profile&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_company_profile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"company_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"01107406"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returns the full Companies House profile — registered office, accounts category (group, full), confirmation-statement date, SIC codes, and the officers array. The schema is exactly Companies House's; nothing is renamed or merged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — pull the PSC layer&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_persons_with_significant_control"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"company_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"01107406"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response gives us the registered PSCs. For Iceland Foods Ltd this is one corporate PSC: &lt;strong&gt;Iceland Topco Limited&lt;/strong&gt;, Companies House &lt;code&gt;08723490&lt;/code&gt;, "ownership of shares 75 % or more, voting rights 75 % or more." That's a corporate PSC — we recurse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — recurse on the corporate PSC&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"get_persons_with_significant_control"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"company_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"08723490"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iceland Topco's PSCs are themselves four individuals — Sir Malcolm Walker, Tarsem Dhaliwal, Andrew Pritchard, Nigel Broadhurst — each declaring "ownership of shares more than 25 % but not more than 50 %" or similar. We've terminated in natural persons after one recursion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — fetch the statutory backing document&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"list_filings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"company_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"08723490"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"category"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"confirmation-statement"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pick the most recent &lt;code&gt;confirmation-statement&lt;/code&gt; filing, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"fetch_document"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"document_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;from list_filings&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"max_bytes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5000000&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returns the literal XHTML iXBRL bytes of the filing — not a vendor's parsed extract. Your AI agent can quote the actual filed text in the audit-trail report, and the report links to &lt;code&gt;https://find-and-update.company-information.service.gov.uk/company/08723490/filing-history/&amp;lt;id&amp;gt;&lt;/code&gt; so the auditor can verify independently.&lt;/p&gt;

&lt;p&gt;Five calls, three of them recursive on step 4. This is the entire KYB workflow for that chain.&lt;/p&gt;

&lt;p&gt;A real-world chain that crosses borders — say a UK Ltd whose PSC is a Luxembourg SARL whose PSC is a Cayman LP whose ultimate beneficial owner is an individual in a third country — runs the same loop, just more iterations, with each recursion hitting a different national registry through the same MCP interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The eight EU UBO registers that will return 501
&lt;/h2&gt;

&lt;p&gt;Post CJEU C-37/20 (Luxembourg Business Registers, November 2022), public access to UBO registers in the EU was found to violate Article 7 and 8 of the Charter of Fundamental Rights. The court did &lt;em&gt;not&lt;/em&gt; abolish UBO transparency — it required a "legitimate-interest" gating layer for non-AML-obliged requesters. Implementation has been jurisdiction-by-jurisdiction and the result is that as of today the following UBO registers are &lt;em&gt;not&lt;/em&gt; publicly queryable, and no company-data vendor can legally proxy them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Germany&lt;/strong&gt; — Transparenzregister, AML-obliged-only since 2022-11-22, BMF guidance updates ongoing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spain&lt;/strong&gt; — Registro de Titulares Reales (RETIR), Ley 6/2023 transposition gates access at the AML-obliged level&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Italy&lt;/strong&gt; — Registro dei titolari effettivi, Consiglio di Stato 2024-10 referred C-37/20 + C-601/20 back to CJEU; currently frozen&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Netherlands&lt;/strong&gt; — UBO-register, post-2022 access scheme limited to obliged entities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Luxembourg&lt;/strong&gt; — RBE, the register at the centre of C-37/20 itself&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Austria&lt;/strong&gt; — WiEReG, AML-obliged-only since 2023&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Malta&lt;/strong&gt; — BORM, restricted access regime&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Portugal&lt;/strong&gt; — RCBE, AML-obliged-only since 2023&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Plus, outside the EU but on the same trajectory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cayman Islands&lt;/strong&gt; — Beneficial Ownership Transparency Act 2023; "legitimate-interest access" only (CI$250/year application fee + CI$75/search; reaffirmed 2026 against UK pressure)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hong Kong&lt;/strong&gt; — SCR (Significant Controllers Register) is filed at the company's registered office, not centrally queryable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Malaysia&lt;/strong&gt; — Section 56 Companies Act 2016 BO register is reporting-institution-only&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When an AI agent calls &lt;code&gt;get_persons_with_significant_control&lt;/code&gt; for one of these jurisdictions, OpenRegistry returns a &lt;em&gt;structured&lt;/em&gt; &lt;code&gt;501 Not Implemented&lt;/code&gt; with &lt;code&gt;alternative_url&lt;/code&gt; pointing at the legitimate-interest application page (where one exists) and &lt;code&gt;reason&lt;/code&gt; carrying the legal citation. That structured response is the right answer — pretending to have the data when you legally cannot is the wrong answer.&lt;/p&gt;

&lt;p&gt;PSC / shareholder layers that &lt;strong&gt;are&lt;/strong&gt; publicly queryable (and thus walkable end-to-end through OpenRegistry today): UK, Ireland, Iceland, Norway, France (RNE / RBE since 2024 partial reopen), Belgium, Cyprus, Isle of Man, Liechtenstein (Vollauszug, paid tier), Monaco, plus the non-UBO shareholder layers in Czechia, Switzerland, Taiwan, South Korea (top shareholder + 5 %+ disclosure).&lt;/p&gt;

&lt;p&gt;The split matters because a KYB workflow that cannot tell apart "no UBO record found" from "UBO record exists but is statutorily gated" is a workflow that will silently approve every counterparty operating out of one of those eight EU jurisdictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MCP-native delivery matters for KYB-as-an-LLM-task
&lt;/h2&gt;

&lt;p&gt;The five-call workflow above is a &lt;em&gt;recursive graph traversal with conditional document fetches&lt;/em&gt;. That class of task is what LLMs are now reliably good at — with one caveat: the LLM has to be able to &lt;em&gt;invoke the tools without leaving the conversation&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Pre-MCP, plugging a company-registry API into an AI agent meant either (a) writing a custom tool wrapper for every framework (LangChain, CrewAI, AutoGen, the assistant-builder du jour), or (b) putting the LLM in front of a UI and letting it click. Both add a 200-2000 ms latency floor per call and a maintenance burden per framework.&lt;/p&gt;

&lt;p&gt;MCP (Model Context Protocol, the spec Anthropic, OpenAI and Google CLIs all consume natively) collapses that — a single endpoint URL drops into a Claude Desktop / Cursor / Claude Code / Gemini CLI config and the agent has all 14 tools available. No SDK install, no API key (for anonymous tier), no per-framework adapter.&lt;/p&gt;

&lt;p&gt;For KYB specifically that means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;search_companies → get_company_profile → get_persons_with_significant_control → recurse → fetch_document&lt;/strong&gt; loop runs as a single agent prompt rather than five UI button-clicks.&lt;/li&gt;
&lt;li&gt;The audit log is the &lt;em&gt;MCP transcript&lt;/em&gt; — every tool call with its arguments and the registry's actual response — which is structurally what auditors want anyway.&lt;/li&gt;
&lt;li&gt;Cross-jurisdictional recursion is a parameter swap (&lt;code&gt;jurisdiction: "GB"&lt;/code&gt; → &lt;code&gt;jurisdiction: "LU"&lt;/code&gt;) rather than a vendor swap. The loop body is identical.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building KYB tooling that bills itself as "AI-native," this is the integration shape that delivers what that phrase implies. See the full &lt;a href="https://openregistry.sophymarine.com/solutions/kyb" rel="noopener noreferrer"&gt;KYB &amp;amp; UBO solution page&lt;/a&gt; for the productised version, including pricing tiers, fan-out caps, and source-provenance fields on the enterprise tier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plugging it into a real KYB pipeline
&lt;/h2&gt;

&lt;p&gt;A few patterns we've seen work in production deployments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Async pre-fetch on counterparty intake.&lt;/strong&gt; When the sales / onboarding system creates a "potential customer" record with a legal name + jurisdiction, fire the five-call workflow asynchronously. By the time the human reviewer opens the case, the PSC chain is already walked, the documents are already cached, and the analyst is reviewing rather than fetching. Median analyst time per case drops from 45 minutes to 8 minutes in our walked benchmarks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Periodic re-walks for high-risk counterparties.&lt;/strong&gt; PSC entries change. UK Companies House's &lt;code&gt;confirmation-statement&lt;/code&gt; filing is annual but PSC notifications are real-time; Brønnøysundregistrene pushes daily deltas. Schedule a weekly re-walk for any counterparty above your AML risk threshold and diff against the previous walk; surface only the deltas to the analyst.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard &lt;code&gt;501&lt;/code&gt; handling.&lt;/strong&gt; When the workflow hits an AML-gated UBO register, the only correct programmatic response is to flag the case for human review with the structured &lt;code&gt;alternative_url&lt;/code&gt; from the response. Soft-failing (e.g., assuming "no UBO" because the register is gated) is the auditor's first finding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document fetch is the last call, not the first.&lt;/strong&gt; A surprising amount of KYB tooling fetches every filing of a company "just in case." It's a waste — &lt;code&gt;list_filings&lt;/code&gt; returns metadata cheaply, you fetch the &lt;em&gt;one&lt;/em&gt; document the PSC trace actually needs, and you stay well below the upstream-registry rate-limit ceilings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Coverage today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;27 national registries&lt;/strong&gt; live: GB, IE, NO, FI, FR, BE, IS, IM, CH, CY, MC, LI, DE, NL (KVK), CZ, PL, LU (search-only), AU, NZ, TW, KR (OpenDART), HK, MY, ID, IN, ES (BORME), IT (BRIS), CA (federal + BC + NT), US (NY + CA), MX, RU, KY (CIMA + general register).&lt;/li&gt;
&lt;li&gt;Free anonymous tier (20 req/min/IP), free signed-in tier, &lt;a href="https://openregistry.sophymarine.com/solutions/kyb#tiers" rel="noopener noreferrer"&gt;paid tiers&lt;/a&gt; for higher fan-out and source-provenance fields.&lt;/li&gt;
&lt;li&gt;Connect from Claude Desktop / Cursor / Claude Code / Gemini CLI with a single line of config:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openregistry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://openregistry.sophymarine.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or via Claude Code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http openregistry https://openregistry.sophymarine.com/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The KYB-specific landing page with the full source-provenance matrix, jurisdiction-by-jurisdiction PSC availability, and the productised five-call workflow is at &lt;a href="https://openregistry.sophymarine.com/solutions/kyb" rel="noopener noreferrer"&gt;openregistry.sophymarine.com/solutions/kyb&lt;/a&gt;. Free to evaluate, no signup required for the anonymous tier.&lt;/p&gt;

&lt;p&gt;If you're building cross-border KYB tooling on top of LLMs, the five-call loop is the bit you want to get right first. The rest — data quality, jurisdiction coverage, statutory gating — is what the gateway is for.&lt;/p&gt;

</description>
      <category>api</category>
      <category>kyc</category>
      <category>ai</category>
      <category>compliance</category>
    </item>
    <item>
      <title>France Sirene + RNE — post-canonicalisation API guide</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Wed, 29 Apr 2026 08:01:12 +0000</pubDate>
      <link>https://dev.to/openregistry/france-sirene-rne-post-canonicalisation-api-guide-1j24</link>
      <guid>https://dev.to/openregistry/france-sirene-rne-post-canonicalisation-api-guide-1j24</guid>
      <description>&lt;p&gt;Until 2023, the canonical French company register was a four-way fragmented mess: INSEE Sirene held the &lt;em&gt;identification&lt;/em&gt; layer (SIREN, SIRET, name, address, headcount, NAF activity code), the regional Greffes held &lt;em&gt;statutory acts&lt;/em&gt; (incorporation deeds, capital changes, director appointments), the Tribunaux de Commerce shared partial data through Infogreffe (paid), and the Bodacc was the gazette. Starting 1 January 2023 the &lt;strong&gt;Registre National des Entreprises (RNE)&lt;/strong&gt; at INPI became the single canonical source for French commercial information — consolidating the old Registre du Commerce et des Sociétés (RCS), Registre des Métiers (RM), Registre Spécial des Agents Commerciaux (RSAC) and the Registre Spécial des EIRL (RSEIRL).&lt;/p&gt;

&lt;p&gt;The post-RNE world isn't fully tidy yet — Sirene and RNE are still two distinct API surfaces, and the integration between them has rough edges — but it's the cleanest French registry has ever been for programmatic access. Here's what's actually queryable in 2026 and where the seams are.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's free and programmatic
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;INSEE Sirene&lt;/strong&gt; (&lt;a href="https://api.insee.fr/entreprises/sirene/V3" rel="noopener noreferrer"&gt;api.insee.fr/entreprises/sirene/V3&lt;/a&gt;) — free, open, cumulatively the world's most comprehensive company database with ~30M active records.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search by SIREN (9-digit identifier of the legal person), SIRET (14-digit identifier of an establishment = SIREN + 5 digits), name, NAF code, postal code, denomination&lt;/li&gt;
&lt;li&gt;Returns establishment-level data: legal name, NIC, etablissement principal, dateCreationEtablissement, NAF activity code (APE), tranche d'effectif (headcount band), workforce date&lt;/li&gt;
&lt;li&gt;30 requests/minute on the free tier. Higher tiers available with a signed convention.&lt;/li&gt;
&lt;li&gt;Updated daily from the regional URSSAF feed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;INPI RNE&lt;/strong&gt; (&lt;a href="https://data.inpi.fr" rel="noopener noreferrer"&gt;data.inpi.fr&lt;/a&gt;) — free, requires account registration with email + Cloudflare Turnstile.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Returns the &lt;em&gt;statutory dossier&lt;/em&gt;: directors, beneficial owners (where not gated), share capital, statuts, recent acts, annual accounts where filed&lt;/li&gt;
&lt;li&gt;Bulk download "RNE complet" for ~7M French entities published quarterly + delta files daily&lt;/li&gt;
&lt;li&gt;Per-record API queries return RNE structured records keyed on SIREN&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;French Annuaire des Entreprises&lt;/strong&gt; (&lt;a href="https://annuaire-entreprises.data.gouv.fr" rel="noopener noreferrer"&gt;annuaire-entreprises.data.gouv.fr&lt;/a&gt;) — Etalab's public-facing aggregator merging Sirene + RNE + Bodacc — same data, lowest-friction free API, no auth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's paywalled or AML-gated
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;K-bis extracts&lt;/strong&gt; (the official certificate of incorporation) — €3.96 per certificate at &lt;a href="https://infogreffe.fr" rel="noopener noreferrer"&gt;infogreffe.fr&lt;/a&gt;. The data inside is public via RNE; the &lt;em&gt;certified&lt;/em&gt; extract is the paid product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bilans (annual accounts) older than 5 years&lt;/strong&gt; — Greffes Tribunaux de Commerce charge for archive retrieval; RNE keeps the most-recent only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beneficial-ownership register&lt;/strong&gt; for non-AML-obliged third parties — France implemented CJEU C-37/20 by gating the public RNE UBO search behind a &lt;em&gt;justification of legitimate interest&lt;/em&gt; form. AML-obliged entities (banks, lawyers, notaires) keep direct access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  OpenRegistry's coverage of the French surface
&lt;/h2&gt;

&lt;p&gt;OpenRegistry routes French queries through Sirene first (for SIREN/name lookup) and falls back to RNE for the statutory dossier. The &lt;code&gt;jurisdiction='FR'&lt;/code&gt; calls return both.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_companies&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;Sirene full-text + SIREN exact match. Supports &lt;code&gt;query&lt;/code&gt; for name, &lt;code&gt;siren&lt;/code&gt;/&lt;code&gt;siret&lt;/code&gt; for direct lookup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_company_profile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;Merged Sirene establishment data + RNE legal dossier where available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_officers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;RNE-sourced; current and historical officer roles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_persons_with_significant_control&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;⛔ 501&lt;/td&gt;
&lt;td&gt;RNE UBO is access-restricted post-CJEU C-37/20; tool returns &lt;code&gt;alternative_url&lt;/code&gt; to the legitimate-interest application portal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_shareholders&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;⛔ 501&lt;/td&gt;
&lt;td&gt;French RCS does not publish a structured shareholder list outside the SAS/SARL acts; tool returns alternative paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_filings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;RNE acts + Bodacc publication index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_financials&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;Annual accounts for the last 5 years where filed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fetch_document&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;Returns acts and accounts as PDF bytes verbatim from RNE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_charges&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;⛔ 501&lt;/td&gt;
&lt;td&gt;French registry doesn't expose a structured charges register equivalent to the UK one; security interests are filed at the Greffes individually&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Quirks an integrator hits the hard way
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. SIREN vs SIRET.&lt;/strong&gt; SIREN is the 9-digit identifier of the legal person (the &lt;em&gt;entreprise&lt;/em&gt;). SIRET is 14 digits — the SIREN concatenated with a 5-digit NIC identifying a specific &lt;em&gt;établissement&lt;/em&gt; (place of business). A company with five offices has one SIREN and five SIRETs. Search and profile by SIREN; logistics by SIRET. &lt;code&gt;search_companies&lt;/code&gt; accepts either; the result always carries both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. NAF codes are not industry codes.&lt;/strong&gt; France uses NAF (Nomenclature d'Activités Française), revised in 2008 to align with NACE. Codes look like &lt;code&gt;47.91A&lt;/code&gt; or &lt;code&gt;62.01Z&lt;/code&gt;. They are activity codes for the &lt;em&gt;establishment&lt;/em&gt;, not the legal person. The headquarters' NAF and a branch's NAF can differ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Sirene's &lt;code&gt;etat_administratif&lt;/code&gt;&lt;/strong&gt; has only two values: &lt;code&gt;A&lt;/code&gt; (actif) or &lt;code&gt;F&lt;/code&gt; (fermé / cessé). It does not capture liquidation-in-progress or insolvency state — for that, query the Bodacc publications or the RNE acts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Hashed names in some Sirene records.&lt;/strong&gt; Where a sole-trader entrepreneur has opted for the &lt;em&gt;non-diffusion&lt;/em&gt; protection, Sirene returns the company name partially obscured ("&lt;code&gt;*** ***&lt;/code&gt;") and the SIREN remains queryable. RNE may still have the name in the legal dossier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Annual accounts are &lt;em&gt;opt-in to keep secret&lt;/em&gt; for SAS/SARL.&lt;/strong&gt; Since 2014, certain small companies can request that their annual accounts not be made public. The accounts are still filed with the Greffes but the public copy is suppressed. The filing record exists in &lt;code&gt;list_filings&lt;/code&gt; with the correct date and category, but &lt;code&gt;fetch_document&lt;/code&gt; returns a structured "non communicable" notice rather than the document body. Don't treat this as a bug — it's the law.&lt;/p&gt;

&lt;h2&gt;
  
  
  A complete worked example — Renault
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Request&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"search_companies"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Renault SA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c1"&gt;// Response (truncated)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"company_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"441639465"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"company_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RENAULT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"incorporation_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1998-01-15"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"registered_address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"122 Avenue du Général Leclerc, 92100 Boulogne-Billancourt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction_data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"siren"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"441639465"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"siret_siege"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"44163946500035"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"denomination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RENAULT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"naf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"70.10Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"categorie_juridique"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5710"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"etat_administratif"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"A"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tranche_effectif"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"53"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"date_creation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1998-01-15"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;code&gt;get_company_profile("FR", "441639465")&lt;/code&gt; merges in the RNE acts; &lt;code&gt;get_officers("FR", "441639465")&lt;/code&gt; returns the directors and statutory representatives; &lt;code&gt;list_filings("FR", "441639465")&lt;/code&gt; returns annual accounts going back 5 years. The 11-digit &lt;code&gt;categorie_juridique&lt;/code&gt; (&lt;code&gt;5710&lt;/code&gt;) tells you it's an SA — Société Anonyme; if it were &lt;code&gt;5499&lt;/code&gt; it'd be an SARL — different statutory disclosure obligations apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting an MCP client
&lt;/h2&gt;

&lt;p&gt;Add this to your MCP-compliant client (Claude Desktop / Cursor / Cline / Goose / Zed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openregistry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://openregistry.sophymarine.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free anonymous tier — 20 requests per minute per IP, every tool, every jurisdiction. No signup, no API key, no convention to sign.&lt;/p&gt;

&lt;p&gt;Or skip the MCP layer and search on the web at &lt;a href="https://openregistry.sophymarine.com/search?jurisdiction=FR" rel="noopener noreferrer"&gt;openregistry.sophymarine.com/search?jurisdiction=FR&lt;/a&gt;, or jump straight to a known SIREN at &lt;a href="https://openregistry.sophymarine.com/company/fr/441639465" rel="noopener noreferrer"&gt;openregistry.sophymarine.com/company/fr/441639465&lt;/a&gt; for Renault's full profile.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's still moving
&lt;/h2&gt;

&lt;p&gt;The Sirene–RNE integration has rough edges — INSEE and INPI didn't fully merge their schemas at canonicalisation, so a few records exist in one and not the other. INPI publishes corrections weekly; the cumulative gap is shrinking. The DRCBE (Dispositif Rénové de Collecte des Bénéficiaires Effectifs) is the back-office workflow consolidating UBO across the registries, and once it's fully online it should make &lt;code&gt;get_persons_with_significant_control&lt;/code&gt; queryable for AML-obliged callers via a structured access flow rather than the current legitimate-interest form.&lt;/p&gt;




&lt;h2&gt;
  
  
  OpenRegistry's full coverage
&lt;/h2&gt;

&lt;p&gt;OpenRegistry is a free remote MCP server giving AI agents real-time access to company-registry data from &lt;strong&gt;30 national governments&lt;/strong&gt;. This article focused on France; the same toolkit covers:&lt;/p&gt;

&lt;p&gt;🇬🇧 UK Companies House · 🇫🇷 INSEE Sirene + INPI RNE · 🇩🇪 Handelsregister · 🇮🇹 Registro Imprese (BRIS) · 🇪🇸 BORME · 🇳🇱 KVK · 🇧🇪 KBO · 🇨🇭 Zefix · 🇳🇴 Brreg · 🇫🇮 PRH · 🇮🇪 CRO · 🇵🇱 KRS · 🇨🇿 ARES · 🇮🇸 RSK · 🇮🇲 IoM Registry · 🇨🇾 DRCOR · 🇲🇨 RCI · 🇱🇮 Liechtenstein HR · 🇰🇷 OPENDART · 🇭🇰 Companies Registry · 🇹🇼 GCIS · 🇲🇾 SSM · 🇦🇺 ABR · 🇳🇿 Companies Office · 🇨🇦 Corporations Canada (+ BC + NWT) · 🇲🇽 PSM · 🇰🇾 CIMA · 🇷🇺 ЕГРЮЛ&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Hosted MCP endpoint&lt;/strong&gt;: &lt;code&gt;https://openregistry.sophymarine.com/mcp&lt;/code&gt;&lt;br&gt;
→ &lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://openregistry.sophymarine.com/docs/" rel="noopener noreferrer"&gt;https://openregistry.sophymarine.com/docs/&lt;/a&gt;&lt;br&gt;
→ &lt;strong&gt;Free anonymous tier&lt;/strong&gt;: 20 req/min, every tool, every jurisdiction.&lt;/p&gt;

&lt;p&gt;Made by &lt;a href="https://www.sophymarine.com" rel="noopener noreferrer"&gt;Sophymarine&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>kyc</category>
      <category>compliance</category>
      <category>ai</category>
    </item>
    <item>
      <title>UK Companies House — post-ECCTA reality and the actual API surface</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Wed, 29 Apr 2026 07:59:10 +0000</pubDate>
      <link>https://dev.to/openregistry/uk-companies-house-post-eccta-reality-and-the-actual-api-surface-3737</link>
      <guid>https://dev.to/openregistry/uk-companies-house-post-eccta-reality-and-the-actual-api-surface-3737</guid>
      <description>&lt;p&gt;The UK's Economic Crime and Corporate Transparency Act 2023 ("ECCTA") changed Companies House from a passive filing repository into a verification authority. Identity verification for directors and PSCs is being rolled out in phases through 2026, suspended-name powers expanded, and there's a new "abbreviated information" mode for small filers. None of that broke the public REST API — but it changed &lt;em&gt;what's in the data&lt;/em&gt;. If you're integrating Companies House in 2026, here's what the surface actually looks like, what's free, what's paywalled, and the quirks that bite if you don't know them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's free and programmatic
&lt;/h2&gt;

&lt;p&gt;Companies House publishes one of the cleanest open registry APIs in the world. You sign up at &lt;a href="https://developer.company-information.service.gov.uk" rel="noopener noreferrer"&gt;developer.company-information.service.gov.uk&lt;/a&gt;, get an API key, and you're off. The API covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt; — &lt;code&gt;/search/companies&lt;/code&gt; returns up to 50 hits per call, paginated. There's a separate &lt;code&gt;/search/officers&lt;/code&gt; and &lt;code&gt;/search/disqualified-officers&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profile&lt;/strong&gt; — &lt;code&gt;/company/{number}&lt;/code&gt; returns the full statutory record: status, type, incorporation date, registered office, SIC codes, accounts schedule, confirmation-statement schedule, previous names, jurisdiction (England and Wales, Scotland, NI), insolvency-history flag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Officers&lt;/strong&gt; — &lt;code&gt;/company/{number}/officers&lt;/code&gt; returns directors + secretaries + auditors with appointment dates, roles, dates of birth (month + year only — day is suppressed under the residential-address protections of the Companies Act 2006 s.243), and country of residence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persons with Significant Control&lt;/strong&gt; — &lt;code&gt;/company/{number}/persons-with-significant-control&lt;/code&gt; returns the structured PSC register: name (or notification of supersession), kind, nature of control, notification dates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Filings&lt;/strong&gt; — &lt;code&gt;/company/{number}/filing-history&lt;/code&gt; returns every filing with category, type code, date, document ID. Documents themselves are at &lt;code&gt;/company/{number}/filing-history/{transaction_id}/document&lt;/code&gt; and come back as PDF or XHTML iXBRL bytes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Charges&lt;/strong&gt; — &lt;code&gt;/company/{number}/charges&lt;/code&gt; returns registered fixed/floating charges with persons entitled, status (outstanding / satisfied / part-satisfied), creation date.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rate limit is &lt;strong&gt;600 requests per 5 minutes per key&lt;/strong&gt; — generous enough for a serious workflow but not unlimited. Hit it and you get an HTTP 429 with a &lt;code&gt;Retry-After&lt;/code&gt; header in seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's paywalled or AML-gated
&lt;/h2&gt;

&lt;p&gt;Two things only:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bulk product downloads&lt;/strong&gt; (annual all-data dumps) cost a fee — but the per-request API has the same data anyway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The PSC nominee register and the names-by-residential-address feed&lt;/strong&gt; are Companies House internal tools, not public.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Notably the &lt;em&gt;PSC register itself is fully public&lt;/em&gt;. The UK never went the route of restricting beneficial-ownership data to AML-obliged entities — unlike the EU post-CJEU C-37/20.&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenRegistry's coverage of the UK surface
&lt;/h2&gt;

&lt;p&gt;OpenRegistry proxies Companies House one-to-one with these tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_companies&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;by name + by exact 8-character company number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_company_profile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;full statutory record incl. &lt;code&gt;previous_company_names&lt;/code&gt;, &lt;code&gt;accounts.next_due&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_officers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;merges current + resigned, paginated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_persons_with_significant_control&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;structured PSC register; corporate PSCs appear here distinctly from individuals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_shareholders&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live (via filing pointer)&lt;/td&gt;
&lt;td&gt;UK CH does &lt;strong&gt;not&lt;/strong&gt; expose a structured shareholders endpoint — the statutory members register is published as part of the Confirmation Statement (CS01). Tool returns the latest &lt;code&gt;CS01&lt;/code&gt; + &lt;code&gt;IN01&lt;/code&gt; filing IDs; pass to &lt;code&gt;fetch_document&lt;/code&gt; and parse the iXBRL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_filings&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;every filing from incorporation forward&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_financials&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;annual accounts subset of &lt;code&gt;list_filings&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fetch_document&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;iXBRL / PDF / XHTML bytes returned raw, no re-rendering&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_charges&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;full charge register&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_officer_appointments&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;given an officer ID, every UK company that officer sits / sat on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_officers&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ live&lt;/td&gt;
&lt;td&gt;by name; useful for adverse-media + PEP screening&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Quirks an integrator hits the hard way
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Company numbers are not all 8-digit numerics.&lt;/strong&gt; UK CH issues numbers from a structured space:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;8 digits → standard England &amp;amp; Wales / Wales-only company&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SC&lt;/code&gt; + 6 digits → Scottish company&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NI&lt;/code&gt; + 6 digits → Northern Ireland&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;OC&lt;/code&gt; + 6 digits → LLP (Limited Liability Partnership)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LP&lt;/code&gt; + 6 digits → Limited Partnership&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RC&lt;/code&gt; + 6 digits → Registered Society&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FC&lt;/code&gt; + 6 digits → Foreign company branch (UK establishment of an overseas firm — &lt;em&gt;no UK accounts filed; statutory dossier is at the home jurisdiction&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NF&lt;/code&gt; + 6 digits → Northern Ireland LLP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your code assumes all-numeric you'll silently exclude Scotland and every LLP in the country. &lt;code&gt;OC404063&lt;/code&gt; is a real LLP; &lt;code&gt;SC456789&lt;/code&gt; is a real Scottish company. Both work in OpenRegistry's &lt;code&gt;search_companies&lt;/code&gt; and &lt;code&gt;get_company_profile&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. PSC ≠ shareholders.&lt;/strong&gt; UK CH publishes a structured PSC register &lt;em&gt;and&lt;/em&gt; a separate (filing-only) statement of capital. They disagree: a 10% direct shareholder appears in the statement of capital but not in PSC; a corporate trustee with appointment rights appears in PSC without being a shareholder. Treat &lt;code&gt;get_persons_with_significant_control&lt;/code&gt; as the controlling-influence register, not the equity register. For full equity, fetch the latest CS01 PDF/iXBRL via &lt;code&gt;fetch_document&lt;/code&gt; and parse it yourself — that's exactly the workflow we walked in &lt;a href="https://openregistry.sophymarine.com/docs/case-studies/iceland-foods-chain-walk" rel="noopener noreferrer"&gt;Iceland Foods 4-layer chain&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Status is more granular than &lt;code&gt;active&lt;/code&gt;/&lt;code&gt;dissolved&lt;/code&gt;.&lt;/strong&gt; CH's &lt;code&gt;company_status&lt;/code&gt; field has eight values — &lt;code&gt;active&lt;/code&gt;, &lt;code&gt;dissolved&lt;/code&gt;, &lt;code&gt;liquidation&lt;/code&gt;, &lt;code&gt;receivership&lt;/code&gt;, &lt;code&gt;administration&lt;/code&gt;, &lt;code&gt;voluntary-arrangement&lt;/code&gt;, &lt;code&gt;converted-closed&lt;/code&gt;, &lt;code&gt;removed&lt;/code&gt; — plus a free-text &lt;code&gt;company_status_detail&lt;/code&gt; for the "in-flight" cases. A company shown as &lt;em&gt;active - proposal to strike off&lt;/em&gt; is materially riskier than a plain &lt;em&gt;active&lt;/em&gt; one. OpenRegistry's unified &lt;code&gt;status&lt;/code&gt; field collapses to &lt;code&gt;active&lt;/code&gt;/&lt;code&gt;inactive&lt;/code&gt; for cross-country comparison; the upstream nuance is preserved verbatim in &lt;code&gt;jurisdiction_data.company_status_detail&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Dates of birth are partial.&lt;/strong&gt; Director DoB returns &lt;code&gt;{ month, year }&lt;/code&gt; only. The day is suppressed under the residential-address-protection rules introduced in 2018. Don't try to match against a full DD-MM-YYYY DoB from another source — match on year + month or on full name + DoB-year.&lt;/p&gt;

&lt;h2&gt;
  
  
  A complete worked example — Monzo Bank Ltd
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Request&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"search_companies"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"arguments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Monzo Bank"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c1"&gt;// Response (truncated)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jurisdiction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"company_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"09446231"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"company_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MONZO BANK LIMITED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"active"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"incorporation_date"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2015-02-06"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"registered_address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Broadwalk House, 5 Appold Street, London, England, EC2A 2AG"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;code&gt;get_company_profile("GB", "09446231")&lt;/code&gt; returns the full record; &lt;code&gt;get_officers("GB", "09446231")&lt;/code&gt; returns 17 directors + secretaries; &lt;code&gt;get_persons_with_significant_control("GB", "09446231")&lt;/code&gt; returns the PSCs; &lt;code&gt;list_filings("GB", "09446231", { limit: 25 })&lt;/code&gt; returns the most-recent filings; &lt;code&gt;get_charges("GB", "09446231")&lt;/code&gt; returns every registered charge against the company. Five tool calls. Sub-second total latency. Replaces a manual workflow that would otherwise span five separate Companies House screens.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecting an MCP client
&lt;/h2&gt;

&lt;p&gt;Add this to your client (Claude Desktop / Cursor / Cline / Goose / Zed — any MCP 2025-06-18 compliant agent):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"openregistry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://openregistry.sophymarine.com/mcp"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free anonymous tier — 20 requests per minute per IP, every tool, every jurisdiction. No signup, no API key.&lt;/p&gt;

&lt;p&gt;Or skip the MCP layer entirely and search on the web at &lt;a href="https://openregistry.sophymarine.com/search?jurisdiction=GB" rel="noopener noreferrer"&gt;openregistry.sophymarine.com/search?jurisdiction=GB&lt;/a&gt;, or jump straight to a known company at &lt;a href="https://openregistry.sophymarine.com/company/gb/09446231" rel="noopener noreferrer"&gt;openregistry.sophymarine.com/company/gb/09446231&lt;/a&gt; for Monzo's full profile, directors, filings, and charges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where ECCTA goes from here
&lt;/h2&gt;

&lt;p&gt;The director-and-PSC identity-verification regime is rolling out in phases through 2026. The data shape returned by the public API hasn't changed — but starting late 2025, records show whether each director / PSC has completed Companies House identity verification (&lt;code&gt;identity_verification_status&lt;/code&gt;). Untrusted records may eventually be hidden from search; the current behaviour is they remain visible with the verification flag missing. Watch the field as it appears.&lt;/p&gt;




&lt;h2&gt;
  
  
  OpenRegistry's full coverage
&lt;/h2&gt;

&lt;p&gt;OpenRegistry is a free remote MCP server giving AI agents real-time access to company-registry data from &lt;strong&gt;30 national governments&lt;/strong&gt;. This article focused on the UK; the same toolkit covers:&lt;/p&gt;

&lt;p&gt;🇬🇧 UK Companies House · 🇫🇷 INSEE Sirene + INPI RNE · 🇩🇪 Handelsregister · 🇮🇹 Registro Imprese (BRIS) · 🇪🇸 BORME · 🇳🇱 KVK · 🇧🇪 KBO · 🇨🇭 Zefix · 🇳🇴 Brreg · 🇫🇮 PRH · 🇮🇪 CRO · 🇵🇱 KRS · 🇨🇿 ARES · 🇮🇸 RSK · 🇮🇲 IoM Registry · 🇨🇾 DRCOR · 🇲🇨 RCI · 🇱🇮 Liechtenstein HR · 🇰🇷 OPENDART · 🇭🇰 Companies Registry · 🇹🇼 GCIS · 🇲🇾 SSM · 🇦🇺 ABR · 🇳🇿 Companies Office · 🇨🇦 Corporations Canada (+ BC + NWT) · 🇲🇽 PSM · 🇰🇾 CIMA · 🇷🇺 ЕГРЮЛ&lt;/p&gt;

&lt;p&gt;→ &lt;strong&gt;Hosted MCP endpoint&lt;/strong&gt;: &lt;code&gt;https://openregistry.sophymarine.com/mcp&lt;/code&gt;&lt;br&gt;
→ &lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://openregistry.sophymarine.com/docs/" rel="noopener noreferrer"&gt;https://openregistry.sophymarine.com/docs/&lt;/a&gt;&lt;br&gt;
→ &lt;strong&gt;Free anonymous tier&lt;/strong&gt;: 20 req/min, every tool, every jurisdiction.&lt;/p&gt;

&lt;p&gt;Made by &lt;a href="https://www.sophymarine.com" rel="noopener noreferrer"&gt;Sophymarine&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>kyc</category>
      <category>fintech</category>
      <category>ai</category>
    </item>
    <item>
      <title>Tracing a Cypriot holding company across 4 registries</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Tue, 28 Apr 2026 15:00:46 +0000</pubDate>
      <link>https://dev.to/openregistry/tracing-a-cypriot-holding-company-across-4-registries-2i75</link>
      <guid>https://dev.to/openregistry/tracing-a-cypriot-holding-company-across-4-registries-2i75</guid>
      <description>&lt;h1&gt;
  
  
  Tracing a Cypriot holding company across 4 registries
&lt;/h1&gt;

&lt;p&gt;If you are a journalist or OSINT researcher, the hard part is not finding a company name. It is proving that the name on the brochure page is the same legal entity that sits behind the money, the contracts, and the dissolved shells.&lt;/p&gt;

&lt;p&gt;This is the kind of trail I would use for a Cypriot holding company with links that appear to run from Nicosia to the Gulf. The problem is familiar: one registry gives you the local entity, another gives you the parent, a third shows an officer appointment, and a fourth is where the ownership chain finally becomes legible. The work is slow when you have to juggle four websites and three spelling variants. It gets much faster when each step is an official registry query with a source link attached.&lt;/p&gt;

&lt;p&gt;For a researcher, the first pass is simple: search the company by name, capture the registration number, then pull the officer and filing history. In OpenRegistry, that is a small sequence of live calls rather than a paste-and-pray exercise. You can start with the company search, then inspect officers, then ask for filings or shareholder records where the registry exposes them. The important part is that every field comes back with an upstream source, so you can cite what you saw instead of describing what a third-party database thinks it saw.&lt;/p&gt;

&lt;p&gt;A useful pattern is to stop thinking in terms of “one company” and start thinking in terms of “one chain”. A shell structure usually reveals itself through a few signals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a newly formed holding company that owns an older operating entity&lt;/li&gt;
&lt;li&gt;directors who appear across several related companies&lt;/li&gt;
&lt;li&gt;a burst of appointments and resignations in a short window&lt;/li&gt;
&lt;li&gt;address reuse across multiple jurisdictions&lt;/li&gt;
&lt;li&gt;a foreign parent whose legal form changes as you cross borders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those are not proofs by themselves. They are prompts for the next registry call.&lt;/p&gt;

&lt;p&gt;Here is the workflow I would use on Monday morning:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Search the Cypriot entity and capture the exact legal name.&lt;/li&gt;
&lt;li&gt;Pull officers and check whether any names repeat in UK, Irish, or Dutch filings.&lt;/li&gt;
&lt;li&gt;Follow the parent or shareholder record into the next jurisdiction.&lt;/li&gt;
&lt;li&gt;Compare appointment dates, filing dates, and address changes to see whether the structure moved around a transaction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last step matters more than people expect. Journalists often look for the loud event, but the real story can be in the quiet timing gap: a director change two weeks before a sale, a new holding vehicle after an incorporation burst, or a dormant intermediary that only exists to bridge two filing systems.&lt;/p&gt;

&lt;p&gt;If you want to reproduce the process in your own notes, keep the output boring and portable. Capture the registry URLs, the registration numbers, the officer names, and the filing dates in a plain table. Do not trust a rendered summary as your evidence file. The evidence is the upstream record.&lt;/p&gt;

&lt;p&gt;example shape: a company search returns the legal name, registry identifier, incorporation date, and a source URL for each field. That is enough to anchor the rest of the investigation without inventing a structure chart from memory.&lt;/p&gt;

&lt;p&gt;For this kind of work, the most useful capability is a cross-border UBO chain walker. That lets you hop from one official record to the next without retyping the same entity name in every system. It is not magic. It just removes the friction that makes real investigative work feel impossible after the third registry tab.&lt;/p&gt;

&lt;p&gt;If you are using Claude Desktop or another agent interface, the value is even clearer. You can ask the model to keep the chain narrow, move jurisdiction by jurisdiction, and stop when a filing looks like a true control point instead of a cosmetic parent. That keeps the investigation honest. The model is not guessing ownership; it is only following official records that already exist.&lt;/p&gt;

&lt;p&gt;One practical tip: save the path, not just the result. A useful research note is not “Company A is owned by Company B.” It is “Company A appeared in Cyprus on this date, Company B appears in the UK filing history, and the same director name recurs in both records.” That format lets another person verify the trail without trusting your interpretation.&lt;/p&gt;

&lt;p&gt;When the chain gets messy, ask three questions in order. First, which entity is the earliest live record? Second, which officer or shareholder connects two records with the least ambiguity? Third, which filing date explains the timing of the move? Those questions are enough to separate a real ownership trail from a pile of related companies that only look connected because they share an address.&lt;/p&gt;

&lt;p&gt;If you are trying to verify whether a holding company is real, dormant, or just a staging layer, start with live registry data and keep the chain visible. OpenRegistry does that against 27 national registries, including Cyprus and the jurisdictions that usually sit downstream of it: &lt;a href="https://openregistry.sophymarine.com/mcp" rel="noopener noreferrer"&gt;https://openregistry.sophymarine.com/mcp&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>compliance</category>
      <category>legaltech</category>
      <category>programming</category>
    </item>
    <item>
      <title>Bureau van Dijk alternative for KYB teams that need live data</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Mon, 27 Apr 2026 15:00:45 +0000</pubDate>
      <link>https://dev.to/openregistry/bureau-van-dijk-alternative-for-kyb-teams-that-need-live-data-1dea</link>
      <guid>https://dev.to/openregistry/bureau-van-dijk-alternative-for-kyb-teams-that-need-live-data-1dea</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🎬 60-second demo:&lt;/strong&gt; OpenRegistry walks a real 4-layer UK shareholder chain — &lt;em&gt;Iceland Foods Ltd&lt;/em&gt; through three holding companies (WD FF MIDCO → ICELAND VLNCO → LANNIS), ending at the 8 individual owners with exact percentages (CEO Tarsem Dhaliwal &lt;strong&gt;41.35%&lt;/strong&gt;, Walker family &lt;strong&gt;51.31%&lt;/strong&gt; combined), all live from Companies House CS01 PDFs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fsophymarine%2Fopenregistry%2Fmain%2Fbrand%2Fdemo.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fsophymarine%2Fopenregistry%2Fmain%2Fbrand%2Fdemo.svg" alt="OpenRegistry demo" width="1068" height="826"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;KYC / KYB teams at fintechs and onboarding vendors usually know exactly why they keep paying for Bureau van Dijk: one place to look up corporate entities, some ownership context, and a familiar workflow for analysts. The part that hurts is the price, the lag between source filings and the vendor copy, and the way cross-border work still ends up in browser tabs and spreadsheets.&lt;/p&gt;

&lt;p&gt;If you are building for that persona, the useful question is not whether BvD has coverage. It is whether you still need a paid aggregation layer when your job is to answer a live corporate-data question from the source record. That is where OpenRegistry becomes a practical alternative: official registries, source-linked results, and a workflow that keeps the filing trail visible instead of flattening it into a vendor summary.&lt;/p&gt;

&lt;p&gt;Here is the comparison I would put in front of a KYB team before a renewal:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Bureau van Dijk&lt;/th&gt;
&lt;th&gt;OpenRegistry&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Coverage model&lt;/td&gt;
&lt;td&gt;Aggregated database&lt;/td&gt;
&lt;td&gt;Live official registries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Freshness&lt;/td&gt;
&lt;td&gt;Periodic refreshes&lt;/td&gt;
&lt;td&gt;Query the source directly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ownership trail&lt;/td&gt;
&lt;td&gt;Good for analyst review&lt;/td&gt;
&lt;td&gt;Better for source-linked verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing&lt;/td&gt;
&lt;td&gt;Enterprise contract&lt;/td&gt;
&lt;td&gt;Developer-friendly access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best use&lt;/td&gt;
&lt;td&gt;Broad screening and research&lt;/td&gt;
&lt;td&gt;Live due diligence workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Source links&lt;/td&gt;
&lt;td&gt;Usually indirect&lt;/td&gt;
&lt;td&gt;Direct links back to filings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That does not mean BvD is bad. It is still useful if you want a managed research environment and you do not care about tracing every step back to the government record. But if your product promise is “show me what the registry says now,” the aggregation layer becomes friction.&lt;/p&gt;

&lt;p&gt;A typical KYB workflow has three recurring pain points. First, an onboarding analyst wants to confirm that a company really exists in the jurisdiction it claims. Second, they want to see whether the director and ownership history support the story the customer gave them. Third, they want to resolve edge cases across jurisdictions without re-keying the same entity ten times. Those are source-record problems, not summary-report problems.&lt;/p&gt;

&lt;p&gt;What changes when you move the workflow to live registries? You can make the analyst path shorter. Search the entity once, pull the filing chain once, and keep the provenance visible. When the case is simple, the result is a quick pass. When it is messy, the mess is easier to explain to compliance because you can point at the record instead of the vendor snapshot.&lt;/p&gt;

&lt;p&gt;The other benefit is product design. A KYB app built on live registries can expose the uncertainty instead of hiding it. Maybe the entity name is transliterated differently. Maybe the officer list is incomplete in one jurisdiction and complete in another. Maybe the company is active in one registry and dormant in another. Those are not bugs to paper over; they are exactly the details an analyst needs to see.&lt;/p&gt;

&lt;p&gt;If you are evaluating an alternative today, I would use this rule of thumb: choose Bureau van Dijk if your team wants a broad commercial research layer and pays for convenience. Choose OpenRegistry if you want official source-linked data, lower latency to the filing record, and a product surface you can explain to auditors without hand-waving.&lt;/p&gt;

&lt;p&gt;The easiest way to test the fit is to take one real onboarding case and run it both ways. If the vendor layer answers the question faster and with enough provenance, keep it. If you keep hitting the source-record gap, the registry-first approach will save time every week, not just on renewal day.&lt;/p&gt;

&lt;p&gt;To try the registry-first path, start with &lt;a href="https://openregistry.sophymarine.com" rel="noopener noreferrer"&gt;https://openregistry.sophymarine.com&lt;/a&gt; and compare one live company lookup against your current KYB flow.&lt;/p&gt;

</description>
      <category>kyb</category>
      <category>compliance</category>
      <category>fintech</category>
      <category>programming</category>
    </item>
    <item>
      <title>For due diligence consultants: 30-minute workflows become 3-minute</title>
      <dc:creator>OpenRegistry</dc:creator>
      <pubDate>Sun, 26 Apr 2026 15:00:40 +0000</pubDate>
      <link>https://dev.to/openregistry/for-due-diligence-consultants-30-minute-workflows-become-3-minute-2aa0</link>
      <guid>https://dev.to/openregistry/for-due-diligence-consultants-30-minute-workflows-become-3-minute-2aa0</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🎬 60-second demo:&lt;/strong&gt; OpenRegistry walks a real 4-layer UK shareholder chain — &lt;em&gt;Iceland Foods Ltd&lt;/em&gt; through three holding companies (WD FF MIDCO → ICELAND VLNCO → LANNIS), ending at the 8 individual owners with exact percentages (CEO Tarsem Dhaliwal &lt;strong&gt;41.35%&lt;/strong&gt;, Walker family &lt;strong&gt;51.31%&lt;/strong&gt; combined), all live from Companies House CS01 PDFs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fsophymarine%2Fopenregistry%2Fmain%2Fbrand%2Fdemo.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fsophymarine%2Fopenregistry%2Fmain%2Fbrand%2Fdemo.svg" alt="OpenRegistry demo" width="1068" height="826"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;For due diligence consultants, the time sink is rarely the memo itself. It is the back-and-forth to verify directors, officers, filings, and ownership across more than one country before you can say whether a company is worth a closer look. If your workflow still means tab-hopping through registry sites, you know how fast a 30-minute check turns into a half-day.&lt;/p&gt;

&lt;p&gt;I have seen the same pattern across small advisory teams: one person finds the UK record, another checks a parent entity in the Netherlands, then someone else tries to confirm whether the same people show up in a second jurisdiction under a slightly different spelling. The result is not a lack of judgment. It is a lack of a single query layer that can pull the official record, keep the source links attached, and let you move from name to ownership chain without rebuilding the path each time.&lt;/p&gt;

&lt;p&gt;That is where a registry MCP server changes the shape of the work. Instead of asking consultants to be part researcher, part copy-paste operator, you give them one place to ask for the company profile, officers, filings, PSC data, and shareholder trail. The difference is not abstract. It shows up in the first ten minutes of a case: fewer browser tabs, fewer dead ends, and fewer “I think this is the right entity” moments.&lt;/p&gt;

&lt;p&gt;A useful way to think about it is the Monday-morning version of a due diligence brief.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with the company name the client gave you.&lt;/li&gt;
&lt;li&gt;Pull the live profile and officers.&lt;/li&gt;
&lt;li&gt;Check whether the name appears in more than one jurisdiction.&lt;/li&gt;
&lt;li&gt;Walk the ownership chain only as far as the public record allows.&lt;/li&gt;
&lt;li&gt;Save the source URLs before you write a word of narrative.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;example shape: profile, officers, filings, and PSC records all come back as raw upstream fields with source links attached. That matters because a consultant’s report is only as defensible as the evidence trail behind it. If a director name is normalised in one place and spelled differently in another, you want to see both forms rather than a tidy summary that hides the discrepancy.&lt;/p&gt;

&lt;p&gt;The other gain is consistency. In a manual process, the second analyst often repeats the same checks differently and ends up with a slightly different conclusion. In a live registry workflow, the team can standardise the same questions: Who is on the record now? What filings exist? Which control statements are public? Is there a shareholder chain worth chasing further? That makes review meetings shorter, because everyone is looking at the same source-backed answer.&lt;/p&gt;

&lt;p&gt;For smaller firms, the biggest payoff is not scale for its own sake. It is that a senior consultant can delegate more of the checking without losing confidence in the result. The junior staff member does not need to learn every registry quirk on day one. They need a tool that surfaces the record, keeps the upstream link visible, and makes it harder to confuse a similar name with the actual entity.&lt;/p&gt;

&lt;p&gt;There are still limits. Public registries do not tell you everything, and they do not replace judgment. They also do not solve source-language quirks, filing gaps, or the fact that some jurisdictions publish more than others. But they do remove a large chunk of repetitive work that used to sit between the question and the answer.&lt;/p&gt;

&lt;p&gt;If you spend your week turning company names into evidence packs, the practical test is simple: can you get from first lookup to source-linked trail without building your own scraper stack? If not, start with the registry endpoint at &lt;a href="https://openregistry.sophymarine.com/mcp" rel="noopener noreferrer"&gt;https://openregistry.sophymarine.com/mcp&lt;/a&gt; and see how far one live query gets you.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>kyb</category>
      <category>compliance</category>
      <category>legaltech</category>
    </item>
  </channel>
</rss>
