# UK Companies House Scraper: New Companies, Status & Profiles (`datasmithlab/companies-house-scraper`) Actor

Search the UK company register without an API key: by name, SIC code, status, type, address or incorporation date. Bulk company profiles, new-company monitoring and status-change tracking. Company data only, no officer names.

- **URL**: https://apify.com/datasmithlab/companies-house-scraper.md
- **Developed by:** [Datasmithlab](https://apify.com/datasmithlab) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 85.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 company (search row)s

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?

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

## UK Companies House Scraper: New Companies, Status & Profiles (No API Key)

Search the UK company register at [Companies House](https://find-and-update.company-information.service.gov.uk) **without an API key**. Filter by **name, SIC code (industry), status, company type, registered-office address and incorporation or dissolution date**, and export clean rows: company name and number, status, type, incorporation date, registered office, SIC codes and a link.

- **New-company lead lists.** Use *Newly incorporated in the last N days* and schedule the Actor: every run returns the companies registered since you last looked, in the industry you pick (SIC code).
- **Status-change tracking.** Turn on **Only new or changed companies**: each run returns only companies not seen before (`NEW`) or whose status, name or registered office changed (`CHANGED`). Unchanged companies are **not returned and not charged**.
- **Bigger than 10,000.** The register shows at most 10,000 results per search. When a search is bigger, the Actor splits it into incorporation-date windows and reads them all.
- **Bulk profiles.** Paste company numbers (one per line) to get full profiles: accounts and confirmation-statement due dates, SIC descriptions, previous names, and optionally the number of persons with significant control.

No login, no browser, no proxy needed for normal use. Requests are slow and polite. **Officer and director names are never collected**; PSC data is limited to two counts (no names).

### What you get

- **Company.** `name`, `companyNumber`, `status`, `statusDetail`, `companyType`, `incorporatedOn`, `dissolvedOn`, `registeredAddress`, `postalCode`, `sicCodes`, `url`.
- **With full profile.** `sicDescriptions`, `previousNames`, `accountsNextMadeUpTo`, `accountsNextDue`, `accountsLastMadeUpTo`, `confirmationNextDate`, `confirmationNextDue`, `confirmationLastDated`; optionally `pscCount`, `pscStatementCount`.
- **Monitoring mode.** `changeType` (`NEW` / `CHANGED`), `firstSeenAt`, the fields that changed.
- **Reports** in the run's key-value store: `SEARCHES` (per search: matches, pages, date windows, status) and `HEALTH`.

### How to search

| You want | Set |
|---|---|
| New software companies this week | **SIC codes** `62012`, **Newly incorporated in the last N days** `7` |
| Companies that just closed | **Company status** `Dissolved`, **Dissolved from / to** |
| A name or brand | **Company name contains** `bakery` (one per line) |
| Companies in an area | **Registered office contains** `Manchester` or `M1` |
| Profiles for a list | **Company numbers** (one per line) |
| A daily lead feed | **Only new or changed companies** on, schedule the Actor daily |

### Pricing

Pay per event: a small start fee, one charge per company row, a higher charge per row with a full profile. Companies already seen (in monitoring mode) and duplicates are free. Set **Max companies** or your run's maximum charge to cap spend.

### Good to know

- The data is public Crown-copyright information from the register. The registered office of a small company can be a home address; it is public and returned as the register shows it.
- This Actor reads the public website, not the official API. If you need guaranteed service levels, use the official API with your own key.
- Search pages show 20 companies each, at most 500 pages per search. Date filters need full dates (`YYYY-MM-DD`).

# Actor input Schema

## `nameContains` (type: `array`):

One keyword or phrase per line, e.g. 'bakery' or 'tesco'. Each line is a separate search; companies found twice are returned once. Leave empty to search by dates, SIC code, status or address only.

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

Skip companies whose name contains this word, e.g. 'holdings'.

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

Industry codes, one per line, e.g. 62012 (software), 56101 (restaurants), 68100 (property). Each code is a separate search.

## `incorporatedInLastDays` (type: `integer`):

Shortcut for new-company monitoring: companies registered in the last N days (up to today). Overrides the incorporation dates below.

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

First incorporation day, format YYYY-MM-DD, e.g. 2026-10-01.

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

Last incorporation day, format YYYY-MM-DD. Searches above 10,000 matches are split into date windows automatically, so you get everything.

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

First dissolution day, YYYY-MM-DD. Use with status 'Dissolved' to find companies that just closed.

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

Last dissolution day, YYYY-MM-DD.

## `statuses` (type: `array`):

Only these statuses. Leave empty for all.

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

Only these company types. Leave empty for all.

## `addressContains` (type: `string`):

Text or postcode (part) of the registered office address, e.g. 'Manchester' or 'M1'.

## `companyNumbers` (type: `array`):

One company number per line, e.g. 00445790 or SC123456 (leading zeros optional). When set, the search filters above are ignored and each company's full profile is returned.

## `includeProfile` (type: `boolean`):

Adds accounts and confirmation-statement dates, SIC descriptions and previous names to each found company (one extra page per company, charged as a profile row). Off = fast, cheap search rows.

## `includePscCount` (type: `boolean`):

Adds pscCount and pscStatementCount (numbers only, no names). Needs full profiles or company numbers. One extra page per company.

## `onlyNewOrChanged` (type: `boolean`):

Schedule the run and every later run returns only companies not seen before (NEW) or whose status, name or registered address changed (CHANGED, with the previous values). Unchanged companies are skipped and not charged. Memory is kept per identical settings.

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

Stop after this many company rows (you pay per row).

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

Requests go out without a proxy first. Only if Companies House rate-limits them is this proxy used (at most 3 new IPs, then the run stops and reports it).

## Actor input object example

```json
{
  "incorporatedInLastDays": 7,
  "includeProfile": false,
  "includePscCount": false,
  "onlyNewOrChanged": false,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Companies table (JSON/CSV/Excel export).

## `allFields` (type: `string`):

Every field, including SIC codes, accounts dates and previous names.

## `searches` (type: `string`):

For each search: companies matching, pages read, date windows, status.

## `health` (type: `string`):

Requests, proxy use, empty-field ratios, charged events.

# 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 = {
    "incorporatedInLastDays": 7
};

// Run the Actor and wait for it to finish
const run = await client.actor("datasmithlab/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 = { "incorporatedInLastDays": 7 }

# Run the Actor and wait for it to finish
run = client.actor("datasmithlab/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 '{
  "incorporatedInLastDays": 7
}' |
apify call datasmithlab/companies-house-scraper --silent --output-dataset

```

## MCP server setup

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