# UK Company Lookup (Companies House, company facts only) (`cleandatalab/uk-company-lookup`) Actor

Look up UK companies by number or name through the official Companies House API. Returns company-level facts only: status, type, SIC codes, dates, accounts and confirmation-statement deadlines. No officers, no people.

- **URL**: https://apify.com/cleandatalab/uk-company-lookup.md
- **Developed by:** [Clean Data Lab](https://apify.com/cleandatalab) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 company results

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 (Companies House, company facts only)

Look up UK companies by company number or by name, using the official Companies House API.

### What you get

For each company:

- status, type and jurisdiction
- SIC codes
- incorporation and dissolution dates
- accounts deadlines: next due, last made up to, and whether overdue
- confirmation-statement deadlines and whether overdue
- whether there is any insolvency history or any charges
- the registered office's town and country

### What you don't get

- No officers, persons with significant control or any other people.
- No street address or postcode, because a small company's registered office is often someone's home.

### Your own API key (optional)

You can add your own free Companies House API key in the input. Your run then uses your own rate limit. Without one, the run uses this actor's key and may slow down when the actor is busy.

### Limits

- Up to 5,000 companies per run.
- At most 600 requests every 5 minutes, which is Companies House's limit. If Companies House says to wait, the run waits rather than retrying straight away.
- Unknown company numbers come back marked "not found" and aren't charged.

### Uses

- Check a supplier is active before paying them.
- Flag clients whose accounts or confirmation statement are overdue.
- Add SIC codes to a list of company numbers.

### Price

Charged per company returned. Unknown numbers aren't charged. If you set a maximum cost per run in Apify's run options, the run stops when it is reached.

### Source

Companies House public register. Companies House places no rules on how the register's information is used; this actor leaves out people and street addresses to keep within data protection law.

# Actor input Schema

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

e.g. 00445790. Up to 5,000 companies per run.

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

Each term returns the top matches.

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

How many companies to return for each name searched (1 to 50).

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

Free from developer.company-information.service.gov.uk. Using your own key keeps your run on your own rate limit (600 requests per 5 minutes).

## Actor input object example

```json
{
  "companyNumbers": [
    "00445790"
  ],
  "searchTerms": [],
  "maxResultsPerSearch": 5
}
```

# Actor output Schema

## `companies` (type: `string`):

One row per company: status, type, SIC codes, key dates and filing deadlines. Unknown or invalid numbers come back as rows with an error and aren't charged.

# 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("cleandatalab/uk-company-lookup").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("cleandatalab/uk-company-lookup").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 cleandatalab/uk-company-lookup --silent --output-dataset

```

## MCP server setup

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

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/VTCbyIoOU4IHhDZYg/builds/5xAP9wEQR2z7CuehA/openapi.json
