Gov APIcompanieshouse.gov.uk ↗
Search UK companies and officers, retrieve profiles, filing history, charges, and PSC data from Companies House via a structured JSON API.
What is the Gov API?
The Companies House API provides access to the UK's official company registry through 8 endpoints covering search, company profiles, officers, filings, charges, and persons with significant control. Starting with search_companies or search_officers, you can retrieve a company_number or officer_id and drill into full corporate records including SIC codes, registered addresses, incorporation dates, and charge details.
curl -X GET 'https://api.parse.bot/scraper/e9f73887-9fc3-4808-a6e2-0e88d8719a6a/search_companies?page=1&query=Tesco' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace companieshouse-gov-uk-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""UK Companies House: search companies, drill into filings and officers."""
from parse_apis.companies_house_uk_api import (
CompaniesHouse, FilingCategory, CompanyNotFound
)
client = CompaniesHouse()
# Search for companies by name; limit caps total items fetched.
for company in client.companies.search(query="Tesco", limit=3):
print(company.company_name, company.company_number, company.status)
# Get full profile for a known company number.
try:
profile = client.companies.get(company_number="00445790")
print(profile.company_name, profile.company_type, profile.registered_office_address)
except CompanyNotFound as exc:
print(f"Company not found: {exc.company_number}")
# Drill into sub-resources via a constructible Company instance.
tesco = client.company(company_number="00445790")
# List filings filtered by category enum.
for filing in tesco.filings.list(category=FilingCategory.ACCOUNTS, limit=3):
print(filing.date, filing.type, filing.description[:60])
# List officers and check the first one's appointment history.
officer = tesco.officers.list(limit=1).first()
if officer:
appts = officer.appointments()
print(appts.officer_name, appts.total_appointments)
for appt in appts.appointments[:2]:
print(appt.company_name, appt.role, appt.appointed_on)
# Search officers directly from the root collection.
result = client.officersearchresults.search(query="John Smith", limit=1).first()
if result:
print(result.name, result.officer_id)
print("exercised: companies.search / companies.get / filings.list / officers.list / officer.appointments / officersearchresults.search")
Full-text search over UK registered companies by name or number. Returns up to 20 results per page. Matches against current and previous company names. Each result includes a company_number suitable for drill-down via get_company_profile.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based) |
| queryrequired | string | Search query — company name or registration number |
{
"type": "object",
"fields": {
"items": "array of company search results with company_name, company_number, status, address, and url"
},
"sample": {
"data": {
"items": [
{
"url": "https://find-and-update.company-information.service.gov.uk/company/00445790",
"status": "Matching previous names:TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY",
"address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
"company_name": "TESCO PLC",
"company_number": "00445790"
}
]
},
"status": "success"
}
}About the Gov API
Search and Lookup
search_companies accepts a query string matching current or previous company names and registration numbers, returning up to 20 results per page with company_name, company_number, status, and address. search_officers works the same way for people — searching by name and returning an officer_id for each match. Both endpoints support 1-based page pagination for iterating through large result sets.
Company Profile and Filings
get_company_profile takes an 8-character company_number (leading zeros preserved) and returns status, company_type, incorporated_on, dissolved_on, registered_office_address, nature_of_business (SIC codes), and confirmation_statement and accounts objects containing next and last statement dates. get_company_filing_history retrieves a dated list of filings with type codes, descriptions, and pdf_url where available. The optional category parameter filters results to accounts, confirmation-statement, capital, or incorporation filings.
Officers, Appointments, and Ownership
get_company_officers returns current and resigned officers with role, appointed_on, resigned_on, nationality, country_of_residence, and date of birth alongside an officer_id usable in get_officer_appointments. That endpoint lists every company appointment an officer holds or has held, including company_name, company_number, role, and dates. get_company_persons_with_significant_control surfaces PSC records with nature_of_control arrays, notified_on, and personal details — noting that public companies may return an empty list.
Charges
get_company_charges retrieves registered security interests including mortgages and debentures. Each charge object carries charge_id, title, created, delivered, status, persons_entitled, and short_particulars. This is useful for credit risk assessment and corporate due diligence workflows.
The Gov API is a managed, monitored endpoint for companieshouse.gov.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when companieshouse.gov.uk changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official companieshouse.gov.uk API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Due diligence automation: pull company status, SIC codes, and registered address from
get_company_profilefor KYC workflows - Beneficial ownership mapping: trace PSC
nature_of_controlacross group structures usingget_company_persons_with_significant_control - Credit risk screening: check outstanding and satisfied charges via
get_company_chargesbefore extending trade credit - Director network analysis: map all appointments of an individual using
get_officer_appointmentswith anofficer_id - Compliance monitoring: track confirmation statement and accounts due dates from
get_company_profileresponse fields - Filing retrieval: download accounts PDFs from
get_company_filing_historyfiltered by theaccountscategory - Nominee director detection: identify officers with large
total_appointmentscounts viaget_officer_appointments
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Companies House have an official developer API?+
What does `get_company_filing_history` return and can I filter it?+
filings array where each item includes date, type (a filing type code), description, and pdf_url (which may be null if no document is attached). The optional category parameter restricts results to one of four values: accounts, confirmation-statement, capital, or incorporation. There is no date-range filter; to retrieve filings across a long history, you would need to paginate through the full list.Are dissolved or struck-off companies included?+
get_company_profile returns a status field that can be Dissolved, Liquidation, Active, or other Companies House status values, and dissolved_on carries the dissolution date where applicable. search_companies also matches dissolved companies by name or number.Does the API return shareholder or share capital data?+
capital category filter), PSC ownership through get_company_persons_with_significant_control, and charges through get_company_charges, but individual shareholder registers and detailed share capital breakdowns are not exposed as structured fields. You can fork this API on Parse and revise it to add an endpoint targeting that data.How many results does each search endpoint return, and is there pagination?+
search_companies and search_officers each return up to 20 results per call. Both accept an integer page parameter (1-based) so you can step through additional results. For get_company_officers and similar list endpoints, all available records are returned in a single response with no pagination parameter.