# UK Companies House New Companies + Contacts Finder (`northvane/uk-companies-house-new-companies-contacts`) Actor

Newly incorporated UK companies from Companies House — filtered by SIC code, region and incorporation date — with directors and the website, email and phone the register does not publish. Weekly feed for accountants, banks, insurers, SaaS and agencies. Monitoring mode returns only what is new.

- **URL**: https://apify.com/northvane/uk-companies-house-new-companies-contacts.md
- **Developed by:** [Northvane](https://apify.com/northvane) (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.40 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Companies House New Companies + Contacts Finder

**Every company incorporated in the UK in the last N days, filtered by industry (SIC code) and region, with its directors – and the website, email and phone number that Companies House does not publish.**

Around 60,000–75,000 companies are incorporated in the UK every month. Accountants, banks, insurers, payroll and SaaS vendors, web agencies and business-services firms all chase them in their first weeks, because a company that is three weeks old has not chosen its suppliers yet. The register tells you the name, the registered office and the SIC code. It never tells you how to reach them. This Actor does both.

### What you get per company

| Field | From |
|---|---|
| `companyNumber`, `companyName`, `incorporationDate`, `companyAgeDays`, `status`, `category` | Companies House |
| `sicCodes[]` with descriptions, registered `address`, `postcode`, `postTown` | Companies House |
| `officers[]` – name, role, appointed date, nationality, occupation | Companies House API (needs a key, see below) |
| `website`, `websiteConfidence` (`HIGH` / `MEDIUM`), `websiteStatus` | **Discovered and verified by this Actor** |
| `primaryEmail`, `emails[]` with the page each was found on, `phones[]`, `socials`, `bookingLinks[]`, `hasContactForm` | Extracted from the discovered website |
| `companiesHouseUrl`, `registerSource`, `scrapedAt`, `discoveryNotes[]` | audit trail |

Three output views in the Console: **New companies**, **With contacts**, **Officers**.

### How the contact column is built – and why it is honest

No register in the world publishes contact details for new companies: those fields are self-reported and filled in months later, if ever. So this Actor discovers them. For each company it guesses domains from the **full** company name (`ATAS PARTNERS LIMITED` → `ataspartners.co.uk`, `ataspartners.com`, `atas-partners.co.uk` …), fetches each one, and accepts a site only if it is alive **and the page actually names the company**. A page that names the company but reads as a US `LLC`/`Inc` is not attributed. A company whose name is a generic phrase (`AI BUILDER CO LTD`) can only earn `MEDIUM` confidence, never `HIGH`.

Measured on 30 software companies incorporated in July–August 2026: **13 websites found, all with the company's full name on the page**; the rest are blank, not guessed. Expect roughly 40–50% of brand-new companies to have a findable site – the others have not built one yet, which is itself useful to know.

On the sites it does find, the extractor reads `mailto:` links, visible text, JSON-LD and Cloudflare-obfuscated addresses, and looks on `/contact`, `/about` and imprint pages when the homepage publishes nothing. Every email carries `foundOn`, `source`, `isRole`, `domainMatch` and an MX check.

### Two data sources

- **Companies House REST API** (recommended): day-fresh results, officers, and the advanced search filters. Get a free key in three minutes at https://developer.company-information.service.gov.uk/ (register → *Manage applications* → *Register an application* → *Create new key* → REST). Paste it into **Companies House API key**. Your key, your rate limit (600 requests per 5 minutes; the Actor paces itself under it).
- **Monthly bulk snapshot** (no key): the free `BasicCompanyData` files Companies House publishes on the first of each month, streamed part by part. No officers, and "last N days" is relative to the snapshot date. Fine for a monthly pull; use the API for a weekly feed.

`dataSource: auto` picks the API whenever a key is present.

### Weekly feed with monitoring mode

Turn on **Monitoring mode**, set `lastNDays` to 14, and schedule the Actor weekly. It remembers every company number it has already returned and delivers only what is new – a clean feed you can wire straight into a CRM, a Google Sheet or an outreach tool through Apify integrations.

### Input

| Field | Default | Notes |
|---|---|---|
| `lastNDays` / `incorporatedFrom` / `incorporatedTo` | 7 | Date window. |
| `sicCodes` | – | Codes or prefixes: `62012`, `43`, `56101`. Empty = all industries. |
| `regions` | – | Post town, county, country or postcode prefix: `London`, `SW1`, `Scotland`. |
| `companyStatus` / `excludeDormant` | `active` / on | SIC 99999 dormants are the biggest junk bucket. |
| `includeOfficers` / `enrichContacts` / `checkEmailMx` | on | |
| `maxCompanies` | 200 | |
| `companiesHouseApiKey` / `dataSource` | – / `auto` | |
| `monitoringMode` | off | |

### Output example

```json
{
  "companyNumber": "17400001",
  "companyName": "EXAMPLE SOFTWARE LTD",
  "incorporationDate": "2026-08-03",
  "companyAgeDays": 33,
  "status": "active",
  "category": "Private Limited Company",
  "sicCodes": [{ "code": "62012", "description": "Business and domestic software development" }],
  "address": { "line1": "71-75 Shelton Street", "postTown": "LONDON", "postcode": "WC2H 9JQ", "country": "United Kingdom" },
  "officers": [{ "name": "SMITH, Jane", "role": "director", "appointedOn": "2026-08-03", "nationality": "British", "occupation": "Software Engineer" }],
  "website": "https://examplesoftware.co.uk/",
  "websiteConfidence": "HIGH",
  "primaryEmail": "hello@examplesoftware.co.uk",
  "emails": [{ "email": "hello@examplesoftware.co.uk", "foundOn": "homepage", "source": "mailto", "isRole": true, "domainMatch": true, "mxValid": true }],
  "phones": [], "socials": { "linkedin": "https://www.linkedin.com/company/example-software" },
  "companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/17400001"
}
```

### Pricing

Pay per result: one price per company returned, plus a smaller charge for each company where a website and contacts were actually found. A weekly feed of 200 new software companies costs well under a dollar.

### Legal note

Companies House data is published under the Open Government Licence for exactly this kind of reuse. Officer records are personal data under UK GDPR: you are the data controller for how you use them, and direct marketing to individuals must respect PECR. Website contact details are collected only from pages the companies themselves publish.

### FAQ

**Why is `website` empty for half the companies?** Because they do not have one yet, or it is not on a domain that matches their name. The Actor never guesses – an empty field means "not found", not "does not exist".

**Can I search by keyword in the company name?** Not yet; filter by SIC and region, then filter the dataset. Ask in the issues tab if you need it.

**Does it work for Scotland / Northern Ireland?** Yes – Companies House covers the whole UK; use `regions: ["Scotland"]` or a postcode prefix such as `BT`.

### Related

Chain it before an email-verification Actor or a CRM integration. For local businesses (not new companies) use the Google Maps Email Extractor & Dead Website Checker by the same developer.

# Actor input Schema

## `lastNDays` (type: `integer`):

Companies incorporated within this many days of today. Ignored when explicit dates are given below. With the free bulk snapshot (no API key) the window is relative to the snapshot date, which is monthly.

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

Explicit start date. Overrides lastNDays.

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

Explicit end date (inclusive).

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

UK SIC 2007 codes or prefixes, one per line: `62012` (software development), `43` (all construction), `56101` (restaurants). Empty = every industry.

## `regions` (type: `array`):

Post town, county, country or postcode prefix, one per line: `London`, `Manchester`, `Greater Manchester`, `SW1`, `Scotland`. Matched against the registered office address. Empty = all of the UK.

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

`active` is what you want for a lead feed.

## `excludeDormant` (type: `boolean`):

Drop SIC 99999 / dormant registrations — the single largest junk bucket in new incorporations.

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

Adds current officers (name, role, appointed date, nationality, occupation). Needs a Companies House API key.

## `enrichContacts` (type: `boolean`):

The register publishes no contact details. When on, the Actor guesses the company's domain from its name, verifies the page actually names the company, and extracts published emails, phones, socials and booking links. Confidence is reported per row; nothing is guessed without verification.

## `checkEmailMx` (type: `boolean`):

Cheap deliverability signal on every address found.

## `maxCompanies` (type: `integer`):

Stop after this many matching companies.

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

Your own free REST API key from developer.company-information.service.gov.uk. Gives day-fresh results and officers, and your own rate limit (600 requests / 5 min). Without it the Actor uses the free monthly bulk snapshot (no officers, up to a month stale).

## `dataSource` (type: `string`):

`auto` = API when a key is available, else the bulk snapshot.

## `monitoringMode` (type: `boolean`):

Remembers every company number already returned and skips it next time. Schedule the Actor weekly and you get a clean feed of what is new.

## `maxConcurrency` (type: `integer`):

How many companies are enriched in parallel.

## `proxyConfiguration` (type: `object`):

Not needed for the register itself. Only for the website-discovery fetches, if many come back blocked.

## Actor input object example

```json
{
  "lastNDays": 120,
  "sicCodes": [
    "62012"
  ],
  "regions": [],
  "companyStatus": "active",
  "excludeDormant": true,
  "includeOfficers": true,
  "enrichContacts": true,
  "checkEmailMx": true,
  "maxCompanies": 25,
  "dataSource": "auto",
  "monitoringMode": false,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per newly incorporated company: register fields, SIC codes, registered office, officers, and the discovered website, email and phone with a confidence rating.

## `withContacts` (type: `string`):

Just the companies where a verified website was found.

## `summary` (type: `string`):

Companies matched, officers fetched, websites found by confidence level, emails found, and the date window used.

# 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 = {
    "lastNDays": 120,
    "sicCodes": [
        "62012"
    ],
    "maxCompanies": 25,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("northvane/uk-companies-house-new-companies-contacts").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 = {
    "lastNDays": 120,
    "sicCodes": ["62012"],
    "maxCompanies": 25,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("northvane/uk-companies-house-new-companies-contacts").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 '{
  "lastNDays": 120,
  "sicCodes": [
    "62012"
  ],
  "maxCompanies": 25,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call northvane/uk-companies-house-new-companies-contacts --silent --output-dataset

```

## MCP server setup

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

```

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/Xp6fbnsHZ8psP7nh5/builds/wlHjWBJb2sppupATv/openapi.json
