# UK Companies House Scraper (No API Key) (`bircolabots/uk-companies-house`) Actor

Search the official UK Companies House register without an API key. Find new companies by SIC code, location, status, type and incorporation date, or look up company numbers. Company data only, no personal data.

- **URL**: https://apify.com/bircolabots/uk-companies-house.md
- **Developed by:** [Cicero Millen](https://apify.com/bircolabots) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 companies

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 Scraper (No API Key)

Search the **official UK Companies House register**, every company registered in **England, Wales, Scotland and
Northern Ireland**, and get the results as a clean table you can download as Excel, CSV or JSON or send to
your own tools.

- 🔑 **No API key, no account:** the Actor comes with built-in access to the official Companies House API.
- 🆕 **New companies feed:** every company incorporated in the last N days, by industry (SIC code) and town. Schedule
  it daily for a stream of fresh leads.
- 🏭 **Industry names included:** every SIC code comes with its official description, so you can read the table
  without looking codes up.
- 📋 **Bulk lookup:** paste up to 5,000 company numbers and get the current status, accounts and confirmation
  statement due dates of each one.
- ⚡ **Fast and cheap:** reads the official API directly. No browser, no proxies. Up to 10,000 companies per search.
- 🔒 **No personal data:** company data only. No directors, no persons with significant control (PSCs), no filings.
- 💷 **Pay only for results:** you pay per company saved, and you can cap the cost of every run.

### How it works

1. Pick **filters**: SIC codes (industry), town or postcode area, "incorporated in the last N days", company status,
   company type, words in the name. Or switch to **Lookup** and paste a list of **company numbers**.
2. Optional: turn on **Include full company profile** for accounts and confirmation statement dates, previous names,
   charges and insolvency flags.
3. Click **Start**. Companies appear in the **Output** tab as a table, ready to export or to send to Google Sheets,
   Make, Zapier, n8n or your own API.

### What data you get

One row per company:

| Field | What it contains |
|---|---|
| `companyNumber` | Companies House number (8 characters, e.g. `00445790`, `SC123456`) |
| `companyName` | Registered company name |
| `status`, `statusDetail` | `active`, `dissolved`, `liquidation`, `administration`...; detail such as `active-proposal-to-strike-off` |
| `type`, `subtype` | `ltd`, `plc`, `llp`, `limited-partnership`, ...; `community-interest-company` |
| `incorporationDate`, `cessationDate` | Date of incorporation and of dissolution / closure |
| `addressLine1`, `addressLine2`, `locality`, `region`, `postalCode`, `country` | Registered office address |
| `sicCodes`, `sicDescriptions` | SIC 2007 codes and their official descriptions |
| `url` | Link to the company page on Companies House |

With **Include full company profile** (always on in Lookup mode) you also get:

| Field | What it contains |
|---|---|
| `jurisdiction` | `england-wales`, `scotland`, `northern-ireland`, ... |
| `accountsNextDue`, `accountsOverdue` | When the next accounts are due and whether they are late |
| `accountsLastPeriodEnd`, `accountsLastType` | Last accounts period and type (`micro-entity`, `small`, `full`, `group`, `dormant`...) |
| `confirmationStatementNextDue`, `confirmationStatementOverdue` | Next confirmation statement due date and late flag |
| `previousNames` | Former company names with dates |
| `hasCharges`, `hasInsolvencyHistory`, `hasBeenLiquidated` | Risk flags |
| `registeredOfficeInDispute`, `undeliverableRegisteredOffice` | Address quality flags |

### Use cases

- **Lead generation:** every new construction, software, restaurant or consultancy company in a town, this week.
- **Accountants, banks and suppliers:** reach new businesses in their first months, when they choose providers.
- **Compliance and KYC:** check status, overdue accounts and insolvency flags for a list of company numbers.
- **Credit and risk monitoring:** spot companies with overdue accounts or a proposal to strike off.
- **Market research:** count companies by industry and region, or follow how many are dissolved.
- **CRM enrichment:** add SIC codes, incorporation date and registered office to your company list.

### Input examples

**New construction companies in Manchester, last 30 days**

```json
{
    "sicCodes": ["41201", "41202", "43999"],
    "location": "Manchester",
    "incorporatedWithinDays": 30,
    "maxItems": 1000
}
```

**New software companies in London this week, with full profile**

```json
{
    "sicCodes": ["62012", "62020"],
    "location": "London",
    "incorporatedWithinDays": 7,
    "includeProfile": true,
    "maxItems": 500
}
```

**Restaurants in Leeds that went into liquidation**

```json
{
    "sicCodes": ["56101", "56102"],
    "location": "Leeds",
    "companyStatus": ["liquidation"],
    "maxItems": 500
}
```

**Limited liability partnerships with "consulting" in the name, incorporated in 2026**

```json
{
    "companyNameIncludes": "consulting",
    "companyType": ["llp"],
    "incorporatedFrom": "2026-01-01",
    "incorporatedTo": "2026-12-31",
    "maxItems": 2000
}
```

**Bulk lookup of company numbers**

```json
{
    "mode": "lookup",
    "companyNumbers": ["00445790", "SC123456", "6"]
}
```

#### All input fields

| Field | Description | Default |
|---|---|---|
| `mode` | `search` (filters) or `lookup` (company numbers) | `search` |
| `sicCodes` | 4 or 5 digit SIC 2007 codes, e.g. `62012` | all |
| `location` | Town, city or postcode area of the registered office | all |
| `incorporatedWithinDays` | Only companies incorporated in the last N days (1–3650) | no filter |
| `incorporatedFrom`, `incorporatedTo` | Exact incorporation date range (`YYYY-MM-DD`); not together with the field above | no filter |
| `companyStatus` | `active`, `dissolved`, `liquidation`, `administration`, `receivership`, ... (empty list = any) | `active` |
| `companyType` | `ltd`, `plc`, `llp`, `limited-partnership`, `charitable-incorporated-organisation`, ... | all |
| `companyNameIncludes`, `companyNameExcludes` | Words that must / must not be in the company name | empty |
| `dissolvedFrom`, `dissolvedTo` | Dissolution date range, use with status `dissolved` | no filter |
| `companyNumbers` | Up to 5,000 company numbers for Lookup mode (leading zeros are added for you) | empty |
| `includeProfile` | Add accounts, confirmation statement, previous names and risk flags | `false` |
| `maxItems` | Maximum number of companies to save (1–10,000) | 100 |
| `apiKey` | Optional: your own free Companies House key, only for very large or frequent runs | empty |

**Tip:** to find SIC codes, search the official
[SIC 2007 condensed list](https://www.gov.uk/government/publications/standard-industrial-classification-of-economic-activities-sic)
(e.g. `62012` software development, `41202` domestic building construction, `56101` licensed restaurants, `70229`
management consultancy).

### Output example

```json
{
    "companyNumber": "00445790",
    "companyName": "TESCO PLC",
    "status": "active",
    "type": "plc",
    "subtype": null,
    "incorporationDate": "1947-11-27",
    "cessationDate": null,
    "addressLine1": "Tesco House, Shire Park",
    "addressLine2": "Kestrel Way",
    "locality": "Welwyn Garden City",
    "region": null,
    "postalCode": "AL7 1GA",
    "country": "United Kingdom",
    "sicCodes": ["47110"],
    "sicDescriptions": ["Retail sale in non-specialised stores with food, beverages or tobacco predominating"],
    "jurisdiction": "england-wales",
    "statusDetail": null,
    "accountsNextDue": "2027-08-26",
    "accountsOverdue": false,
    "accountsLastPeriodEnd": "2026-02-28",
    "accountsLastType": "group",
    "confirmationStatementNextDue": "2027-07-02",
    "confirmationStatementOverdue": false,
    "previousNames": [
        {"name": "TESCO STORES (HOLDINGS) PUBLIC LIMITED COMPANY", "effectiveFrom": "1981-12-14", "ceasedOn": "1983-08-25"}
    ],
    "hasCharges": false,
    "hasInsolvencyHistory": false,
    "hasBeenLiquidated": false,
    "registeredOfficeInDispute": false,
    "undeliverableRegisteredOffice": false,
    "profileIncluded": true,
    "url": "https://find-and-update.company-information.service.gov.uk/company/00445790",
    "scrapedAt": "2026-10-09T12:00:00+00:00"
}
```

### Pricing and cost

Pay per event, you only pay for what you get:

| Event | Price |
|---|---|
| Company saved to the dataset | **$0.002** per company ($2.00 per 1,000 companies) |
| Run start | $0.00005 per run |

Examples: **100 companies ≈ $0.20**, **1,000 companies ≈ $2.00**. Company numbers that do not exist are **not charged**.
Set **Maximum cost per run** in the run options to cap your spending; the Actor stops when the cap is reached and keeps
the companies already saved.

### Schedule it and connect it

- **Daily new companies:** create a task with `incorporatedWithinDays: 2`, your SIC codes and town, and add a
  **Schedule** in Apify Console. Remove duplicates between days with the `companyNumber` field.
- **Integrations:** send results automatically to Google Sheets, Slack, Make, Zapier, n8n or any webhook using Apify
  integrations.
- **API:** run the Actor and download results from your own code with the Apify API or the Python / JavaScript clients.

### Limits

- Companies House returns at most **10,000 companies per search**. For more, split the search by SIC code, town or
  date range.
- Search mode is fast (thousands of companies per minute). With **Include full company profile** the Actor needs one
  extra request per company: about 70 companies per minute.
- The built-in key is shared and Companies House allows 600 requests per 5 minutes per key. If the limit is reached
  the Actor waits and continues. For very large profile runs, add your own free key in **apiKey**.
- `location` matches the registered office address, which is not always where the company trades.

### FAQ

**Where does the data come from?**
From the public Companies House register, read live through the official Companies House Public Data API. Contains
public sector information licensed under the Open Government Licence v3.0. This Actor is an independent tool and is
**not affiliated with, endorsed or provided by Companies House**.

**Does it collect personal data?**
No. Directors, persons with significant control, filings and "care of" address lines are never returned. The output
is a fixed list of company fields.

**Do I need an API key?**
No. The Actor has a built-in key. You can add your own free key only if you run very large jobs often.

**Why did I get fewer companies than `maxItems`?**
Your search has fewer results than that. Try fewer filters, more SIC codes, a bigger town or a longer date range.

**Can I get directors' names?**
No. This Actor is built for company data only, on purpose.

### Support

Found a bug or need a field or filter? Open an issue in the **Issues** tab. I read all of them.

# Actor input Schema

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

Search the register with filters, or fetch specific companies by their company number.

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

5-digit SIC 2007 codes, e.g. 41201 (commercial buildings), 62012 (software development), 56101 (restaurants). Companies with any of these codes are returned.

## `location` (type: `string`):

Town, city or postcode area of the registered office, e.g. "Manchester", "London" or "M1".

## `incorporatedWithinDays` (type: `integer`):

Only new companies incorporated in the last N days. Leave empty to use the date fields below instead (or no date filter).

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

Only companies incorporated on or after this date (YYYY-MM-DD).

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

Only companies incorporated on or before this date (YYYY-MM-DD).

## `companyStatus` (type: `array`):

Only companies with these statuses. Default: active. Empty list = any status.

## `companyType` (type: `array`):

Only companies of these types, e.g. Ltd or LLP. Empty = any type.

## `companyNameIncludes` (type: `string`):

Only companies whose name contains this text, e.g. "construction".

## `companyNameExcludes` (type: `string`):

Skip companies whose name contains this text, e.g. "holdings".

## `dissolvedFrom` (type: `string`):

Only companies dissolved on or after this date. Use with status "dissolved".

## `dissolvedTo` (type: `string`):

Only companies dissolved on or before this date. Use with status "dissolved".

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

Used in Lookup mode. Up to 5,000 company numbers, e.g. 00000006 or SC123456 (leading zeros are added for you).

## `includeProfile` (type: `boolean`):

Adds accounts and confirmation statement due dates, overdue flags, last accounts type, previous names, charges and insolvency flags. Slower: one extra request per company. Always on in Lookup mode.

## `maxItems` (type: `integer`):

Stop after this many companies. You pay only for companies saved.

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

Not needed: the Actor has a built-in key. Add your own free key only for very large or frequent runs (each key allows 600 requests per 5 minutes).

## Actor input object example

```json
{
  "mode": "search",
  "sicCodes": [
    "41201",
    "41202"
  ],
  "location": "Manchester",
  "incorporatedWithinDays": 30,
  "companyStatus": [
    "active"
  ],
  "includeProfile": false,
  "maxItems": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `results` (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 = {
    "sicCodes": [
        "41201",
        "41202"
    ],
    "location": "Manchester",
    "incorporatedWithinDays": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("bircolabots/uk-companies-house").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 = {
    "sicCodes": [
        "41201",
        "41202",
    ],
    "location": "Manchester",
    "incorporatedWithinDays": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("bircolabots/uk-companies-house").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 '{
  "sicCodes": [
    "41201",
    "41202"
  ],
  "location": "Manchester",
  "incorporatedWithinDays": 30
}' |
apify call bircolabots/uk-companies-house --silent --output-dataset

```

## MCP server setup

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

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/m4BrEHqcjpqwPZQsI/builds/aijKXIH0usDZ6qznu/openapi.json
