Companies House API — UK Company Search, Profile & Filings
Pricing
$1.00 / 1,000 companies
Companies House API — UK Company Search, Profile & Filings
Search UK companies and read the public register: number, status, type, SIC codes, dates, registered office, accounts dates, latest filings, officer and charge counts. Unofficial Companies House API.
Pricing
$1.00 / 1,000 companies
Rating
0.0
(0)
Developer
yestrue
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Everything the UK Companies House register shows about a company as one clean JSON record: company number, registered name, status (Active, Dissolved, Liquidation …), company type, incorporation and dissolution dates, registered office address (as one line and split into street, town, region, postcode, country), SIC codes with descriptions, previous names with their periods, accounts and confirmation-statement due dates, the number of officers and resignations, the number of registered charges, and the latest filings with date, type code, description, page count and PDF link. Search by company name or look up company numbers — built on the public Companies House website, no API key, no login.
Try it in 1 minute:
- Press Start — the prefilled input searches "Rolls-Royce Holdings" (the top hit) and looks up company number 00445790 (Tesco PLC).
- Seconds later the Output tab shows the records: status, type, incorporation date, registered office, SIC codes, accounts dates, officers count and the latest 25 filings.
- Download JSON, CSV or Excel, or paste your own list of names or numbers, raise Max results per query and switch Include charges count on.
Price: $1.00 per 1,000 companies (one company = one record, with its filings and counts included when you ask for them). Numbers that are not on the register, queries without matches and invalid inputs are free.
Use it to:
- Enrich a CRM or spreadsheet of UK suppliers, customers or leads with their registered details, status and SIC codes.
- Run KYB / onboarding checks: is the company active, when was it incorporated, are its accounts or confirmation statement overdue, how many charges are registered.
- Monitor competitors or a portfolio on a schedule: new filings, status changes, name changes, address moves.
- Resolve company names to company numbers (with search position) before feeding an AI agent or a data pipeline.
- Build lists of companies by name pattern and read their nature of business without an API key.
How it works
- Company numbers are normalised to the 8-character register form (7524813 → 07524813, sc123456 → SC123456; a company page link gives its number) and deduplicated.
- Search queries go to the public search page (
/search/companies?q=…); the first results page holds 20 companies, cut to Max results per query, each with itsposition. A company found by several inputs is read once. - For every company the overview page (
/company/<number>) gives name, number, status, type, dates, registered office, SIC codes, previous names and the accounts / confirmation-statement dates. - With the options on, up to three more pages are read per company: the officers page for the heading "N officers / M resignations" (counts only — no officer names are collected), the first filing-history page (25 filings) and the charges page for its count.
Requests go directly to Companies House (no proxy, unless a connection drops), one second apart per worker; the register's per-IP rate limit (HTTP 429) is waited out and retried on the same route. The website has no robots.txt (checked October 2026). Filing descriptions are scrubbed of phone numbers and e-mail addresses.
Input
| Field | What it does |
|---|---|
queries | Company names to search, one per line. |
companyNumbers | Company numbers (07524813, SC123456, 7524813) or company page links, one per line. |
maxResults | Companies per query, up to 20 (default 5). |
includeFilings | Add the latest filings to every company (default on). |
maxFilings | Filings per company from the first page, up to 25 (default 25). |
includeOfficersCount | Add the officers and resignations counts (default on). |
includeCharges | Add the registered charges count (default off). |
maxConcurrency | Companies read in parallel (default 2; each worker waits 1 s between requests). |
proxyConfiguration | Used only to retry after a network error; the first try is direct. |
Output
One record per company:
| Field | What it is |
|---|---|
companyNumber, name, url | Identity and the company's page on the register |
companyStatus, companyType | Active / Dissolved / Liquidation …; Private limited Company, Public limited Company, LLP … |
incorporatedOn, dissolvedOn | Dates, YYYY-MM-DD |
registeredOffice, address | The registered office as one line and split into { addressLine1, addressLine2, locality, region, postalCode, country } (best effort) |
sicCodes[] | { code, description } — nature of business |
previousNames[] | { name, from, to } |
accounts, confirmationStatement | { nextDue, lastMadeUpTo, nextMadeUpTo, overdue } |
officersCount, resignationsCount | How many officers the register lists and how many resigned (counts only) |
chargesCount | Registered charges, with Include charges count on |
filings[] | { date, type, description, pages, url } — newest first, from the first filing-history page |
detailsError | Why an optional page could not be read; null when all went well |
query, position | The search query and the 1-based position the company came from; null for a company number |
input, status, error, scrapedAt | What you gave, OK / NOT_FOUND / NO_RESULTS / INVALID_INPUT / FAILED, the reason, and when |
Example
{"input": "Rolls-Royce Holdings","query": "Rolls-Royce Holdings","position": 1,"companyNumber": "07524813","name": "ROLLS-ROYCE HOLDINGS PLC","companyStatus": "Active","companyType": "Public limited Company","incorporatedOn": "2011-02-10","dissolvedOn": null,"registeredOffice": "Kings Place, 90 York Way, London, United Kingdom, N1 9FX","address": { "addressLine1": "Kings Place", "addressLine2": "90 York Way", "locality": "London", "region": null, "postalCode": "N1 9FX", "country": "United Kingdom" },"sicCodes": [{ "code": "70100", "description": "Activities of head offices" }],"previousNames": [{ "name": "ROLLS-ROYCE HOLDINGS LIMITED", "from": "2011-02-10", "to": "2011-03-08" }],"accounts": { "nextDue": "2027-06-30", "lastMadeUpTo": "2025-12-31", "nextMadeUpTo": "2026-12-31", "overdue": false },"confirmationStatement": { "nextDue": "2027-10-13", "lastMadeUpTo": "2026-09-29", "nextMadeUpTo": "2027-09-29", "overdue": false },"officersCount": 52,"resignationsCount": 37,"chargesCount": null,"filings": [{ "date": "2026-10-07", "type": "CS01", "description": "Confirmation statement made on 29 September 2026 with no updates", "pages": 3, "url": "https://find-and-update.company-information.service.gov.uk/company/07524813/filing-history/MzU0OTcwNzk4OWFkaXF6a2N4/document?format=pdf&download=0" }],"detailsError": null,"url": "https://find-and-update.company-information.service.gov.uk/company/07524813","status": "OK","error": null,"scrapedAt": "2026-10-19T12:00:00.000Z"}
FAQ
Is this an official API? No, it's an unofficial API built on public pages — the Companies House website that anyone can browse without a key or login. Companies House also offers an official REST API, which needs a registered account and key; this Actor is for the cases where you have neither. The data is what the website shows; the Actor only shapes it into stable JSON records.
Why is a company NOT_FOUND? The number is not on the register (a typo, or a number from another registry). Numbers are padded with leading zeros for you (7524813 → 07524813); Scottish, Northern Irish and LLP numbers keep their two-letter prefix (SC, NI, OC …). Try the name as a search query instead.
Do you collect officer names or personal data? No. The officers page is read only for its heading ("N officers / M resignations"); names, addresses, dates of birth and nationalities are never read or stored. Registered office addresses are public business data and are kept.
How many search results can I get? Up to 20 per query, the first results page of the register. For long lists, use more specific names (the register searches previous names too, and the record says which previous name matched a hit through position) or paste the company numbers directly.
What about rate limits? Companies House limits requests per IP; this Actor waits one second between the requests of a worker (2 workers by default) and waits out and retries an HTTP 429 on the same route. A run of a thousand companies with filings and officers counts takes about half an hour.
Like it? A short review on the Store page helps other people find this Actor. Something missing or broken? Tell us on the Issues tab — we read every one.
Related Actors
- SEC EDGAR API — 10-K, 10-Q, 8-K and full-text search
- Yahoo Finance API — stock quotes and fundamentals
- Website Tech Stack Detector — CMS, frameworks and analytics of any site
- Google News API — headlines by keyword and topic
- Web Fetch API — any URL as HTML, text, Markdown or JSON