Guide · United Kingdom · Lookup, PSC and insolvency
UK company data API: Companies House number lookup, officers and PSC
A customer types a Companies House number or the first letters of a name; your form fills in the legal name, company type, status and registered office, and the same key reads the officers, the persons with significant control, the corporate events, the insolvency notices and the strike-off signals behind the record. One response shape, the same as every other country the API covers.
United Kingdom at a glance
Register: Companies House
Identifiers Company number
- Company recordsYes
- OfficersYes
- Insolvency noticesYes
- Corporate eventsGazette notices
- MonitoringYes
- Financial statementsAnnual accounts
- VAT numberNo
- NACE classYes
- UpdatedDaily, monthly full load
The guide below states the limits of every row. Financial statements are on the Scale plan and above; the other plans and the free trial get 10 calls a month.
Price From EUR 9.99 a month (Starter plan)
Sign upTry United Kingdom live
Look up a company in United Kingdom with the shared demo key. No sign-up.
The demo key is shared and capped per page view; your own key has the limits of your plan.
Is there an official UK company registry API?
As at 5 Nov 2026, yes: Companies House runs its own API (developer.company-information.service.gov.uk), which its developer hub describes as live and real-time for companies under the Companies Act 2006. The hub links a sign-in and an API authentication guide for access. One API across the live countries adds a company record in the same response shape as every other country, with officers, events and monitoring, and the same key covers every other country. Scope limits for the UK: no share capital, no beneficial ownership outside the UK PSC register and no credit scores; financial statements are for digitally filed accounts only, from the Scale plan. Compare register access in every country we checked.
What you get, and what you do not
The United Kingdom is one of the fuller countries in the API: the company record keyed on the Companies House number, its officers and persons with significant control (PSC), corporate events, a registry-compliance signal, corporate insolvency notices and public-procurement awards. Monitoring for the UK covers status change, dissolution, sanctions matches and corporate events (Companies House filings and Gazette notices), and beneficial ownership covers UK PSC only.
| Feature | For the United Kingdom | Where |
|---|---|---|
| Company record | Yes, keyed on the Companies House number. | GET /companies/search, GET /companies/{id} |
| Officers | Yes. | appointments on the record, GET /people/search?country=GB |
| PSC beneficial owners | Yes, UK only. Persons with significant control come back as appointments flagged is_beneficial_owner. | appointments on the record, GET /people/search?country=GB |
| Corporate events | Yes: the Companies House filing history and Gazette notices, typed into a fixed list of event types. | GET /company-events/search, /company-events/timeline |
| Registry-compliance signal | Yes: strike-off proposals (strike_off_proposed) and overdue accounts (accounts_overdue). | risk_flag_type=registry_compliance, include=risk_flags |
| Insolvency notices | Yes. The United Kingdom is one of the sixteen insolvency markets (FR, DE, GB, AT, CH, NO, FI, US, NL, DK, HR, SE, ES, LV, EE, SG). Corporate only. | GET /insolvency/search, POST /insolvency/check |
| Public procurement | Yes: Contracts Finder, Find a Tender and Public Contracts Scotland (Scottish awards published from January 2019), linked to the company record. | GET /procurement/awards?country=GB |
| Monitoring | Yes. Webhook on status change, dissolution, sanctions match (beta), Companies House filings and Gazette notices. | — |
| Share capital | Not published in the registry feed, so it is empty. | — |
Searching officers by name and reading corporate events need a Starter plan or above; a trial key has 25 calls a month on each. If you want to know what the register itself is, start with What is Companies House?
What the UK record gives your product
- Exact match on the company number.
company_number=00445790withcountry=GB. The number is eight characters: eight digits padded with leading zeros for England and Wales, or two letters and six digits (SCScotland,NINorthern Ireland,OC,SOandNClimited liability partnerships,LP,FCand others). Keep the leading zeros and the capital letters; the match is exact. - No check digit. A Companies House number carries none, so a well-formed number can still belong to no company. Only the lookup says whether it exists.
- Autocomplete by name.
?name=is a normalised, partial match ranked by a match score. Each call is one request. The free Companies House number lookup runs the same search. - The register's own state.
statusreads the Companies House status, includingactive_strike_off_pendingfor an active company with a strike-off proposal pending, andderegisteredfor a dissolved one. - A new-company feed.
founded_after=2026-09-01withcountry=GBlists companies by incorporation date, newest first, paged withnext_cursor. - One schema for every country. The same response shape whichever
countryyou pass, so a multi-country flow needs one integration.
| Field | What it holds for the United Kingdom |
|---|---|
company_number | The eight-character Companies House number: 00445790, SC095237, OC301540. |
company_name | The registered name in capitals. |
legal_form, local_legal_form, local_legal_form_name | The standard abbreviation, and the company type as Companies House labels it, with legal_form_family for comparing across countries. |
registry_details.jurisdiction | The part of the United Kingdom the company is registered in. |
status, stage, local_status | The standard status and lifecycle stage beside the Companies House status in local_status, where the value is recognised. |
address, postal_code, city, region | The registered office; city is the post town and region the county. |
activity_code, secondary_activity_codes | The main SIC code the company filed and, in secondary_activity_codes, the others. |
previous_names | Former names, each with a from_date and an until_date. |
founding_date, dissolution_date | The incorporation date and, for a dissolved company, the dissolution date. |
next_accounts_due, next_confirmation_due | The dates the next accounts and confirmation statement fall due. |
charges | Secured debt, on the single-company response only: counts of outstanding, satisfied and part-satisfied charges, the date of the latest charge and the lenders of the outstanding ones. Charges are fetched from Companies House for monitored companies and for companies with a new charge filing; null means not fetched yet (unknown, not none), and include=charges asks Companies House live. |
lei | The Legal Entity Identifier, where the company has one. |
Validate before you call
A Companies House number has no check digit, so there is no arithmetic to catch a typo. The shape is still checkable: eight digits, or two letters and six digits. This function pads a bare number the way Companies House prints it and rejects anything that cannot be a company number, so a format slip never costs a call. The identifier validator does the same in the browser.
// UK company number: 8 digits (England and Wales, zero-padded) or 2 letters + 6 digits
export function checkCompanyNumber(input) {
const v = String(input).toUpperCase().replace(/[\s.-]/g, '')
if (/^\d{1,8}$/.test(v)) return v.padStart(8, '0') // a bare number regains its leading zeros
return /^[A-Z]{2}\d{6}$/.test(v) ? v : null
}
checkCompanyNumber('445790') // '00445790' (Tesco PLC)
checkCompanyNumber('sc095237') // 'SC095237' (TSB Bank plc)
checkCompanyNumber('SC12345') // null: a prefixed number has six digitsA passing check says the number is well-formed, never that the company exists. That is what the lookup is for. Padding a short number is right for England and Wales, where the register holds the eight-character form; the API does not pad for you, because 445790 and 00445790 are different strings.
Four calls
# 1. By Companies House number curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \ "https://api.prometiam.com/functions/v1/risk-api/companies/search?company_number=00445790&country=GB" # 2. By name, for a type-ahead field curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \ "https://api.prometiam.com/functions/v1/risk-api/companies/search?name=tesco&country=GB&limit=5" # 3. The full record by the id the search returned, with its risk flags curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \ "https://api.prometiam.com/functions/v1/risk-api/companies/$COMPANY_ID?country=GB&include=risk_flags" # 4. Companies incorporated since a date, newest first curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \ "https://api.prometiam.com/functions/v1/risk-api/companies/search?founded_after=2026-09-01&country=GB&limit=100"
To resolve a list, POST /companies/lookup takes up to 100 items in one call, each one counted as one request:
curl -X POST "https://api.prometiam.com/functions/v1/risk-api/companies/lookup" \
-H "Authorization: Bearer $PROMETIAM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"country":"GB","company_number":"00445790"},{"country":"GB","company_number":"SC095237"},{"country":"GB","name":"Tesco"}]}'Beyond the record: officers, PSC, events and insolvency
Officers and persons with significant control
The company record carries appointments: each has a role_type, an action, an event_date and a ceased_date, and the person. Persons with significant control are in the same list with is_beneficial_owner set to true. To find an officer or a PSC by name, GET /people/search?name=smith&country=GB needs a Starter plan or above. Beneficial ownership covers UK PSC only; there is no equivalent for the other countries. See beneficial ownership verification for what the API holds and what it does not.
Corporate events
# The filings and Gazette notices of one company curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \ "https://api.prometiam.com/functions/v1/risk-api/company-events/timeline?country=GB&company_number=00445790&limit=10" # Only the director changes of that company curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \ "https://api.prometiam.com/functions/v1/risk-api/company-events/search?country=GB&company_number=00445790&event_type=director_change&limit=20"
Each event has an event_type from a fixed list (new_incorporation, director_change, capital_change, address_change, name_change, merger, demerger, dissolution, liquidation, insolvency, status_change, filing, correction, object_change, bylaws_change, legal_form_change, ownership_change, power_of_attorney, sale_of_business, debt_default, registry_closure, registry_reopening, reactivation, litigation, securities_issue, branch, charge, resolution, website, other; 9 Oct 2026: 19 finer types served, status_change now only the status changes no finer type describes), the raw Companies House code it was derived from in act_type, and the event_date. A raw code such as OFFICER_CHANGE still works as an event_type filter.
The registry-compliance signal
# Companies with a strike-off proposal or overdue accounts curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \ "https://api.prometiam.com/functions/v1/risk-api/companies/search?risk_flag_type=registry_compliance&country=GB&limit=20"
On a single company, include=risk_flags returns the signal (strike_off_proposed or accounts_overdue, dated in as_of). It is a compliance signal, not an insolvency or a dissolution: the company is still on the register but has stopped meeting its filing duties, the state that precedes a forced strike-off.
Insolvency notices
# Notices filed under one company number
curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \
"https://api.prometiam.com/functions/v1/risk-api/insolvency/search?country=GB&company_number=00445790"
# A list of counterparties in one call
curl -X POST "https://api.prometiam.com/functions/v1/risk-api/insolvency/check" \
-H "Authorization: Bearer $PROMETIAM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"items":[{"country":"GB","company_number":"00445790"},{"country":"GB","company_number":"SC095237"}]}'Notices are corporate only, from sixteen markets (FR, DE, GB, AT, CH, NO, FI, US, NL, DK, HR, SE, ES, LV, EE, SG). An empty result means no notice was found, not that the company is solvent. The batch call counts every item as one request.
Public procurement
# Awards to one supplier, by the Companies House number it published curl -H "Authorization: Bearer $PROMETIAM_API_KEY" \ "https://api.prometiam.com/functions/v1/risk-api/procurement/awards?country=GB&nif=00445790&limit=20"
Awards come from Contracts Finder, Find a Tender and Public Contracts Scotland (Scottish awards published from January 2019), and are linked to the company record. One row is one award to one supplier. The United Kingdom publishes a value on part of its awards, so an amount can be empty; amounts published in pounds are converted at the ECB annual average rate for the award year, and currency keeps the published one. Awards to natural persons are never returned.
An autocomplete endpoint in Node
Your server keeps the key and proxies the search; the form calls your server. A number-shaped input goes to the exact filter, padded to eight characters, and anything else is a name. There is no check digit to reject a typo, so the lookup itself says whether the company exists:
// server: /api/gb-company?q=... (keep the key out of the browser)
app.get('/api/gb-company', async (req, res) => {
const q = String(req.query.q || '').trim()
const compact = q.toUpperCase().replace(/[\s.-]/g, '')
const looksLikeId = /^(\d{6,8}|[A-Z]{2}\d{6})$/.test(compact) // number-shaped input; anything else is a name
const number = looksLikeId ? checkCompanyNumber(compact) : null
const params = new URLSearchParams({ country: 'GB', limit: '6', ...(number ? { company_number: number } : { name: q }) })
const r = await fetch('https://api.prometiam.com/functions/v1/risk-api/companies/search?' + params,
{ headers: { Authorization: 'Bearer ' + process.env.PROMETIAM_API_KEY } })
if (!r.ok) return res.status(502).json({ error: 'Lookup failed' })
const { data } = await r.json()
res.json(data.map(c => ({ id: c.id, name: c.company_name, number: c.company_number, form: c.local_legal_form_name || c.legal_form,
status: c.status, city: c.city, postal_code: c.postal_code, address: c.address })))
})Weighing it against the Companies House API
The Companies House API is free and is the source of the register; for a UK-only use case that fits inside its limits, it may be all you need. This API is the alternative when you also need other countries under one key and one response shape, typed corporate events, insolvency notices, the strike-off signal and procurement on the same call shape, or a volume the free API does not allow. Our Companies House API comparison sets the two side by side, and Companies House API in Python shows the free API end to end. Working across the Irish Sea? See Ireland and UK and Ireland under one key.
What the UK does not carry
- Share capital. Not published in the registry feed, so
capital_amountis empty. - Beneficial ownership outside UK PSC. PSC is the only beneficial-ownership data in the API.
- Credit scores. Not served.
- Financial statements. Annual accounts as filed are served from the Scale plan, for digitally filed accounts only: about three in four UK filings are iXBRL, and small and micro companies often file without a profit and loss account.
- Exact freshness on every field. The UK is refreshed daily, but
last_seen_datecan lag the register by up to a month between snapshots.
Pricing
The United Kingdom is included in every tier at no upcharge. Starter begins with a 14-day trial: 500 credits in total, 10 requests/minute, card required, nothing charged for 14 days. Subscribing keeps the same key working. Then Starter at €9.99/month (1,000 credits, 60 requests/minute), Professional at €29.99/month (10,000 credits, 120 requests/minute) and Scale at €99.99/month (50,000 credits, 300 requests/minute), monthly or annual; annual is ten months' price for twelve. A company record costs 1 credit, an autocomplete keystroke costs 1 credit, and error responses cost nothing. Officers by name and corporate events are Starter-tier scopes, with 25 calls a month on a trial key.
FAQ
How do I look up a UK company by Companies House number from an API?
Call GET /companies/search?company_number=00445790&country=GB. The match is exact, so keep the leading zeros and the capital letters of a prefix such as SC or OC. There is no check digit, so a well-formed number can still belong to no company.
Do I need the leading zeros?
Yes. 445790 and 00445790 are different strings and the register holds the eight-character form. Pad a bare number to eight digits before you send it.
Does it include persons with significant control?
Yes, for UK companies only. They come back as appointments flagged is_beneficial_owner, and GET /people/search finds officers and PSCs by name. Searching officers by name needs a Starter plan or above; a trial key has 25 calls a month.
Does it list UK insolvency notices?
Yes. The United Kingdom is one of the sixteen insolvency markets (FR, DE, GB, AT, CH, NO, FI, US, NL, DK, HR, SE, ES, LV, EE, SG), corporate only. GET /insolvency/search matches the company number printed on the notice, and POST /insolvency/check screens up to 100 counterparties in one call. An empty result is not proof of solvency.
Can I monitor UK companies?
Yes. POST /monitor with country=GB sends a webhook on a status change, dissolution, sanctions match (beta) or a corporate event: new Companies House filings and Gazette notices. A Starter key can monitor 25 companies, Professional 250 and Scale 2,500.
Is it an alternative to the Companies House API?
For UK-only use inside the free API's limits you may not need one. This API is the alternative when you also need other countries under one key, typed events, insolvency notices and the strike-off signal on one call shape.
How much does the UK company data API cost?
The United Kingdom is included in every tier at no upcharge. Free is a 14-day trial with 500 credits in total and card required, nothing charged for 14 days; subscribing keeps the same key working. Paid tiers run from EUR 9.99 to EUR 99.99 a month, monthly or annual.
Can I call the API from the browser?
You can, but a key in the browser is public. Proxy the search through your server, as in the sample above. Rate limits are per key.
Everything about United Kingdom
Guides
Comparisons
Use cases
More countries: Western Europe
SpainFranceIrelandBelgiumSwitzerlandGermanyNetherlandsAll data by country and type
Contains public sector information licensed under the Open Government Licence v3.0. Source: Companies House, UK.