find-and-update.company-information.service.gov.uk APIfind-and-update.company-information.service.gov.uk ↗
Access UK company profiles, filing histories, officers, and charges from Companies House via 7 structured endpoints. Filter by SIC code, status, type, and more.
curl -X GET 'https://api.parse.bot/scraper/0dc760ec-e863-4883-a169-6da8969b8b7e/search?page=1&type=all&query=Tesco' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for companies by name, number, or officer name. Returns paginated results mixing company and officer entries.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| type | string | Search type filter. Accepted values: all, companies, officers, disqualified-officers. |
| queryrequired | string | Search keyword (company name, number, or officer name). |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"type": "string, search type used",
"query": "string, the search query used",
"results": "array of search result objects containing name, type, url, and type-specific fields (company_number, address, officer_id, etc.)"
},
"sample": {
"data": {
"page": 1,
"type": "all",
"query": "Tesco",
"results": [
{
"url": "/company/00445790",
"name": "TESCO PLC",
"type": "company",
"status": "",
"address": "Tesco House, Shire Park, Kestrel Way, Welwyn Garden City, United Kingdom, AL7 1GA",
"company_number": "00445790",
"incorporation_date": ""
}
]
},
"status": "success"
}
}About the find-and-update.company-information.service.gov.uk API
This API provides structured access to UK company data from Companies House across 7 endpoints, covering everything from basic company profiles to registered charges and filing histories. The get_company_profile endpoint returns incorporation date, SIC codes, registered address, and company status by registration number, while get_companies_with_charges_by_lender lets you cross-reference lenders against charge records across multiple companies in a single call.
Company Search and Profiles
The search endpoint accepts a query string and an optional type parameter (all, companies, officers, disqualified-officers) to filter results. Each result includes a name, type, url, and type-specific fields such as company_number or officer_id. For more targeted lookups, advanced_search_companies supports filtering by company_name_includes, company_status, company_type, sic_codes, and registered_office_address, returning an array of objects with company_name, company_number, status, and type.
The get_company_profile endpoint takes a company_number (leading zeros preserved, e.g. 00445790) and returns the full registered profile: company_name, address, status, company_type, incorporation_date, and an array of sic_codes where available. This is the canonical starting point for any per-company data pipeline.
Filings, Officers, and Charges
get_company_filing_history returns a paginated list of filings for a given company, each with a date, type code, and plain-text description. An optional category parameter narrows results to a specific filing category. get_company_officers returns the current officer list with name, address, role, and appointed_on per officer — useful for building director networks or compliance checks.
get_company_charges returns all registered charges (mortgages and secured lending) against a company, including charge_code, created_date, delivered_date, status, persons_entitled, and a description. The get_companies_with_charges_by_lender endpoint goes further: given a lender_name, it searches for companies and filters their charge records for a matching entry in persons_entitled, returning company_name, company_number, and the full matching_charges array. An optional search_query parameter overrides the default company search term.
- Build a due diligence tool that pulls company status, incorporation date, and SIC codes before a contract is signed.
- Monitor filing history for a portfolio of companies to detect annual return submissions or director changes.
- Map director networks by querying
get_company_officersacross multiple company numbers and joining on officer names. - Identify all companies with charges held by a specific bank or lender using
get_companies_with_charges_by_lender. - Screen for dissolved or inactive companies in a supplier list using
advanced_search_companieswith acompany_statusfilter. - Aggregate SIC code distributions across a set of companies for sector-level analysis.
- Verify registered office addresses by comparing
get_company_profileoutput against self-reported contact data.
| 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 | 250 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_charges` return, and how does it differ from `get_companies_with_charges_by_lender`?+
get_company_charges takes a single company_number and returns all charge records for that company, including charge_code, created_date, delivered_date, status, persons_entitled, and description. get_companies_with_charges_by_lender works in the opposite direction: you supply a lender_name and it searches across multiple companies, returning only those whose charge records contain that lender in the persons_entitled field, along with the matching charge details.Does the API return resigned or historical officers?+
get_company_officers returns the current officer list as it appears on the Companies House record. Historical or resigned officers are not currently included in the response. You can fork this API on Parse and revise it to add a resigned-officers endpoint if your use case requires appointment history.How does pagination work across endpoints that support it?+
search, advanced_search_companies, and get_company_filing_history endpoints accept an integer page parameter. Each response echoes back the current page value alongside the result array. There is no explicit total-count or next-page URL field in the response, so iteration requires incrementing the page number until an empty results array is returned.