# UK Companies House Leads: new companies, SIC filter, no API key (`timeout/uk-companies-house-leads`) Actor

Filter the full UK Companies House register (5.7M companies) into clean B2B lead rows: new incorporations, overdue accounts, SIC, postcode, mass-address filter, only-new-since-last-run. No API key.

- **URL**: https://apify.com/timeout/uk-companies-house-leads.md
- **Developed by:** [Cesar Rodriguez](https://apify.com/timeout) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 company leads

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 Leads (no API key)

Turns the official **Companies House monthly bulk snapshot** (5M+ UK companies) into clean, filtered lead rows in seconds — no API key, no rate limits, no scraping of the website.

### What makes it different

- **Mass-address filter** – formation-agent / virtual-office addresses host hundreds or thousands of companies and pollute "new company" lead lists. Set `maxCompaniesAtSameAddress` (e.g. 20) to drop them; every row also carries `companiesAtSameAddress`.
- **Only-new mode** – schedule it monthly with `onlyNewSinceLastRun` and each run returns only companies you have not received before.
- **Distress / compliance signals** – `accountsOverdue`, `confirmationStatementOverdue`, `chargesOutstanding`, status filters (liquidation, strike-off proposals…), accounts category (dormant, micro…).
- Clean typed output: ISO dates, `ageDays`, SIC codes **and** descriptions, structured address, previous names, direct Companies House link.

### What can I do with it?

- **New-company lead lists**: companies incorporated in the last N days, by SIC code (e.g. `62` software, `56` restaurants, `41` construction), postcode area or town. Typical buyers: accountants, banks and fintechs, insurers, web agencies, B2B SaaS, payroll, office and legal services.
- **Monthly "only new" feed**: schedule the Actor with `onlyNewSinceLastRun` and each run returns only companies you have not received before (per `feedName`).
- **Distress and compliance signals**: companies with overdue accounts or confirmation statements, outstanding charges, or a given status (liquidation, strike-off proposals...), for credit control, insolvency and recovery prospecting.
- **Market mapping**: count and list companies by SIC, town or incorporation period.
- **Enrichment input**: a clean list of company numbers to feed CRMs, n8n/Make/Zapier or AI agents.

### Example input

```json
{ "incorporatedWithinDays": 60, "sicCodes": ["62", "63"], "postcodePrefixes": ["EC", "WC", "E1"],
  "maxCompaniesAtSameAddress": 20, "onlyNewSinceLastRun": true, "feedName": "software-london", "maxItems": 500 }
```

### Example output (abridged)

```json
{ "companyNumber": "17489388", "companyName": "VENSESHA LTD", "status": "Active",
  "incorporationDate": "2026-09-30", "ageDays": 27,
  "sic": [{ "code": "62012", "description": "Business and domestic software development" }],
  "address": { "line1": "10 HEATHER ROAD", "town": "LEICESTER", "postcode": "LE2 6DD" },
  "accountsOverdue": false, "companiesAtSameAddress": 1,
  "companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/17489388",
  "snapshotDate": "2026-10-01" }
```

### FAQ

**Do I need a Companies House API key?** No. The Actor reads the official monthly bulk snapshot (Free Company Data Product), so there are no API keys and no rate limits.

**How fresh is it?** Companies House publishes the snapshot within about 5 working days after each month end; results can be up to ~5 weeks old. For one company's live status, open `companiesHouseUrl`.

**What does the mass-address filter do?** Formation agents and virtual offices register hundreds or thousands of companies at one address. `maxCompaniesAtSameAddress` drops companies at addresses shared by more than N companies, and every row carries `companiesAtSameAddress` so you can decide yourself. In one test (software SIC 62/63, last 60 days) this removed 47 % of the companies; your share will vary by filter.

**Does it include directors, PSCs or contact details?** No. Only company-level data from the snapshot (no officers, no emails or phones). For live officer data use Companies House itself.

**How does `onlyNewSinceLastRun` work?** The Actor stores the company numbers it delivered per `feedName` in a key-value store in your Apify account and skips them in later runs. You pay only for rows delivered.

**How long does a run take and what does it cost?** The snapshot has to be read on every run (a couple of minutes), so each run has a small fixed start fee plus the per-company price; see Pricing.

**Which formats?** JSON, CSV, Excel, XML, HTML or RSS from the dataset, or the Apify API.

### Data freshness & limits

The source snapshot is published by Companies House within ~5 working days of each month end and covers live companies up to the previous month end, so results can be up to ~5 weeks old. For one company's live status follow `companiesHouseUrl`. Results are sorted newest incorporation first.

### Source, licence, responsibility

Data: Companies House Free Company Data Product. Companies House states it imposes no rules on how register information is used, but you must comply with applicable data-protection and copyright law (e.g. UK GDPR / PECR when contacting people). Registered-office addresses of small companies can be home addresses: do not use the data for unsolicited marketing to individuals. This Actor is unofficial and not endorsed by Companies House. No personal data beyond the public registered office is included (no officers).

### Pricing

Pay per event: **$0.002 per company returned** + **$0.01 per GB of run memory at start** (default 2 GB → $0.02 per run). Example: 300 leads ≈ $0.62.

# Actor input Schema

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

Only companies incorporated within the last N days (relative to today). Leave empty for all ages. The source snapshot is refreshed monthly, so the newest companies can be up to ~5 weeks old.

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

Optional. Overrides 'last N days' lower bound.

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

Optional upper bound.

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

E.g. 62 (software/IT), 6920 (accounting), 4120 (construction), 56 (food service). Matches any SIC code of the company.

## `sicKeywords` (type: `array`):

Match words in the SIC description, e.g. software, restaurant, consultancy.

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

E.g. EC1, M, SW1A, BT. Spaces ignored.

## `towns` (type: `array`):

E.g. LONDON, MANCHESTER (case-insensitive, exact match).

## `counties` (type: `array`):

Exact match on the registered-office county field (often empty in the register; prefer postcodes).

## `statuses` (type: `array`):

Default: Active. Other values in the snapshot: 'Active - Proposal to Strike off', 'Liquidation', 'In Administration', 'Voluntary Arrangement', 'Receivership Action'...

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

E.g. 'Private Limited', 'PLC', 'LLP', 'Community Interest', 'Charitable'.

## `accountCategories` (type: `array`):

E.g. DORMANT, MICRO ENTITY, SMALL, FULL, GROUP, NO ACCOUNTS FILED.

## `accountsOverdue` (type: `string`):

true = only companies whose annual accounts are past their due date (distress / collections / insolvency leads); false = only up to date. Leave unset for both.

## `confirmationStatementOverdue` (type: `string`):

Same, for the annual confirmation statement. Leave unset for both.

## `minAgeDays` (type: `integer`):

E.g. 365 to skip very new companies.

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

Keywords in the company name.

## `nameExcludes` (type: `array`):

Drop companies whose name contains any of these words.

## `maxCompaniesAtSameAddress` (type: `integer`):

Formation-agent and virtual-office addresses host hundreds or thousands of shells and pollute lead lists. Set e.g. 20 to drop every company whose registered address (line 1 + postcode) is shared by more than 20 companies in the register. 0 = off. Every row also has 'companiesAtSameAddress'.

## `onlyNewSinceLastRun` (type: `boolean`):

Great with a monthly schedule: each run returns only companies you have not received before (state kept in your account).

## `feedName` (type: `string`):

Use different names to keep separate 'already delivered' lists for different searches.

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

Newest incorporations first. 1-100000.

## `snapshotUrl` (type: `string`):

Leave empty to auto-detect the latest Companies House monthly snapshot.

## Actor input object example

```json
{
  "incorporatedWithinDays": 60,
  "sicCodes": [],
  "sicKeywords": [],
  "postcodePrefixes": [],
  "towns": [],
  "counties": [],
  "statuses": [
    "Active"
  ],
  "companyTypes": [],
  "accountCategories": [],
  "accountsOverdue": "any",
  "confirmationStatementOverdue": "any",
  "nameContains": [],
  "nameExcludes": [],
  "maxCompaniesAtSameAddress": 0,
  "onlyNewSinceLastRun": false,
  "feedName": "default",
  "maxItems": 100
}
```

# Actor output Schema

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

Dataset items (JSON/CSV/Excel via the API format parameter).

# 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 = {
    "incorporatedWithinDays": 60
};

// Run the Actor and wait for it to finish
const run = await client.actor("timeout/uk-companies-house-leads").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 = { "incorporatedWithinDays": 60 }

# Run the Actor and wait for it to finish
run = client.actor("timeout/uk-companies-house-leads").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 '{
  "incorporatedWithinDays": 60
}' |
apify call timeout/uk-companies-house-leads --silent --output-dataset

```

## MCP server setup

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

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/ZCNRoUC5BVveS6Tjg/builds/5Yhzf2ToTM8rz1x1O/openapi.json
