Companies House API: List company directors
Lists a UK company's current and resigned directors, secretaries and other officers, found by company name, number or Companies House link.
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, number, or Companies House company link, for example Tesco PLC.
00445790
- Max Results optional
max_results Most officers to return, for example 50.
200
Whole number from 1 to 200. Default
50.- Include Resigned optional
include_resigned Include former officers as well as current officers, for example yes.
yes (default)
One of
yes,no.
Input as JSON
{ "company": "00445790", "max_results": 200}Output
{ "officers": [ { "role": "Secretary", "full_name": "TAYLOR, Christopher Jon", "occupation": null, "nationality": null, "resigned_date": null, "appointed_date": "2025-04-14", "birth_month_year": null, "appointments_link": "https://find-and-update.company-information.service.gov.uk/officers/uJ_F_UGCbPiYELlJ_fHc-J_goqo/appointments" , "country_of_residence": null, "correspondence_address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA" }, { "role": "Director", "full_name": "BETHELL, Melissa", "occupation": null, "nationality": "British", "resigned_date": null, "appointed_date": "2018-09-24", "birth_month_year": "September 1974", "appointments_link": "https://find-and-update.company-information.service.gov.uk/officers/aqrS_F-2zIvSaMNtl1opqDV4-w0/appointments" , "country_of_residence": "United Kingdom", "correspondence_address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA" }, { "role": "Director", "full_name": "BODSON, Bertrand Jean Francois", "occupation": null, "nationality": "Belgian", "resigned_date": null, "appointed_date": "2021-06-01", "birth_month_year": "June 1975", "appointments_link": "https://find-and-update.company-information.service.gov.uk/officers/i4-DBrP10YuSc6pscv-b3MCQPQ8/appointments" , "country_of_residence": "England", "correspondence_address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA" } ], "company_link": "https://find-and-update.company-information.service.gov.uk/company/00445790" , "company_name": "TESCO PLC", "company_number": "00445790"}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_directors","input":{"company":"00445790","max_results":200}}' # 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_directors" , "input": { "company": "00445790", "max_results": 200 }})# 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_directors" , "input": { "company": "00445790", "max_results": 200 } }), 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_directors# with {"company":"00445790","max_results":200}"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, number, or Companies House company link, for example Tesco PLC." }, "max_results": { "type": "integer", "default": 50, "maximum": 200, "minimum": 1, "description": "Most officers to return, for example 50." }, "include_resigned": { "enum": [ "yes", "no" ], "type": "string", "default": "yes", "description": "Include former officers as well as current officers, for example yes." } }}Output schema
{ "type": "object", "required": [ "company_name", "company_number", "company_link", "officers" ], "properties": { "officers": { "type": "array", "items": { "type": "object", "required": [ "full_name", "role", "appointed_date", "resigned_date", "nationality", "occupation", "country_of_residence", "birth_month_year", "correspondence_address", "appointments_link" ], "properties": { "role": { "type": "string", "description": "Officer role in words." }, "full_name": { "type": "string", "description": "Officer's full name as shown on the register." }, "occupation": { "type": [ "string", "null" ], "description": "Occupation, when shown." }, "nationality": { "type": [ "string", "null" ], "description": "Nationality, when shown." }, "resigned_date": { "type": [ "string", "null" ], "format": "date", "description": "Resignation date, or null for a current officer." }, "appointed_date": { "type": [ "string", "null" ], "format": "date", "description": "Exact appointment date, or null when only an appointed-before date is shown." }, "birth_month_year": { "type": [ "string", "null" ], "description": "Month and year of birth as shown." }, "appointments_link": { "type": [ "string", "null" ], "description": "Link to the officer's appointments page." }, "country_of_residence": { "type": [ "string", "null" ], "description": "Place or country of residence, when shown." }, "correspondence_address": { "type": [ "string", "null" ], "description": "Registered correspondence address." } } }, "description": "Officers, current first, followed by resigned." }, "company_link": { "type": [ "string", "null" ], "description": "Company page link." }, "company_name": { "type": [ "string", "null" ], "description": "Registered company name." }, "company_number": { "type": [ "string", "null" ], "description": "Registered company number." } }}- 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_directors- Returns
- officer names, roles, appointment and resignation dates, nationality, occupation, residence, birth month and year, correspondence address, appointments link
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_directors with the inputs above.
Ask your agent
- Who are the current directors of Tesco PLC?
- List all officers of company number 00445790 including those who have resigned, showing their appointment dates.
- Can you pull up the board members and secretaries for Rolls-Royce Holdings plc, limited to the 20 most recent entries?
- Show me the directors ever appointed to Monzo Bank Limited on company-information.service.gov.uk, with their nationality and occupation.
- Find the current officers only of the company 07228509 and tell me each person's role and correspondence address.
See more
All Companies House methodsSearches 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_companiesLists 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 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 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.
find-and-update.company-information.service.gov.uk/list_ownersLooks 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_companyLists stock transactions reported on Form 4 filings by a company's officers, directors and major owners, newest first. Trades without a reported price have no calculated value.
sec.gov/list_insider_tradesFinds a public company by name or ticker in SEC EDGAR and lists its filings, newest first, optionally narrowed by filing type and filing date.
sec.gov/get_company_filingsFinds 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_companies