UK Companies House API: Company Data & Officers
Pricing
from $2.00 / 1,000 successful lookups
UK Companies House API: Company Data & Officers
Official UK Companies House registry data for any company number: status, incorporation date, registered address, SIC codes, accounts/confirmation-statement due dates, insolvency and charges flags. Works without a key; add your own free API key for the authoritative overdue and charges flags.
Pricing
from $2.00 / 1,000 successful lookups
Rating
0.0
(0)
Developer
Adrian Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Companies House UK Lookup
You give this actor a list of UK company numbers. For each one, it looks up the official Companies House record and returns status, incorporation date, registered office address, SIC codes, accounts and confirmation-statement due dates, and insolvency/charges flags, as one flat row per company. No API key is needed to get started: without one, it reads the same record straight off the public Companies House register website. Add your own free Companies House API key and it switches to the authenticated Public Data API instead, which adds the definitive accounts/confirmation-statement overdue flags and registered-charges status that the website alone can't confirm.
Companies House is the UK's single authoritative company registry: every limited company, LLP, and most other registered entities in England & Wales, Scotland, and Northern Ireland must file with it. Both the public website and the Public Data API expose the same underlying record; the API is structured JSON with a couple of extra fields, free of charge to anyone who registers a key (an instant, no-approval-wait signup, not a paid or gated program).
Who it's for
The accountable_eel catalogue sells company intelligence columns for outbound. Each actor takes a list of domains or company identifiers and returns one flat, stably-named row per input — firmographics, registry IDs, tech stack, email route, hiring activity — the shape a Clay table, an n8n workflow, or an AI agent can consume without post-processing. Pricing is pay-per-event and per company: a few tenths of a cent for a row that was actually found, and nothing for a miss, so a list that doesn't enrich costs you next to nothing. Where an official source exists — VIES, GLEIF, SEC EDGAR, Brønnøysund, PRH, RDAP, and here Companies House — it is queried directly instead of scraped. No seat licence, no monthly minimum, no credit system to decode.
This one is for UK-registered companies specifically: verifying a company is genuinely registered and active, checking incorporation date and address, or watching accounts/confirmation-statement due dates and insolvency status for a UK counterparty or prospect list.
Why this one
- Works with no setup at all. No API key, no signup, no waiting: paste company numbers and press Start. Every row is tagged with
sourceso you always know whether it came from the public website or your own API key. - Official government registry data, either way. Every field comes from Companies House itself, whether that's its public register website (no key) or its Public Data API (your free key): never a third-party data broker, never a cache.
- Never charged for a company that doesn't resolve. A bad or unregistered company number still gets a row (
"found": false), so your dataset always has one row per input; you just don't pay for it. - Runs as a batch. Paste hundreds of company numbers, get back a dataset instead of looking each one up by hand on the Companies House website.
- Compliance-relevant fields in one row. Status, insolvency history, and (with a key) registered-charges flags land next to the basic firmographics, so most manual lookups that make you click into separate tabs collapse into one row.
- Field names don't move between runs. The output schema is frozen:
companyStatusis alwayscompanyStatus,dateOfCreationis alwaysdateOfCreation, so a Clay table or an agent's tool call built against it today still works against it next month. - Add a key any time for the extras. A free Companies House API key upgrades every row with the authoritative overdue and registered-charges flags, at your own rate limit, with no shared quota this actor could exhaust for other buyers.
What you get
One row per input company number. Every field below is present on a found: true row; on a miss, only query, found, status, message, and scrapedAt are set. Fields come straight from Companies House itself, either its public register website or its API depending on source; nothing here is inferred from a third-party source.
| Field | Type / format | Description |
|---|---|---|
query | string | The company number exactly as you submitted it. |
found | boolean | true if Companies House returned a company record, false otherwise. Never charged when false. |
status | string | OK on a hit; NOT_FOUND, BLOCKED, REQUEST_FAILED, or BAD_FORMAT on a miss. |
companyNumber | string | The company number as registered. |
companyName | string | null | The company's current registered name. |
companyStatus | string | null | e.g. active, dissolved, liquidation, administration. |
companyType | string | null | e.g. plc, ltd, llp with an API key; the human label (e.g. "Public limited Company") without one. |
jurisdiction | string | null | e.g. england-wales, scotland, northern-ireland. Read from the API directly, or worked out from the company number's prefix on the public-website path. |
dateOfCreation | string (ISO date) | null | Incorporation date. |
dateOfCessation | string (ISO date) | null | Dissolution date, only present for a dissolved company. |
sicCodes | array of strings | UK Standard Industrial Classification codes. |
registeredOfficeAddress | string | null | The registered office address, joined into one line. |
accountsNextDueDate | string (ISO date) | null | Next statutory accounts filing deadline. |
accountsOverdue | boolean | null | Whether accounts are currently overdue. With an API key this is Companies House's own flag; without one it's worked out by comparing the due date to today, and it's null when there's no upcoming due date to compare (e.g. a dissolved company). |
confirmationStatementNextDueDate | string (ISO date) | null | Next confirmation statement deadline. |
confirmationStatementOverdue | boolean | null | Same as accountsOverdue: authoritative with a key, date-computed without one, null when there's no due date. |
previousCompanyNames | array of strings | Any earlier registered names, most recent first. |
hasInsolvencyHistory | boolean | Whether Companies House records any insolvency history. |
hasCharges | boolean | null | Whether the company has any registered charges (e.g. a lender's security interest). Only known with an API key; null on a website-sourced row, since the public profile page doesn't say either way. |
source | string | "api" when your Companies House API key was used for this row, "website" when it came from the public register instead (no key supplied). |
scrapedAt | string (ISO 8601) | Timestamp of the lookup for this row. |
message | string (miss rows only) | Human-readable reason for a miss, e.g. no company found, or an API key that was supplied but rejected. |
Price
$4 per 1,000 UK company numbers, plus a $0.00005 start fee. Misses (found:false) are never charged.
$4 per 1,000 companies found, plus a $0.00005 start fee: the same rate as this portfolio's other official-registry actors (Brønnøysund, PRH), whether the row came from the API or the public website. Misses (found:false) are never charged.
How to use
- In the Apify Console. Open the actor page and click Start — the
companyNumbersfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~companies-house-uk-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"companyNumbers":["00445790"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
- Paste your UK company numbers into the
companyNumbersfield, one per line. Numbers shorter than 8 digits are zero-padded automatically ("445790" becomes "00445790"), so pasting from a spreadsheet that dropped leading zeros still works. - Press Start. No API key needed: with the field left blank, each company number becomes one dataset row read from the public Companies House register, tagged
found: trueorfound: false, withsource: "website". - Export the dataset as CSV/JSON, or pull it via the API —
onlyFoundandcolumns(see the integrations section below) let you trim the response before it lands in your table.
Want the definitive overdue and registered-charges flags too? Add a free API key:
- Go to https://developer.company-information.service.gov.uk/ and sign in (or create an account, no approval wait).
- Register a new application, type "REST", any name you like.
- Copy its API key into this actor's Companies House settings section. Every row from then on comes from the authenticated API instead, tagged
source: "api".
Input
{"companyNumbers": ["00445790"]}
One per line: an 8-character UK company number, e.g. "00445790" (Tesco) or "SC012345" (Scotland). Works without a key using the public Companies House register; add your own free API key below for the authoritative overdue and registered-charges flags. Accepted formats: 00445790, SC012345.
Sample output
| query | found | status | companyNumber | companyName | companyStatus | companyType | jurisdiction | dateOfCreation | dateOfCessation | sicCodes | registeredOfficeAddress | accountsNextDueDate | accountsOverdue | confirmationStatementNextDueDate | confirmationStatementOverdue | previousCompanyNames | hasInsolvencyHistory | hasCharges | source | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 00445790 | false | BLOCKED | 2026-09-16T09:57:59.723Z |
A miss looks like: {"query": "00000006", "found": false, "status": "NOT_FOUND", "message": "No company found for this company number on Companies House.", "scrapedAt": "2026-08-24T10:00:00.000Z"} — no charge, one row, same shape as a hit minus the Companies House fields.
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~companies-house-uk-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"companyNumbers":["00445790"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~companies-house-uk-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"companyNumbers":["00445790"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~companies-house-uk-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"companyNumbers":["{{UK company number}}"]}, mapping the row's UK company number into the companyNumbers array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Companies House UK Lookup | Apify" — the agent will find and run this actor.
Tips
- Use
columnsto request only the fields you need (e.g. justcompanyStatusanddateOfCreationfor a quick liveness check) — it trims the response without changing what you're charged. - Set
onlyFound: truewhen you're piping straight into a Clay or n8n table and don't want to filter out miss rows downstream yourself. - An API key is optional, and a run-level input, not a per-row one: set it once and reuse it across as many runs and as many company numbers as you like within the key's own rate limit. Leave it blank and every row still comes back, sourced from the public register instead.
- Company numbers shorter than 8 characters (a spreadsheet that stripped leading zeros) are zero-padded automatically; letter-prefixed numbers (
SC,NI,OC, ...) are left as typed beyond whitespace/case cleanup.
vs. alternatives
For a one-off lookup, the Companies House website's own search is fine. This actor exists for the batch case — a list of company numbers in, a dataset of rows out, with the API calls, retries, and error handling already done.
| What it costs | What you get | Trade-off | |
|---|---|---|---|
This actor (companies-house-uk-lookup) | $0.004 per found row (FREE tier), $0.00005 actor start, nothing for a miss | One flat row per company: status, incorporation date, address, SIC codes, accounts/confirmation-statement due dates, insolvency history, and (with a free API key) registered-charges status and authoritative overdue flags | Runs with no setup at all; the definitive overdue and registered-charges flags need a free Companies House API key (a few minutes to get, no approval wait). |
| Companies House website | Free, your time | The same underlying data, one company at a time in a browser | Fine for a single lookup; no batch mode, no structured export, no way to schedule or automate it. |
| A general company-data platform (Clay, Crunchbase-style enrichment) | $0.08–$0.40+ per enriched row in credits, on top of a seat | A whole enrichment workspace across many countries and sources | If you want one place that does everything globally and you're not counting rows, that's a broader platform. This is one column, UK-specific, priced per row, callable from Clay via its HTTP step. |
Prices for third-party tools are their published list prices as of August 2026 and are not tracked here — check the vendor before relying on the comparison.
FAQ
Do I need my own API key?
No. Without one, every row is read from the public Companies House register website, tagged source: "website". Add a free key (register at https://developer.company-information.service.gov.uk/, no approval wait) to switch to the authenticated API and get the definitive overdue and registered-charges flags too.
What happens if I leave the API key blank?
The run succeeds as normal, using the public register website for every row instead of the API. The only fields that difference affects are accountsOverdue and confirmationStatementOverdue (worked out from the due date instead of read as a flag) and hasCharges (comes back null, since the public profile page doesn't say either way).
What happens when a company number has no record?
It still gets a row, with found: false, a status explaining why (NOT_FOUND, BLOCKED, REQUEST_FAILED, or BAD_FORMAT), and a message. You are never charged for that row.
Is this cached, or a live query every run?
Live. Every row is a fresh request to Companies House made when the actor runs (its API with a key, its public website without one); there's no local cache or stored snapshot from a previous run, so companyStatus and the due dates reflect the registry's current state.
Does this cover Scotland and Northern Ireland, or only England & Wales?
All three — Companies House is the single UK-wide registry for limited companies, LLPs, and most other registered entity types across England & Wales, Scotland, and Northern Ireland. Scottish and Northern Irish company numbers carry a two-letter prefix (SC, NI) instead of being purely numeric.
Does this actor use a proxy? No. It calls Companies House directly, either its API with your key or its public website without one. There's no anti-bot layer to route around on either.
Can I schedule this to run automatically, or call it from an AI agent? Yes to both. Set up an Apify schedule for recurring monitoring (e.g. watching a counterparty's accounts/confirmation-statement due dates), or call it via the Apify API from a script or n8n/Make workflow. It's also discoverable through the Apify MCP server, so an AI agent (Claude, Cursor, or any MCP client) can find and run it directly by name — see the integrations section above.
Related actors
- Domain RDAP Lookup — registrar, registration and expiry dates, and nameservers for any domain.
- GLEIF LEI Lookup — Legal Entity Identifier records for globally-registered entities.
- Company Domain Enrichment — multi-source company intelligence fan-out (registry, DNS, tech stack, TLS, and more) from a single domain.