How to look up hundreds of UK companies on Companies House at once (profile, officers, PSC)
Updated 2026-10-28 ยท Tool used: UK Companies House Lookup - Company Profile, Officers & PSC on Apify ยท Price: $0.002 per company profile found ($2 per 1,000), officers and PSC included; invalid numbers and names with no match are free
Supplier onboarding, KYB checks and CRM clean-up all start with the same question: is this UK company real, active and up to date with its filings, and who runs and owns it? The Companies House website answers it one company at a time, and its terms ask people not to bulk-scrape the website.
This guide shows how to use the official Companies House Public Data API instead, with your own free API key, to check hundreds of companies in one run: status, type, incorporation date, registered office, SIC codes, liquidation and charges flags, next accounts and confirmation statement due dates, and optionally officers and persons with significant control (PSC).
Open UK Companies House Lookup on Apify โSteps
- Get a free API key at the Companies House developer hub and put it in
apiKey. Without a key the actor only serves a small demo. - Add company numbers to
companyNumbers(ScottishSC, Northern IrishNIand LLPOCprefixes work) and/or names tocompanyNames. SetmaxResultsPerNameto 1 when you only want the best match. - Turn on
includeOfficersandincludePersonsWithSignificantControlif you need directors and owners. They are nested on the same row at no extra charge. - Run it and export the dataset as CSV or Excel. Re-run it monthly as a task to catch status changes and overdue accounts.
Example input
{
"companyNumbers": [
"00445790",
"00000006"
],
"companyNames": [
"Tesco"
],
"includeOfficers": false,
"includePersonsWithSignificantControl": false,
"maxResultsPerName": 1,
"maxCompanies": 100
}
Example output (one item, shortened)
{
"query": "00445790",
"queryType": "companyNumber",
"found": true,
"demo": true,
"companyNumber": "00445790",
"companyName": "TESCO PLC",
"companyStatus": "active",
"companyType": "plc",
"dateOfCreation": "1947-11-27",
"dateOfCessation": null,
"registeredOfficeAddress": {
"lines": "Tesco House, Shire Park, Kestrel Way",
"locality": "Welwyn Garden City",
"region": null,
"postalCode": "AL7 1GA",
"country": "United Kingdom"
},
"sicCodes": [
"47110"
],
"jurisdiction": "england-wales",
"hasBeenLiquidated": false,
"hasCharges": true,
"hasInsolvencyHistory": false,
"accountsNextDue": "2027-02-28",
"accountsNextMadeUpTo": "2026-02-28",
"accountsOverdue": false,
"confirmationStatementNextDue": "2026-12-11",
"confirmationStatementOverdue": false,
"companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/00445790",
"officers": null,
"personsWithSignificantControl": null,
"error": null
}
Every run's dataset can be downloaded as JSON, CSV, Excel, XML or HTML from the Apify Console, or via https://api.apify.com/v2/datasets/<datasetId>/items?format=csv.
Run it from code
Python
from apify_client import ApifyClient # pip install apify-client
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"companyNumbers": [
"00445790",
"00000006"
],
"companyNames": [
"Tesco"
],
"includeOfficers": false,
"includePersonsWithSignificantControl": false,
"maxResultsPerName": 1,
"maxCompanies": 100
}
run = client.actor("tinyrex/uk-companies-house-lookup").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)JavaScript / Node.js
import { ApifyClient } from 'apify-client'; // npm i apify-client
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('tinyrex/uk-companies-house-lookup').call({
"companyNumbers": [
"00445790",
"00000006"
],
"companyNames": [
"Tesco"
],
"includeOfficers": false,
"includePersonsWithSignificantControl": false,
"maxResultsPerName": 1,
"maxCompanies": 100
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);curl (no SDK)
# Runs the actor and returns the results directly (CSV here; use format=json for JSON)
curl -X POST "https://api.apify.com/v2/acts/tinyrex~uk-companies-house-lookup/run-sync-get-dataset-items?format=csv" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companyNumbers": ["00445790", "00000006"], "companyNames": ["Tesco"], "includeOfficers": false, "includePersonsWithSignificantControl": false, "maxResultsPerName": 1, "maxCompanies": 100}' > results.csv
Get your API token in Apify Console โ Settings โ API & Integrations. The free Apify plan includes monthly credit that is enough to try this.
Use it from an AI agent (MCP)
The Apify MCP server exposes this actor as a tool for Claude, Cursor, VS Code, n8n and other MCP clients. Add this to your client's MCP config (or use the OAuth flow at mcp.apify.com instead of a token):
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=tinyrex/uk-companies-house-lookup",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
}
Then ask in plain language, e.g. "Companies house api bulk lookup for this list and give me a table".
Pricing
Pay per result: $0.002 per company profile found ($2 per 1,000), officers and PSC included; invalid numbers and names with no match are free. You can cap the cost of every run in the run options.
FAQ
Is the Companies House API free?
Yes. The Public Data API is free with a key from the developer hub and is limited to 600 requests per key per 5 minutes. The actor throttles itself under that limit and retries politely.
Can I reuse Companies House data commercially?
Companies House does not restrict how public register information is used. Officer and PSC names are personal data, so check your GDPR legal basis before using them for marketing.
How do I check if a UK company is overdue with its accounts?
Look at accountsNextDue and confirmationStatementNextDue in the output and compare them with today's date. companyStatus, hasBeenLiquidated and hasCharges cover the other basic red flags.
What does it cost?
$0.002 per company profile found ($2 per 1,000). Officers and PSC are included in that price. Invalid numbers and names without a match return free rows with the reason.
Try it on Apify โMore guides
- Bulk tech stack lookup: a Wappalyzer / BuiltWith alternative for thousands of domains
- How to scrape Greenhouse, Lever and Ashby jobs (plus Personio, Teamtailor, Recruitee)
- How to export all products from any Shopify store to CSV or JSON
- How to scrape jobs from Workday career sites (myworkdayjobs.com)
- How to export products from any WooCommerce store to CSV or JSON
- How to export EU public tenders from TED (Tenders Electronic Daily) to CSV or JSON
- How to scrape remote jobs from Himalayas, Remote OK, We Work Remotely and more in one run
- How to export open EU funding calls (Horizon Europe, Digital Europe, cascade funding) to CSV or JSON
- How to turn any RSS or Atom feed into JSON or CSV (bulk, with monitoring)
- How to extract emails, phone numbers and social links from a list of company domains
- How to take bulk website screenshots from a URL list and save them to CSV or Google Drive
- How to export US federal (SAM.gov) and UK (Contracts Finder) tenders to CSV or JSON
- How to look up French companies by SIREN or SIRET and build a B2B list from Sirene
- How to look up Norwegian companies by organisation number and build lead lists from Brreg
- How to download SEC filings (10-K, 10-Q, 8-K, Form 4) by ticker and search EDGAR full text
- How to validate NPI numbers in bulk and build US healthcare provider lists from NPPES
- How to look up Finnish companies by Y-tunnus and build B2B lead lists from the YTJ register
- How to extract all URLs from a website's sitemap (and find broken links)
- How to transcribe hundreds of audio and video files to text and subtitles with Whisper
- How to extract text from hundreds of PDFs, including scanned ones, in one run
- How to clean an email list before a campaign: bulk MX, disposable and typo check
- How to get Dutch public tenders from TenderNed into a spreadsheet, with daily alerts
- How to audit titles, meta descriptions, H1s and canonicals for hundreds of pages at once
- How to find every broken link and redirect on a website, with the pages to fix
- How to validate LEI codes and find the LEI for a list of companies in bulk
- How to run Lighthouse on hundreds of URLs and get Core Web Vitals in one table