# UK Companies House Company Feed (Unofficial) (`graylabs/uk-companies`) Actor

UK company data from Companies House: status, type, SIC codes, accounts and confirmation dates, district-level address and optional filed-accounts financials. Keyless bulk mode, or bring your own API key. Company data only: no officers or PSCs. Not affiliated with Companies House.

- **URL**: https://apify.com/graylabs/uk-companies.md
- **Developed by:** [Gray Labs](https://apify.com/graylabs) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 company saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Companies House Company Feed (Unofficial)

### What does UK Companies House Company Feed (Unofficial) do?

It gives you UK company data from Companies House as clean rows: company number, name, status, type, incorporation date, SIC codes, accounts and confirmation-statement dates, registered office town and postcode district, and, optionally, headline figures from filed accounts (net assets, cash, equity, profit/loss, employees and more).

- **No key needed** for the two bulk modes. They read Companies House's free bulk files, streamed, and stop as soon as they have enough rows.
- **Bring your own key** for live lookups: a free Companies House API key gives you up-to-date profiles by company number or advanced search, with optional financials.
- **Company data only.** No officers, directors, PSCs (people with significant control) or other person data. See [Privacy](#privacy-company-data-only).

This actor is unofficial and is not affiliated with or endorsed by Companies House. Data source: the Companies House public register (UK); credit Companies House when you republish it.

### What data can you extract?

| Field                                                                                                           | Example                                                                                                                                                                                                  |
| --------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `companyNumber`, `companyName`                                                                                  | `16092999`, `!ABRIDGE TAX LTD`                                                                                                                                                                           |
| `companyStatus`, `companyType`                                                                                  | `Active`, `Private Limited Company`                                                                                                                                                                      |
| `incorporationDate`, `dissolutionDate`                                                                          | `2024-11-21`                                                                                                                                                                                             |
| `registeredOfficeTown`, `registeredOfficeCounty`, `registeredOfficeCountry`, `registeredOfficePostcodeDistrict` | `HATFIELD`, `AL9`                                                                                                                                                                                        |
| `registeredOfficeLine1/2`, `registeredOfficePostcode`                                                           | only with `addressDetail: "full"` (see Privacy)                                                                                                                                                          |
| `sicCodes`, `sicDescriptions`                                                                                   | `["62020"]`, `["Information technology consultancy activities"]`                                                                                                                                         |
| `accountsCategory`, `accountsLastMadeUpDate`, `accountsNextDueDate`, `accountingReferenceDate`                  | `MICRO ENTITY`, `2025-11-30`, `2027-08-31`, `11-30`                                                                                                                                                      |
| `confirmationStatementLastMadeUpDate`, `confirmationStatementNextDueDate`                                       | `2025-11-20`                                                                                                                                                                                             |
| `chargesTotal`, `chargesOutstanding`                                                                            | counts only                                                                                                                                                                                              |
| `previousNames`                                                                                                 | `[{"name": "BLUECASE LTD", "changedOn": "2026-03-27"}]`                                                                                                                                                  |
| `financials`                                                                                                    | `balanceSheetDate`, `turnover`, `profitLoss`, `netAssets`, `equity`, `cash`, `currentAssets`, `fixedAssets`, `debtors`, `netCurrentAssets`, `totalAssetsLessCurrentLiabilities`, `employees`, `currency` |
| `nameLooksPersonal`                                                                                             | `true` when the company name looks like a person's name                                                                                                                                                  |
| `source`, `sourceFile`, `snapshotDate`                                                                          | `bulk-snapshot`, `BasicCompanyData-2026-10-01-part1_7.zip`, `2026-10-01`                                                                                                                                 |
| `companiesHouseUrl`, `attribution`, `retrievedAt`                                                               | link to the public Companies House page                                                                                                                                                                  |

### Modes

| Mode             | Key      | Source                                                                                            | Freshness                                                                  | Filters                                                                                 |
| ---------------- | -------- | ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| `bulk` (default) | none     | Free Company Data Product (monthly snapshot of live companies, published in parts sorted by name) | snapshot to the end of the previous month, published within 5 working days | name, SIC (prefixes), postcode prefix, type, status, incorporation date                 |
| `accounts`       | none     | Free Accounts Data Product (daily file of electronically filed accounts, Tuesday to Saturday)     | accounts registered the previous working day                               | name                                                                                    |
| `api`            | your own | Companies House public data API                                                                   | live                                                                       | company numbers, or advanced search by name, 5-digit SIC, status and incorporation date |

Accounts mode returns companies that just filed accounts, with their figures. Financials for a specific company need API mode.

### How to use it

1. Pick a mode. For most lists, keep `bulk`.
2. Add filters, for example SIC `62` and postcode prefixes `EC1`, `EC2`.
3. Set **Max results**. Bulk reading stops as soon as it has that many rows.
4. Run, then download the dataset as JSON, CSV or Excel, or use the API.

**Whole-register scans.** The snapshot has about 5.7 million companies in 7 parts. A narrow filter may need to read all of them: one part (about 600,000 companies) took 25 seconds in a test run at the default 256 MB, so a full scan takes about 3 minutes. **Max rows to scan** (default 6,000,000) caps it.

### Input examples

New IT companies (SIC 62xxx) registered in parts of London this year:

```json
{
    "sicCodes": ["62"],
    "postcodePrefixes": ["EC1", "EC2", "N1"],
    "incorporatedFrom": "2026-01-01",
    "maxResults": 500
}
```

Companies whose accounts were filed in the latest daily file, with headline figures:

```json
{ "mode": "accounts", "maxResults": 200 }
```

Live lookup with your own API key, including financials from the latest filed accounts:

```json
{
    "mode": "api",
    "apiKey": "YOUR_OWN_COMPANIES_HOUSE_API_KEY",
    "companyNumbers": ["00445790", "SC005336"],
    "includeFinancials": true
}
```

### Output example

Real sample: 3 rows from a test run on October 17, 2026, with the default input (links shown without \`\`; the dataset has full links).

```json
[
    {
        "companyNumber": "16092999",
        "companyName": "!ABRIDGE TAX LTD",
        "nameLooksPersonal": false,
        "companyStatus": "Active",
        "companyType": "Private Limited Company",
        "incorporationDate": "2024-11-21",
        "dissolutionDate": null,
        "countryOfOrigin": "United Kingdom",
        "addressDetail": "district",
        "registeredOfficeLine1": null,
        "registeredOfficeLine2": null,
        "registeredOfficePoBox": null,
        "registeredOfficeTown": "HATFIELD",
        "registeredOfficeCounty": null,
        "registeredOfficeCountry": "UNITED KINGDOM",
        "registeredOfficePostcode": null,
        "registeredOfficePostcodeDistrict": "AL9",
        "sicCodes": ["62020"],
        "sicDescriptions": ["Information technology consultancy activities"],
        "accountsCategory": "MICRO ENTITY",
        "accountsLastMadeUpDate": "2025-11-30",
        "accountsNextDueDate": "2027-08-31",
        "accountingReferenceDate": "11-30",
        "confirmationStatementLastMadeUpDate": "2025-11-20",
        "confirmationStatementNextDueDate": "2026-12-04",
        "chargesTotal": 0,
        "chargesOutstanding": 0,
        "previousNames": [
            {
                "name": "BLUECASE LTD",
                "changedOn": "2026-03-27"
            }
        ],
        "financials": null,
        "source": "bulk-snapshot",
        "sourceFile": "BasicCompanyData-2026-10-01-part1_7.zip",
        "snapshotDate": "2026-10-01",
        "companiesHouseUrl": "find-and-update.company-information.service.gov.uk/company/16092999",
        "attribution": "Source: Companies House public register (UK). Companies House states it imposes no rules on how register information is used. Unofficial; not affiliated with or endorsed by Companies House.",
        "retrievedAt": "2026-10-18T00:03:29.805Z"
    },
    {
        "companyNumber": "11006939",
        "companyName": "!NNOV8 LIMITED",
        "nameLooksPersonal": false,
        "companyStatus": "Active",
        "companyType": "Private Limited Company",
        "incorporationDate": "2017-10-11",
        "dissolutionDate": null,
        "countryOfOrigin": "United Kingdom",
        "addressDetail": "district",
        "registeredOfficeLine1": null,
        "registeredOfficeLine2": null,
        "registeredOfficePoBox": null,
        "registeredOfficeTown": "EDENBRIDGE",
        "registeredOfficeCounty": null,
        "registeredOfficeCountry": "ENGLAND",
        "registeredOfficePostcode": null,
        "registeredOfficePostcodeDistrict": "TN8",
        "sicCodes": ["62090", "70229"],
        "sicDescriptions": [
            "Other information technology service activities",
            "Management consultancy activities other than financial management"
        ],
        "accountsCategory": "MICRO ENTITY",
        "accountsLastMadeUpDate": "2025-03-31",
        "accountsNextDueDate": "2026-12-29",
        "accountingReferenceDate": "03-29",
        "confirmationStatementLastMadeUpDate": "2025-10-10",
        "confirmationStatementNextDueDate": "2026-10-24",
        "chargesTotal": 0,
        "chargesOutstanding": 0,
        "previousNames": [],
        "financials": null,
        "source": "bulk-snapshot",
        "sourceFile": "BasicCompanyData-2026-10-01-part1_7.zip",
        "snapshotDate": "2026-10-01",
        "companiesHouseUrl": "find-and-update.company-information.service.gov.uk/company/11006939",
        "attribution": "Source: Companies House public register (UK). Companies House states it imposes no rules on how register information is used. Unofficial; not affiliated with or endorsed by Companies House.",
        "retrievedAt": "2026-10-18T00:03:29.805Z"
    },
    {
        "companyNumber": "17373234",
        "companyName": "\"1ST\" CHECK CYBER CONSULTANCY LTD",
        "nameLooksPersonal": false,
        "companyStatus": "Active",
        "companyType": "Private Limited Company",
        "incorporationDate": "2026-07-31",
        "dissolutionDate": null,
        "countryOfOrigin": "United Kingdom",
        "addressDetail": "district",
        "registeredOfficeLine1": null,
        "registeredOfficeLine2": null,
        "registeredOfficePoBox": null,
        "registeredOfficeTown": "LONDON",
        "registeredOfficeCounty": null,
        "registeredOfficeCountry": "UNITED KINGDOM",
        "registeredOfficePostcode": null,
        "registeredOfficePostcodeDistrict": "EC1V",
        "sicCodes": ["62020"],
        "sicDescriptions": ["Information technology consultancy activities"],
        "accountsCategory": "NO ACCOUNTS FILED",
        "accountsLastMadeUpDate": null,
        "accountsNextDueDate": "2028-04-30",
        "accountingReferenceDate": "07-31",
        "confirmationStatementLastMadeUpDate": null,
        "confirmationStatementNextDueDate": "2027-08-13",
        "chargesTotal": 0,
        "chargesOutstanding": 0,
        "previousNames": [],
        "financials": null,
        "source": "bulk-snapshot",
        "sourceFile": "BasicCompanyData-2026-10-01-part1_7.zip",
        "snapshotDate": "2026-10-01",
        "companiesHouseUrl": "find-and-update.company-information.service.gov.uk/company/17373234",
        "attribution": "Source: Companies House public register (UK). Companies House states it imposes no rules on how register information is used. Unofficial; not affiliated with or endorsed by Companies House.",
        "retrievedAt": "2026-10-18T00:03:29.805Z"
    }
]
```

Fields that are empty for a mode are `null` (for example, accounts mode has no address or SIC codes).

### How much does it cost?

- **$0.01 per run start** (Apify's Actor start event).
- **$4 per 1,000 companies** ($0.004 each, the `company` event).
- **$25 per 1,000 companies with financials** ($0.025 each, the `company-with-financials` event): every accounts-mode row, and API-mode rows where filed figures were found.
- Examples: 1,000 companies = $4.01. 200 companies with financials = $5.01. Runs using more than 1 GB of memory incur one extra start charge per additional GB.
- Rows that are filtered out or excluded are free. Set **Maximum cost per run** when you start a run; the actor stops when it reaches your cap.
- API mode uses your own Companies House key, which is free from Companies House.

### Privacy: company data only

Companies House publishes data about companies and the people behind them. This actor outputs **company data only**:

- It never reads or outputs officers, directors, secretaries, PSCs, shareholders or charge holders. In API mode it never calls those endpoints.
- From filed accounts it reads only a fixed list of numeric figures plus the company number, name and period dates. Text such as the name of the director who signed the accounts is never read into the output.
- The registered office "care of" field is never output, and an address line starting with "C/O" is kept only when it names a firm.
- **Addresses are district-level by default** (town, county, country, postcode district), because many small companies use a director's home as the registered office. Choose `addressDetail: "full"` for address lines and full postcodes.
- **Companies named after a person.** Many small companies carry their owner's name ("JOHN SMITH LTD"). The registered name is the company's legal identifier, so it is kept, but rows whose name looks like a person's name get `nameLooksPersonal: true` and **never** get a street address or full postcode, even in full mode. Set `personNamedCompanies: "exclude"` to leave them out.
- **Previous names** that may be a person's name are withheld.

The person-name check is a heuristic based on common given names, initials and honorifics. It flags some brand names (for example names starting with a common first name) and misses some person names with uncommon first names. The previous-name rule is stricter and also withholds many two- or three-word brand names. The `RUN_SUMMARY` record counts every flagged, excluded or withheld item.

You are responsible for how you use the data, including UK GDPR where company data relates to identifiable people (for example sole-director companies).

### Limits

- Bulk mode covers **live companies only** (the snapshot excludes dissolved companies) and is refreshed monthly.
- The snapshot parts are sorted by company name, so an unfiltered run returns names in alphabetical order.
- Accounts mode covers electronically filed accounts only (about 75% of accounts filed, per Companies House). Small and micro companies usually don't file turnover or profit and loss, so those figures are often `null`. Figures are reported as tagged by the filer, without corrections.
- API mode is paced under Companies House's documented limit of 600 requests per 5 minutes per key. Financials cost about 3 extra requests per company, so about 180 companies with financials fit in 5 minutes.

### Integrations and API

Schedule a monthly bulk run (after the snapshot is published in the first week of the month), or a daily accounts run, and send results to Google Sheets, Slack or webhooks through Apify integrations. Start runs and fetch results from your own code with the Apify API. The `RUN_SUMMARY` record lists files read, rows scanned, privacy counters and warnings.

### FAQ

**Where does the data come from?** Companies House's free Company Data Product and Accounts Data Product (download.companieshouse.gov.uk) and, in API mode, the Companies House public data API. Nothing is scraped from web pages.

**Can I reuse the data?** Companies House says: "We impose no rules or requirements on how the information on the public register is used, and we're not responsible for your use of the company data. You are responsible for complying with any applicable data protection, copyright and other legislation and regulations." (gov.uk, Companies House data products.) Each row carries an `attribution` line. This is not legal advice.

**Do I need an API key?** Only for API mode. Get a free key at developer.company-information.service.gov.uk. It is a secret input: Apify stores it encrypted and this actor never logs or saves it.

**Why are some figures missing?** Not every company files machine-readable accounts, and small companies file little detail. Accounts mode skips filings with none of the supported figures.

**How do I report a problem?** Open an issue on the Issues tab with the run ID.

# Changelog

This Actor's version history is a separate document: https://apify.com/graylabs/uk-companies/changelog.md

# Actor input Schema

## `mode` (type: `string`):

bulk: filter the free monthly Companies House company snapshot (no key needed). accounts: headline figures from the latest free daily accounts file (no key needed). api: live Companies House API with your own free API key (lookups by company number, or advanced search; optional financials).

## `nameContains` (type: `array`):

Keep companies whose name contains any of these words (case-insensitive). API mode searches on the first entry only.

## `sicCodes` (type: `array`):

SIC 2007 codes. In bulk mode prefixes work: 62 matches every 62xxx code. API search needs full 5-digit codes. Not available in accounts mode.

## `postcodePrefixes` (type: `array`):

E.g. EC1, M1, SW1A. Matches the start of the registered office postcode. Not available in accounts mode.

## `companyTypes` (type: `array`):

Keep rows whose company type contains any of these, e.g. Private Limited Company, PLC, Limited Liability Partnership, Community Interest Company.

## `companyStatuses` (type: `array`):

E.g. Active, Liquidation, Active - Proposal to Strike off. The bulk snapshot only contains live companies.

## `incorporatedFrom` (type: `string`):

Only companies incorporated on or after this date.

## `incorporatedTo` (type: `string`):

Only companies incorporated on or before this date.

## `bulkParts` (type: `array`):

The monthly snapshot is published in parts (currently 7, sorted by company name). Leave empty to read all parts in order, or pick parts, e.g. \[1]. Reading stops as soon as Max results is reached.

## `maxScanRows` (type: `integer`):

Safety cap on snapshot rows (or accounts files) read per run. The whole register is about 5.7 million rows; a filter that has to read all of it takes about 3 minutes.

## `accountsFileDate` (type: `string`):

Accounts mode: which daily accounts file to read (published Tuesday to Saturday, kept for 60 days). Leave empty for the latest.

## `apiKey` (type: `string`):

API mode only. A free REST API key from developer.company-information.service.gov.uk. Stored encrypted by Apify as a secret input; this actor never logs or saves it. Requests are paced under the documented limit of 600 per 5 minutes.

## `companyNumbers` (type: `array`):

API mode: look up these companies, e.g. 00000006, SC123456. Leave empty to use the name / SIC filters as an advanced search.

## `includeFinancials` (type: `boolean`):

Read headline figures from each company's latest electronically filed accounts. Costs about 3 extra API requests per company. Not every company files machine-readable accounts.

## `maxApiRequests` (type: `integer`):

Upper limit on Companies House API requests per run.

## `addressDetail` (type: `string`):

district (default): town, county, country and postcode district only. full: also address lines and full postcode, except for companies whose name looks like a person's name. Many small companies use a home address as the registered office.

## `personNamedCompanies` (type: `string`):

flag: keep them with nameLooksPersonal = true and district-level address only. exclude: leave them out.

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

Stop after this many companies.

## Actor input object example

```json
{
  "mode": "bulk",
  "nameContains": [],
  "sicCodes": [
    "62"
  ],
  "postcodePrefixes": [],
  "companyTypes": [],
  "companyStatuses": [],
  "bulkParts": [
    1
  ],
  "maxScanRows": 6000000,
  "companyNumbers": [],
  "includeFinancials": false,
  "maxApiRequests": 500,
  "addressDetail": "district",
  "personNamedCompanies": "flag",
  "maxResults": 20
}
```

# Actor output Schema

## `companies` (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 = {
    "mode": "bulk",
    "sicCodes": [
        "62"
    ],
    "bulkParts": [
        1
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("graylabs/uk-companies").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 = {
    "mode": "bulk",
    "sicCodes": ["62"],
    "bulkParts": [1],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("graylabs/uk-companies").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 '{
  "mode": "bulk",
  "sicCodes": [
    "62"
  ],
  "bulkParts": [
    1
  ],
  "maxResults": 20
}' |
apify call graylabs/uk-companies --silent --output-dataset

```

## MCP server setup

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

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/Wb9947ZgTfVfZ4Ui8/builds/omPdFNkBmK2OEm76v/openapi.json
