# Companies House UK Company Data & Accounts (`fetchgrove/uk-companies-house-data`) Actor

Companies House data with no API key needed: look up UK companies by number or name and get status, SIC codes, filing deadlines and overdue flags, charges, insolvency, and turnover, profit and net assets from the latest accounts. Company-level only, no personal data. Failed look-ups are free.

- **URL**: https://apify.com/fetchgrove/uk-companies-house-data.md
- **Developed by:** [fetchgrove](https://apify.com/fetchgrove) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 company records

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

## Companies House UK Company Data & Accounts

Look up any UK company by number or name and get one clean record: status, industry codes, registered office, accounts and confirmation-statement deadlines, recent filings, charges, insolvency history and, if you want them, the headline figures from the latest filed accounts.

Company-level data only. No directors, owners or other people.

### What you get for each company

| Field | Example |
|---|---|
| Company number and name | `00445790`, TESCO PLC |
| Status and type | active, plc |
| Incorporated / dissolved dates | 1947-11-27 (Tesco) |
| Industry (SIC) codes | 47110 |
| Registered office | address lines, town, postcode, country |
| Accounts | last made up to, next due, overdue yes/no |
| Confirmation statement | last made up to, next due, overdue yes/no |
| Charges | has charges, how many are outstanding |
| Insolvency | any insolvency history, number of cases |
| Latest filings | the 10 most recent filings with date, type and category |
| Accounts figures (optional) | turnover, gross profit, profit or loss, net assets, cash at bank, average employees, period, currency, and last year's figures with the change where the accounts include them |
| Source link | the company's page on the official register |

### Use it for

- **Supplier and customer checks**: is this UK company real, active and filing on time?
- **Lead qualification**: filter UK prospects by status, industry code, size and deadlines.
- **Risk flags**: overdue accounts, outstanding charges, insolvency history.
- **AI agents**: a fast, structured answer to "tell me about this UK company".

### How to use it

1. Add company numbers (for example `00445790` or `SC123456`; short numbers are padded for you), links to a company's page on the register, or company names to search for. Or search the register by filters (below).
2. Turn on **Parse latest accounts** if you want the figures.
3. Run it. Each company becomes one row you can download as JSON, CSV or Excel, or read through the API.

Leave the input empty and it returns one example company, so you can see the output first.

### Search by industry, area and date

Find companies by industry code (SIC), area, incorporation date, status and company type: for example every active company with SIC 62012 in Leeds incorporated since 2026-01-01. Searching is free; each company returned costs the normal record price.

### Watch list

Turn on **Watch mode** and schedule the run. Each company comes back with what changed since your last run: status, name, registered office area, overdue accounts or confirmation statement, charges, insolvency and new filings. With **Only changes**, companies with no change are not returned and cost nothing.

### Input example

```json
{
  "companyNumbers": ["00445790"],
  "searchQueries": ["greggs"],
  "maxResultsPerSearch": 5,
  "includeFilingSummary": true,
  "includeAccountsFigures": true
}
```

Or search by filters:

```json
{ "filters": { "sicCodes": ["62012"], "location": "Leeds", "incorporatedFrom": "2026-01-01", "companyStatus": ["active"], "maxResults": 50 } }
```

### Output example

Real output for one company (shortened):

```json
{
  "companyNumber": "00502851",
  "companyName": "GREGGS PLC",
  "status": "active",
  "sicCodes": ["10710", "47240"],
  "accounts": { "lastMadeUpTo": "2025-12-27", "nextDue": "2027-06-30", "overdue": false, "accountingReferenceDate": { "day": 31, "month": 12 } },
  "outstandingChargesCount": 0,
  "hasInsolvencyHistory": false,
  "latestFilings": [
    { "date": "2026-07-03", "type": "AP01", "category": "officers", "description": "appoint-person-director-company-with-name-date" },
    { "date": "2026-06-01", "type": "RESOLUTIONS", "category": "resolution", "description": "resolution" }
  ],
  "sourceUrl": "https://find-and-update.company-information.service.gov.uk/company/00502851"
}
```

### Pricing

You pay only for results you receive. Failed look-ups (for example a company number that does not exist) are free.

| What | Price |
|---|---|
| Company record | $0.003 each ($3 per 1,000) |
| Accounts figures read from the latest accounts | $0.006 each, only when figures were found |
| Run start | $0.00005 per run (5 cents per 1,000 runs) |

Searching is free: a company found by name costs the same as one looked up by number.

Free Apify plan: up to 25 companies per run. Paid plans: up to 1,000 companies per run. For the whole register, the official free bulk data is a better fit.

### Good to know

- **Accounts figures** come from accounts filed online in a machine-readable format, which is common for small companies. Accounts filed on paper or only as a document image have no figures to read; for those, `accountsFigures` is empty and `accountsFiguresNote` says why. Many large groups fall in this group.
- **Speed**: about 2 to 4 seconds per company, because the register limits how fast one key can ask.
- **Your own key (optional)**: heavy users can add their own free Companies House API key in the input to get their own rate limit.
- **Freshness**: every run reads the register live; nothing is cached.

### Data source and licence

Data comes from the Companies House public register. Contains public sector information licensed under the Open Government Licence v3.0.

This tool is not affiliated with, endorsed by or connected to Companies House or the UK government. Data is provided as published on the register, without warranty; check the official register before relying on it for a legal or financial decision.

### Support

Open an issue on this page. We reply within two business days.

# Actor input Schema

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

UK company numbers to look up, or register page links such as https://find-and-update.company-information.service.gov.uk/company/00445790 (the number is read from the link). Spaces are removed and letters uppercased; purely numeric numbers are left-padded to 8 digits (e.g. 445790 → 00445790, "0050 2851" → 00502851) and prefixed ones to two letters plus 6 digits (SC45551 → SC045551). Prefixes such as SC, NI and OC are kept. A value that is still not a valid company number returns a free error item. If this, the searches and the advanced-search filters are all empty, the run returns one example company (00445790), free of charge.

## `searchQueries` (type: `array`):

Company-name search queries. Each hit is fetched as a full company profile.

## `maxResultsPerSearch` (type: `integer`):

Maximum number of search hits to take from each query (1–100).

## `filters` (type: `object`):

Find companies by industry, place, incorporation or dissolution date, status and type, using the official Companies House advanced company search. Each match is returned as a full company record (marked matchedFilter) and charged like a name-search hit. Set at least one filter; leave all empty to skip. A key not listed here fails the run before any request. A run returns at most 1,000 companies (25 on the free plan), whatever maxResults says. If Companies House rejects the filters, the run fails with its reason after the companies asked for by number or name are returned.

## `includeFilingSummary` (type: `boolean`):

Include the 10 most recent filing-history items for each company.

## `includeAccountsFigures` (type: `boolean`):

Download the latest electronically filed accounts (if available as iXBRL) and extract headline figures. Includes the prior-year figures the same accounts carry (previous) and the year-on-year change (change).

## `watchMode` (type: `boolean`):

Compare each company with what the previous run of the same watch list saw and add changes (field, from, to) for status, status detail, overdue accounts and confirmation statement, outstanding charges, insolvency history, registered office area, company name, the latest filing, and each new filing (up to the latest 50 filings). The first run of a list is the baseline for each company (changedSinceLastRun null). The last-seen state is kept per watch list in a key-value store named uk-companies-house-watch in your own Apify account. Schedule the run (best as a saved task) to watch a list daily or weekly.

## `onlyChanges` (type: `boolean`):

With Watch for changes on: return (and pay for) only companies that changed since the last run. The first run returns every company as the baseline. Companies that could not be fetched are always returned as free error items.

## `watchListName` (type: `string`):

Optional. Snapshots are kept separately per watch list, so two lists (or two tasks) watching the same company each get their own baseline and each see every change. Default: the saved task when the run belongs to a task, otherwise the exact set of companies, searches and filters, so editing that input starts a new baseline. Set a name to keep one list across edits or to share it between tasks. Case and extra spaces are ignored. Lists watched before this option existed start a new baseline once.

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

Your Companies House public data API key (HTTP Basic username, empty password). If omitted, the COMPANIES_HOUSE_API_KEY environment variable is used.

## Actor input object example

```json
{
  "companyNumbers": [
    "00445790"
  ],
  "searchQueries": [],
  "maxResultsPerSearch": 20,
  "includeFilingSummary": true,
  "includeAccountsFigures": false,
  "watchMode": false,
  "onlyChanges": false
}
```

# Actor output Schema

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

One row per company from the official register.

# 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 = {
    "companyNumbers": [
        "00445790"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fetchgrove/uk-companies-house-data").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 = { "companyNumbers": ["00445790"] }

# Run the Actor and wait for it to finish
run = client.actor("fetchgrove/uk-companies-house-data").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 '{
  "companyNumbers": [
    "00445790"
  ]
}' |
apify call fetchgrove/uk-companies-house-data --silent --output-dataset

```

## MCP server setup

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

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/TaI7j4dZOTDx6Zmkf/builds/hey01OP7cBkdURRoA/openapi.json
