# UK Companies House New Incorporations Scraper (`komos_solutions/uk-companies-house-new-incorporations`) Actor

New UK companies from the official Companies House API: companies incorporated in a date range with SIC code, company type, status, locality and postcode filters. Number, name, SIC codes, registered office and daily new-company alerts.

- **URL**: https://apify.com/komos_solutions/uk-companies-house-new-incorporations.md
- **Developed by:** [Damian Fairholme](https://apify.com/komos_solutions) (community)
- **Categories:** Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 new 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

### What is UK Companies House New Incorporations Scraper?

**UK Companies House New Incorporations Scraper** (`komos_solutions/uk-companies-house-new-incorporations`) lists **newly incorporated UK companies** from the **official Companies House REST API**. Choose a date range and filter by **SIC code, company type, company status, registered-office location, town or postcode prefix**. You get one clean row per company with the company number, name, status, type, incorporation date, SIC codes with descriptions, registered office address and a direct Companies House link. Alert mode (`onlyNew`) turns it into a daily feed of new UK businesses.

#### Quick Facts & Technical Summary

- **What it extracts:** Companies House company number (`companyNumber`), company name (`companyName`), status (`companyStatus`), type (`companyType`, `companyTypeDescription`, `companySubtype`), incorporation date (`incorporationDate`), SIC 2007 codes and official descriptions (`sicCodes`, `sicDescriptions`), registered office address (`registeredOfficeAddress`, `addressLine1`, `addressLine2`, `locality`, `region`, `postalCode`, `country`), and the public register link (`companiesHouseUrl`).
- **Pricing (Pay-Per-Event):** **$3.00 USD (~£2.35 GBP) per 1,000 companies** ($0.003 / ~0.23p per company, plus a $0.00005 Actor start fee). Sample rows returned without an API key are free.
- **Official UK data source:** Companies House Public Data API, advanced company search (`GET https://api.company-information.service.gov.uk/advanced-search/companies` with `incorporated_from`, `incorporated_to`, `sic_codes`, `company_type`, `company_status`, `location`). Contains public sector information licensed under the **Open Government Licence v3.0**.
- **What you need:** a **free Companies House REST API key** (`apiKey`, stored as an encrypted secret input). No proxy is needed.
- **Key input parameters:** `apiKey`, `daysBack` (default `7`) or `incorporatedFrom` / `incorporatedTo` (`YYYY-MM-DD`), `sicCodes` (5-digit codes or 2–4 digit prefixes such as `"62"`), `companyTypes` (e.g. `["ltd", "llp"]`), `companyStatus` (default `["active"]`), `location`, `localities`, `postcodePrefixes` (e.g. `["M", "LS1", "SW1A"]`), `companyNameIncludes`, `maxItems` (default `20`), `onlyNew`, `stateStoreName`, `includeOfficers` (opt-in, default `false`).
- **Output JSON schema fields:** `companyNumber`, `companyName`, `companyStatus`, `companyType`, `companyTypeDescription`, `companySubtype`, `incorporationDate`, `sicCodes`, `sicDescriptions`, `registeredOfficeAddress`, `addressLine1`, `addressLine2`, `locality`, `region`, `postalCode`, `country`, `companiesHouseUrl`, `isSample`, `scrapedAt`. `activeOfficerCount` and `officers` are added only when `includeOfficers` is on; otherwise these keys are left out of the row.
- **Rate limits:** Companies House allows **600 requests per 5 minutes** per key. The Actor spaces requests at least 0.52 s apart, pauses when `X-Ratelimit-Remaining` runs low, and retries HTTP 429 and 5xx errors with back-off.
- **Daily new-company alerts:** set `"onlyNew": true` and a `"stateStoreName"`, save as a Task, schedule it every weekday (`0 7 * * 1-5`, `Europe/London`) and send new rows to email, Slack, Google Sheets, Zapier, Make, n8n or a webhook.

Try it now: paste your free API key, keep the default input, and click **Start** to get up to 20 active UK companies incorporated in the last 7 days (~$0.06 / ~5p). Without a key you get 3 labelled, uncharged sample rows and a message explaining how to get a key.

### What data does it return?

One row per company:

| Field | Example | Description |
|---|---|---|
| `companyNumber` | `16012345` | 8-character Companies House number (`SC`, `NI`, `OC` prefixes kept) |
| `companyName` | `EXAMPLE SOFTWARE LTD` | Registered company name |
| `companyStatus` | `active` | Companies House status |
| `companyType` / `companyTypeDescription` | `ltd` / `Private limited company` | Company type code and plain-English label |
| `incorporationDate` | `2026-10-27` | Date of incorporation |
| `sicCodes` / `sicDescriptions` | `["62012"]` / `["Business and domestic software development"]` | SIC 2007 nature-of-business codes with official descriptions |
| `registeredOfficeAddress` | `1 Example Street, Manchester, M1 2AB, England` | Full registered office address, plus split fields `addressLine1`, `locality`, `postalCode` and more |
| `companiesHouseUrl` | `https://find-and-update.company-information.service.gov.uk/company/16012345` | Public register page |
| `activeOfficerCount` | `2` | Only present when `includeOfficers` is on (the key is left out otherwise) |
| `officers` | `[{ "name": "…", "officerRole": "director", … }]` | Only present when `includeOfficers` is on (the key is left out otherwise): one object per active officer with `name`, `officerRole`, `appointedOn`, `nationality`, `birthMonth`, `birthYear`, `correspondenceAddress` |
| `isSample` | `false` | `true` only for the free sample rows returned without an API key |

#### Example output row (default, `includeOfficers: false`)

```json
{
  "companyNumber": "16012345",
  "companyName": "EXAMPLE SOFTWARE LTD",
  "companyStatus": "active",
  "companyType": "ltd",
  "companyTypeDescription": "Private limited company",
  "companySubtype": null,
  "incorporationDate": "2026-10-27",
  "sicCodes": ["62012"],
  "sicDescriptions": ["Business and domestic software development"],
  "registeredOfficeAddress": "1 Example Street, Manchester, M1 2AB, England",
  "addressLine1": "1 Example Street",
  "addressLine2": null,
  "locality": "Manchester",
  "region": null,
  "postalCode": "M1 2AB",
  "country": "England",
  "companiesHouseUrl": "https://find-and-update.company-information.service.gov.uk/company/16012345",
  "isSample": false,
  "scrapedAt": "2026-10-29T09:00:00.000Z"
}
```

With `includeOfficers: true`, each row also has `activeOfficerCount` and `officers` (placed before `isSample`), and each officer object has only `name`, `officerRole`, `appointedOn`, `nationality`, `birthMonth`, `birthYear` and `correspondenceAddress`.

Export as JSON, CSV, Excel, XML or HTML, or read results through the Apify API.

### Who uses new UK company data?

- 🎯 **B2B sales and lead generation:** reach new businesses in their first weeks, when they choose accountants, banks, insurers, software, web design, phone systems and office suppliers.
- 🧾 **Accountants, bookkeepers and formation agents:** a daily list of new limited companies in your area or sector.
- 📈 **Market research and economic development:** track start-up activity by SIC code, town or postcode area.
- 🔗 **CRM enrichment pipelines:** add websites, emails and VAT numbers with our **[UK Company Website Enricher](https://apify.com/komos_solutions/uk-company-website-enricher)** once a new company launches its site.

### How to find newly incorporated UK companies (step-by-step)

1. **Get a free API key:** sign in at [developer.company-information.service.gov.uk](https://developer.company-information.service.gov.uk/), open **Your applications → Create an application** (choose **Live**), then **Create new key → REST**. Copy the key.
2. Paste it into **Companies House API key** (`apiKey`). Apify stores secret inputs encrypted.
3. Pick the period: **Incorporated in the last N days** (`daysBack`), or exact **Incorporated from / to** dates.
4. Add filters: **SIC codes** (`["62"]` for all IT, `["41100", "43"]` for property and construction), **Company types**, **Company status**, **Registered office location**, **Exact localities** or **Postcode prefixes**.
5. Set **Max companies** (`maxItems`) and click **Start**.

#### Example input JSON

```json
{
  "apiKey": "YOUR_COMPANIES_HOUSE_REST_KEY",
  "daysBack": 7,
  "sicCodes": ["62", "70229"],
  "companyTypes": ["ltd"],
  "companyStatus": ["active"],
  "postcodePrefixes": ["M", "SK"],
  "maxItems": 200,
  "onlyNew": false,
  "includeOfficers": false
}
```

#### Postcode prefix rules

- Letters only = postcode **area**: `M` matches `M1` and `M14` but not `ME14`.
- Letters and digits = **prefix**: `SW1` matches `SW1A` and `SW1P`; `LS1 4` matches the `LS1 4` sector.

### How to set up daily new-company alerts

1. Configure your filters, set **Alert mode: only new companies** (`onlyNew: true`) and a unique **State store name** (e.g. `new-it-companies-manchester`).
2. Click **Save as a new task**.
3. Open **Schedules → Create new** and run the task every weekday (`0 7 * * 1-5`, `Europe/London`). Use `daysBack: 3` so late registrations are still caught; already-seen company numbers are skipped.
4. In the task's **Integrations** tab, send each run's new rows to email, Slack, Google Sheets, HubSpot, Zapier, Make or n8n.

### How much does it cost?

Pay-Per-Event: **$3.00 USD (~£2.35 GBP) per 1,000 companies**. The Companies House API itself is free.

| Use case | Companies | Cost (USD) | Approx. cost (GBP) |
|---|---|---|---|
| Default test run | 20 | $0.06 | ~£0.05 |
| Weekly list for one sector and town | 250 | $0.75 | ~£0.59 |
| Daily national feed for one sector (a month) | 3,000 | $9.00 | ~£7.05 |
| About a week of all new UK companies | ~15,000 | $45.00 | ~£35.00 |

GBP figures are approximate at $1 = £0.78.

### Frequently Asked Questions (FAQ)

#### Why do I need my own Companies House API key?

Companies House gives every developer a free key with its own rate limit (600 requests per 5 minutes). Using your own key keeps your runs fast and within the Companies House terms. The key is a secret input, so it is encrypted and hidden in run logs.

#### What happens if I run it without a key?

The run finishes with a clear message on how to get a key and returns **3 sample rows** marked `isSample: true` with names starting `SAMPLE ROW`. Sample rows are not charged. If you supply a wrong key, the run fails with a message saying Companies House rejected it.

#### How many companies can I get in one run?

Companies House returns at most 10,000 results per search. When your date range has more hits, the Actor splits it into smaller date windows automatically, newest first. Set `maxItems` to cap the cost.

#### Does it collect directors or other personal data?

**Not by default.** Officer data is an opt-in setting: `includeOfficers` is `false` unless you switch it on. When it is on, each company row gets `activeOfficerCount` and an `officers` list with only these fields for each active officer: `name`, `officerRole`, `appointedOn`, `nationality`, `birthMonth` and `birthYear` (exactly as Companies House publishes them; the day of birth is never output) and `correspondenceAddress`. Home or residential addresses and every other officer field are never collected. Officers are included in the same $3 per 1,000 companies price; there is no extra officer charge. See **UK GDPR and data protection** below.

#### Is it legal to use Companies House data?

Yes. Companies House register data is public and published under the **Open Government Licence v3.0**. This Actor is not affiliated with or endorsed by Companies House. Follow UK GDPR and PECR rules for any outreach.

#### How fresh is the data?

Results come live from the Companies House API at run time. New companies normally appear on the register on the day they are incorporated.

### UK GDPR and data protection

- **Where the data comes from:** every field comes from the **public Companies House register**, through the official Companies House Public Data API, under the Open Government Licence v3.0.
- **Company data by default:** with the default input, the Actor outputs company records only. Officer data appears only if you set `includeOfficers: true`.
- **Data minimisation:** when officers are switched on, the Actor outputs only `name`, `officerRole`, `appointedOn`, `nationality`, `birthMonth`, `birthYear` and `correspondenceAddress` for active officers. It never outputs the day of birth, home or residential addresses, occupation, country of residence or any other officer field. Collect officers only if you need them.
- **Lawful basis:** officer names and details are personal data under UK GDPR. The expected lawful basis for B2B prospecting is **legitimate interests** (Article 6(1)(f)). You should record a legitimate interests assessment that covers your purpose, why the data is necessary and how you balance it against the individuals' interests.
- **Your responsibility:** you, the buyer and user of the data, are the controller for how you use it and are responsible for your own compliance with **UK GDPR** and the **Privacy and Electronic Communications Regulations (PECR)**. This includes telling people where you got their data (UK GDPR Article 14), respecting opt-outs and objections to direct marketing straight away, suppressing people who object, keeping data only as long as you need it, and **not sending unsolicited electronic marketing to individuals where PECR forbids it** (for example to sole traders and partnerships, which PECR treats as individuals, without consent).
- **Registered office addresses:** a small company's registered office can be a home address. Treat it as business contact data and handle it with care.
- Komos Solutions provides the tool, not legal advice. See the ICO's guidance on legitimate interests and direct marketing at [ico.org.uk](https://ico.org.uk/).

### Related UK B2B Data Actors by Komos Solutions

- 🌐 **[UK Company Website Enricher: Emails, Company No. & VAT](https://apify.com/komos_solutions/uk-company-website-enricher)**: turn company websites into one row each with business emails, UK phones, Companies House number, VAT number, postcodes and social links.
- 🏛️ **[UK Government Tenders & Contracts Scraper](https://apify.com/komos_solutions/uk-contracts-finder-tenders)**: open and awarded UK public-sector tenders from Find a Tender and Contracts Finder, including winning suppliers and their Companies House numbers.
- 🏗️ **[UK Planning Applications Scraper & Alerts](https://apify.com/komos_solutions/uk-planning-applications)**: new and decided planning applications from 400+ UK councils, with applicant and agent company names.

More UK data tools: **[komossolutions.com/data-tools](https://www.komossolutions.com/data-tools/)**. Questions or feature requests? Open an issue on the **Issues** tab.

# Actor input Schema

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

Your free Companies House REST API key (developer.company-information.service.gov.uk > Your applications > Create an application > Live > Create new key > REST). Stored encrypted. Without a key the Actor only returns 3 labelled sample rows, free of charge.

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

Used when 'Incorporated from' is empty: search companies incorporated from N days before 'Incorporated to' (or today). 0 = today only.

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

YYYY-MM-DD. Overrides 'last N days'.

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

YYYY-MM-DD. Empty = today.

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

5-digit SIC 2007 codes (e.g. 62012 software development, 41100 development of building projects) or a 2-4 digit prefix such as 62 (all IT) or 4321. Empty = all industries.

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

Companies House company_type values, e.g. ltd, plc, llp. Empty = all types.

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

Companies House company_status values. Default: active. Empty = any status.

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

Free-text location passed to the Companies House 'location' filter, matched against the registered office address, e.g. Leeds or Manchester.

## `localities` (type: `array`):

Optional strict filter on the registered office locality (case-insensitive exact match), e.g. London, Bristol.

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

Optional registered office postcode filter. Letters only = postcode area (M matches M1, M14 but not ME). With digits = prefix (SW1 matches SW1A, SW1P; 'LS1 4' = sector).

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

Optional word(s) the company name must include, e.g. solar.

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

Maximum companies to output (you pay per company). Ranges above 10,000 hits are split by date automatically.

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

Only output companies not returned by previous runs that used the same state store. Ideal for a daily schedule.

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

Named key-value store that remembers seen company numbers. Use a different name per saved search or schedule.

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

OFF by default. When on, adds activeOfficerCount and, for each active officer, ONLY: name, role, appointment date, nationality, month and year of birth (never the day) and correspondence address. Home/residential addresses and all other officer fields are never collected. Officers are personal data: you are responsible for UK GDPR and PECR compliance (see README). Uses one extra API request per company (slower), no extra charge.

## Actor input object example

```json
{
  "daysBack": 7,
  "sicCodes": [
    "62"
  ],
  "companyTypes": [],
  "companyStatus": [
    "active"
  ],
  "localities": [],
  "postcodePrefixes": [],
  "maxItems": 20,
  "onlyNew": false,
  "stateStoreName": "uk-ch-new-incorporations-seen",
  "includeOfficers": false
}
```

# Actor output Schema

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

All companies (one billable 'company' event each), overview view.

# 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 = {
    "daysBack": 7,
    "sicCodes": [
        "62"
    ],
    "companyStatus": [
        "active"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("komos_solutions/uk-companies-house-new-incorporations").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 = {
    "daysBack": 7,
    "sicCodes": ["62"],
    "companyStatus": ["active"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("komos_solutions/uk-companies-house-new-incorporations").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 '{
  "daysBack": 7,
  "sicCodes": [
    "62"
  ],
  "companyStatus": [
    "active"
  ],
  "maxItems": 20
}' |
apify call komos_solutions/uk-companies-house-new-incorporations --silent --output-dataset

```

## MCP server setup

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

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/h826MTpnnHbAQzGUZ/builds/LeRXWafxcs6yv7vkq/openapi.json
