# UK Company Lookup and Filing Monitor (`texxupport/uk-company-filing-monitor`) Actor

Look up UK companies and get alerts on new filings from the official Companies House API. Search by name, pull full records with officers and controllers, or monitor companies for new filings. Needs your own free Companies House API key. Pay per row.

- **URL**: https://apify.com/texxupport/uk-company-filing-monitor.md
- **Developed by:** [Kye Williams](https://apify.com/texxupport) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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.

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 Company Lookup and Filing Monitor (Companies House)

Look up UK companies and watch them for new filings, using the official Companies House API. Search by company name, pull the full record for any company number (status, registered office, SIC codes, accounts and confirmation statement dates, optionally directors and people with significant control), or monitor a list of companies and get only the filings you have not seen before.

**You need your own free Companies House API key.** The Actor calls the official Companies House Public Data API with your key, so requests count against your own allowance. Getting a key takes a few minutes (see "Get your API key" below).

### Who it is for

- **Sales, marketing and lead-generation teams** enriching lists of UK companies.
- **Compliance, KYC and due-diligence teams** checking company status, officers and controllers.
- **Accountants, credit and risk analysts** watching customers or suppliers for new accounts, charges, insolvency notices and officer changes.
- **Journalists and researchers** following specific companies.
- **Automations and AI agents** that need a dependable UK company data feed.

### Three modes

| Mode | Give it | You get |
| --- | --- | --- |
| Search | Company names or parts of names | One row per matching company: number, name, status, type, incorporation date, address. |
| Lookup | Company numbers | One full record per company: status, registered office, SIC codes, accounts and confirmation statement dates and whether they are overdue, charges and insolvency flags, previous names. Optionally the officers and the persons with significant control. |
| Monitor | Company numbers | One row per new filing: date, category, what was filed, form type, and links to the filing on the Companies House website. |

Company numbers have eight characters (for example 00000006 or SC123456). A number written without its leading zeros is padded for you. Use Search first if you only know a name.

### Get your API key

1. Register on the Companies House developer hub and create an application.
2. Add a **REST** key to the application. Do not restrict it to particular IP addresses or web addresses; Apify runs from changing addresses.
3. Paste the key into the **Companies House API key** field. It is stored as a secret setting, so it is hidden after you save it.

Companies House allows 600 requests every 5 minutes per key. The Actor paces itself to stay inside that. A lookup uses one request per company (two more with officers and controllers); monitor uses two or more per company (the company record, then its filing history).

### Example rows

Monitor mode (illustrative values):

```json
{
  "companyNumber": "00000006",
  "companyName": "EXAMPLE TRADING LIMITED",
  "date": "2026-10-01",
  "category": "accounts",
  "title": "Accounts with accounts type micro entity",
  "type": "AA",
  "documentUrl": "https://find-and-update.company-information.service.gov.uk/company/00000006/filing-history/EXAMPLE/document?format=pdf&download=0",
  "filingHistoryUrl": "https://find-and-update.company-information.service.gov.uk/company/00000006/filing-history"
}
```

Lookup mode returns fields such as `status`, `companyType`, `dateOfCreation`, `registeredOffice`, `sicCodes`, `accountsNextDue`, `accountsOverdue`, `confirmationStatementNextDue`, `hasCharges`, `hasInsolvencyHistory`, `previousNames`, and (when you ask for them) `officers` and `personsWithSignificantControl`.

### Input

| Field | What it does |
| --- | --- |
| `companiesHouseApiKey` | Your Companies House API key (required). |
| `mode` | search, lookup or monitor. Default lookup. |
| `searchTerms`, `activeOnly` | Search mode: names to search, and whether to leave out dissolved companies (on by default). |
| `companyNumbers` | Lookup and monitor modes: the companies to read. |
| `includeOfficers`, `includeResignedOfficers` | Lookup mode: add directors and secretaries; optionally those who resigned. One extra request per company. |
| `includePersonsWithSignificantControl` | Lookup mode: add the people and companies recorded as controlling the company. One extra request per company. |
| `categories` | Monitor mode: only these kinds of filing (accounts, officers, mortgage, insolvency and others). Empty means all. |
| `daysBack`, `dateFrom` | Monitor mode: how far back to look the first time. Default 30 days. |
| `onlyNew` | Monitor mode: deliver only filings not delivered before. On by default. |
| `maxResults` | Stop after this many rows. Default 100. |
| `maxRequests` | Safety limit on requests per run. Default 300. |

### Alerts on a schedule

1. Choose Monitor mode, paste your key and list your company numbers.
2. Leave `onlyNew` on and set `daysBack` to a little more than the gap between runs.
3. Schedule the Actor from the Apify Console (for example every morning).
4. Each run delivers only filings you have not seen. If a run stops early (cost cap, request cap or time limit), the next run continues where it stopped.

The "already delivered" list is kept in a storage called `uk-company-monitor-state` in your own Apify account, with one list per company, so adding companies to your list never repeats the others.

### Pricing

You pay per row delivered (pay per event): one price for a company row (search and lookup) and one for a filing row (monitor). Apify's platform usage is included, so you are not billed for it separately. See the Pricing tab for current prices. Set a maximum cost per run in the run options to cap spending: the Actor stops as soon as the cap is reached. Companies House does not charge for the API.

### Limits and good to know

- **Rate limit.** If Companies House asks for fewer requests, the run ends with a note and keeps what was delivered. Wait five minutes and run again.
- **Companies that are not found** are listed in the run's status message and are not charged.
- **Long lists.** Officer and controller lists are cut at 200 entries per company, and the status message says so when that happens.
- **Filing descriptions.** The register gives each filing a short code; the Actor turns it into readable text when the register does not supply one. The `description` field keeps the original code.
- **Document links** open the filing on the Companies House website. Some older filings have no document.
- **Personal data.** Officer and controller records include names, month and year of birth, nationality and correspondence address as published on the public register. If you store or use that data, you are responsible for handling it lawfully (for example under UK GDPR).
- The register shows what companies have filed. Filings can be late, wrong or corrected later; check the filing on the Companies House website before you rely on it.

### Data source and disclaimer

Data comes from the Companies House Public Data API and is published under the Open Government Licence v3.0. Contains public sector information licensed under the Open Government Licence v3.0. This Actor is not affiliated with, endorsed by or sponsored by Companies House or any government body.

# Actor input Schema

## `companiesHouseApiKey` (type: `string`):

Required unless the Actor's owner has set one. Free: register on the Companies House developer hub, create an application and add a REST key (do not restrict it to particular IP addresses). Keys are limited to 600 requests per 5 minutes.

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

Search finds companies by name. Lookup returns the full record for company numbers you give. Monitor returns new filings for company numbers you give.

## `searchTerms` (type: `array`):

A company name or part of one. Each term is a separate search.

## `activeOnly` (type: `boolean`):

Leave out dissolved and closed companies.

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

Companies House numbers such as 00000006 or SC123456. A number without its leading zeros is padded automatically.

## `includeOfficers` (type: `boolean`):

Add the company's directors and secretaries. Costs one extra request per company.

## `includeResignedOfficers` (type: `boolean`):

With officers on, also list people who have resigned.

## `includePersonsWithSignificantControl` (type: `boolean`):

Add the people and companies recorded as controlling this company. Costs one extra request per company.

## `categories` (type: `array`):

Only these kinds of filing. Leave empty for all.

## `daysBack` (type: `integer`):

How far back to look for filings, counted from today. Ignored when you fill in a start date.

## `dateFrom` (type: `string`):

First filing date to include, written YYYY-MM-DD.

## `onlyNew` (type: `boolean`):

Turn this on and run the Actor on a schedule to get an alert-style feed. The Actor remembers which filings it delivered for each company.

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

Stop after this many rows. You pay per row delivered, so this also caps your cost.

## `maxRequests` (type: `integer`):

Safety limit per run. The Actor also paces itself to stay under 600 requests per 5 minutes.

## Actor input object example

```json
{
  "mode": "lookup",
  "activeOnly": true,
  "companyNumbers": [
    "00000006"
  ],
  "includeOfficers": false,
  "includeResignedOfficers": false,
  "includePersonsWithSignificantControl": false,
  "daysBack": 30,
  "onlyNew": true,
  "maxResults": 100,
  "maxRequests": 300
}
```

# Actor output Schema

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

Every row delivered by this run, as a table you can download as CSV, Excel or JSON.

# 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": [
        "00000006"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("texxupport/uk-company-filing-monitor").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": ["00000006"] }

# Run the Actor and wait for it to finish
run = client.actor("texxupport/uk-company-filing-monitor").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": [
    "00000006"
  ]
}' |
apify call texxupport/uk-company-filing-monitor --silent --output-dataset

```

## MCP server setup

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

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/lGjVDpq8Cr1gGYlgi/builds/Tj5McAjizKEY4voTz/openapi.json
