# UK Multi-Company Owners from Companies House (`wellbuilt_zythem/uk-company-owners`) Actor

People who control 2 or more UK companies, by postcode area: one row per owner with how many companies they control and each company's name, status, activity, incorporation date and share band. From the official Companies House registers. No phone or email: the registers do not publish them.

- **URL**: https://apify.com/wellbuilt_zythem/uk-company-owners.md
- **Developed by:** [Carlos Escanez](https://apify.com/wellbuilt_zythem) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.00 / 1,000 owner with 2+ companies

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## UK Multi-Company Owners from Companies House

**Not a list of companies. A list of the people behind them.**

Companies House shows you one company at a time. It never tells you that the owner of the company you just looked up controls six others. This Actor works that out across the whole UK register of **people with significant control** and gives you **one row per person**: how many companies they control, and each company's name, status, activity, incorporation date and share band.

Pick a postcode area (M for Manchester, LS for Leeds, SW for south-west London...), a minimum number of companies, optionally an industry, and get the owners with the most companies first.

### Measured on 2026-10-17, whole UK register

| People who control | Live companies | Active companies only |
|---|---|---|
| 2 or more | 898,297 | 800,762 |
| 3 or more | 285,202 | 248,781 |
| 5 or more | 59,360 | 50,979 |
| 10 or more | 7,620 | 6,656 |
| 100 or more | 53 | 44 |

Only companies still on the register count. The owners file also keeps people of companies that have since been dissolved (2.35 million of the 4.89 million companies it names for these people are no longer live); those are left out. Birth month and year, nationality and country of residence are published for 100 % of owners, and a UK postcode for 99.4 %.

Biggest postcode areas by owners: B (Birmingham) 29,478, W (west London) 27,239, N (north London) 26,468, E (east London) 21,842, EC (City of London) 21,641, M (Manchester) 21,208.

### What you get per owner

- **Who**: name as registered, birth month and year, nationality, country of residence, service address, postcode and postcode area.
- **Portfolio**: number of companies and of active companies, newest and oldest incorporation date, main activities (SIC codes).
- **Each company**: number, name, status, type, incorporation date, registered postcode and town, SIC codes, share band (for example 75-100%), voting band, whether the person can appoint the directors, significant influence, the date they became an owner, and a link to the company on Companies House.
- **Dates of the data**: `pscSnapshotDate` and `companyFileDate` on every row.

### What the registers do not publish, so this Actor does not promise

- **Phone numbers and email addresses.** Neither register has them.
- **Full date of birth.** Companies House publishes only month and year.
- **Home address.** The address is the service address the person gave: often the company's office or their accountant's.
- **One id per person.** Companies House gives none for people with significant control. Owners are matched by name and birth month, so two people with the same name born in the same month are counted as one, and a name spelt two ways counts as two. People with hundreds of companies are usually company formation agents, nominees or mass registrations of dormant companies (on 2026-10-17 the owner with most companies in Manchester had 461: 460 dormant, most incorporated between November 2025 and January 2026, at two registered addresses): use **Maximum companies per owner** to leave them out.
- **Directors who are not owners.** This Actor reads the owners register (people with significant control), not the list of directors.

### Examples

**Serial owners in Manchester**

```json
{
  "postcodeAreas": ["M"],
  "minCompanies": 5,
  "maxCompanies": 50,
  "maxResults": 500
}
```

**Property owners with three or more companies in west London**

```json
{
  "postcodeAreas": ["W", "SW", "NW"],
  "minCompanies": 3,
  "sicPrefixes": ["68"],
  "maxCompanies": 100
}
```

**Whole UK: owners of 3 or more companies who started one in the last 60 days**

```json
{
  "minCompanies": 3,
  "newCompanyWithinDays": 60,
  "maxResults": 5000
}
```

### Who uses this

- **Accountants and business brokers**: one owner with several companies means several sets of accounts and possible sales.
- **Commercial lenders and property finance**: owners of property companies (SIC 68) hold their buildings in separate companies.
- **B2B sales**: serial founders buy services again and again.
- **Due diligence**: see what else the owner of a supplier or client controls.

### Where the data comes from and how fresh it is

Two official open files from Companies House, published under the Open Government Licence: the **people with significant control snapshot** (rebuilt every day) and the **company data product** (rebuilt on the 1st of each month). No login, no API key, no scraping of web pages.

Reading and joining 16 million records takes several minutes, so this Actor keeps a **prepared copy, refreshed every month** after the company file comes out. Your run only reads the postcode areas you ask for, which keeps it fast and cheap. Companies incorporated after the latest monthly company file appear with the status "New since the monthly company file" and without a name until the next refresh.

### Data protection

Every row is personal data from a public register. Under UK GDPR you need a lawful basis to use it (for example legitimate interest for business-to-business contact) and you must respect the rights of the people listed. You are responsible for how you use the data.

### Pricing

Per owner delivered (`owner` event), whatever the size of their portfolio, plus the platform's start fee. Set **Maximum owners** or the run's maximum total charge to cap the cost.

# Actor input Schema

## `postcodeAreas` (type: `array`):

The 1 or 2 letters at the start of a UK postcode: M (Manchester), B (Birmingham), LS (Leeds), G (Glasgow), EH (Edinburgh), BT (Northern Ireland), SW, W, EC (London). Each owner is placed in the area of their service address. Leave empty for the whole UK.

## `minCompanies` (type: `integer`):

Only people who control at least this many companies. 2 includes everyone with a second company; 5 or more finds serial owners.

## `maxCompanies` (type: `integer`):

Optional. People with hundreds of companies are usually company formation agents, nominees or mass registrations of dormant companies: 50 leaves them out.

## `onlyActiveCompanies` (type: `boolean`):

On: companies in liquidation, in administration or being struck off are left out of each portfolio and of the count.

## `sicPrefixes` (type: `array`):

Optional. Keep owners with at least one company in these activities, by UK SIC 2007 code: 68 (real estate), 55 (hotels and holiday lets), 56 (restaurants and bars), 41 (building), 86 (health), 62 (software).

## `newCompanyWithinDays` (type: `integer`):

Optional. Only owners with a company incorporated within this many days. For companies newer than the monthly company register, the date the person was registered as owner is used.

## `maxResults` (type: `integer`):

Owners with the most companies come first.

## `refreshCopy` (type: `boolean`):

Reserved for the Actor's scheduled monthly refresh. Ignored in every other run.

## Actor input object example

```json
{
  "postcodeAreas": [
    "M"
  ],
  "minCompanies": 5,
  "maxCompanies": 50,
  "onlyActiveCompanies": true,
  "maxResults": 50,
  "refreshCopy": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "postcodeAreas": [
        "M"
    ],
    "minCompanies": 5,
    "maxCompanies": 50,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("wellbuilt_zythem/uk-company-owners").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "postcodeAreas": ["M"],
    "minCompanies": 5,
    "maxCompanies": 50,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("wellbuilt_zythem/uk-company-owners").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "postcodeAreas": [
    "M"
  ],
  "minCompanies": 5,
  "maxCompanies": 50,
  "maxResults": 50
}' |
apify call wellbuilt_zythem/uk-company-owners --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wellbuilt_zythem/uk-company-owners"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/EhdaQHga0Ivr8lPwe/builds/SmYOdHdcqA4B0fE4R/openapi.json
