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

Newly incorporated UK companies from the official Companies House API: filter by date, SIC code, type, status and location; optional directors.

- **URL**: https://apify.com/knotty\_mistveil/companies-house-new-incorporations.md
- **Developed by:** [Jason](https://apify.com/knotty_mistveil) (community)
- **Categories:** Business, Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 company returneds

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?

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

## Companies House New Incorporations Scraper (UK)

Get every company incorporated in the UK in a date window, straight from the official **Companies House Public Data API**, as clean JSON, CSV or Excel. Filter by incorporation date, SIC code, company type, status, location and name, and optionally attach the directors, secretaries and LLP members of each company. Companies House registers 2,000 to 4,000 new companies on a typical working day, and this Actor turns that feed into a lead list you can schedule daily and pipe into a CRM, spreadsheet or enrichment workflow, without writing a line of API code or worrying about the 600-requests-per-5-minutes rate limit.

You bring your own free Companies House API key (two minutes to create, instructions below); the Actor does the paging, throttling, retrying and normalising.

### What you get

One record per company:

- `id`, `companyNumber` - the Companies House company number (8 digits in England and Wales, `OC...` for LLPs, `SC...` for Scotland, `NI...` for Northern Ireland)
- `companyName`, `companyStatus` (`active`, `dissolved`, ...), `companyType` (`ltd`, `llp`, `plc`, `private-limited-guarant-nsc`, ...), `companySubtype` (e.g. `community-interest-company`)
- `incorporationDate` and `cessationDate` (YYYY-MM-DD)
- Registered office: `addressLine1`, `addressLine2`, `locality`, `region`, `postalCode`, `country` (plus `premises` when Companies House returns it)
- `sicCodes` - array of UK SIC 2007 codes declared at incorporation
- `url` - public Companies House page for the company
- `officers` (when `includeOfficers` is on) - array of `{ officerId, name, role, appointedOn, resignedOn, nationality, countryOfResidence, occupation, dobMonth, dobYear }`, plus `officersFetchFailed` (boolean)
- `source` (`companies-house`) and `fetchedAt` (ISO timestamp)

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `apiKey` | string (secret) | required | Your Companies House REST API key. Free: sign in or register at [developer.company-information.service.gov.uk](https://developer.company-information.service.gov.uk/), create a **live** application, then **Create new key** (type: REST API key). Stored as an Apify secret. |
| `daysBack` | integer | `1` | Look-back window for the incorporation date when `dateFrom` is empty. |
| `dateFrom` | YYYY-MM-DD | - | Earliest incorporation date (inclusive). Overrides `daysBack`. |
| `dateTo` | YYYY-MM-DD | today | Latest incorporation date (inclusive). |
| `sicCodes` | string\[] | `[]` | Only companies with any of these SIC codes, e.g. `["62012", "62020"]`. |
| `companyTypes` | string\[] | `[]` | Companies House type codes, e.g. `["ltd", "llp"]`. Empty = all types. |
| `companyStatus` | select | `active` | `active`, `any`, `dissolved`, `liquidation`, ... |
| `location` | string | - | Registered office location as understood by Companies House (town, postcode area or country). |
| `nameIncludes` / `nameExcludes` | string | - | Server-side company name contains / does-not-contain filters. |
| `keywords` | string\[] | `[]` | Case-insensitive OR filter on the company name, applied after download. |
| `includeOfficers` | boolean | `false` | Fetch officers for each company (one extra request per company, throttled). |
| `maxItems` | integer | `500` | Stop after this many companies. You pay per company returned. |

Minimal input (yesterday's incorporations, active companies, no officers):

```json
{ "apiKey": "your-companies-house-key" }
```

Daily software-company leads with directors:

```json
{
  "apiKey": "your-companies-house-key",
  "daysBack": 1,
  "sicCodes": ["62012", "62020", "62090"],
  "companyTypes": ["ltd"],
  "includeOfficers": true,
  "maxItems": 2000
}
```

### Output example

> **Illustrative sample, not a live record.** It shows the exact field names, types and nesting the
> Actor produces, but the company, the address and the officers below are invented placeholders.
> The company number `99999901` is deliberately outside the ranges Companies House allocates
> (it returns "company not found" on the public register), so nothing here can be mistaken for,
> or attached to, a real registered company or a real person. Run the Actor with your own free key
> to see genuine records.

```json
{
  "id": "99999901",
  "source": "companies-house",
  "url": "https://find-and-update.company-information.service.gov.uk/company/99999901",
  "companyName": "SAMPLE DIGITAL SERVICES LTD",
  "companyNumber": "99999901",
  "companyStatus": "active",
  "companyType": "ltd",
  "companySubtype": null,
  "incorporationDate": "2026-09-04",
  "cessationDate": null,
  "premises": null,
  "addressLine1": "1 Example Street",
  "addressLine2": "Unit 4",
  "locality": "Bristol",
  "region": "Avon",
  "postalCode": "BS1 4DJ",
  "country": "England",
  "sicCodes": ["62012", "62020"],
  "officers": [
    {
      "officerId": "sample-officer-id-0000000001",
      "name": "SAMPLE, Alex Jordan",
      "role": "director",
      "appointedOn": "2026-09-04",
      "resignedOn": null,
      "nationality": "British",
      "countryOfResidence": "England",
      "occupation": "Software Engineer",
      "dobMonth": 3,
      "dobYear": 1987
    },
    {
      "officerId": "sample-officer-id-0000000002",
      "name": "SAMPLE SECRETARIES LIMITED",
      "role": "corporate-secretary",
      "appointedOn": "2026-09-04",
      "resignedOn": null,
      "nationality": null,
      "countryOfResidence": null,
      "occupation": null,
      "dobMonth": null,
      "dobYear": null
    }
  ],
  "officersFetchFailed": false,
  "fetchedAt": "2026-09-07T08:00:00.000Z"
}
```

`officers` and `officersFetchFailed` are only present when `includeOfficers` is on. `officers` is **always an array** (never `null`), so the column keeps one type in JSON, CSV and Excel exports: it is `[]` when Companies House has not published an officer list for the company yet, and also `[]` with `officersFetchFailed: true` on the rare occasion the officers request still failed after retries (the company record itself is delivered either way, and the failure count is in the run's `SUMMARY`).

### Pricing

Pay per result: **US$0.004 per company**, i.e. **US$4 per 1,000 companies**. Officer enrichment is included in that price, and nothing is charged for a run that returns no companies. Apify platform usage (compute, storage) is billed by Apify on top of the per-result price; free-plan accounts are limited by Apify's monthly free credit, so set `maxItems` to stay inside it.

Companies House itself does not charge for API access.

### Data source and licence

- Source: [Companies House Public Data API](https://developer-specs.company-information.service.gov.uk/companies-house-public-data-api/reference), endpoints [advanced company search](https://developer-specs.company-information.service.gov.uk/companies-house-public-data-api/reference/search/advanced-company-search) and [company officers](https://developer-specs.company-information.service.gov.uk/companies-house-public-data-api/reference/officers/list). This is the official register maintained by Companies House, an executive agency of the UK government, and the same data shown on the public [Find and update company information](https://find-and-update.company-information.service.gov.uk/) service.
- Licence: Companies House register data is Crown copyright and is published under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/) ("all content is available under the Open Government Licence v3.0, except where otherwise stated", see [Searching the Companies House register](https://www.gov.uk/guidance/searching-the-companies-house-register)), which permits commercial reuse with attribution.
- API terms: use of the API is governed by the Companies House [API key authorisation guide](https://developer-specs.company-information.service.gov.uk/guides/authorisation), [rate limiting guide](https://developer-specs.company-information.service.gov.uk/guides/rateLimiting) and [developer guidelines](https://developer.company-information.service.gov.uk/developer-guidelines): keep your key secret, stay within 600 requests per 5 minutes, and do not try to bypass the limit (Companies House may ban applications that do). This Actor throttles itself accordingly and sends your key over TLS only to `api.company-information.service.gov.uk`.
- Personal data: officer records (names, month and year of birth, nationality, occupation) are public register data that Companies House is required by law to publish, but they are still personal data. If you contact the people you find, **you are responsible for compliance with UK GDPR and PECR** (lawful basis, direct-marketing rules, opt-outs). The Actor deliberately does not export officers' correspondence addresses.

### Limits and freshness

- Companies House allows **600 requests per 5 minutes** per key. The Actor throttles every request - first tries and retries alike - to about 1.8 per second, and pauses for a full minute if it still receives HTTP 429. The Actor requests up to 5,000 companies per page (it asks for exactly your **Max results** when that is smaller), so a run without officers usually needs a single request; with `includeOfficers` on, budget roughly 10 minutes per 1,000 companies.
- New incorporations usually appear in the API on the day of incorporation; SIC codes and registered office details come from the incorporation filing and can be corrected later.
- `daysBack: 1` means companies incorporated since yesterday's date; use `dateFrom`/`dateTo` for an exact window, up to 366 days.
- The Companies House `company_name` filter is ignored by the API; this Actor uses the working `company_name_includes` / `company_name_excludes` parameters, plus its own `keywords` filter.
- Officers: the first 50 officers per company are returned, which covers newly incorporated companies.
- **Paging, still unverified against the live API.** The `start_index` paging below is covered only by `test/unit.test.js` against a mocked transport: no key exists on the build machine, so this Actor has never parsed a real HTTP 200 from `api.company-information.service.gov.uk`. **After the first keyed live run, record here** that `start_index` paging and the `hits` total behaved as described, with the run date.
- Completeness: the Actor pages with `start_index` until it has read every company Companies House reports as matching (the `hits` count), and it does not treat a partly filled page as the end of the results. If the API ever stops early - an empty page, or a deep page refused with HTTP 400 - the run still finishes cleanly with what it has, but it logs a loud `INCOMPLETE RESULT SET` warning and sets `truncated: true` (with `hits`, `pages` and a reason) in the run's `SUMMARY` record, so a short list is never mistaken for a complete one. Narrowing the date window or adding a SIC code / location filter fixes it.

### Use cases

- **B2B lead generation**: every morning, pull yesterday's new companies in your target SIC codes and region and push them to your CRM before competitors call.
- **Service providers to startups**: accountants, banks, insurers, web agencies and registered-office providers prospect founders while their company is days old.
- **Market intelligence and compliance**: track incorporation volumes by sector or town, watch for look-alike company names, or monitor new entities linked to known directors via `officerId`.

### Support

Found a problem or need a field added? Open an issue on the Actor's **Issues** tab on Apify Store. Replies within 14 days.

# Actor input Schema

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

Your free Companies House REST API key. Sign in at https://developer.company-information.service.gov.uk/, create an application (live), then create a key. Stored as a secret; never shared.

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

Look-back window in days for the incorporation date, used when dateFrom is empty. 1 = companies incorporated since yesterday. Roughly 2,000-4,000 companies are incorporated per working day.

## `dateFrom` (type: `string`):

Earliest incorporation date (YYYY-MM-DD, inclusive). Overrides daysBack.

## `dateTo` (type: `string`):

Latest incorporation date (YYYY-MM-DD, inclusive). Defaults to today.

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

Only companies with any of these UK SIC 2007 codes, e.g. 62012 (business and domestic software development), 41100 (development of building projects). Leave empty for all industries.

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

Companies House type codes, e.g. ltd, llp, plc, private-limited-guarant-nsc, limited-partnership. Leave empty for all types.

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

Register status filter. New incorporations are almost always 'active'; choose 'any' to include companies already dissolved or in insolvency.

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

Registered office location text as understood by Companies House, e.g. a town (Manchester), a postcode area (SW1A) or a country (Wales).

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

Only company names containing this text (matched server-side by Companies House).

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

Skip company names containing this text (matched server-side by Companies House).

## `keywords` (type: `array`):

Case-insensitive OR filter applied to the company name after download. Several words = any of them. Leave empty for no filter.

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

Also fetch the directors, secretaries and LLP members of each company (name, role, appointment date, nationality, country of residence, occupation, month and year of birth). One extra API request per company, throttled to stay within the Companies House rate limit; included in the per-result price.

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

Stop after this many companies. You are charged per company returned.

## Actor input object example

```json
{
  "daysBack": 1,
  "sicCodes": [],
  "companyTypes": [],
  "companyStatus": "active",
  "keywords": [],
  "includeOfficers": false,
  "maxItems": 500
}
```

# Actor output Schema

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

All companies returned by the run, one JSON object each. Append ?format=csv or ?format=xlsx to download a spreadsheet.

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

Counts, the date window used, source freshness and any per-source warnings, written at the end of the run.

# 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": 1,
    "sicCodes": [],
    "companyTypes": [],
    "companyStatus": "active",
    "keywords": [],
    "includeOfficers": false,
    "maxItems": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("knotty_mistveil/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": 1,
    "sicCodes": [],
    "companyTypes": [],
    "companyStatus": "active",
    "keywords": [],
    "includeOfficers": False,
    "maxItems": 500,
}

# Run the Actor and wait for it to finish
run = client.actor("knotty_mistveil/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": 1,
  "sicCodes": [],
  "companyTypes": [],
  "companyStatus": "active",
  "keywords": [],
  "includeOfficers": false,
  "maxItems": 500
}' |
apify call knotty_mistveil/companies-house-new-incorporations --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,knotty_mistveil/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/DX83JMfy2xrhYfVyW/builds/0UztUREwZxszoj0uT/openapi.json
