UK business systems guide

Using the Companies House API for UK customer onboarding and KYC

How to find the right legal entity, understand what Companies House does not verify, and keep registry updates from damaging customer records.

Ritesh AgarwalSep 1, 2026Reviewed Sep 9, 20268 min read
A registry hit is not a KYC pass: match score by signal, legal name, postcode, evidence and town

The short version

Companies House can confirm that a company appears on the UK register. It cannot prove that the person completing your form controls that company or may act for it. Reliable onboarding treats company discovery, identity, authority and ongoing monitoring as four separate decisions.

RegistryDiscover and resolveCandidates, then a confirmed company number
Your checksVerify person and authorityIdentity, mandate, sanctions, risk
Over timeMonitor safelySnapshots and review events, never silent overwrites

Key takeaways

  1. Search results are candidates. The company number is the key. The customer’s confirmation is the record.
  2. A registry hit is not a KYC pass. Identity, authority and screening are your checks.
  3. Never let a scheduled sync overwrite data a customer has confirmed. We have seen it blank an entire client list.
  4. Sole traders are not on the register. Design a second path before launch, not after.
  5. Officer and PSC data is personal data. Collect only what the decision needs.
REGISTRY-BACKEDYOUR CONTROLS01 DiscoverGET /search/companiesshort candidate listnever auto-pick #102 ResolveGET /company/{number}customer confirmsnumber is the key03 Verifyidentity of applicantauthority to actsanctions · risk04 Monitorstatus · officersPSC · insolvencyreview eventsRegistry snapshot + change eventsconfirms: exists · number · status · office · officers · PSCs · filingsdecides: who is applying · may they act · is the risk acceptableFIG. 01FOUR-STAGE ONBOARDING
Fig. 01 Companies House anchors the first two stages. The third and fourth are your checks and your policy.scroll →

What the Companies House API provides

The Public Data API exposes live register information: legal name, company number, status, incorporation date, type, registered office, previous names and SIC codes, with linked resources for officers, persons with significant control, filings, charges and insolvency. Authentication is an API key over HTTP Basic. The standard limit is 600 requests in five minutes; excess traffic gets 429. Companies House API · Authentication

TaskTypical API call
Find candidate companiesGET /search/companies
Retrieve the chosen companyGET /company/{company_number}
Review officersGET /company/{company_number}/officers
Review beneficial ownershipGET /company/{company_number}/persons-with-significant-control

Company lookup and KYC are not the same check

Companies House can tell you
  • The entity exists, its number and status
  • Registered office, officers, PSCs
  • Filing history, charges, insolvency
Your onboarding must decide
  • Who the applicant is
  • Whether they may act for the company
  • Whether screening passes and the risk is acceptable
Do not turn a registry hit into a KYC pass. Companies House does not check the accuracy of what is filed. For regulated businesses the register supports customer due diligence; it does not complete it. Register guidance · HMRC due-diligence guidance

The first real problem: matching the right company

In 2024 a partner agency’s client needed a customer spreadsheet enriched with company numbers and SIC codes. The first idea was to crawl register pages with an SEO spider. Because the API is free to registered applications, we wrote a small server-side script instead: search each business name, fetch the profile. The responses were consistent. The matches were not.

  1. Trading names, abbreviations and previous names broke “take the first result”. The client’s reviewer found cases where the register search returned the wrong entity while a general web search found the right one. We said it upfront: a script prepares the enrichment, a person verifies it.
  2. SIC codes arrive as bare codes such as 25110. A local lookup table of descriptions has to be joined at export time.
  3. The output was a spreadsheet, not an API. The client wanted their own account reference on every row. Enrichment is a data product for an operations team.

The durable workflow is name and address → candidate companies → scored matches → customer or reviewer confirmation → company number. The number anchors the relationship, not the search ranking.

A practical matching score0–100
40Exact normalised legal name
25Exact registered-office postcode
10Town or locality
25Status, SIC, date and previous-name evidence
±Calibrate against reviewed matches from your own customers
90–100Preselect, then ask the customer to confirm.
70–89Show the strongest candidates and their differences.
Below 70Send to review; also review close top-two scores.

The second problem: safe synchronisation

On a UK accounting platform we maintained, a scheduled Companies House job started blanking client names and creating duplicate records on a specific day in September 2024. Restoring the previous day’s backup fixed it for a day; the next run reproduced the damage. Sole-trader records were untouched, which was the clue: only limited companies were synchronised. Disabling the job restored the platform. The fault was architectural. Registry data had become authoritative over data customers had already confirmed, and with no snapshot or change history there was nothing to compare the damaged rows against.

Companies Housescheduled job orstreaming timepointregistry_snapshotraw responseretrieved_at · etagmapped fieldsUpdate policycompare · validatenull keeps old valuematerial → eventcustomer_companyconfirmedoperationalregistry_change_eventdiff · review statusaudit historyregistry_linkcompany numbermatch method · statea name that arrives blank neveroverwrites a name a customer confirmedpause the job without stopping the product · resume failed batches from the last timepointFIG. 02SAFE REGISTRY SYNC
Fig. 02 Registry data lands in a snapshot, a policy decides what changes, and the customer record only moves under explicit rules.scroll →
The same platform shows why the job exists. Its client task deadlines for annual accounts and confirmation statements come from the due dates Companies House publishes. The due date should change when the register changes. The customer’s display name should not.

Sole traders, limited companies and unregistered businesses onboard differently

A UK wholesale marketplace we worked with from 2023 onboarded retailers into trade-credit accounts. The first form asked for a “company house number” as free text in a modal. We replaced it with a search component that returned candidates, so the retailer confirmed an entity rather than typing an identifier. Downstream, the trade-credit provider’s API had separate resources for limited companies, sole traders and unregistered businesses, keyed on the organisation number.

Limited companyResolves to a company number

Search, confirm, snapshot. Officers and PSCs available when the risk policy needs them.

Sole traderNo register entry

Capture the individual’s name and trading details; apply the identity and address checks appropriate to an unregistered business.

Overseas or unregisteredSay clearly what they can do

On that marketplace, overseas companies were routed to pay-now rather than credit. A clear limit beats a failed check later.

Three controls made the difference: a back-office review table showing each evidence field as accepted, pending or rejected; every KYC state change stored as an event; and a scheduled job that flags duplicate retailer accounts before review, still running in 2026. One bug worth remembering: a retailer submitted the form before the email one-time code had been verified. Validate the contact channel before accepting the submission, not after.

Identity is a separate product decision. On a UK product in 2026 we integrated a document identity check and chose ID verification alone, without face-match or liveness, because that was the decision the product needed. Testing showed the document’s country and type had to be validated inputs: a declaration of one country’s driving licence was accepted with another country’s identity card. A company number does none of this work.

Implementation essentials

Minimal server-side clienttypescript
const baseUrl = "https://api.company-information.service.gov.uk";

async function companiesHouseGet<T>(path: string): Promise<T> {
  const apiKey = process.env.COMPANIES_HOUSE_API_KEY;
  if (!apiKey) throw new Error("Companies House API key is missing");

  const response = await fetch(`${baseUrl}${path}`, {
    headers: {
      Authorization: `Basic ${Buffer.from(`${apiKey}:`).toString("base64")}`,
      Accept: "application/json",
    },
    signal: AbortSignal.timeout(8000),
  });

  if (response.status === 429) throw new Error("Rate limit reached");
  if (!response.ok) throw new Error(`Companies House returned ${response.status}`);
  return response.json() as Promise<T>;
}
Interactive trafficReserve capacity for customer searches

Debounce on the client, search on the server, keep the key out of the browser.

Bulk enrichmentQueue, cache and retry below the limit

Short-lived search caching, longer profile caching, retry with jitter, a circuit breaker.

OperationsTrack timeouts, 429s, mismatches and reviews

Correlation IDs, structured logs, and the sandbox for failure paths before production.

Incoming changeRecommended behaviour
Status, insolvency or material risk changeSave snapshot, create event, apply policy
Registered name or office changesKeep customer display data; request review where relevant
Source field becomes nullKeep the confirmed value; log the missing source data
Officer or PSC changesCreate a review event when risk requires it
API unavailable or ranking changesKeep the last snapshot and the confirmed company number

Companies House identity verification became a legal requirement on 18 November 2025, with a twelve-month transition for existing directors and PSCs running to mid-November 2026. Officer and PSC resources may carry an optional identity_verification_details object, and records gain it progressively. Missing data should produce “unavailable” or a review state, not an automatic rejection. When verification is required · Streaming API

Privacy and release checklist

Public register data is still personal data when you store officer or PSC information. Collect only what the decision requires, define retention, restrict access and explain the registry check in your privacy notice. The same applies to a request we often get from UK accountancy and formation businesses: programmatic company-profile pages built from register data. Public, common, and still personal data. ICO data minimisation

Store the company number as a stringShow candidates; never auto-accept the firstCustomer confirms name, number and addressKeep the key and searches on the serverSeparate snapshots from confirmed dataNulls never delete confirmed fieldsJobs are observable, idempotent, pausableCollect officer and PSC data only when neededRecord evidence, decisions and review times
Our ruleSearch → resolve → confirm the number → verify person and authority → assess risk → monitor. Registry data is a source inside your onboarding system, never the system itself.

Frequently asked questions

Is the Companies House API free?
The public data API is available to registered applications with an API key. The standard limit is 600 requests within five minutes, so high-volume products still need caching and queueing.
Can Companies House be used as a KYC provider?
It supports company identification, status, officer and beneficial-ownership checks. It does not replace applicant identity, authority, sanctions, PEP, risk and ongoing-monitoring checks where those are required.
Can I automatically select the first search result?
Usually, no. Trading names, abbreviations and similar legal names make the first result unreliable. Ask the user to confirm the company or use a scoring and review workflow.
Does a sole trader have a Companies House number?
No. Sole traders and ordinary partnerships are not on the company register, so a Companies House search cannot resolve them. Onboarding needs a separate path that captures the individual's name and trading details and applies the checks appropriate to an unregistered business.
How often should company data be refreshed?
Match the frequency to risk. A directory can refresh periodically; a regulated relationship may need event-based monitoring. The Streaming API supports real-time change feeds at larger scale.
Published 1 Sep 2026Reviewed 9 Sep 2026Reviewer Appycodes Editorial Team

Technical and operational guidance. Businesses with regulatory obligations should have their due-diligence policy reviewed by a UK compliance professional.

The engagements this writing comes from

UK · Europe · Worldwide

selected work

Where these numbers came from

Production systems with the delivery figures attached.

Creoate product interface01
B2B commerce

The engineering partnership behind a cross-border wholesale marketplace.

Next.js storefront, Python ingestion pipelines, DynamoDB data layer and AWS infrastructure.

8+ yearsone team, still shipping
Ontick product interface02
Event technology

A commission-free ticketing platform built for ownership and scale.

Multi-organiser commerce, Stripe instalments and two native apps in one connected platform.

£2M+processed since launch
Easyship product interface03
Global logistics

Embedded product engineering for a global shipping platform.

Rate, tax and duty calculators, server-rendered courier pages and a custom MongoDB CMS.

550+couriers on the calculator
TEFL.ie product interface04
Education & training

A course-commerce and learning platform wired into one system.

WordPress and WooCommerce, a Moodle LMS, Stripe deposits and Zoho CRM, tied together with Zapier automation.

8 yrsengineer & run, since 2017
All White Laser product interface05
Medical aesthetics

A bespoke platform that finances aesthetic machines on Direct Debit.

A lead-to-billing system on GoCardless Direct Debit, provider certification, and a React Native app for machine owners.

9 yrsbuild & run, since 2017
Decofetch product interface06
Luxury commerce

A custom furniture marketplace engineered from storefront to infrastructure.

Server-rendered Next.js commerce over a Laravel API, bespoke operations tooling and re-architected AWS infrastructure.

0→livecustom, front to back
BA Engine Room product interface07
AI operations

An AI-native operating system that runs a consultancy lead to invoice.

Discovery briefs, e-signed contracts, Stripe deposits, delivery milestones and time tracking in one operational system.

0→1built from the ground up
PlusHeat product interface08
Home services

A conversion platform for a growing UK boiler-cover provider.

Custom plan configuration, postcode-qualified lead journeys, CRM synchronisation and campaign landing pages.

5 yrsweb partner since 2021
Léonia product interface09
Beauty commerce

A custom Shopify store for a French beauty brand.

Custom theme, customer accounts, loyalty rewards, referrals and gift-with-purchase offers.

5 yrspartners since 2021
Shutters 365 product interface10
Home improvement

Made-to-measure shutters with live pricing.

A seven-step product builder with live previews, sample orders and supplier tools.

7-stepconfigurator, live pricing
Bloc Ads Manager product interface11
Advertising

A self-service advertising platform for venues.

Campaign creation, audience targeting, in-app ads and reporting linked to venue check-ins.

check-insclosed-loop attribution
Bloc product interface12
Social events

An events app with the tools to run it.

Mobile app, backend, advertising tools, a digital marketplace and website.

4+ yrsone team, five codebases
Zonely product interface13
Social mobile

Two mobile apps for real-time companionship.

Customer and buddy apps with per-minute billing, wallets, moderation and admin tools.

2 appsconsumer + buddy, iOS & Android
Player Profile Hub product interface14
Grassroots football

Player profiles and discovery for youth football.

Verified profiles, video highlights, coach discovery and safeguarding on web and mobile.

0→1built from the ground up
DeepSpatial product interface15
Geospatial AI

Websites and a talent platform for DeepSpatial.

Corporate and investor pages, the Xploor talent platform and ongoing releases on AWS Amplify.

2 yrsone team, ongoing
Yippee Malta product interface16
Travel

Tour bookings with a custom mobile-first checkout.

A multilingual website connected to the booking API, with deposits, coupons and affiliate tracking.

90+core web vitals, mobile & desktop
Professional Energy product interface17
Energy brokerage

One platform for tenders, contracts and accounts.

Supplier tenders, contract management, brokerage accounting and client records.

100+suppliers in one tender

Tell us what you are trying to build.

A thirty-minute call with the engineer who would run it.

Book a call