Companies House Search: UK Company Lookup & Monitor avatar

Companies House Search: UK Company Lookup & Monitor

Pricing

from $3.00 / 1,000 company looked ups

Go to Apify Store
Companies House Search: UK Company Lookup & Monitor

Companies House Search: UK Company Lookup & Monitor

Look up UK companies on the Companies House register by number, name or LEI, without an API key: status, address, SIC codes, filing due dates, overdue flags, previous names, LEI and parent companies. Monitor mode reports changes. Add your free API key for officers, PSC, filings and charges.

Pricing

from $3.00 / 1,000 company looked ups

Rating

0.0

(0)

Developer

Plainsource

Plainsource

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

What this Actor does

UK Company Lookup checks companies on the UK Companies House register and returns one clean JSON row per company. It needs no API key.

Give it any mix of:

  • company numbers such as 00445790 or SC045551,
  • company names such as Marks and Spencer Group (fuzzy match, with a scored candidate list),
  • LEIs (20-character Legal Entity Identifiers).

For each company you get the registered name, status, company type, incorporation and dissolution dates, registered office address, SIC codes with descriptions, accounts and confirmation statement dates with overdue flags, previous names, charge counts, the LEI if one exists, and the direct and ultimate parent companies from the GLEIF database.

Turn on Monitor mode and schedule the Actor, and each run reports what changed since the last one: name, status, address, SIC codes, filing due dates, overdue flags, LEI or ultimate parent. A Slack, Discord or JSON webhook can alert you.

If you have your own free Companies House API key, add it and each company also gets its officers, persons with significant control (PSC), recent filing history and charges.

Typical uses: supplier and customer checks (KYB), enriching a CRM with company numbers and SIC codes, watching clients or debtors for strike-off, liquidation or overdue accounts, and giving an AI agent a reliable UK company lookup tool.

How it works

DataSourceKey needed
Company profile by number or LEICompanies House URI service (live register data, including dissolved companies)No
Name searchAn index of the Companies House free company data product, a monthly snapshot of every live company, rebuilt each month. LEI holders are also searched in GLEIF.No
LEI, direct and ultimate parentGLEIF API (CC0 data)No
Officers, PSC, filing history, charges; name search that includes dissolved companiesCompanies House REST APIYour own key

Name search runs against the monthly snapshot, so it finds live companies by their current or previous names. The profile is always fetched live from the register, so a company that changed since the snapshot is still shown as it is today.

Input

The only required field is Companies. All settings:

FieldDefaultWhat it does
Companies (companies)noneOne company number, name or LEI per line. Type is detected automatically; start a line with number:, name: or lei: to force it.
Candidates listed per name search (maxCandidates)50 to 20 closest matches listed in candidates for each name.
Minimum name match score (minNameScore)6030 to 100. Below it, a name search returns not_found with the candidates.
Return every matching candidate in full (lookupAllCandidates)falseOn: each candidate above the minimum gets its own full row (each charged as a lookup).
Add LEI and parent companies (GLEIF) (includeLei)trueLEI record plus direct and ultimate parents.
Companies House API key (companiesHouseApiKey)emptyYour own REST API key. Stored encrypted, sent only to Companies House.
Officers (includeOfficers)trueWith a key: current officers.
Persons with significant control (includePsc)trueWith a key: current PSCs.
Filing history (includeFilingHistory)trueWith a key: most recent filings.
Filings per company (filingHistoryLimit)101 to 100.
Charges (includeCharges)trueWith a key: registered charges and lenders.
Include resigned officers and ceased PSCs (includeResigned)falseWith a key: also past officers and PSCs.
Monitor mode (monitor)falseCompare with the previous run and report changes.
Watch list name (stateKey)defaultSaved versions are kept per watch list. Use one per task.
Only output changed companies (onlyChanges)falseIn monitor mode, push only changed companies.
Webhook URL (webhookUrl)emptyhttps URL that gets a POST when at least one company changed.
Webhook format (webhookFormat)jsonjson, slack or discord.

Example input that watches four companies and posts changes to Slack:

{
"companies": ["00445790", "SC045551", "Marks and Spencer Group", "2138002P5RNKC5W2JZ46"],
"monitor": true,
"stateKey": "key-suppliers",
"webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
"webhookFormat": "slack"
}

Output

One row per company. This is a real row from a test run, looked up by LEI:

{
"query": "lei:213800ET4MA6J4AHS397",
"queryType": "lei",
"status": "found",
"companyNumber": "00519500",
"companyName": "TESCO STORES LIMITED",
"companyStatus": "active",
"companyStatusDetail": null,
"companyStatusText": "Active",
"companyType": "Private Limited Company",
"countryOfOrigin": "United Kingdom",
"incorporationDate": "1953-05-09",
"dissolutionDate": null,
"registeredAddress": {
"careOf": null,
"poBox": null,
"premises": null,
"addressLine1": "TESCO HOUSE, SHIRE PARK",
"addressLine2": "KESTREL WAY",
"locality": "WELWYN GARDEN CITY",
"region": null,
"postalCode": "AL7 1GA",
"country": "UNITED KINGDOM"
},
"registeredAddressText": "TESCO HOUSE, SHIRE PARK, KESTREL WAY, WELWYN GARDEN CITY, AL7 1GA, UNITED KINGDOM",
"sicCodes": [
{ "code": "47110", "description": "Retail sale in non-specialised stores with food, beverages or tobacco predominating" },
{ "code": "47290", "description": "Other retail sale of food in specialised stores" },
{ "code": "47710", "description": "Retail sale of clothing in specialised stores" },
{ "code": "47750", "description": "Retail sale of cosmetic and toilet articles in specialised stores" }
],
"accounts": {
"accountingReferenceDate": "28-02",
"lastMadeUpTo": "2025-02-22",
"nextDue": "2026-11-30",
"category": "FULL",
"overdue": false
},
"confirmationStatement": { "lastMadeUpTo": "2026-06-18", "nextDue": "2027-07-02", "overdue": false },
"overdue": false,
"previousNames": [{ "name": "J. COLYER (FURNISHERS) LIMITED", "changedOn": "1987-03-02" }],
"charges": { "total": 136, "outstanding": 91, "partSatisfied": 0, "satisfied": 45 },
"hasInsolvencyHistory": null,
"lei": "213800ET4MA6J4AHS397",
"leiRecord": {
"lei": "213800ET4MA6J4AHS397",
"legalName": "TESCO STORES LIMITED",
"entityStatus": "ACTIVE",
"registrationStatus": "ISSUED",
"initialRegistrationDate": "2013-12-19",
"lastUpdateDate": "2025-11-21",
"nextRenewalDate": "2027-01-12",
"legalFormId": "H0PO",
"headquartersCountry": "GB",
"registeredAs": "00519500",
"registrationAuthority": "RA000585",
"recordUrl": "https://search.gleif.org/#/record/213800ET4MA6J4AHS397"
},
"directParent": {
"lei": "2138002P5RNKC5W2JZ46",
"name": "TESCO PLC",
"country": "GB",
"registeredAs": "00445790",
"registrationAuthority": "RA000585",
"entityStatus": "ACTIVE"
},
"directParentException": null,
"ultimateParent": {
"lei": "2138002P5RNKC5W2JZ46",
"name": "TESCO PLC",
"country": "GB",
"registeredAs": "00445790",
"registrationAuthority": "RA000585",
"entityStatus": "ACTIVE"
},
"ultimateParentException": null,
"nameMatch": null,
"candidates": [],
"officers": null,
"officerCounts": null,
"psc": null,
"pscCounts": null,
"filingHistory": null,
"chargeDetails": null,
"changeStatus": null,
"changes": [],
"changeSummary": null,
"previousCheckAt": null,
"companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/00519500",
"profileSource": "companies-house-uri",
"checkedAt": "2026-10-26T20:21:53.470Z",
"notes": [],
"error": null
}

Field notes:

  • status is found, not_found, invalid, failed, skipped (cost limit reached) or duplicate (the same company was already returned in this run). The reason is in error.
  • companyStatus uses the Companies House API vocabulary (active, dissolved, liquidation, administration, ...). companyStatusDetail adds active-proposal-to-strike-off and similar. companyStatusText is the register's own wording.
  • accounts.overdue and confirmationStatement.overdue are true when the due date has passed, and null for companies no longer on the live register. overdue is true when either is.
  • directParentException and ultimateParentException give GLEIF's reason when no parent is reported, for example NATURAL_PERSONS, NON_CONSOLIDATING or NO_KNOWN_PERSON.
  • For name searches, nameMatch shows the score (0 to 1) and the matched name, which may be a previous name (isPreviousName). candidates lists the closest matches with their company numbers.
  • In monitor mode, changeStatus is baseline, changed or unchanged. Each item in changes has field, label, before and after, plus added and removed for officers and PSCs.
  • With an API key: officers items have name, role, appointedOn, resignedOn, nationality, occupation, countryOfResidence, isCorporate, corporateRegistrationNumber and appointmentId. psc items have name, kind, naturesOfControl, notifiedOn, ceasedOn, nationality, countryOfResidence and, for companies, registrationNumber, legalAuthority, legalForm and placeRegistered. filingHistory items have date, category, type, description, descriptionText, transactionId, pages and documentUrl. chargeDetails items have chargeCode, chargeNumber, status, classification, createdOn, deliveredOn, satisfiedOn, personsEntitled and particulars.

The run also writes a summary to the OUTPUT record of its key-value store: counts per status, whether an API key was used, and the changed companies.

Monitor mode

  1. Create a task with your companies and turn on Monitor mode. Give it a Watch list name.
  2. The first run saves a baseline (changeStatus: "baseline").
  3. Schedule the task (daily or weekly is usually enough; the register changes when companies file). Each later run reports changed or unchanged.

Watched fields: company name, status, registered office address, SIC codes, accounts due date, latest accounts date, confirmation statement due date, overdue flag, LEI and ultimate parent, and with an API key the current officers and PSCs. Saved versions live in the key-value store plainsource-uk-company-lookup-state in your own Apify account. A field that could not be checked in a run (GLEIF unavailable, or no API key) is not reported as changed.

Using your own Companies House API key

The key is free. To get one:

  1. Go to the Companies House Developer Hub and choose Sign in / Register to create a Companies House account.
  2. Open Your applications and choose Create an application. Give it a name and description and choose the Live environment (not the test sandbox).
  3. In the application, choose Create new key, pick REST as the key type and create it.
  4. Paste the key into Companies House API key.

Each key allows 600 requests per 5 minutes. With all four extras on, a company takes about 5 requests, so roughly 120 companies per 5 minutes; the Actor waits when the limit is reached. If the key is rejected, the run continues without it and says so in notes.

Pricing

You pay per event, not for compute time:

EventPrice
Run start$0.002 per run
Company looked up$0.003 per company returned
Officers, PSC, filings and charges added (with your API key)$0.002 per company
Change detected (monitor mode)$0.005 per changed company

Not charged: companies not found, invalid entries, failed lookups, duplicates, and name searches with no match above the minimum score. With Only output changed companies on, unchanged companies are still looked up and charged; only their rows are left out of the dataset. Example: 50 companies checked weekly in monitor mode with about 3 changes a month costs about 4.3 × (0.002 + 50 × 0.003) + 3 × 0.005 ≈ $0.67 a month.

If a run reaches the maximum cost you set, the remaining companies are marked skipped. In monitor mode their saved versions are kept, and changes that could not be charged are reported on the next run.

Limits

  • Up to 1,000 entries per run.
  • Name search without a key covers companies that were live at the last monthly snapshot (about 5.7 million, current and previous names). Dissolved companies are found by number, by LEI, or by name with an API key.
  • Name searches are slower than lookups by number. At the default 1024 MB, a name made of common words (Construction, Property, Trading) can take several seconds, and results are written only after every name is matched. For more than a few hundred names, give the run 2048 MB and a longer timeout, or split the list.
  • Name matching is fuzzy, but at least one distinctive word of the name must start with the same three letters as on the register. A typo in the first letters of every word is not found.
  • For industrial and provident societies, ICVCs and Royal Charter bodies, Companies House holds only the name and number; the row says so in notes.
  • GLEIF allows 60 requests a minute. A company with an LEI needs up to 3 GLEIF requests and each name search 1 more, so large lists of LEI holders or names take longer. Turn off Add LEI and parent companies if you do not need them.
  • The Companies House URI service and REST API are run by Companies House; if they are unavailable, the affected rows are failed and not charged.

Data sources and terms

  • Companies House says on its data products page: "We impose no rules or requirements on how the information on the public register is used". You remain responsible for data protection law when you store or use the data.
  • Officers and PSCs come only from the official API with your key, and only as published on the public register. Addresses and dates of birth of people are never included.
  • LEI data is from GLEIF under CC0. This Actor is not provided, endorsed or supported by GLEIF or Companies House.
  • EU VAT (VIES) data is not used.

FAQ

Why did my name search pick the wrong company? Several companies often share similar names. Check candidates and look the right one up by its company number, or raise Minimum name match score.

Why is a dissolved company not found by name? The free name index contains live companies only. Use its company number or LEI, or add an API key, which searches dissolved companies too.

Do I need an API key? No. Profiles, filing dates, overdue flags, LEIs, parents and monitoring all work without one. The key adds officers, PSCs, filing history and charges.

How fresh is the data? Profiles come from the live register at run time. Only the name index is monthly; nameMatch.source gives its snapshot date, and if the index is more than 50 days old, name-search rows say so in notes.

Can I call it from code or an AI agent? Yes. Use the Apify API or the Apify MCP server. One field takes numbers, names and LEIs, and every row has the same shape, with status and error explaining any miss. Example with the API client: client.actor("fernandosord/uk-company-lookup-companies-house").call({ companies: ["00445790"] }).

Found a bug or need a field? Open an issue on this Actor's Issues tab.