# UK New Company Leads Monitor - Companies House (`technicaldost/uk-new-company-leads-monitor`) Actor

Get UK companies newly incorporated at Companies House, filtered by SIC industry code, location and name. Remembers what it already sent, so a daily schedule returns only new companies. No API key needed.

- **URL**: https://apify.com/technicaldost/uk-new-company-leads-monitor.md
- **Developed by:** [Technical Dost Solutions](https://apify.com/technicaldost) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## UK New Company Leads Monitor — Companies House

**Every company registered at Companies House, delivered daily, filtered to your industry and region — and you only pay for companies you haven't already been sent.**

Around 3,000 companies are incorporated in the UK every working day. This Actor finds the ones that match your criteria, returns them as clean structured records, and remembers what it already gave you. Put it on a daily schedule and you get a lead feed that never repeats itself.

**No Companies House API key required.** Most alternatives make you register for one, or charge extra for skipping it. This Actor reads the public register directly.

***

### What you get

```json
{
  "companyName": "ORCHID ONLINE LTD",
  "companyNumber": "17375859",
  "companyStatus": "active",
  "companyType": "ltd",
  "companySubtype": null,
  "incorporationDate": "2026-08-03",
  "registeredDate": "2026-08-03",
  "dissolutionDate": null,
  "removedDate": null,
  "daysSinceIncorporation": 14,
  "sicCodes": ["58290", "62012"],
  "sicDescriptions": [
    "Other software publishing",
    "Business and domestic software development"
  ],
  "primarySicCode": "58290",
  "primarySicDescription": "Other software publishing",
  "registeredOfficeAddress": "167-169 Great Portland Street London United Kingdom W1W 5PF",
  "postcode": "W1W 5PF",
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/17375859",
  "scrapedAt": "2026-08-17T12:13:02.201Z"
}
```

Every SIC code arrives with its plain-English industry description from the official SIC 2007 list, so you can route leads by industry without maintaining your own lookup table. The postcode is split out of the address for territory assignment. Dates are ISO-8601. Missing values are `null` — never `"N/A"` or an empty string.

***

### Main use cases

- **Daily lead generation.** Accountants, company formation agents, business insurance brokers and banks selling to brand-new companies. A company incorporated this morning needs an accountant, a bank account and insurance.
- **Territory-based prospecting.** Filter by town, county or postcode area and give each salesperson their own feed.
- **Industry watchlists.** Track new entrants in your sector by SIC code.
- **Competitor formation tracking.** Watch for new companies whose names contain a brand or keyword.
- **Market research.** Measure formation rates by industry and region over time.
- **CRM pipelines.** Push straight into HubSpot, Pipedrive or a warehouse via the Apify API.

***

### Quick start

Run it with the defaults and you get yesterday's new software companies. Change or clear `sicCodes` for a different industry.

```json
{
  "daysBack": 1,
  "sicCodes": ["62012"],
  "onlyNew": true,
  "maxRecords": 1000
}
```

Every new company in Greater Manchester, any industry:

```json
{
  "daysBack": 1,
  "location": "Manchester",
  "onlyNew": true
}
```

A one-off historical pull for a specific window:

```json
{
  "incorporatedFrom": "2026-07-01",
  "incorporatedTo": "2026-07-31",
  "sicCodes": ["43210", "43220"],
  "onlyNew": false,
  "maxRecords": 5000
}
```

***

### Input reference

| Field | Type | Default | What it does |
|---|---|---|---|
| `daysBack` | integer | `1` | Days of incorporations to fetch, counting back from yesterday. Max 90. |
| `sicCodes` | array | — | UK SIC 2007 codes, 5 digits. Empty means every industry. |
| `location` | string | — | Matches anywhere in the registered office address. |
| `nameIncludes` | string | — | Only companies whose name contains this text. |
| `nameExcludes` | string | — | Skip companies whose name contains this text. |
| `companyStatus` | select | `active` | `active`, `dissolved`, `open`, `closed`, `liquidation`, `administration`. |
| `companyType` | string | — | One Companies House type, e.g. `ltd`, `llp`. |
| `onlyNew` | boolean | `true` | Skip companies returned by an earlier run. |
| `maxRecords` | integer | `1000` | Hard cap on companies returned **and charged** this run. |
| `incorporatedFrom` / `incorporatedTo` | string | — | Explicit `YYYY-MM-DD` range. Overrides `daysBack`. |
| `stateStoreName` | string | `uk-company-leads-state` | Named store holding the "already seen" list. |

#### Why the default window is yesterday

Companies House publishes with a short lag, so companies incorporated today generally appear tomorrow. `daysBack: 1` means "yesterday", which is the window that reliably contains data on a morning schedule. If a run returns nothing, widen `daysBack` to 2 or 3.

***

### Running it on a schedule

This is what the Actor is built for.

1. Open the Actor, set your filters, and save them as a **Task**.
2. On the Task, open **Schedules** and add a daily schedule — early morning UK time works well.
3. Leave `onlyNew` on.

Each run returns only companies that appeared since the last one. Add a webhook on the Task to push new leads straight into your CRM as they arrive.

#### How the memory works

The "already seen" list lives in a **named Key-Value Store on your own account** (`stateStoreName`), not in shared storage. Your history is yours, and it persists between runs.

The memory key is derived from your filter set, so two schedules with different filters keep independent histories inside the same store — a Manchester feed and a London feed will not suppress each other's leads. To reset a feed, point `stateStoreName` at a new name. Up to 50,000 company numbers are remembered per filter set; the oldest are dropped after that.

***

### Pricing

| Event | Price | When it happens |
|---|---|---|
| **Company lead** | **$0.002** | One completed company record returned to you |
| Actor start | $0.001 | Once per run |

**You are not charged for:**

- companies you were already sent in an earlier run (with `onlyNew` on)
- failed requests, retries, or a Companies House outage
- rows the source returned malformed
- invalid input — the run fails before any billable work
- anything after the maximum charge you set for the run

Use `maxRecords` to put a ceiling on any single run, and Apify's per-run charge limit as a second backstop. When that limit is hit the Actor stops immediately rather than continuing to work unpaid.

**Worked example.** A daily schedule for one industry returning ~60 new companies a day costs about `(60 × $0.002) + $0.001 = $0.121` per run, roughly **$3.63/month**.

#### How this compares

| Actor | Price per company | Per run | API key needed |
|---|---|---|---|
| **This Actor** | **$0.002** | $0.001 | **No** |
| `memo23/companies-house-scraper` | $0.005 | $0.005 | — |
| `scrapesage/companies-house-scraper` | $0.004 | — | — |
| `memo23/northdata-scraper` | $0.0035 | $0.00005 | — |
| `nexgendata/business-registration-lookup` | $0.05 | $0.0001 | — |

Prices are competitors' list prices as published on Apify Store on 2026-08-17 and can change at any time. Check the current figures before relying on this table.

***

### Using the API

Every run is available over the Apify API. Replace `<TOKEN>` with your Apify API token.

**Run and wait for results:**

```bash
curl -X POST "https://api.apify.com/v2/acts/technicaldost~uk-new-company-leads-monitor/run-sync-get-dataset-items?token=<TOKEN>" \
  -H 'Content-Type: application/json' \
  -d '{ "daysBack": 1, "sicCodes": ["62012"], "onlyNew": true }'
```

**JavaScript:**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('technicaldost/uk-new-company-leads-monitor').call({
    daysBack: 1,
    sicCodes: ['62012', '62020'],
    location: 'London',
    onlyNew: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const company of items) {
    console.log(`${company.companyName} (${company.companyNumber}) — ${company.primarySicDescription}`);
}
```

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("<TOKEN>")

run = client.actor("technicaldost/uk-new-company-leads-monitor").call(run_input={
    "daysBack": 1,
    "sicCodes": ["62012"],
    "onlyNew": True,
})

for company in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(company["companyName"], company["companyNumber"], company["postcode"])
```

**Get results as CSV**, ready for a CRM import:

```bash
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&view=crm&token=<TOKEN>"
```

***

### Limitations

Worth knowing before you buy:

- **Companies House caps a single export at 5,000 rows.** The Actor fetches one day at a time to stay under that, and a normal UK day is ~3,000 companies. If you filter to a single busy day with no other filters and see a warning about the export cap, add a SIC code or location filter.
- **Maximum 90 days per run.** Split larger backfills across several runs.
- **No officer or director details.** This Actor covers the register's company-level search. For officers, PSC/beneficial ownership and filing history, use **UK Companies House Intelligence** (below).
- **Publication lag.** Companies appear on the register a short time after incorporation, so same-day results are usually empty.
- **`location` is a text match on the address**, not a radius search. "Manchester" matches addresses containing that word.
- **Company data only.** No emails or phone numbers — those are not in the public register.
- This Actor reads the **public** Companies House register. It does not access anything requiring authentication.

***

### Related Actors

- **[UK Companies House Intelligence](https://apify.com/technicaldost/uk-companies-house-intelligence)** — full profile, officers, PSC/beneficial ownership and filing history for any company number. The natural next step: use this Actor to find new companies, then enrich them.
- **[SEC EDGAR Filing Monitor](https://apify.com/technicaldost/sec-edgar-filing-monitor)** — the same new-only monitoring pattern for US public company filings.
- **[RSS Feed Scraper](https://apify.com/technicaldost/rss-feed-scraper)** — if you also track company news feeds.

***

### Data source and responsible use

Data comes from the **public** Companies House register via its advanced company search, published by Companies House under the [Open Government Licence](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). This Actor reads only publicly accessible pages, respects the service with paced requests, and does not attempt to access anything behind authentication.

Companies House data includes information about individuals (registered office addresses can be residential). If you use these records for marketing, UK GDPR and PECR still apply to you as the data controller — check that your outreach has a lawful basis and honours opt-outs.

Not affiliated with or endorsed by Companies House.

# Actor input Schema

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

How many days of new incorporations to fetch, counting back from yesterday. Companies House publishes with a short lag, so today's companies usually appear tomorrow. Ignored if you set an explicit date range below.

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

UK SIC 2007 codes to filter by, 5 digits each. Leave empty for every industry. Examples: 62012 = business and domestic software development, 68209 = other letting of own property, 43210 = electrical installation.

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

Match text anywhere in the registered office address — a town, county or postcode area. Example: "Manchester" or "SW1".

## `nameIncludes` (type: `string`):

Only return companies whose name contains this text. Example: "solar".

## `nameExcludes` (type: `string`):

Skip companies whose name contains this text.

## `companyStatus` (type: `string`):

Which register status to include.

## `companyType` (type: `string`):

Restrict to one Companies House company type, for example "ltd" for private limited companies or "llp". Leave empty for all types.

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

Recommended for scheduled runs. The actor remembers every company number it has returned and skips them next time, so a daily schedule only ever returns genuinely new companies — and you are only charged for those. Turn this off to get every match regardless of history.

## `maxRecords` (type: `integer`):

Hard cap on how many companies this run returns and charges for. Protects you from an unexpectedly large result set.

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

Start of an explicit incorporation date range. Overrides "Days back". Maximum range is 90 days.

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

End of the incorporation date range, inclusive.

## `stateStoreName` (type: `string`):

Named Key-Value Store on your account where the "already seen" list is kept. Change it to run two independent watchlists that do not share history, or to reset a watchlist by pointing it at a fresh name.

## Actor input object example

```json
{
  "daysBack": 1,
  "sicCodes": [
    "62012"
  ],
  "companyStatus": "active",
  "onlyNew": true,
  "maxRecords": 1000,
  "stateStoreName": "uk-company-leads-state"
}
```

# Actor output Schema

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

No description

## `crm` (type: `string`):

No description

## `runSummary` (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": [
        "62012"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("technicaldost/uk-new-company-leads-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 = { "sicCodes": ["62012"] }

# Run the Actor and wait for it to finish
run = client.actor("technicaldost/uk-new-company-leads-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 '{
  "sicCodes": [
    "62012"
  ]
}' |
apify call technicaldost/uk-new-company-leads-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,technicaldost/uk-new-company-leads-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/cwVyYOTQaHxWLdil5/builds/5PMSRL3W0nUaYKgba/openapi.json
