Companies House API: List company owners
Lists a UK company's people with significant control and any register statement, from the public Companies House register. Ceased owners and withdrawn statements are included only when asked for.
Unofficial. Not affiliated with or endorsed by Companies House.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Company, required
company Company name, company number, or Companies House company link, for example Monzo Bank.
14785367
- Include Ceased optional
include_ceased Include ceased owners and withdrawn statements, for example false.
true
True or false. Default
false.
Input as JSON
{ "company": "14785367", "include_ceased": true}Output
{ "owners": [ { "kind": "individual", "name": "Mr Gary Andrew Hoffman", "country": null, "page_link": "https://find-and-update.company-information.service.gov.uk/company/14785367/persons-with-significant-control#psc-name-2" , "ceased_date": "2023-09-12", "nationality": "British", "notified_date": "2023-04-06", "birth_month_year": "October 1960", "nature_of_control": [ "Owns 75% or more of shares", "Controls 75% or more of voting rights", "Right to appoint or remove directors" ], "registered_address": null, "country_of_residence": "United Kingdom" } ], "company_link": "https://find-and-update.company-information.service.gov.uk/company/14785367" , "company_name": "MONZO BANK HOLDING GROUP LIMITED", "company_number": "14785367", "register_statement": "The company knows or has reasonable cause to believe that there is no registrable person or registrable relevant legal entity in relation to the company"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"find-and-update.company-information.service.gov.uk/list_owners","input":{"company":"14785367","include_ceased":true}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "find-and-update.company-information.service.gov.uk/list_owners" , "input": { "company": "14785367", "include_ceased": True }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "find-and-update.company-information.service.gov.uk/list_owners" , "input": { "company": "14785367", "include_ceased": true } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run find-and-update.company-information.service.gov.uk/list_owners# with {"company":"14785367","include_ceased":true}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "company" ], "properties": { "company": { "type": "string", "description": "Company name, company number, or Companies House company link, for example Monzo Bank." }, "include_ceased": { "type": "boolean", "default": false, "description": "Include ceased owners and withdrawn statements, for example false." } }}Output schema
{ "type": "object", "required": [ "company_name", "company_number", "company_link", "owners", "register_statement" ], "properties": { "owners": { "type": "array", "items": { "type": "object", "required": [ "name", "kind", "nature_of_control", "notified_date", "ceased_date", "nationality", "country_of_residence", "birth_month_year", "registered_address", "country", "page_link" ], "properties": { "kind": { "type": "string" }, "name": { "type": "string" }, "country": { "type": [ "string", "null" ] }, "page_link": { "type": "string" }, "ceased_date": { "type": [ "string", "null" ], "format": "date" }, "nationality": { "type": [ "string", "null" ] }, "notified_date": { "type": [ "string", "null" ], "format": "date" }, "birth_month_year": { "type": [ "string", "null" ] }, "nature_of_control": { "type": "array", "items": { "type": "string" } }, "registered_address": { "type": [ "string", "null" ] }, "country_of_residence": { "type": [ "string", "null" ] } }, "additionalProperties": false } }, "company_link": { "type": "string" }, "company_name": { "type": "string" }, "company_number": { "type": "string" }, "register_statement": { "type": [ "string", "null" ] } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
find-and-update.company-information.service.gov.uk/list_owners- Returns
- company name and number, owners (name, kind, nature of control, dates, nationality, residence, address), register statement
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method find-and-update.company-information.service.gov.uk/list_owners with the inputs above.
Ask your agent
- Who are the people with significant control of Monzo Bank Limited?
- Show me the registered owners and controllers for company number 09446231.
- Which individuals hold more than 25% of shares in Tesco PLC according to Companies House?
- List the beneficial owners of Rolls-Royce Holdings plc, including any who have ceased to be owners.
- Find the persons with significant control register entries for Ocado Group plc on company-information.service.gov.uk.
See more
All Companies House methodsLists a UK company's current and resigned directors, secretaries and other officers, found by company name, number or Companies House link.
find-and-update.company-information.service.gov.uk/list_directorsSearches the UK Companies House register by company name and returns each company's status, type, incorporation date and registered office address, in result order.
find-and-update.company-information.service.gov.uk/search_companiesLooks up a UK company on Companies House by name, company number or Companies House link and returns its public registration details; a name prefers an active exact match.
company-information.service.gov.uk/get_company_profileLists a UK company's Companies House filings, newest first, with date, form code, type, description, page count and PDF link. Finds the company by name, company number or Companies House link; a category picks accounts, confirmation statements, officers, address, capital, charges or incorporation filings.
find-and-update.company-information.service.gov.uk/list_filing_historyLooks up a French company by name, SIREN or SIRET and returns its registration, directors and latest public financial figures. Financial figures are null when not published; a city or postcode helps pick the right namesake.
annuaire-entreprises.data.gouv.fr/get_companyGets a company's Trustpilot rating summary from its name or website: TrustScore, rating label, total reviews, star breakdown, categories, claimed status, reply statistics and location when shown.
trustpilot.com/get_company_ratingFinds companies on Trustpilot by name or what they do, with TrustScore, review count, categories, location, logo and links. A preferred country moves companies listed in that country to the front.
trustpilot.com/search_companiesFinds a company's reported direct and ultimate accounting-consolidation parents, the reasons parents are not reported, and direct children in the GLEIF LEI system.
gleif.org/get_corporate_parents