# Companies House Scraper: New UK Companies & Directors (`studded_columbine/uk-companies-house-scraper`) Actor

Export UK Companies House data from the official register: newly incorporated companies by SIC code, town and date, or lookups by company number or name. Optional directors and beneficial owners (PSC). Daily new-company alerts. No API key needed. Export CSV, Excel, JSON.

- **URL**: https://apify.com/studded_columbine/uk-companies-house-scraper.md
- **Developed by:** [Tenderly Data](https://apify.com/studded_columbine) (community)
- **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 records

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 does Companies House Scraper do?

**Companies House Scraper** exports **UK company data from the official Companies House register** into a spreadsheet or JSON. Build **lists of newly incorporated UK companies** by industry (SIC code), town or postcode and incorporation date, or **look up companies** by company number, Companies House URL or name. Optionally add **directors and officers** and **persons with significant control (PSC / beneficial owners)**. Turn on *Only new* and schedule it for **daily new-company alerts**.

- Uses the official **Companies House Public Data API**, not page scraping, so data is structured and stable.
- **No Companies House API key needed** (ours is built in). You can add your own free key to use your own rate-limit quota.
- **Pay per company:** US$2 per 1,000 companies, US$4 per 1,000 with directors and/or owners, plus US$0.01 per run. The prefilled "Try for free" run (25 new software companies) costs US$0.06.
- Export to **CSV, Excel, JSON, XML or HTML**, or push to Google Sheets, Slack, email, Zapier or Make with Apify integrations and the Apify API.

### Who uses Companies House data like this?

- **B2B sales and lead generation:** every new IT consultancy, restaurant, builder or e-commerce company registered in Manchester this week, with registered office address and directors. Typical buyers: accountants, banks, insurers, web and marketing agencies, payroll and office suppliers, formation agents.
- **Daily new-company alerts:** a saved search runs every morning and returns only companies you haven't seen before.
- **KYC, due diligence and supplier checks:** look up a list of company numbers or names and get status, accounts and confirmation-statement due dates, overdue flags, insolvency history, charges, directors and beneficial owners.
- **Market research:** count company formations by SIC code, region and month.
- **CRM enrichment:** add the official company number, status, SIC industry and address to company names you already have.

### How to get a list of newly registered companies in the UK

1. Click **Try for free**. The form is prefilled with SIC codes 62012 and 62020 (software development and IT consultancy), incorporated in the last 7 days, 25 results.
2. Change the **SIC codes** (prefixes work: `62` = all IT, `5610` = restaurants and takeaways, `41` = building construction) and optionally a **Location** (town, county or postcode area).
3. Turn on **Include directors & officers** and/or **Include beneficial owners (PSC)** if you need people as well as companies.
4. Click **Start**. Results appear in the **Companies** view; switch to **Directors & owners** or **Filing status** for other columns.
5. **For daily alerts:** turn on *Only companies not returned before*, set a *State key* (e.g. `manchester-restaurants`), choose *Baseline only* for the first run if you don't want the backlog, and add a daily **Schedule** in Apify.

Apify's free plan includes US$5 of monthly credit to spend in Apify Store: roughly 2,400 basic company records or 1,200 records with directors.

### Input examples

**Lead list: new software companies in London, last 7 days, with directors:**

```json
{
  "mode": "search",
  "sicCodes": ["6201", "62020"],
  "location": "London",
  "incorporatedWithinDays": 7,
  "includeOfficers": true,
  "maxResults": 500
}
```

**Daily alert: new restaurants and takeaways in Manchester (schedule daily):**

```json
{
  "mode": "search",
  "sicCodes": ["5610"],
  "location": "Manchester",
  "incorporatedWithinDays": 3,
  "onlyNew": true,
  "firstRunBehavior": "baselineOnly",
  "stateKey": "manchester-restaurants",
  "maxResults": 0
}
```

**Company lookup with directors and beneficial owners (KYC):**

```json
{
  "mode": "lookup",
  "companies": ["00445790", "SC123456", "https://find-and-update.company-information.service.gov.uk/company/OC300000", "Rolls-Royce Holdings plc"],
  "includeOfficers": true,
  "includePSC": true
}
```

### Features

| Feature | Details |
|---|---|
| Search filters | SIC codes **or prefixes** (`62` = all IT, `6201` = 62011 + 62012), location (town, county, postcode area), incorporated date range or "last N days", status, company type and subtype, name includes/excludes, dissolved date range |
| Lookup | Company numbers (`445790` is padded to `00445790`, plus `SC`, `NI` and `OC` prefixes), Companies House URLs, or company names (best match or top N) |
| Industry names | Every SIC code comes with its official description |
| Full profile | Accounts next due / last made up to, accounts type, confirmation statement due, overdue flags, charges, insolvency history, previous names |
| Directors & officers | Active (or all) officers with role, appointment date, nationality, occupation, country of residence, month/year of birth, service address, plus a ready-to-use `directorNames` column |
| Beneficial owners (PSC) | Individuals and corporate owners, natures of control, **ownership band** (`>25-50%`, `>50-75%`, `75-100%`), corporate registration numbers, plus a `pscNames` column |
| Only new | Remembers what each saved search has returned. An optional silent baseline on the first run means you only pay for companies registered afterwards |
| Rate-limit safe | Stays under Companies House's 600 requests per 5 minutes and automatically waits and retries if limited |

### Output: Companies House data fields

One item per company. Views: **Companies**, **Directors & owners** and **Filing status**.

```json
{
  "companyNumber": "15998877",
  "companyName": "BYTEFORGE SOLUTIONS LTD",
  "companyStatus": "active",
  "companyType": "ltd",
  "dateOfCreation": "2026-10-14",
  "companyAgeDays": 7,
  "sicCodes": ["62012", "62020"],
  "sicDescriptions": ["Business and domestic software development", "Information technology consultancy activities"],
  "addressLine1": "71-75 Shelton Street",
  "locality": "London",
  "postalCode": "WC2H 9JQ",
  "country": "United Kingdom",
  "fullAddress": "71-75 Shelton Street, London, Greater London, WC2H 9JQ, United Kingdom",
  "companyUrl": "https://find-and-update.company-information.service.gov.uk/company/15998877",
  "directorNames": "SMITH, Jane Alice; PATEL, Ravi",
  "officers": [{ "name": "SMITH, Jane Alice", "role": "director", "appointedOn": "2026-10-14", "nationality": "British", "occupation": "Software Engineer", "countryOfResidence": "England", "birthMonth": 3, "birthYear": 1988, "active": true }],
  "pscNames": "Mrs Jane Alice Smith",
  "personsWithSignificantControl": [{ "name": "Mrs Jane Alice Smith", "kind": "individual", "ownershipBand": "75-100%", "naturesOfControl": ["ownership-of-shares-75-to-100-percent", "voting-rights-75-to-100-percent"], "notifiedOn": "2026-10-14", "active": true }],
  "retrievedAt": "2026-10-21T08:00:00.000Z"
}
```

A run summary (results, total matches, skipped already-seen companies, not-found lookups and API stats) is saved as `OUTPUT` in the run's key-value store.

### How much does it cost to scrape Companies House?

Pay per company delivered. Platform compute is included:

| Event | Price |
|---|---|
| Run start | US$0.01 |
| Company (search or lookup, incl. full profile) | US$0.002 (US$2 per 1,000) |
| Enriched company (with directors and/or owners) | US$0.004 (US$4 per 1,000) |

| Example | Cost |
|---|---|
| "Try for free" prefilled search (25 companies) | US$0.06 |
| 1,000 new UK companies, basic records | US$2.01 |
| 1,000 new UK companies with directors (and/or owners) | US$4.01 |
| Daily alert returning 20 new companies with directors | US$0.09/day, about US$2.70/month |
| Alert day with no new companies, or a baseline run | US$0.01 |

Set *Max cost per run* in the run options and the Actor stops cleanly at your budget. In *Only new* mode, already-seen companies are free.

### Speed

Companies House allows 600 API requests per 5 minutes per key. Search results come 5,000 per request, so **plain lead lists are fast** (thousands of companies in seconds). Each company with directors or owners adds 1–2 requests, so large enriched runs go at about 1 company per second. If you have your own key, put it in *Companies House API key* to use your own quota.

### Notes and limits

- **Large searches:** Companies House only pages through the first 10,000 results of a query. The Actor splits the incorporation date range into smaller slices, so you can still get every match. Results are **newest incorporations first** by default.
- **Location** is a text match on the registered office address, which is often an accountant's or formation agent's address rather than the trading address.
- **Personal data:** officer and PSC data is public under the Companies Act 2006, but it is still personal data under UK GDPR. Use it lawfully. For direct marketing, follow PECR and give people a way to opt out. Full dates of birth and residential addresses are never available through the public API.
- Data © Crown copyright, from [Companies House](https://find-and-update.company-information.service.gov.uk/), licensed under the [Open Government Licence v3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). This Actor is not affiliated with or endorsed by Companies House.

### FAQ

#### Do I need a Companies House account or API key?

No. Optionally, add your own free key from the [Companies House developer hub](https://developer.company-information.service.gov.uk/) to get your own rate-limit quota.

#### How is this different from the Companies House API?

It *uses* the official API, but handles the parts you would otherwise code yourself: SIC prefixes, date slicing past the 10,000-result paging limit, rate-limit backoff, joining officers and PSC onto each company, deduplicated daily alerts, and flat CSV/Excel export.

#### How is this different from Companies House advanced search?

The free [advanced company search](https://find-and-update.company-information.service.gov.uk/advanced-search) is great for one-off checks, but it downloads only the first 5,000 results as CSV and has no directors or owners in the export. This Actor accepts several SIC codes and prefixes in one run, gets every match past the 10,000-result limit, adds directors and PSC, and can run on a schedule returning only new companies.

#### How is this different from the Companies House bulk data download?

Companies House's free bulk *Company data product* is a monthly snapshot of basic company details, without directors. This Actor queries the live register, so companies incorporated today can appear, and directors/PSC can be included.

#### How fresh is the data?

Live. Each run queries the Companies House API directly; in testing, companies incorporated the same day were returned.

#### Can I get emails or phone numbers?

No. Companies House does not publish them.

#### Can I use it from Python, JavaScript or an AI agent?

Yes. Use the Apify API or client libraries (see the **API** tab), or the Apify MCP server so AI assistants can call it as a tool.

### More from Tenderly Data

- [SAM.gov Scraper](https://apify.com/studded_columbine/samgov-contract-opportunities): U.S. federal contract opportunities and daily bid alerts by NAICS, set-aside, state and agency.

# Actor input Schema

## `mode` (type: `string`):

<b>Search</b>: build lead lists with Companies House advanced search (SIC code, location, incorporation date, status, type, name). <b>Lookup</b>: fetch specific companies by number, Companies House URL or name.

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

SIC 2007 codes or prefixes. "62" = all computer programming & IT, "6201" = 62011 + 62012, "56101" = licensed restaurants, "41202" = domestic building construction.

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

Registered office location text, e.g. a town, county or postcode area ("Manchester", "Kent", "EC1V").

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

Shortcut for new-company lead lists and daily alerts. Overrides 'Incorporated from'.

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

YYYY-MM-DD

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

YYYY-MM-DD

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

Default: active only. Clear it to include every status.

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

Leave empty for all types.

## `companySubtypes` (type: `array`):

Optional, e.g. "community-interest-company", "private-fund-limited-partnership".

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

Only companies whose name contains this text (e.g. "bakery", "solar").

## `companyNameExcludes` (type: `string`):

Drop companies whose name contains this text.

## `dissolvedFrom` (type: `string`):

YYYY-MM-DD (use with status 'dissolved').

## `dissolvedTo` (type: `string`):

YYYY-MM-DD

## `sortBy` (type: `string`):

Newest incorporations first (best for lead lists with a max results limit), oldest first, or Companies House's own order.

## `companies` (type: `array`):

Company numbers ("00445790", "445790", "SC123456"), Companies House URLs, or company names. Names are matched with Companies House search.

## `nameMatchesPerQuery` (type: `integer`):

For names in Lookup mode: how many top search matches to return (1 = best match only).

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

Adds officers (names, role, appointed date, nationality, occupation, country of residence, birth month/year, service address) and a 'directorNames' column. Billed as an enriched company.

## `includePSC` (type: `boolean`):

Adds persons with significant control: owners with ownership/voting bands, corporate owners with registration numbers. Billed as an enriched company.

## `includeResignedOfficers` (type: `boolean`):

Off = active officers only.

## `includeCeasedPSC` (type: `boolean`):

Off = current owners only.

## `includeFullProfile` (type: `boolean`):

Adds accounts/confirmation statement due dates, charges, insolvency history and previous names to search results (one extra request per company, so slower). Lookup mode always includes these.

## `maxResults` (type: `integer`):

Maximum companies to return. 0 = no limit.

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

Remembers which companies this saved search already returned (per 'State key') and returns only new ones. Schedule it daily for new-company alerts.

## `firstRunBehavior` (type: `string`):

'Return all' delivers current matches on the first run; 'Baseline only' silently records them (no charge per company) so you only get companies registered after today.

## `stateKey` (type: `string`):

Name for this saved search's memory. Defaults to a hash of the filters. Use different keys for different alerts.

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

Optional: your own free key from developer.company-information.service.gov.uk. Gives you your own 600 requests / 5 min quota. Leave empty to use ours.

## `requestsPerSecond` (type: `number`):

Companies House allows 600 requests per 5 minutes per key (2/s). Keep at 1.8 or lower.

## Actor input object example

```json
{
  "mode": "search",
  "sicCodes": [
    "62012",
    "62020"
  ],
  "incorporatedWithinDays": 7,
  "companyStatus": [
    "active"
  ],
  "sortBy": "newest",
  "nameMatchesPerQuery": 1,
  "includeOfficers": false,
  "includePSC": false,
  "includeResignedOfficers": false,
  "includeCeasedPSC": false,
  "includeFullProfile": false,
  "maxResults": 25,
  "onlyNew": false,
  "firstRunBehavior": "returnAll",
  "requestsPerSecond": 1.8
}
```

# Actor output Schema

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

All companies returned by this run (default dataset). The 'Companies' view is selected by default; switch to 'Directors & owners' when officers or PSC were included.

## `runSummary` (type: `string`):

JSON summary of the run: results pushed, total matches, already-seen companies skipped, not-found lookups, API request stats and filters 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 = {
    "mode": "search",
    "sicCodes": [
        "62012",
        "62020"
    ],
    "incorporatedWithinDays": 7,
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("studded_columbine/uk-companies-house-scraper").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 = {
    "mode": "search",
    "sicCodes": [
        "62012",
        "62020",
    ],
    "incorporatedWithinDays": 7,
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("studded_columbine/uk-companies-house-scraper").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 '{
  "mode": "search",
  "sicCodes": [
    "62012",
    "62020"
  ],
  "incorporatedWithinDays": 7,
  "maxResults": 25
}' |
apify call studded_columbine/uk-companies-house-scraper --silent --output-dataset

```

## MCP server setup

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

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/MrzxQfHj9Z2FyDVKz/builds/M49jpi0yfeRyfWhIB/openapi.json
